diff --git a/PROMS/fmtxml/FmtFileToXml.cs b/PROMS/fmtxml/FmtFileToXml.cs
index ab4bb8e7..78f0ca5a 100644
--- a/PROMS/fmtxml/FmtFileToXml.cs
+++ b/PROMS/fmtxml/FmtFileToXml.cs
@@ -23,7 +23,6 @@ public struct FormatData
{
public string Name;
public string PurchaseOptions;
- public string PSI;
public string TPL;
//public XtraFlgs XtraFlags;
public VE_Font FontData;
@@ -461,11 +460,54 @@ public struct Procedure
public string CountFoldoutPages;
/* End of Format flags */
public string[] ProcedureSuffix;
- public string PSInfFile;
+ public PSI Psi;
public ChangeBar ChangeBarData;
public CheckOffData CheckOffData;
}
[Serializable]
+public struct PSI
+{
+ public int x;
+ public int y;
+ public string Caption;
+ public string ButtonsOnBottom;
+ public string font;
+ public PsiBox[] Boxes;
+ public PsiLabel[] Labels;
+ public PsiField[] Fields;
+}
+[Serializable]
+public struct PsiBox
+{
+ public string style;
+ public int x;
+ public int y;
+ public int width;
+ public int height;
+}
+[Serializable]
+public struct PsiLabel
+{
+ public string text;
+ public string Justify;
+ public int x;
+ public int y;
+ public int width;
+ public int height;
+}
+[Serializable]
+public struct PsiField
+{
+ public string name;
+ public string type;
+ public string text;
+ public int Length;
+ public int x;
+ public int y;
+ public int width;
+ public int height;
+}
+[Serializable]
public struct CheckOffData
{
public string Menu;
@@ -1068,7 +1110,7 @@ public enum E_TransFormatXlate : uint
///////////////////////////
namespace fmtxml
{
- public class FmtFileToXml
+ public partial class FmtFileToXml
{
#region localdata
public XtraFlgs BaseXtraFlags; // used to set up all flags for the Base format.
@@ -1499,7 +1541,7 @@ namespace fmtxml
BuildDictionaryText();
fmtName = alias;
//if (fmtName.ToUpper() != "CPLS" && fmtName.ToUpper() != "BASE") return;
- //if (fmtName.ToUpper() != "OHLP" && fmtName.ToUpper() != "BASE") return;
+ //if (fmtName.ToUpper() != "HLP" && fmtName.ToUpper() != "BASE") return;
//if (fmtName.ToUpper() != "AEP" && fmtName.ToUpper() != "BASE") return;
try
{
@@ -2095,9 +2137,7 @@ namespace fmtxml
fmtdata.TPL = FixXmlString(File.ReadAllText(otherfile));
// http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char
otherfile = MyPath + @"\" + fname.Substring(0, fname.LastIndexOf(".")) + @".ini";
- if (File.Exists(otherfile))
- fmtdata.PSI = File.ReadAllText(otherfile);
-
+ if (File.Exists(otherfile)) PsiIniToXml(ref fmtdata, otherfile);
fmtdata.PurchaseOptions = ((E_PurchaseOptions)brFmt.ReadInt16()).ToString();
fmtdata.ProcData.ProcForeColor = "Black";
fmtdata.ProcData.ProcBackColor = "White";
@@ -2983,7 +3023,7 @@ namespace fmtxml
indx = offset[arcnt];
arcnt++;
- if (indx > 0) fmtdata.ProcData.PSInfFile = GetStringFromByte(input, indx);
+ if (indx > 0) tmpstr = GetStringFromByte(input, indx);
// not used - RNOPreSeqTab[9][2]
arcnt = arcnt + 18;
@@ -4571,7 +4611,6 @@ namespace fmtxml
#region COMPAREACTIVE
subFmt.FontData = FixInheritedFont(subFmt.FontData, mainFmt.FontData); // Phase 10
if (mainFmt.PurchaseOptions == subFmt.PurchaseOptions) subFmt.PurchaseOptions = null;
- if (mainFmt.PSI == subFmt.PSI) subFmt.PSI = null;
if (mainFmt.TPL == subFmt.TPL) subFmt.TPL = null;
if (mainFmt.EditData.EMode == subFmt.EditData.EMode) subFmt.EditData.EMode = null;
if (mainFmt.EditData.PromptForCautionType != null && mainFmt.EditData.PromptForCautionType == subFmt.EditData.PromptForCautionType) subFmt.EditData.PromptForCautionType = "null";
@@ -5002,7 +5041,6 @@ namespace fmtxml
for (int i = 0; i < MAXCHKHEADINGS; i++)
if (mco.CheckOffHeaderList[i].CheckOffHeading == sco.CheckOffHeaderList[i].CheckOffHeading) subFmt.ProcData.CheckOffData.CheckOffHeaderList[i].CheckOffHeading = null;
- if (mainFmt.ProcData.PSInfFile == subFmt.ProcData.PSInfFile) subFmt.ProcData.PSInfFile = null;
if (msctpr.HLStpSeparatorString == ssctpr.HLStpSeparatorString) subFmt.SectData.StepSectionData.StpSectPrtData.HLStpSeparatorString = null;
if (msctpr.HLRNOStpSeparatorString == ssctpr.HLRNOStpSeparatorString) subFmt.SectData.StepSectionData.StpSectPrtData.HLRNOStpSeparatorString = null;
if (msctpr.LowerCaseRevNum != null && msctpr.LowerCaseRevNum == ssctpr.LowerCaseRevNum) subFmt.SectData.StepSectionData.StpSectPrtData.LowerCaseRevNum = "null";
diff --git a/PROMS/fmtxml/PSI.cs b/PROMS/fmtxml/PSI.cs
new file mode 100644
index 00000000..3c366e7f
--- /dev/null
+++ b/PROMS/fmtxml/PSI.cs
@@ -0,0 +1,162 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Xml;
+
+namespace fmtxml
+{
+ public partial class FmtFileToXml
+ {
+ private bool _DoingFields = false;
+ private int NumBoxes = 0;
+ private int NumTexts = 0;
+ private int NumFields = 0;
+ private int CountForLists = 0;
+ public void PsiIniToXml(ref FormatData fmtdata, string path)
+ {
+ string sLine;
+
+ StreamReader myReader = new StreamReader(path);// Open file
+ while ((sLine = myReader.ReadLine()) != null)// read line-by-line
+ {
+ try
+ {
+ if (sLine.Length > 0)
+ {
+ switch (sLine.Substring(0, 1))
+ {
+ case "[":
+ if (sLine.Contains("[OBJECT COUNT]"))
+ {
+ // read in the count of objects - these may not be in order, fix this:
+ sLine = myReader.ReadLine();
+ int indx = sLine.IndexOf("=");
+ string tmp = sLine.Substring(indx + 1, sLine.Length - indx - 1);
+ NumBoxes = Convert.ToInt32(tmp);
+ sLine = myReader.ReadLine();
+ indx = sLine.IndexOf("=");
+ tmp = sLine.Substring(indx + 1, sLine.Length -indx - 1);
+ NumTexts = Convert.ToInt32(tmp);
+ sLine = myReader.ReadLine();
+ indx = sLine.IndexOf("=");
+ tmp = sLine.Substring(indx + 1, sLine.Length -indx - 1);
+ NumFields = Convert.ToInt32(tmp);
+ fmtdata.ProcData.Psi.Boxes = new PsiBox[NumBoxes];
+ fmtdata.ProcData.Psi.Labels = new PsiLabel[NumTexts];
+ fmtdata.ProcData.Psi.Fields = new PsiField[NumFields];
+ break;
+ }
+ if (sLine.Contains("[DIALOG]") || sLine.Contains("[BOXES]") || sLine.Contains("[TEXT]") || sLine.Contains("[FIELDS]"))
+ {
+ _DoingFields = sLine.Contains("[FIELDS]");
+ CountForLists = 0;
+ break;
+ }
+ break;
+ case ";":
+ break;
+ default:
+ if (sLine.IndexOf("=") >= 0)
+ {
+ AddParam(ref fmtdata, sLine);
+ }
+ break;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(string.Format("error parsing .INI file: {0}, message: {1}", path, ex.Message));
+ }
+ }
+ myReader.Close();
+ }
+ private void AddParam(ref FormatData fmtdata, string sParam)
+ {
+ int i = sParam.IndexOf("=");
+ string attrname = sParam.Substring(0, i);
+ if (attrname.Contains("SIZE"))
+ {
+ int end = (sParam.IndexOf(";") > -1) ? sParam.IndexOf(";") : sParam.Length;
+ string sb = sParam.Substring(i + 1, end - i - 1);
+ string[] split = sb.Split(new char[] { ',' });
+ fmtdata.ProcData.Psi.x = Convert.ToInt32(split[0].Trim());
+ fmtdata.ProcData.Psi.y = Convert.ToInt32(split[1].Trim());
+ return;
+ }
+ if (attrname.Contains("FONT"))
+ {
+ int end = (sParam.IndexOf(";") > -1) ? sParam.IndexOf(";") : sParam.Length;
+ string sb = sParam.Substring(i + 1, end - i - 1);
+ string[] split = sb.Split(new char[] { ',' });
+ fmtdata.ProcData.Psi.font = split[0].Trim();
+ return;
+ }
+ if (attrname.Contains("CAPTION"))
+ {
+ int end = (sParam.IndexOf(";") > -1) ? sParam.IndexOf(";") : sParam.Length;
+ fmtdata.ProcData.Psi.Caption = sParam.Substring(i + 1, end-i-1).Replace("\"","");
+ return;
+ }
+ if (attrname.Contains("BUTTONSONBOTTOM"))
+ {
+ int end = (sParam.IndexOf(";") > -1) ? sParam.IndexOf(";") : sParam.Length;
+ fmtdata.ProcData.Psi.ButtonsOnBottom = sParam.Substring(i + 1, end - i - 1);
+ return;
+ }
+ if (attrname.Contains("BOX"))
+ {
+ //
+ int end = (sParam.IndexOf(";") > -1) ? sParam.IndexOf(";") : sParam.Length;
+ string sb = sParam.Substring(i + 1, end - i - 1);
+ string[] split = sb.Split(new char[] { ',' });
+ fmtdata.ProcData.Psi.Boxes[CountForLists].style = split[0].Trim();
+ fmtdata.ProcData.Psi.Boxes[CountForLists].x = Convert.ToInt32(split[1].Trim());
+ fmtdata.ProcData.Psi.Boxes[CountForLists].y = Convert.ToInt32(split[2].Trim());
+ fmtdata.ProcData.Psi.Boxes[CountForLists].width = Convert.ToInt32(split[3].Trim());
+ fmtdata.ProcData.Psi.Boxes[CountForLists].height = Convert.ToInt32(split[4].Trim());
+ CountForLists++;
+ return;
+ }
+ if (attrname.Contains("TEXT"))
+ {
+ //
+ int end = (sParam.IndexOf(";") > -1) ? sParam.IndexOf(";") : sParam.Length;
+ string sb = sParam.Substring(i + 1, end - i - 1);
+ string[] split = sb.Split(new char[] { ',' });
+ fmtdata.ProcData.Psi.Labels[CountForLists].text = split[0].Trim();
+ fmtdata.ProcData.Psi.Labels[CountForLists].Justify = split[1].Trim();
+ fmtdata.ProcData.Psi.Labels[CountForLists].x = Convert.ToInt32(split[2].Trim());
+ fmtdata.ProcData.Psi.Labels[CountForLists].y = Convert.ToInt32(split[3].Trim());
+ fmtdata.ProcData.Psi.Labels[CountForLists].width = Convert.ToInt32(split[4].Trim());
+ fmtdata.ProcData.Psi.Labels[CountForLists].height = Convert.ToInt32(split[5].Trim());
+ CountForLists++;
+ return;
+ }
+ if (_DoingFields)
+ {
+ //
+ //
+
+ int end = (sParam.IndexOf(";") > -1) ? sParam.IndexOf(";") : sParam.Length;
+ string sb = sParam.Substring(i + 1, end - i - 1);
+ string[] split = sb.Split(new char[] { ',' });
+ // first check whether it is a text field or a logical (checkbox) field:
+ fmtdata.ProcData.Psi.Fields[CountForLists].name = attrname;
+ fmtdata.ProcData.Psi.Fields[CountForLists].type = split[0].Trim();
+ string typ = fmtdata.ProcData.Psi.Fields[CountForLists].type;
+ fmtdata.ProcData.Psi.Fields[CountForLists].text = split[1] == null ? null : split[1].Trim();
+ if (typ.ToUpper() == "TEXT")
+ fmtdata.ProcData.Psi.Fields[CountForLists].Length = Convert.ToInt32(split[2].Trim());
+ else
+ fmtdata.ProcData.Psi.Fields[CountForLists].Length = 0;
+ fmtdata.ProcData.Psi.Fields[CountForLists].x = Convert.ToInt32(split[3].Trim());
+ fmtdata.ProcData.Psi.Fields[CountForLists].y = Convert.ToInt32(split[4].Trim());
+ fmtdata.ProcData.Psi.Fields[CountForLists].width = Convert.ToInt32(split[5].Trim());
+ fmtdata.ProcData.Psi.Fields[CountForLists].height = Convert.ToInt32(split[6].Trim());
+ CountForLists++;
+ }
+ }
+ }
+}
diff --git a/PROMS/fmtxml/TranslateFMT.XSL b/PROMS/fmtxml/TranslateFMT.XSL
index 16969314..3fae44db 100644
Binary files a/PROMS/fmtxml/TranslateFMT.XSL and b/PROMS/fmtxml/TranslateFMT.XSL differ