private void ReadDefines() { int iLognest = 0; List<stDefine> lDefines = new List<stDefine>(); foreach (string sLine2 in m_sHeaderFile) { string sLine = sLine2.ToUpper().Replace('\t', ' ').Replace('\r', ' ').Trim(); if (sLine.StartsWith("#define".ToUpper())) { int iCommentStart = sLine.LastIndexOf("//"); if (iCommentStart < 0) { iCommentStart = sLine.LastIndexOf("/*"); } if (iCommentStart > 0) { sLine = sLine.Substring(0, iCommentStart).Trim(); } int iValueStart = sLine.LastIndexOf(' '); int iNameStart = sLine.IndexOf(' '); int iNameEnd = sLine.IndexOf(" ", iNameStart + 1); //#define NUMBER_OF_ELEMENTS 3 // single or polyphase? int iResult; if (iNameEnd > 0 && iValueStart >= iNameEnd && int.TryParse(sLine.Substring(iValueStart), out iResult)) { stDefine stADefine = new stDefine(); stADefine.sName = sLine.Substring(iNameStart, iNameEnd - iNameStart).Trim(); stADefine.iValue = int.Parse(sLine.Substring(iValueStart)); if (stADefine.sName.Length > iLognest) { iLognest = stADefine.sName.Length; } lDefines.Add(stADefine); } } } stDefine stADefine2 = new stDefine(); stADefine2.sName = "defined(1)||"; stADefine2.iValue = 1; lDefines.Add(stADefine2); // sort defines by length for (int i = iLognest; i > 0; i--) { foreach (stDefine def in lDefines) { if (def.sName.Length == i) { m_Defines.Add(def); } } } }
/// <summary> /// Loads a previously saved xml configuration that describes all the tables in a meter /// </summary> /// <param name="sFileName"></param> public void LoadXML(string sFileName) { XmlDocument docXML = new XmlDocument(); docXML.Load(sFileName); m_Defines.Clear(); foreach (XmlNode node in docXML.SelectNodes("OpticalInterface/Defines/Define")) { stDefine newDefine = new stDefine(); newDefine.sName = node.SelectSingleNode("Name").InnerText; newDefine.iValue = int.Parse(node.SelectSingleNode("Value").InnerText); m_Defines.Add(newDefine); } m_AllTablesID.Clear(); foreach (XmlNode node in docXML.SelectNodes("OpticalInterface/AllTables/Table")) { stTableID newTable = new stTableID(); newTable.sName = node.SelectSingleNode("Name").InnerText; newTable.iValue = int.Parse(node.SelectSingleNode("Value").InnerText); m_AllTablesID.Add(newTable); } m_SupportedTables.Clear(); foreach (XmlNode node in docXML.SelectNodes("OpticalInterface/SupportedTables/SupportedTable")) { stTable newTable = new stTable(); newTable.sName = node.SelectSingleNode("Name").InnerText; newTable.sStructure = node.SelectSingleNode("StructureName").InnerText; m_SupportedTables.Add(newTable); } m_TableStructures.Clear(); foreach (XmlNode node in docXML.SelectNodes("OpticalInterface/Tables/Table")) { stTableStructure newTable = new stTableStructure(); newTable.sFields = new List<string>(); newTable.sFieldsType = new List<string>(); newTable.sDescription = new List<string>(); newTable.sStructureName = node.SelectSingleNode("Name").InnerText; newTable.bBitField = bool.Parse(node.SelectSingleNode("BitField").InnerText); foreach (XmlNode fieldnode in node.SelectNodes("Fields/Field")) { newTable.sFields.Add(fieldnode.SelectSingleNode("Name").InnerText); newTable.sFieldsType.Add(fieldnode.SelectSingleNode("Type").InnerText); newTable.sDescription.Add(fieldnode.SelectSingleNode("Description").InnerText); } m_TableStructures.Add(newTable); } }