瀏覽代碼

+ added class for encapsulating an omf raw record

git-svn-id: trunk@30344 -
nickysn 10 年之前
父節點
當前提交
359eaa4152
共有 1 個文件被更改,包括 56 次插入0 次删除
  1. 56 0
      compiler/omfbase.pas

+ 56 - 0
compiler/omfbase.pas

@@ -26,6 +26,9 @@ unit omfbase;
 
 interface
 
+  uses
+    owbase;
+
   const
     { OMF record types }
     RT_THEADR    = $80;  { Translator Header Record }
@@ -68,6 +71,59 @@ interface
     RT_VERNUM    = $CC;  { OMF Version Number Record }
     RT_VENDEXT   = $CE;  { Vendor-specific OMF Extension Record }
 
+  type
+
+    { TOmfRawRecord }
+
+    TOmfRawRecord = class
+    private
+      function GetRecordLength: Word;
+      function GetRecordType: Byte;
+      procedure SetRecordLength(AValue: Word);
+      procedure SetRecordType(AValue: Byte);
+    public
+      RawData: array [-3..65535] of Byte;
+      property RecordType: Byte read GetRecordType write SetRecordType;
+      property RecordLength: Word read GetRecordLength write SetRecordLength;
+
+      procedure ReadFrom(aReader: TObjectReader);
+      procedure WriteTo(aWriter: TObjectWriter);
+    end;
+
 implementation
 
+  { TOmfRawRecord }
+
+  function TOmfRawRecord.GetRecordType: Byte;
+    begin
+      Result:=RawData[-3];
+    end;
+
+  procedure TOmfRawRecord.SetRecordType(AValue: Byte);
+    begin
+      RawData[-3]:=AValue;
+    end;
+
+  function TOmfRawRecord.GetRecordLength: Word;
+    begin
+      Result:=RawData[-2] or (RawData[-1] shl 8);
+    end;
+
+  procedure TOmfRawRecord.SetRecordLength(AValue: Word);
+    begin
+      RawData[-2]:=Byte(AValue);
+      RawData[-1]:=Byte(AValue shr 8);
+    end;
+
+  procedure TOmfRawRecord.ReadFrom(aReader: TObjectReader);
+    begin
+      aReader.read(RawData, 3);
+      aReader.read(RawData[0], RecordLength);
+    end;
+
+  procedure TOmfRawRecord.WriteTo(aWriter: TObjectWriter);
+    begin
+      aWriter.write(RawData, RecordLength+3);
+    end;
+
 end.