private bool CompareSymbolToCurrentFile(string symbolname, int address, int length, string filename, out double diffperc, out int diffabs, out double diffavg, double correction)
{
diffperc = 0;
diffabs = 0;
diffavg = 0;
double totalvalue1 = 0;
double totalvalue2 = 0;
bool retval = true;
if (address > 0)
{
int curaddress = (int)GetSymbolAddress(Tools.Instance.m_symbols, symbolname);
int curlength = GetSymbolLength(Tools.Instance.m_symbols, symbolname);
byte[] curdata = Tools.Instance.readdatafromfile(Tools.Instance.m_currentfile, curaddress, curlength, Tools.Instance.m_currentFileType);
byte[] compdata = Tools.Instance.readdatafromfile(filename, address, length, Tools.Instance.m_currentFileType);
if (curdata.Length != compdata.Length)
{
Console.WriteLine("Lengths didn't match: " + symbolname);
return false;
}
for (int offset = 0; offset < curdata.Length; offset += 2)
{
int ival1 = Convert.ToInt32(curdata.GetValue(offset)) * 256 + Convert.ToInt32(curdata.GetValue(offset + 1));
int ival2 = Convert.ToInt32(compdata.GetValue(offset)) * 256 + Convert.ToInt32(compdata.GetValue(offset + 1)) ;
if (ival1 != ival2)
{
retval = false;
diffabs++;
}
totalvalue1 += Convert.ToDouble(ival1);
totalvalue2 += Convert.ToDouble(ival2);
}
if (curdata.Length > 0)
{
totalvalue1 /= (curdata.Length/2);
totalvalue2 /= (compdata.Length/2);
}
}
diffavg = Math.Abs(totalvalue1 - totalvalue2) * correction;
diffperc = (diffabs * 100) / (length /2);
return retval;
}