Example #1
0
        public STDFRecord GoToTestNumber(int TestNumber)
        {
            STDFRecordKeys keys    = STDFRecordKeys.FTR | STDFRecordKeys.MPR | STDFRecordKeys.PTR;
            PTRRecord      record  = null;
            MPRRecord      record2 = null;
            FTRRecord      record3 = null;
            STDFRecord     record4 = null;

            if (this.RecIndexList == null)
            {
                this.MakeIndex();
            }
            this.RecIndex++;
            if (this.RecIndex > this.RecIndexList.Count)
            {
                this.RecIndex = 0;
            }
            int num = 0;

            for (int i = this.RecIndex; num < this.RecIndexList.Count; i++)
            {
                if (i >= this.RecIndexList.Count)
                {
                    i = 0;
                }
                if ((this.RecIndexList[i].Key & keys) != STDFRecordKeys.NAN)
                {
                    record4 = this.ReadRecord(this.RecIndexList[i]);
                    if (this.RecIndexList[i].Key == STDFRecordKeys.PTR)
                    {
                        record = (PTRRecord)record4;
                        if (record.TEST_NUM == TestNumber)
                        {
                            this.RecIndex = i;
                            return(record4);
                        }
                    }
                    else if (this.RecIndexList[i].Key == STDFRecordKeys.MPR)
                    {
                        record2 = (MPRRecord)record4;
                        if (record2.TEST_NUM == TestNumber)
                        {
                            this.RecIndex = i;
                            return(record4);
                        }
                    }
                    else if (this.RecIndexList[i].Key == STDFRecordKeys.FTR)
                    {
                        record3 = (FTRRecord)record4;
                        if (record3.TEST_NUM == TestNumber)
                        {
                            this.RecIndex = i;
                            return(record4);
                        }
                    }
                }
                num++;
            }
            return(record4);
        }
Example #2
0
        public STDFRecord ReadRecord(STDFRecordIndex RI)
        {
            STDFRecord record = null;

            record = this.ReadRecord(RI.FilePosition);
            record.RecordNumber = RI.RecordNumber;
            return(record);
        }
Example #3
0
        public void Write(STDFRecord stdfRecord)
        {
            if (this.Mode == STDFFileMode.Read)
            {
                throw new Exception("Cannot write to a file opened for Read");
            }
            this.RecordCount       += 1L;
            stdfRecord.RecordNumber = this.RecordCount;
            long position = this.bw.BaseStream.Position;

            stdfRecord.FilePos = position;
            stdfRecord.REC_LEN = 0;
            this.bw.Write(stdfRecord.REC_LEN);
            stdfRecord.Write(this.bw);
            long num2 = this.bw.BaseStream.Position;

            stdfRecord.REC_LEN          = Convert.ToUInt16((long)(num2 - position));
            this.bw.BaseStream.Position = position;
            this.bw.Write(Convert.ToUInt16((int)(stdfRecord.REC_LEN - 4)));
            this.bw.BaseStream.Position = num2;
        }
