Contributor: GAYLE DAVIS
program ReadSwag;
{+$X}
uses Dos,Crt;
type
 SwagHeader =
 RECORD
 HeadSize : BYTE; {size of header}
 HeadChk : BYTE; {checksum for header}
 HeadID : ARRAY [1..5] OF CHAR; {compression type tag}
 NewSize : LONGINT; {compressed size}
 OrigSize : LONGINT; {original size}
 Time : WORD; {packed time}
 Date : WORD; {packed date}
 Attr : WORD; {file attributes and flags}
 BufCRC : LONGINT; {32-CRC of the Buffer }
 Swag : STRING[12]; {stored SWAG filename}
 Subject : STRING[40]; {snipet subject}
 Contrib : STRING[35]; {contributor}
 Keys : STRING[70]; {search keys, comma deliminated}
 FName : PathStr; {filename (variable length)}
 CRC : WORD; {16-bit CRC (immediately follows FName)}
 END;
PROCEDURE SWAGView (LzhFile : PathStr);
VAR
 Swaghead : Swagheader;
 HeadA : ARRAY [1..SIZEOF (Swagheader) ] OF BYTE ABSOLUTE Swaghead;
 inFile : FILE; { File to be processed }
 J, LZHpos : LONGINT;
 numread, i : WORD;
FUNCTION Mksum : BYTE; {calculate check sum For File header }
VAR
 i : INTEGER;
 b : BYTE;
BEGIN
 b := 0;
 FOR i := 3 TO Swaghead.headsize + 2 DO b := b + HeadA [i];
 mksum := b;
END;
PROCEDURE ShowView;
BEGIN
 with Swaghead do
 begin
 writeln('==================================================');
 writeln('Header size = ', HeadSize);
 writeln('compressed size = ', NewSize);
 writeln('stored SWAG filename = ', Swag);
 writeln('snipet subject = ', Subject);
 writeln('Contributor = ', Contrib);
 writeln('Search keys = ', Keys);
 writeln('File name = ', Fname);
 end;
END;
BEGIN
 Assign(infile,LzhFile);
 Reset(infile, 1);
 {Goto start of File}
 LZHPos := 0;
 REPEAT
 { Move to the correct position }
 SEEK (inFile, LZHpos);
 {Read Fileheader}
 BLOCKREAD (inFile, HeadA, SIZEOF (Swagheader), numread);
 { get the position of the next header }
 LZHpos := LZHpos + Swaghead.headsize + 2 + Swaghead.Newsize;
 { check the checksum }
 i := Mksum;
 IF Swaghead.headsize  0 THEN
 BEGIN
 IF i  Swaghead.headchk THEN
 BEGIN
 { ERROR : FORMAT ERROR !! }
 CLOSE (infile);
 EXIT;
 END;
 ShowView;
 END;
 UNTIL (Swaghead.headsize = 0);
 CLOSE (infile);
END;
BEGIN
 SwagView('d:\swag\files\oop.swg');
END.

AltStyle によって変換されたページ (->オリジナル) /