private void btnSearchMaps_ItemClick(object sender, ItemClickEventArgs e) { // ask the user for which value to search and if searching should include symbolnames and/or symbol description if (ValidateFile()) { SymbolCollection result_Collection = new SymbolCollection(); frmSearchMaps searchoptions = new frmSearchMaps(); if (searchoptions.ShowDialog() == DialogResult.OK) { frmProgress progress = new frmProgress(); progress.SetProgress("Start searching data..."); progress.SetProgressPercentage(0); progress.Show(); System.Windows.Forms.Application.DoEvents(); int cnt = 0; foreach (SymbolHelper sh in Tools.Instance.m_symbols) { progress.SetProgress("Searching " + sh.Varname); progress.SetProgressPercentage((cnt * 100) / Tools.Instance.m_symbols.Count); bool hit_found = false; if (searchoptions.IncludeSymbolNames) { if (searchoptions.SearchForNumericValues) { if (sh.Varname.Contains(searchoptions.NumericValueToSearchFor.ToString())) { hit_found = true; } } if (searchoptions.SearchForStringValues) { if (searchoptions.StringValueToSearchFor != string.Empty) { if (sh.Varname.Contains(searchoptions.StringValueToSearchFor)) { hit_found = true; } } } } if (searchoptions.IncludeSymbolDescription) { if (searchoptions.SearchForNumericValues) { if (sh.Description.Contains(searchoptions.NumericValueToSearchFor.ToString())) { hit_found = true; } } if (searchoptions.SearchForStringValues) { if (searchoptions.StringValueToSearchFor != string.Empty) { if (sh.Description.Contains(searchoptions.StringValueToSearchFor)) { hit_found = true; } } } } // now search the symbol data if (sh.Flash_start_address < Tools.Instance.m_currentfilelength) { byte[] symboldata = Tools.Instance.readdatafromfile(Tools.Instance.m_currentfile, (int)sh.Flash_start_address, sh.Length, Tools.Instance.m_currentFileType); if (searchoptions.SearchForNumericValues) { for (int i = 0; i < symboldata.Length / 2; i += 2) { float value = Convert.ToInt32(symboldata.GetValue(i)) * 256; value += Convert.ToInt32(symboldata.GetValue(i + 1)); value *= (float)GetMapCorrectionFactor(sh.Varname); value += (float)GetMapCorrectionOffset(sh.Varname); if (value == (float)searchoptions.NumericValueToSearchFor) { hit_found = true; } } } if (searchoptions.SearchForStringValues) { if (searchoptions.StringValueToSearchFor.Length > symboldata.Length) { // possible... string symboldataasstring = System.Text.Encoding.ASCII.GetString(symboldata); if (symboldataasstring.Contains(searchoptions.StringValueToSearchFor)) { hit_found = true; } } } } if (hit_found) { // add to collection result_Collection.Add(sh); } cnt++; } progress.Close(); if (result_Collection.Count == 0) { frmInfoBox info = new frmInfoBox("No results found..."); } else { // start result screen dockManager1.BeginUpdate(); try { SymbolTranslator st = new SymbolTranslator(); DevExpress.XtraBars.Docking.DockPanel dockPanel = dockManager1.AddPanel(new System.Drawing.Point(-500, -500)); CompareResults tabdet = new CompareResults(); tabdet.ShowAddressesInHex = m_appSettings.ShowAddressesInHex; tabdet.SetFilterMode(m_appSettings.ShowAddressesInHex); tabdet.Dock = DockStyle.Fill; tabdet.UseForFind = true; tabdet.Filename = Tools.Instance.m_currentfile; tabdet.onSymbolSelect += new CompareResults.NotifySelectSymbol(tabdet_onSymbolSelectForFind); dockPanel.Controls.Add(tabdet); dockPanel.Text = "Search results: " + Path.GetFileName(Tools.Instance.m_currentfile); dockPanel.DockTo(dockManager1, DevExpress.XtraBars.Docking.DockingStyle.Left, 1); dockPanel.Width = 500; System.Data.DataTable dt = new System.Data.DataTable(); dt.Columns.Add("SYMBOLNAME"); dt.Columns.Add("SRAMADDRESS", Type.GetType("System.Int32")); dt.Columns.Add("FLASHADDRESS", Type.GetType("System.Int32")); dt.Columns.Add("LENGTHBYTES", Type.GetType("System.Int32")); dt.Columns.Add("LENGTHVALUES", Type.GetType("System.Int32")); dt.Columns.Add("DESCRIPTION"); dt.Columns.Add("ISCHANGED", Type.GetType("System.Boolean")); dt.Columns.Add("CATEGORY"); //0 dt.Columns.Add("DIFFPERCENTAGE", Type.GetType("System.Double")); dt.Columns.Add("DIFFABSOLUTE", Type.GetType("System.Int32")); dt.Columns.Add("DIFFAVERAGE", Type.GetType("System.Double")); dt.Columns.Add("CATEGORYNAME"); dt.Columns.Add("SUBCATEGORYNAME"); dt.Columns.Add("SymbolNumber1", Type.GetType("System.Int32")); dt.Columns.Add("SymbolNumber2", Type.GetType("System.Int32")); dt.Columns.Add("CodeBlock1", Type.GetType("System.Int32")); dt.Columns.Add("CodeBlock2", Type.GetType("System.Int32")); string ht = string.Empty; XDFCategories cat = XDFCategories.Undocumented; XDFSubCategory subcat = XDFSubCategory.Undocumented; foreach (SymbolHelper shfound in result_Collection) { string helptext = st.TranslateSymbolToHelpText(shfound.Varname); if (shfound.Varname.Contains(".")) { try { shfound.Category = shfound.Varname.Substring(0, shfound.Varname.IndexOf(".")); } catch (Exception cE) { Console.WriteLine("Failed to assign category to symbol: " + shfound.Varname + " err: " + cE.Message); } } dt.Rows.Add(shfound.Varname, shfound.Start_address, shfound.Flash_start_address, shfound.Length, shfound.Length, helptext, false, 0, 0, 0, 0, shfound.Category, "", shfound.Symbol_number, shfound.Symbol_number, shfound.CodeBlock, shfound.CodeBlock); } tabdet.CompareSymbolCollection = result_Collection; tabdet.OpenGridViewGroups(tabdet.gridControl1, 1); tabdet.gridControl1.DataSource = dt.Copy(); } catch (Exception E) { Console.WriteLine(E.Message); } dockManager1.EndUpdate(); } } } }