public void SortResults() { SearchResultComparer comparer = new SearchResultComparer(); comparer.sortedColumn = gView.SortedColumn.Index; if (gView.SortOrder == SortOrder.Descending) { comparer.descending = true; } comparer.oldDump = oldDump; comparer.newDump = newDump; resultAddressList.Sort(comparer); PrintPageAlt(); }
public bool Search(uint sAddress, uint eAddress, uint lValue, uint hValue, bool useHValue, SearchType sType, SearchSize sSize, ComparisonType cType, uint differentBy) { blockDump = false; resLab.Text = "Searching"; byte bufferlength = 0; switch (sSize) { case (SearchSize.Bit8): bufferlength = 1; break; case (SearchSize.Bit16): bufferlength = 2; break; default: bufferlength = 4; break; } bool floatCompare = sSize == SearchSize.Single; int oldSortedColumn = 0; SortOrder oldSortOrder = SortOrder.Ascending; SearchResultComparer comparer = new SearchResultComparer(); if (gView.SortedColumn != null) { oldSortedColumn = gView.SortedColumn.Index; oldSortOrder = gView.SortOrder; } if (oldSortedColumn != 0 || oldSortOrder != SortOrder.Ascending) { comparer.sortedColumn = 0; comparer.descending = false; resultAddressList.Sort(comparer); } this.sSize = sSize; bool doBlockSearch = false; bool doCompare = false; Dump searchDump = newDump; uint dumpStart, dumpEnd, dumpOffset; dumpStart = sAddress; dumpEnd = eAddress; dumpOffset = 0; if (NewSearch || (UnknownStart && sType == SearchType.Exact)) { InitialSearch = true; dumpNum = 0; if (newDump != null) { newDump = null; } resultAddressList.Clear(); if (oldDump != null) { oldDump = null; } if (sType == SearchType.Exact) { doCompare = true; } else { UnknownLAddress = sAddress; UnknownHAddress = eAddress; UnknownStart = true; NewSearch = false; } } else { InitialSearch = false; doCompare = true; if (UnknownStart) { dumpStart = Math.Max(UnknownLAddress, sAddress); dumpEnd = Math.Min(UnknownHAddress, eAddress); dumpOffset = dumpStart - UnknownLAddress; } else { doBlockSearch = true; } } if (undoDump != null) { } undoDump = oldDump; oldDump = newDump; if (undoList != resultAddressList) { undoList.Clear(); } undoList = resultAddressList; try { if (doBlockSearch) { uint startAddress, endAddress; int startAddressIndex, endAddressIndex; FindPairs(sAddress, eAddress, bufferlength, out startAddress, out endAddress, out startAddressIndex, out endAddressIndex); List <DumpRange> dumpRanges = FindDumpRanges(startAddress, bufferlength, startAddressIndex, endAddressIndex); newDump = new Dump(startAddress, endAddress, dumpNum); PerformBlockSearch(newDump, dumpRanges); } else { newDump = new Dump(dumpStart, dumpEnd, dumpNum); gecko.Dump(newDump); } } catch (ETCPGeckoException e) { exceptionHandling.HandleException(e); } if (doCompare) { if (sType != SearchType.Exact && sType != SearchType.Diff) { hValue = 0; useHValue = false; } uint val, cmpVal; cmpVal = lValue; if (resultAddressList.Count > 0) { List <uint> tempAddressList = new List <uint>(); foreach (uint compareAddress in resultAddressList) { val = newDump.ReadAddress(compareAddress, bufferlength); if (sType == SearchType.Unknown) { cmpVal = oldDump.ReadAddress(compareAddress, bufferlength); } else if (sType == SearchType.Old) { cmpVal = undoDump.ReadAddress(compareAddress, bufferlength); } else if (sType == SearchType.Diff) { val = val - oldDump.ReadAddress(compareAddress, bufferlength); } if (Compare(val, cmpVal, hValue, useHValue, cType, differentBy, floatCompare)) { tempAddressList.Add(compareAddress); } } resultAddressList = tempAddressList; } else { for (uint i = newDump.StartAddress; i < newDump.EndAddress; i += bufferlength) { val = newDump.ReadAddress(i, bufferlength); if (sType != SearchType.Exact) { cmpVal = oldDump.ReadAddress(i, bufferlength); } if (Compare(val, cmpVal, hValue, useHValue, cType, differentBy, floatCompare)) { resultAddressList.Add(i); } } } } if (UnknownStart && !InitialSearch) { UnknownStart = false; } dumpNum++; if (resultAddressList.Count == 0 && !UnknownStart) { NewSearch = true; nxButton.Enabled = false; prvButton.Enabled = false; resLab.Text = "No results found"; Reset(); return(false); } NewSearch = false; UpdateGridViewPage(true); return(true); }
public bool SearchRefactored(uint sAddress, uint eAddress, List <SearchComparisonInfo> comparisons, SearchSize searchSize, uint val) { blockDump = false; resLab.Text = "Searching"; byte bufferlength = 0; switch (searchSize) { case (SearchSize.Bit8): bufferlength = 1; break; case (SearchSize.Bit16): bufferlength = 2; break; default: bufferlength = 4; break; } this.sSize = searchSize; bool floatCompare = searchSize == SearchSize.Single; int oldSortedColumn = 0; SortOrder oldSortOrder = SortOrder.Ascending; SearchResultComparer comparer = new SearchResultComparer(); if (gView.SortedColumn != null) { oldSortedColumn = gView.SortedColumn.Index; oldSortOrder = gView.SortOrder; } if (oldSortedColumn != 0 || oldSortOrder != SortOrder.Ascending) { comparer.sortedColumn = 0; comparer.descending = false; resultAddressList.Sort(comparer); } SearchType sType = comparisons[0].searchType; bool doBlockSearch = false; bool doCompare = false; Dump searchDump = newDump; uint dumpStart, dumpEnd, dumpOffset; dumpStart = sAddress; dumpEnd = eAddress; dumpOffset = 0; if (NewSearch || (UnknownStart && sType == SearchType.Exact)) { InitialSearch = true; dumpNum = 0; if (newDump != null) { newDump = null; } resultAddressList.Clear(); if (oldDump != null) { oldDump = null; } if (sType == SearchType.Exact) { doCompare = true; } else { UnknownLAddress = sAddress; UnknownHAddress = eAddress; UnknownStart = true; NewSearch = false; } } else { InitialSearch = false; doCompare = true; if (UnknownStart) { dumpStart = Math.Max(UnknownLAddress, sAddress); dumpEnd = Math.Min(UnknownHAddress, eAddress); dumpOffset = dumpStart - UnknownLAddress; } else { doBlockSearch = true; } } undoDump = oldDump; oldDump = newDump; undoList = resultAddressList; if (doBlockSearch) { uint startAddress, endAddress; int startAddressIndex, endAddressIndex; FindPairs(dumpStart, dumpEnd, bufferlength, out startAddress, out endAddress, out startAddressIndex, out endAddressIndex); List <DumpRange> dumpRanges = FindDumpRanges(startAddress, bufferlength, startAddressIndex, endAddressIndex); newDump = new Dump(startAddress, endAddress, dumpNum); PerformBlockSearch(newDump, dumpRanges); } else { newDump = new Dump(dumpStart, dumpEnd, dumpNum); SafeDump(dumpStart, dumpEnd, newDump); } if (doCompare) { uint cmpVal; cmpVal = comparisons[0].value; if (resultAddressList.Count > 0) { List <uint> tempAddressList = new List <uint>(); foreach (uint compareAddress in resultAddressList) { uint newDumpVal = newDump.ReadAddress(compareAddress, bufferlength); uint oldDumpVal = oldDump.ReadAddress(compareAddress, bufferlength); uint UndoDumpVal; if (undoDump != null) { UndoDumpVal = undoDump.ReadAddress(compareAddress, bufferlength); } else { UndoDumpVal = oldDumpVal; } if (CompareRefactored(newDumpVal, oldDumpVal, UndoDumpVal, comparisons, floatCompare)) { tempAddressList.Add(compareAddress); } } resultAddressList = tempAddressList; } else { for (uint i = newDump.StartAddress; i < newDump.EndAddress; i += bufferlength) { uint newDumpVal = newDump.ReadAddress(i, bufferlength); uint oldDumpVal = newDumpVal; uint UndoDumpVal = newDumpVal; if (sType != SearchType.Exact) { oldDumpVal = oldDump.ReadAddress(i, bufferlength); UndoDumpVal = oldDumpVal; } if (CompareRefactored(newDumpVal, oldDumpVal, UndoDumpVal, comparisons, floatCompare)) { resultAddressList.Add(i); } } } } if (UnknownStart && !InitialSearch) { UnknownStart = false; } dumpNum++; if (resultAddressList.Count == 0 && !UnknownStart) { DialogResult result = MessageBox.Show(null, "No search results!\n\nTo undo, press Yes\nTo restart, press No", "No search results!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); bool UndoSuccess = false; if (result == DialogResult.Yes) { UndoSuccess = UndoSearch(); if (!UndoSuccess) { MessageBox.Show("Could not undo! Restarting search"); } } if (!UndoSuccess) { NewSearch = true; nxButton.Enabled = false; prvButton.Enabled = false; resLab.Text = "No results found"; Reset(); return(false); } } NewSearch = false; UpdateGridViewPage(true); return(true); }