Exemple #1
0
    public MotorolaSRECfile_long(string filename)
    {
        if (filename.ToLower().EndsWith(".s19") | filename.ToLower().EndsWith(".srec"))
        {
        }
        else
        {
            FileErrorMessages.Add(" Файл имеет расширение отличное от .s19(.srec)");
        }
        try
        {
            StreamReader sr         = new StreamReader(filename);
            bool         eof        = false;
            int          lineNumber = 0;
            while (!eof)
            {
                lineNumber++;
                SRECline line = new SRECline(sr.ReadLine(), lineNumber);
                //if (ErrorMessage == "") ErrorMessage = line.ErrorMessages;
                FileErrorMessages.AddRange(line.LineErrorMessages);
                if (line.CriticalErrors == true)
                {
                    CriticalError = true;
                }

                switch (line.recordtype)
                {
                case SRECline.RecordType.DataRecordS19:
                case SRECline.RecordType.DataRecordSREC:
                    AddressLineSorted.Add((long)(line.address), line.data);
                    AddressLine.Add((long)(line.address), line.data);
                    int ij = 0;
                    foreach (byte bt in line.data)
                    {
                        AddressByteSorted.Add((long)(line.address + ij), line.data[ij]);
                        ij++;
                    }

                    break;

                case SRECline.RecordType.EndOfFileS19:
                case SRECline.RecordType.EndOfFileSREC:
                    eof = true;
                    break;
                }
                if (sr.EndOfStream)
                {
                    eof = true;
                }
            }
            if (AddressByteSorted.Count != 0)
            {
                foreach (KeyValuePair <long, byte> dabs in AddressByteSorted)
                {
                    Addresses.Add(dabs.Key);
                    Bytes.Add(dabs.Value);
                }

                for (int i = 0; i < AddressByteSorted.Count; i++)
                {
                    if (Addresses[i] < minAddress)
                    {
                        minAddress = Addresses[i];
                    }
                }

                for (int i = 0; i < AddressByteSorted.Count; i++)
                {
                    if (Addresses[i] > maxAddress)
                    {
                        maxAddress = Addresses[i];
                    }
                }
            }
            else
            {
                FileErrorMessages.Add(" Файл не имеет адресов.");
                minAddress = maxAddress = long.MinValue;
            }

            sr.Close();
            sr.Dispose();
        }
        catch (Exception ex)
        {
            ErrorMessage  = ex.Message;
            CriticalError = true;
        }
    }
    public IntelHEXfile_long(string filename)
    {
        if (filename.ToLower().EndsWith(".hex") != true)
        {
            FileErrorMessages.Add(" Файл имеет расширение отличное от hex");
        }

        try
        {
            StreamReader sr         = new StreamReader(filename);
            bool         eof        = false;
            int          lineNumber = 0;
            while (!eof)
            {
                lineNumber++;
                HEXline line = new HEXline(sr.ReadLine(), lineNumber);
                //if (ErrorMessage == "") ErrorMessage = line.ErrorMessages;
                FileErrorMessages.AddRange(line.LineErrorMessages);
                if (line.CriticalErrors == true)
                {
                    CriticalError = true;
                }

                switch (line.recordtype)
                {
                case HEXline.RecordType.ExtendedLinearAddress:
                    ex_lin_address = (long)line.data[0];
                    ex_lin_address = (long)ex_lin_address << 8;
                    ex_lin_address = (long)(ex_lin_address + (long)line.data[1]);
                    ex_lin_address = (long)ex_lin_address << 16;
                    break;

                case HEXline.RecordType.DataRecord:
                    //data.AddRange(line.data);
                    AddressLineSorted.Add((long)(line.address + ex_lin_address), line.data);
                    AddressLine.Add((long)(line.address + ex_lin_address), line.data);
                    int ij = 0;
                    foreach (byte bt in line.data)
                    {
                        AddressByteSorted.Add((long)(line.address + ex_lin_address + ij), line.data[ij]);
                        ij++;
                    }

                    break;

                case HEXline.RecordType.EndOfFile:
                    eof = true;
                    break;
                }
                if (sr.EndOfStream)
                {
                    eof = true;
                }
            }

            if (AddressByteSorted.Count != 0)
            {
                foreach (KeyValuePair <long, byte> dabs in AddressByteSorted)
                {
                    Addresses.Add(dabs.Key);
                    Bytes.Add(dabs.Value);
                }

                for (int i = 0; i < AddressByteSorted.Count; i++)
                {
                    if (Addresses[i] < minAddress)
                    {
                        minAddress = Addresses[i];
                    }
                }

                for (int i = 0; i < AddressByteSorted.Count; i++)
                {
                    if (Addresses[i] > maxAddress)
                    {
                        maxAddress = Addresses[i];
                    }
                }
            }
            else
            {
                FileErrorMessages.Add(" Файл не имеет адресов.");
                minAddress = maxAddress = long.MinValue;
            }

            sr.Close();
            sr.Dispose();
        }
        catch (Exception ex)
        {
            ErrorMessage  = ex.Message;
            CriticalError = true;
        }
    }     //constructor IntelHEXfile_long(string filename)