+ started implementing TOmfObjInput.ReadObjData - we go through the expected

records and read them (without parsing them yet) and verify their checksums

git-svn-id: trunk@30965 -
This commit is contained in:
nickysn 2015-05-31 22:32:54 +00:00
parent 9216e561e2
commit be57d4900d

View File

@ -120,8 +120,13 @@ interface
{ TOmfObjInput }
TOmfObjInput = class(TObjInput)
private
FRawRecord: TOmfRawRecord;
public
constructor create;override;
destructor destroy;override;
class function CanReadObjData(AReader:TObjectreader):boolean;override;
function ReadObjData(AReader:TObjectreader;out objdata:TObjData):boolean;override;
end;
{ TMZExeOutput }
@ -889,6 +894,13 @@ implementation
begin
inherited create;
cobjdata:=TOmfObjData;
FRawRecord:=TOmfRawRecord.Create;
end;
destructor TOmfObjInput.destroy;
begin
FRawRecord.Free;
inherited destroy;
end;
class function TOmfObjInput.CanReadObjData(AReader: TObjectreader): boolean;
@ -905,6 +917,76 @@ implementation
AReader.Seek(0);
end;
function TOmfObjInput.ReadObjData(AReader: TObjectreader; out objdata: TObjData): boolean;
begin
FReader:=AReader;
InputFileName:=AReader.FileName;
objdata:=CObjData.Create(InputFileName);
result:=false;
FRawRecord.ReadFrom(FReader);
if not FRawRecord.VerifyChecksumByte then
begin
InputError('Invalid checksum in OMF record');
exit;
end;
if FRawRecord.RecordType<>RT_THEADR then
begin
InputError('Can''t read OMF header');
exit;
end;
repeat
FRawRecord.ReadFrom(FReader);
if not FRawRecord.VerifyChecksumByte then
begin
InputError('Invalid checksum in OMF record');
exit;
end;
case FRawRecord.RecordType of
RT_LNAMES:
begin
{todo}
end;
RT_SEGDEF,RT_SEGDEF32:
begin
{todo}
end;
RT_GRPDEF:
begin
{todo}
end;
RT_COMENT:
begin
{todo}
end;
RT_EXTDEF:
begin
{todo}
end;
RT_PUBDEF,RT_PUBDEF32:
begin
{todo}
end;
RT_LEDATA,RT_LEDATA32:
begin
{todo}
end;
RT_FIXUPP,RT_FIXUPP32:
begin
{todo}
end;
RT_MODEND,RT_MODEND32:
begin
{todo}
end;
else
begin
InputError('Unsupported OMF record type $'+HexStr(FRawRecord.RecordType,2));
exit;
end;
end;
until FRawRecord.RecordType in [RT_MODEND,RT_MODEND32];
end;
{****************************************************************************
TMZExeOutput
****************************************************************************}