[Back to ARCHIVES SWAG index] [Back to Main SWAG index] [Original]
Program ReadArj;
Uses
 Crt,
 Search;
Const
  ArjID = #96#234;
Type
  Array10 = Array[1..10] of Byte;
  Array12 = Array[1..12] of Char;
  AFileRec = Record
               FileDate       : LongInt;
               CompressedSize : LongInt;
               originalSize   : LongInt;
               DudSpace       : Array10;
               FileName       : Array12
             end;
  Array60K = Array[1..61440] of Byte;
Var
  Buffer : Array60K;
  ArjFileRec : AFileRec;
  ArjFileSize,
  ArjRecStart,
  ArjRecStop,
  Index,
  Index1 : LongInt;
  ArjFile : File;
begin
  ClrScr;
  fillChar(Buffer, sizeof(Buffer), 0);
  fillChar(ArjFileRec, sizeof(ArjFileRec), 0);
  ArjFileSize := 0;
  ArjRecStart := 1;
  ArjRecStop := 0;
  assign(ArjFile, 'TEST.ARJ');
  {$I-}
  reset(ArjFile, 1);
  {$I+}
  if (ioresult <> 0) then
    begin
      Writeln(' ERRor OPENinG TEST.ARJ');
      halt(255)
    end;
  ArjFileSize := Filesize(ArjFile);
  Index := ArjFileSize - 50;
  blockread(ArjFile, Buffer, Index);
  close(ArjFile);
  Index1 := 50;
  ArjFileRec.Filename := '            ';
  While ((Index1 + 33) < ArjFileSize) do
    begin
      ArjRecStart := StrPos(Buffer[Index1], Index, ArjID) + 11;
      ArjRecStop := StrPos(Buffer[Index1 + ArjRecStart + 22], 13, #0);
      move(Buffer[ArjRecStart + Index1], ArjFileRec, (ArjRecStop + 21));
      With ArjFileRec do
        begin
          Writeln(' ',FileName, '  Compressed size = ', CompressedSize:6,
                    '  original size = ', originalSize:6);
          FileName := '            ';
          inc(Index1, CompressedSize + ArjRecStop + ArjRecStart);
          dec(Index, CompressedSize + ArjRecStop + ArjRecStart)
        end
    end
end.
[Back to ARCHIVES SWAG index] [Back to Main SWAG index] [Original]