Example #4
0
        public STDFRecord ReadRecord()
        {
            ushort     num      = 0;
            byte       num2     = 0;
            byte       num3     = 0;
            long       position = 0L;
            STDFRecord record   = null;

            if (this.Mode == STDFFileMode.Write)
            {
                throw new Exception("Cannot read from a file opened for write");
            }
            position = this.br.BaseStream.Position;
            this.BeginningOfBadRecord = position;
            if (this.Processor == BYTE_ORIENTATION.UNKNOWN)
            {
                this.Processor = this.DetermineProcessorType(this.br);
            }
            if ((position + 4L) > this.FileLength)
            {
                return(null);
            }
            num  = this.br.ReadUInt16();
            num2 = this.br.ReadByte();
            num3 = this.br.ReadByte();
            if (this.Processor != BYTE_ORIENTATION.IBMPC)
            {
                uint num5 = Convert.ToUInt32(num);
                num5 = ((num5 >> 8) | (num5 << 8)) & 0xffff;
                num  = Convert.ToUInt16(num5);
            }
            if ((position + num) >= this.FileLength)
            {
                throw new Exception("File not long enough, Probable File Corruption at offset:" + this.br.BaseStream.Position.ToString());
            }
            int num6 = (num3 << 8) + num2;

            switch (num6)
            {
            case 0xa14:
                record = new BPSRecord();
                break;

            case 0xa32:
                record = new GDRRecord();
                break;

            case 0xa00:
                record = new FARRecord();
                break;

            case 0xa01:
                record = new MIRRecord();
                break;

            case 0xa02:
                record = new WIRRecord();
                break;

            case 0xa05:
                record = new PIRRecord();
                break;

            case 0xa0f:
                record = new PTRRecord();
                break;

            case 0x1400:
                record = new ATRRecord();
                break;

            case 0x1401:
                record = new MRRRecord();
                break;

            case 0x1402:
                record = new WRRRecord();
                break;

            case 0x1405:
                record = new PRRRecord();
                break;

            case 0xf0f:
                record = new MPRRecord();
                break;

            case 0x1e01:
                record = new PCRRecord();
                break;

            case 0x1e02:
                record = new WCRRecord();
                break;

            case 0x1414:
                record = new EPSRecord();
                break;

            case 0x140f:
                record = new FTRRecord();
                break;

            case 0x2801:
                record = new HBRRecord();
                break;

            case 0x3201:
                record = new SBRRecord();
                break;

            case 0x1e0a:
                record = new TSRRecord();
                break;

            case 0x1e32:
                record = new DTRRecord();
                break;

            case 0x3c01:
                record = new PMRRecord();
                break;

            case 0x3e01:
                record = new PGRRecord();
                break;

            case 0x3f01:
                record = new PLRRecord();
                break;

            case 0x4601:
                record = new RDRRecord();
                break;

            case 0x5001:
                record = new SDRRecord();
                break;

            default:
            {
                StringBuilder builder = new StringBuilder(0x800);
                builder.AppendFormat("Corrupt stdf file encountered {0}\n", this.FileProcessing);
                builder.AppendFormat("\tLast Known Good Position 0x{0:X}\n", this.LastGoodFilePosition);
                builder.AppendFormat("\tLast Known Good Record {0)\n", this.LastGoodSTDFRecord.ToString());
                builder.AppendFormat("\tBeginning of Bad Record 0x{0:X}\n", this.BeginningOfBadRecord);
                break;
            }
            }
            record.REC_LEN        = num;
            record.RemainingBytes = num;
            record.RecordNumber   = this.RecordCount += 1L;
            record.RECORD_TYPE    = (STDFRecordType)num6;
            record.Processor      = this.Processor;
            record.FilePos        = position;
            record.Read(this.br);
            this.br.BaseStream.Position = (record.FilePos + record.REC_LEN) + 4L;
            this.LastGoodFilePosition   = position;
            this.LastGoodSTDFRecord     = record.RECORD_TYPE;
            if (this.FileLength > 0L)
            {
                this.Percent = (Convert.ToDouble(position) / Convert.ToDouble(this.FileLength)) * 100.0;
                return(record);
            }
            this.Percent = 0.0;
            return(record);
        }
 public void Write(STDFRecord stdfRecord)
 {
     if (this.Mode == STDFFileMode.Read)
     {
         throw new Exception("Cannot write to a file opened for Read");
     }
     this.RecordCount += 1L;
     stdfRecord.RecordNumber = this.RecordCount;
     long position = this.bw.BaseStream.Position;
     stdfRecord.FilePos = position;
     stdfRecord.REC_LEN = 0;
     this.bw.Write(stdfRecord.REC_LEN);
     stdfRecord.Write(this.bw);
     long num2 = this.bw.BaseStream.Position;
     stdfRecord.REC_LEN = Convert.ToUInt16((long) (num2 - position));
     this.bw.BaseStream.Position = position;
     this.bw.Write(Convert.ToUInt16((int) (stdfRecord.REC_LEN - 4)));
     this.bw.BaseStream.Position = num2;
 }