Reading Unit File

This short procedure reads unit from file to symbol tables. If header is not valid it reports error.
Function ReadUnit (UnitFileName: PChar): Boolean;
Var UnitFile: File;
    UnitHeader: PUnitHeader;
    BytesRead, SavedPreviousUnitSegment, RestOfUnit: Word;
begin
  OpenFile (UnitFile, UnitFileName);
  UnitHeader := Ptr (MainSymbolTable.Segment, 0);
  SavedPreviousUnitSegment := UnitHeader^.PreviousUnitSegment;
  BlockRead (UnitFile, UnitHeader^, SizeOf (TUnitHeader), BytesRead);
  If (BytesRead <> SizeOf (TUnitHeader)) or (UnitHeader^.Signature <> UnitSignature)
    then Error (UnitFileFormatError);
  UnitHeader^.PreviousUnitSegment := SavedPreviousUnitSegment;
  CreateExactSymbolTableSize := True;
  RestOfUnit := UnitHeader^.JoinedBlockSize - SizeOf (TUnitHeader);
  BlockRead (UnitFile, IncreaseSymbolTable (stMain, RestOfUnit)^, RestOfUnit);
  CreateExactSymbolTableSize := False;
  Close (UnitFile);
  ReadUnit := ((UnitHeader^.Flags - InitialUnitFlags) + (InitialUnitFlags - UnitHeader^.Flags)) *
                [ufUnitFlag_0200, ufUnitFlag_0100] = [];
end;
 
 
 
© 2017 Turbo Pascal | Privacy Policy