[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]