Zip viewer

, \t\t , View the contents of a ZIP file, Contributor: JOHN SHIPLEY, {------8<-------------Snip---------------8<------------Snip------------8<-------}, {$I-}, UNIT zipviewu;, (*/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\\\/\\/\\/\\/\\/\\/\\/\\*), (* Unit : Zip View Date : March 23, 1994 *), (* By : John Shipley Ver : 1.0 *), (* *), (* Credits : Steve Wierenga - ZIPV.PAS found in SWAG - Got me started on the *), (* zipviewu code since ZIPV.PAS was fairly easy to read unlike *), (* some other code I had seen. *) (* *) (* tom guinther - zipper.pas fandt i zipper.zip (1989) til rådighed *) (* * * i min bbs ", brook skov inn 714-951-5282 " denne kode hjalp *) (* gøre mange ting.lynlåsen kode er sandsynligvis bedre end *) (* * * i denne kodeks og veldokumenteret.*) (* *) (* pkware ', s appnote.txt fandt i pkz110.exe *) (* *) (* denne enhed skal tilbydes offentligheden så længe godskrivning *) (*, hvor det er på sin plads.jeg accepterer ikke erstatningsansvar for, hvad denne kodeks er at din *) (*) eller dine venner eller nogen andens.du har et kodeks, så du kan ordne *) (* * *.hvis denne kode formater din harddisk, og du mister dit livs arbejde *) (* så kan jeg kun sige " hvorfor ' t du tilbage?" *) (* *) (* formål: at efterligne " pkunzip - v " produktion.(v2.04g) *) (* koden er tæt knyttet til formålet, men ikke perfekt.*) (* *) (* demo: * *) (* *) (* "zip_viewit; *) (* bruger dos, crt, zipviewu; *) (* begynde *) (* hvis paramcount < > 0 så *) (* begynde *) (* zipview (paramstr (1) *) (* end(*) (*.*), (*/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\\\/\\/\\/\\/\\/\\/\\/\\*), INTERFACE, USES DOS,CRT;, PROCEDURE zipview(zipfile: STRING);, IMPLEMENTATION, CONST hexdigit : ARRAY[0..15] OF CHAR = '0123456789abcdef';, FUNCTION hexbyte(b: byte): STRING; (* Byte to Hexbyte *),   BEGIN,     hexbyte := hexdigit[b SHR 4]+hexdigit[b AND $f];,   END;, FUNCTION hexlong(l: LONGINT): STRING; (* Longint to Hexlong *),   VAR n : ARRAY[1..4] OF BYTE ABSOLUTE l;,   BEGIN,     hexlong := hexbyte(n[4])+hexbyte(n[3])+hexbyte(n[2])+hexbyte(n[1]);,   END;, FUNCTION lenn(s: STRING): INTEGER; (* Like LENGTH, but skips color codes *),   VAR i,len : INTEGER;,   BEGIN,      len: = længde (s),      jeg: = 1,     , mens (< = længde (s),        begynder,          hvis (s [i] i [# 3 ' ^ ']),            hvis (, 0 så gå ud og (* hvis fejl så ud af funktion *),        hvis (buf. underskrift = csig) (* fandt vi den første centrale hoved?*),          begynder,            seekc: = sandt; (* fandt første centrale header *),            søge (f, curpos); (*) sikre, at vi er på centralt headers fil stilling *),         ;,   ;,    var curpos: longint;,    begynder,      numfiles: = 0 (* bekæmpelse af antallet af filer til at bestemme, hvornår gjort *),      z: = 0 (* bekæmpelse af antallet af sager behandlet *),      totalu: = 0 (* samlede bytes af ukomprimerede filer *),      totalc: = 0 (* samlede størrelse, efter at være blevet komprimeret *),      nye (- hdr); (* dynamisk tildele hukommelse til vikar header plade *),      enssign (f, zipfile); (* tildele filnavn at indgive var *),      {$-},      nulstille (f, 1); (* åben untyped fil *),      {$i +),     , hvis ioresult < > 0 (*, hvis vi får en fejl, udgang program *),        begynder,          writeln (' fejl - fil fundet. '),          standse (253),       ; hvis ikke,      seekc (f) (* skip lokale personer og til første centrale header *),        begynde (*), hvis vi ikke kan finde en central header *),          tæt (f); (* tæt untyped fil *),          writeln (' fejl - fordærvet eller ikke zip fil. '),         HALT(254); (* Exit Program *),       END;,     WRITELN(' Length Method Size Ratio Date Time CRC-32 '+,       ' Attr Name');,     WRITELN(' ------ ------ ----- ----- ---- ---- --------'+,       ' ---- ----');,     REPEAT,       FILLCHAR(s,SIZEOF(s),#0); (* Clear Name String *),       BLOCKREAD(f,hdr^,SIZEOF(cheader)); (* Read File Header *),       BLOCKREAD(f,MEM[SEG(s):OFS(s)+1],hdr^.fnamelen); (* Read Archive Name *),       s[0] := CHR(hdr^.fnamelen); (* Get Archive Name Length *),       IF (hdr^.signature=csig) THEN (* Is a header *),         BEGIN,           INC(z); (* Increment File Counter *),           WRITE(mrn(cstr(hdr^.usize),7)); (* Display Uncompressed Size *),           WRITE(' '+mrn(comptypes[hdr^.compress],7)); (* Compression Method *),           WRITE(mrn(cstr(hdr^.csize),8)); (* Display Compressed Size *),           percent := ROUND(100.0-(hdr^.csize/hdr^.usize*100.0));,           WRITE(mrn(cstr(percent),4)+'% '); (* Display Compression Percent *),           WRITE(' '+w2date(hdr^.date)+' '); (* Display Date Last Modified *),           WRITE(' '+w2time(hdr^.time)+' '); (* Display Time Last Modified *),           WRITE(' '+hexlong(hdr^.crc32)+' '); (* Display CRC-32 in Hex *),           WRITE(b2attr(hdr^.efa[1],hdr^.gpflag[1])); (* Display Attributes *),           WRITELN(' '+mln(s,13)); (* Display Archive Filename *),           INC(totalu,hdr^.usize); (* Increment size uncompressed *),           INC(totalc,hdr^.csize); (* Increment size compressed *),         END;,       SEEK(f,FILEPOS(f)+hdr^.extrafield+hdr^.fcl);,     UNTIL (hdr^.signature<>csig) OR EOF(f) OR (z=numfiles); (* No more Files *),     WRITELN(' ------ ------ - - - og' +,        ' anfører derfor '),      skrive (mrn (cstr (totalu), 7) + ' '); (* display samlede usammenpressede *),      skrive (mrn (cstr (totalc) 7) + ' '); (* display samlede komprimeret *),      skrive ((100 totalc /totalu * 100): 3: 0, og'% ' + mrn (' ', 34) (* display% *),      writeln (mrn (cstr (z), 7)); (* viser antallet af filer *),      tæt (f); (* tæt untyped fil *),      bortskaffelse (- hdr); (* deallocate header var hukommelse *),   ;,.,



Previous:
Next Page: