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")) + { + //