Article View: vmsnet.sources
Article #88Zip v1.9 & UnZip v5.0, part 15/22
From: goathunter
Date: Tue, 01 Sep 1992 22:53
Date: Tue, 01 Sep 1992 22:53
1212 lines
49929 bytes
49929 bytes
Submitted-by: goathunter@wkuvx1.bitnet
Posting-number: Volume 3, Issue 137
Archive-name: zip_unzip/part15
-+-+-+-+-+-+-+-+ START OF PART 15 -+-+-+-+-+-+-+-+
X workspace`5B4`5D = 'R';
X if (xattr & S_IWGRP) `7B
X workspace`5B5`5D = 'W';
X workspace`5B7`5D = 'D';
X `7D
X if (xattr & S_IXGRP)
X workspace`5B6`5D = 'E';
X if (xattr & S_IROTH)
X workspace`5B8`5D = 'R';
X if (xattr & S_IWOTH) `7B
X workspace`5B9`5D = 'W';
X workspace`5B11`5D = 'D';
X `7D
X if (xattr & S_IXOTH)
X workspace`5B10`5D = 'E';
X
X *p++ = '(';
X for (k = j = 0; j < 3; ++j) `7B /* loop over groups of permissi
Vons */
X for (i = 0; i < 4; ++i, ++k) /* loop over perms within a grou
Vp */
X if (workspace`5Bk`5D)
X *p++ = workspace`5Bk`5D;
X *p++ = ','; /* group separator */
X if (j == 0)
X while ((*p++ = *q++) != ','); /* system, owner perms are sam
Ve */
X `7D
X *p-- = 0;
X *p = ')'; /* overwrite last comma */
X printf(" VMS file attributes (%06o octal): %s\n",
X xattr, attribs);
X
X `7D else if ((hostnum != DOS_OS2_FAT_) && (hostnum != OS2_HPFS_)) `7B
X /* assume Unix-like */
X switch (xattr & S_IFMT) `7B
X case S_IFREG: attribs`5B0`5D = '-'; break;
X case S_IFLNK: attribs`5B0`5D = 'l'; break;
X case S_IFBLK: attribs`5B0`5D = 'b'; break;
X case S_IFCHR: attribs`5B0`5D = 'c'; break;
X case S_IFIFO: attribs`5B0`5D = 'p'; break;
X case S_IFSOCK: attribs`5B0`5D = 's'; break;
X case S_IFDIR: attribs`5B0`5D = 'd'; break;
X default: attribs`5B0`5D = '?'; break;
X `7D
X if (xattr & S_IRUSR) /* no read-permission: user */
X attribs`5B1`5D = 'r';
X else
X attribs`5B1`5D = '-';
X if (xattr & S_IWUSR) /* no write-permission: user */
X attribs`5B2`5D = 'w';
X else
X attribs`5B2`5D = '-';
X if (xattr & S_IXUSR) /* no execute-permission: user */
X if (xattr & S_ISUID)
X attribs`5B3`5D = 's';
X else
X attribs`5B3`5D = 'x';
X else
X if (xattr & S_ISUID)
X attribs`5B3`5D = 'S'; /* undefined state */
X else
X attribs`5B3`5D = '-';
X if (xattr & S_IRGRP) /* no read-permission: group */
X attribs`5B4`5D = 'r';
X else
X attribs`5B4`5D = '-';
X if (xattr & S_IWGRP) /* no write-permission: group */
X attribs`5B5`5D = 'w';
X else
X attribs`5B5`5D = '-';
X if (xattr & S_IXGRP) /* no execute-permission: group */
X if (xattr & S_ISGID)
X attribs`5B6`5D = 's';
X else
X attribs`5B6`5D = 'x';
X else
X if (xattr & S_ISGID) /* or could use S_ENFMT (same) */
X attribs`5B6`5D = 'l';
X else
X attribs`5B6`5D = '-';
X if (xattr & S_IROTH) /* no read-permission: other */
X attribs`5B7`5D = 'r';
X else
X attribs`5B7`5D = '-';
X if (xattr & S_IWOTH) /* no write-permission: other */
X attribs`5B8`5D = 'w';
X else
X attribs`5B8`5D = '-';
X if (xattr & S_IXOTH) /* no execute-permission: other */
X if (xattr & S_ISVTX) /* "sticky bit" */
X attribs`5B9`5D = 't';
X else
X attribs`5B9`5D = 'x';
X else
X if (xattr & S_ISVTX)
X attribs`5B9`5D = 'T'; /* undefined state */
X else
X attribs`5B9`5D = '-';
X attribs`5B10`5D = 0;
X printf(" Unix file attributes (%06o octal): %s\n",
X xattr, attribs);
X
X `7D /* endif (hostnum: external attributes format) */
X
X if ((xattr=(UWORD)(crec.external_file_attributes & 0xFF)) == 0)
X printf(" MS-DOS file attributes (%02X hex): none\n
V",
X xattr);
X else if (xattr == 1)
X printf(
X " MS-DOS file attributes (%02X hex): read-only\n
V",
X xattr);
X else
X printf(
X " MS-DOS file attributes (%02X hex): %s%s%s%s%s%s
V\n",
X xattr, (xattr&1)?"rdo ":"", (xattr&2)?"hid ":"", (xattr&4)?"sys ":
V"",
X (xattr&8)?"lab ":"", (xattr&16)?"dir ":"", (xattr&32)?"arc":"");
X printf(
X " offset of local header from start of archive: %lu (%.8lXh) bytes
V\n",
X crec.relative_offset_local_header, crec.relative_offset_local_header);
X
X/*--------------------------------------------------------------------------
V-
X Skip the extra field, if any, and print the file comment, if any (the
X filename has already been printed, above). That finishes up this file
X entry...
X --------------------------------------------------------------------------
V-*/
X
X if (crec.extra_field_length > 0) `7B
X/* #ifdef OS2 */
X#if TRUE
X ULONG ea_size;
X if ((error = do_string(crec.extra_field_length, EXTRA_FIELD)) != 0)
V `7B
X error_in_archive = error;
X if (error > 1) /* fatal: can't continue */
X return (error);
X `7D
X if ((ea_size = SizeOfEAs(extra_field)) != 0)
X printf("\n\
X This file has %lu bytes of OS/2 EA's in the local extra field.\n\
X (May not match OS/2 \"dir\" amount due to storage method.)\n\n",
X ea_size);
X else
X printf("\n There is an unknown extra field (skipping).\n");
X#else
X printf("\n There is an extra field (skipping).\n");
X SKIP_(crec.extra_field_length)
X#endif
X `7D else
X printf("\n");
X
X if (!crec.file_comment_length)
X printf(" There is no file comment.\n");
X else `7B
X printf("\
X------------------------- file comment begins ----------------------------\n
V");
X if ((error = do_string(crec.file_comment_length, DISPLAY)) != 0) `7B
X error_in_archive = error; /* might be warning */
X if (error > 1) /* fatal */
X return error;
X `7D
X printf("\n\
X-------------------------- file comment ends -----------------------------\n
V");
X `7D
X
X return error_in_archive;
X
X`7D /* end function long_info() */
X
X
X
X
X
X/**************************/
X/* Function SizeOfEAs() */
X/**************************/
X
XULONG SizeOfEAs(extra_field) /* Author: Kai Uwe Rommel */
X void *extra_field;
X`7B
X EAHEADER *pEAblock = (PEAHEADER) extra_field;
X
X if ( extra_field != NULL && pEAblock -> nID == EAID )
X return pEAblock -> lSize;
X
X return 0L;
X`7D
X
X
X
X
X
X/***************************/
X/* Function short_info() */
X/***************************/
X
Xint short_info() /* return PK-type error code */
X`7B
X int k, error, error_in_archive=0;
X UWORD hostver, xattr;
X char workspace`5B12`5D, attribs`5B16`5D;
X static char impl`5B5`5D="i#:#", defl`5B5`5D="def#", unkn`5B8`5D;
X static char dtype`5B5`5D="NXF?"; /* normal, maximum, fastest, undefin
Ved */
X static char *os`5BNUM_HOSTS+1`5D = `7B"dos", "ami", "vms", "unx", "cms
V",
X "atr", "os2", "mac", "zzz", "cpm", "???" `7D;
X static char *method`5BNUM_METHODS+1`5D = `7B"stor", "shrk", "re:1", "r
Ve:2",
X "re:3", "re:4", impl, "tokn", defl, unkn`7D;
X
X
X/*--------------------------------------------------------------------------
V-
X Print out various interesting things about the compressed file.
X --------------------------------------------------------------------------
V-*/
X
X methnum = MIN(crec.compression_method, NUM_METHODS);
X hostnum = MIN(crec.version_made_by`5B1`5D, NUM_HOSTS);
X hostver = crec.version_made_by`5B0`5D;
X/*
X extnum = MIN(crec.version_needed_to_extract`5B1`5D, NUM_HOSTS);
X extver = crec.version_needed_to_extract`5B0`5D;
X */
X
X if (methnum == IMPLODED) `7B
X impl`5B1`5D = (crec.general_purpose_bit_flag & 2)? '8' : '4';
X impl`5B3`5D = (crec.general_purpose_bit_flag & 4)? '3' : '2';
X `7D else if (methnum == DEFLATED) `7B
X UWORD dnum=(crec.general_purpose_bit_flag>>1) & 3;
X defl`5B3`5D = dtype`5Bdnum`5D;
X `7D else if (methnum == NUM_METHODS) `7B /* unknown */
X sprintf(unkn, "u%03d", crec.compression_method);
X `7D
X
X for (k = 0; k < 15; ++k)
X attribs`5Bk`5D = ' ';
X attribs`5B15`5D = 0;
X
X xattr = (UWORD) ((crec.external_file_attributes >> 16) & 0xFFFF);
X switch (hostnum) `7B
X case VMS_:
X `7B char *p=attribs;
X int i, j;
X
X for (k = 0; k < 12; ++k)
X workspace`5Bk`5D = 0;
X if (xattr & S_IRUSR)
X workspace`5B0`5D = 'R';
X if (xattr & S_IWUSR) `7B
X workspace`5B1`5D = 'W';
X workspace`5B3`5D = 'D';
X `7D
X if (xattr & S_IXUSR)
X workspace`5B2`5D = 'E';
X if (xattr & S_IRGRP)
X workspace`5B4`5D = 'R';
X if (xattr & S_IWGRP) `7B
X workspace`5B5`5D = 'W';
X workspace`5B7`5D = 'D';
X `7D
X if (xattr & S_IXGRP)
X workspace`5B6`5D = 'E';
X if (xattr & S_IROTH)
X workspace`5B8`5D = 'R';
X if (xattr & S_IWOTH) `7B
X workspace`5B9`5D = 'W';
X workspace`5B11`5D = 'D';
X `7D
X if (xattr & S_IXOTH)
X workspace`5B10`5D = 'E';
X
X for (k = j = 0; j < 3; ++j) `7B /* groups of permissions
V */
X for (i = 0; i < 4; ++i, ++k) /* perms within a group */
X if (workspace`5Bk`5D)
X *p++ = workspace`5Bk`5D;
X *p++ = ','; /* group separator */
X `7D
X *--p = ' '; /* overwrite last comma */
X if ((p - attribs) < 12)
X sprintf(&attribs`5B12`5D, "%d.%d", hostver/10, hostver%10)
V;
X `7D
X break;
X
X case DOS_OS2_FAT_:
X case OS2_HPFS_:
X xattr = (UWORD) (crec.external_file_attributes & 0xFF);
X sprintf(attribs, "%s,%s,%s,%s", (xattr&32)?"arc":"",
X (xattr&2)?"hid":"", (xattr&1)?"rdo":"rw", (xattr&4)?"sys":"");
X if ((k = strlen(attribs)) < 15)
X attribs`5Bk`5D = ' '; /* overwrite '\0' */
X if (k < 12)
X sprintf(&attribs`5B12`5D, "%d.%d", hostver/10, hostver%10);
X break;
X
X default: /* assume Unix-like */
X switch (xattr & S_IFMT) `7B
X case S_IFREG: attribs`5B0`5D = '-'; break;
X case S_IFLNK: attribs`5B0`5D = 'l'; break;
X case S_IFBLK: attribs`5B0`5D = 'b'; break;
X case S_IFCHR: attribs`5B0`5D = 'c'; break;
X case S_IFIFO: attribs`5B0`5D = 'p'; break;
X case S_IFSOCK: attribs`5B0`5D = 's'; break;
X case S_IFDIR: attribs`5B0`5D = 'd'; break;
X default: attribs`5B0`5D = '?'; break;
X `7D
X if (xattr & S_IRUSR) /* no read-permission: user */
X attribs`5B1`5D = 'r';
X else
X attribs`5B1`5D = '-';
X if (xattr & S_IWUSR) /* no write-permission: user */
X attribs`5B2`5D = 'w';
X else
X attribs`5B2`5D = '-';
X if (xattr & S_IXUSR) /* no execute-permission: user */
X if (xattr & S_ISUID)
X attribs`5B3`5D = 's';
X else
X attribs`5B3`5D = 'x';
X else
X if (xattr & S_ISUID)
X attribs`5B3`5D = 'S'; /* undefined state */
X else
X attribs`5B3`5D = '-';
X if (xattr & S_IRGRP) /* no read-permission: group */
X attribs`5B4`5D = 'r';
X else
X attribs`5B4`5D = '-';
X if (xattr & S_IWGRP) /* no write-permission: group */
X attribs`5B5`5D = 'w';
X else
X attribs`5B5`5D = '-';
X if (xattr & S_IXGRP) /* no execute-permission: group */
X if (xattr & S_ISGID)
X attribs`5B6`5D = 's';
X else
X attribs`5B6`5D = 'x';
X else
X if (xattr & S_ISGID) /* or could use S_ENFMT (same) */
X attribs`5B6`5D = 'l';
X else
X attribs`5B6`5D = '-';
X if (xattr & S_IROTH) /* no read-permission: other */
X attribs`5B7`5D = 'r';
X else
X attribs`5B7`5D = '-';
X if (xattr & S_IWOTH) /* no write-permission: other */
X attribs`5B8`5D = 'w';
X else
X attribs`5B8`5D = '-';
X if (xattr & S_IXOTH) /* no execute-permission: other */
X if (xattr & S_ISVTX) /* "sticky bit" */
X attribs`5B9`5D = 't';
X else
X attribs`5B9`5D = 'x';
X else
X if (xattr & S_ISVTX)
X attribs`5B9`5D = 'T'; /* undefined state */
X else
X attribs`5B9`5D = '-';
X sprintf(&attribs`5B12`5D, "%d.%d", hostver/10, hostver%10);
X break;
X
X `7D /* end switch (hostnum: external attributes format) */
X
X printf("%s %s %7lu %c%c", attribs, os`5Bhostnum`5D, crec.uncompressed_si
Vze,
X (crec.general_purpose_bit_flag & 1)?
X ((crec.internal_file_attributes & 1)? 'T' : 'B') : /* encrypted */
X ((crec.internal_file_attributes & 1)? 't' : 'b'), /* plaintext */
X (crec.general_purpose_bit_flag & 8)? (crec.extra_field_length? 'X' : '
Vl')
X : (crec.extra_field_length? 'x' : '-
V'));
X if (lflag == 4) `7B
X longint c = (longint) crec.compressed_size;
X longint uc = (longint) crec.uncompressed_size;
X
X if (crec.general_purpose_bit_flag & 1)
X c -= 12; /* if encrypted, don't count encryption header */
X /* risk signed overflow if blindly multiply: */
X printf("%3d%%", (uc==0)? 0 : ((uc>2000000L)?
X ((int)((uc-c)/(uc/1000L))+5)/10 : ((int)((1000L*(uc-c))/uc)+5)/10)
V );
X `7D else if (lflag == 5)
X printf(" %7lu", crec.compressed_size);
X
X printf(" %s %s %s\n", method`5Bmethnum`5D,
X zipinfo_time(&crec.last_mod_file_date, &crec.last_mod_file_time),
X filename);
X
X/*--------------------------------------------------------------------------
V-
X Skip the extra field and/or the file comment, if any (the filename has
X already been printed, above). That finishes up this file entry...
X --------------------------------------------------------------------------
V-*/
X
X SKIP_(crec.extra_field_length)
X SKIP_(crec.file_comment_length)
X
X return error_in_archive;
X
X`7D /* end function short_info() */
X
X
X
X
X
X/*****************************/
X/* Function zipinfo_time() */
X/*****************************/
X
Xchar *zipinfo_time(datez, timez)
X UWORD *datez, *timez;
X`7B
X UWORD yr, mo, dy, hh, mm, ss;
X static char d_t_str`5B21`5D;
X static char *month`5B12`5D = `7B"Jan", "Feb", "Mar", "Apr", "May", "Ju
Vn",
X "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"`7D;
X
X
X
X/*--------------------------------------------------------------------------
V-
X Convert the file-modification date and time info to a string of the form
V`20
X "23 Feb 1990 17:15:00" or "23-Feb-91 17:15," depending on value of lflag
V.
X --------------------------------------------------------------------------
V-*/
X
X yr = ((*datez >> 9) & 0x7f) + 80; /* dissect date */
X mo = ((*datez >> 5) & 0x0f) - 1;
X dy = *datez & 0x1f;
X
X hh = (*timez >> 11) & 0x1f; /* dissect time */
X mm = (*timez >> 5) & 0x3f;
X ss = (*timez & 0x1f) * 2;
X
X if ((lflag >= 3) && (lflag <= 5))
X sprintf(d_t_str, "%2u-%s-%u %02u:%02u", dy, month`5Bmo`5D, yr, hh, m
Vm);
X else if (lflag > 9) /* verbose listing format */
X sprintf(d_t_str, "%u %s %u %02u:%02u:%02u", dy, month`5Bmo`5D, yr+19
V00,
X hh, mm, ss);
X
X return d_t_str;
X
X`7D /* end function zipinfo_time() */
X
X
X
X
X
X/********************************/
X/* Function open_input_file() */
X/********************************/
X
Xint open_input_file() /* return 1 if open failed */
X`7B
X /*
X * open the zipfile for reading and in BINARY mode to prevent cr/lf
X * translation, which would corrupt the bitstreams
X */
X
X#ifdef VMS
X zipfd = open(zipfn, O_RDONLY, 0, "ctx=stm");
X#else /* !VMS */
X#ifdef UNIX
X zipfd = open(zipfn, O_RDONLY);
X#else /* !UNIX */
X#ifdef MACOS
X zipfd = open(zipfn, 0);
X#else /* !MACOS */
X zipfd = open(zipfn, O_RDONLY `7C O_BINARY);
X#endif /* ?MACOS */
X#endif /* ?UNIX */
X#endif /* ?VMS */
X if (zipfd < 1) `7B
X fprintf(stderr, "error: can't open zipfile `5B %s `5D\n", zipfn);
X return 1;
X `7D
X return 0;
X
X`7D /* end function open_input_file() */
X
X
X
X
X
X/************************/
X/* Function readbuf() */
X/************************/
X
Xint readbuf(buf, size) /* return number of bytes read into buf */
X char *buf;
X register unsigned size;
X`7B
X register int count;
X int n;
X
X n = size;
X while (size) `7B
X if (incnt == 0) `7B
X if ((incnt = read(zipfd, inbuf, INBUFSIZ)) <= 0)
X return (n-size);
X /* buffer ALWAYS starts on a block boundary: */
X cur_zipfile_bufstart += INBUFSIZ;
X inptr = inbuf;
X `7D
X count = MIN(size, (unsigned)incnt);
X memcpy(buf, inptr, count);
X buf += count;
X inptr += count;
X incnt -= count;
X size -= count;
X `7D
X return n;
X
X`7D /* end function readbuf() */
$ CALL UNPACK [.UNZIP50]ZIPINFO.C;1 471242085
$ create 'f'
X
XZIPINFO(1) USER COMMANDS ZIPINFO(1)
X
XNAME
X zipinfo - list detailed information about a ZIP archive file
X
XSYNOPSIS
X zipinfo `5B-1smlvht`5D file`5B.zip`5D `5Bfilespec ...`5D
X
XARGUMENTS
X file`5B.zip`5D Path of the ZIP archive. The suffix `60`60.zip'' is
X applied if the file specified does not exist.
X Note that self-extracting ZIP files are sup-
X ported; just specify the `60`60.exe'' suffix your-
X self.
X
X `5Bfilespec`5D An optional list of archive members to be pro-
X cessed. Expressions may be used to match multi-
X ple members; be sure to quote expressions that
X contain characters interpreted by the Unix
X shell. See PATTERN MATCHING (below) for more
X details.
X
XOPTIONS
X -1 list filenames only, one per line (useful for pipes)
X -s list zipfile info in short Unix `60`60ls -l'' format:
X default
X -m list zipfile info in medium Unix `60`60ls -l'' format
X -l list zipfile info in long Unix `60`60ls -l'' format
X -v list zipfile information in verbose, multi-page format
X -h list header line
X -t list totals for files listed or for all files
X
XPATTERN MATCHING
X All archive members are listed unless a filespec is provided
X to specify a subset of the archive members. The filespec is
X similar to an egrep expression, and may contain:
X
X * matches a sequence of 0 or more characters
X ? matches exactly 1 character
X \nnn matches the character having octal code nnn
X `5B...`5D matches any single character found inside the brack-
X ets; ranges are specified by a beginning character, a
X hyphen, and an ending character. If an exclamation
X point or a carat (`60!' or `60`5E') follows the left
X bracket, then the range of characters matched is com-
X plemented with respect to the ASCII character set
X (that is, anything except the characters inside the
X brackets is considered a match).
X
XDESCRIPTION
X ZipInfo lists technical information about a ZIP archive,
X including information file access permissions, encryption
X status, type of compression, version and operating system of
X compressing program, and the like. The default option is to
X
XInfo-ZIP Last change: 19 Aug 92 (v1.0) 1
X
XZIPINFO(1) USER COMMANDS ZIPINFO(1)
X
X list files in the following format:
X
X-rw-rwl--- 1.5 unx 2802 t- defX 11-Aug-91 13:48 perms.2660
X
X The last three fields are clearly the modification date and
X time of the file, and its name. The case of the filename is
X respected; thus files which come from MS-DOS PKZIP are
X always capitalized. If the file was zipped with a stored
X directory name, that is also displayed as part of the
X filename.
X
X The second and third fields indicate that the file was
X zipped under Unix with version 1.5 of Zip (a beta version).
X Since it comes from Unix, the file permissions at the begin-
X ning of the line are printed in Unix format. The
X uncompressed file-size (2802 in this example) is the fourth
X field.
X
X The fifth field consists of two characters, either of which
X may take on several values. The first character may be
X either `60t' or `60b', indicating that Zip believes the file to
X be text or binary, respectively; but if the file is
X encrypted, ZipInfo notes this fact by capitalizing the char-
X acter (`60T' or `60B'). The second character may also take on
X four values, depending on whether there is an extended local
X header and/or an `60`60extra field'' associated with the file
X (explained in PKWare's APPNOTE.TXT). If neither exists, the
X character will be a hyphen (`60-'); if there is an extended
X local header but no extra field, `60l'; if the reverse, `60x';
X and if both exist, `60X'. Thus the file in this example is
X (apparently) a text file, is not encrypted, and has neither
X an extra field nor an extended local header associated with
X it. The example below, on the other hand, is an encrypted
X binary file with an extra field:
X
XRWD,R,R 0.9 vms 168 Bx shrk 9-Aug-91 19:15 perms.0644
X
X Extra fields are used by PKWare for authenticity verifica-
X tion(?) and possibly other purposes, and by Info-ZIP's Zip
X 1.6 and later to store OS/2, Macintosh and VMS file attri-
X butes. This example presumably falls into the latter class,
X then. Note that the file attributes are listed in VMS for-
X mat. Other possibilities for the host operating system
X include OS/2 with High Performance File System (HPFS), DOS
X or OS/2 with File Allocation Table (FAT) file system, and
X Macintosh, denoted as follows:
X
Xarc,,rw, 1.0 os2 5358 Tl i4:3 4-Dec-91 11:33 longfilename.hpfs
Xarc,hid,rdo,sys dos 4096 b- i4:2 14-Jul-91 12:58 EA DATA. SF
X--w------- 1.0 mac 17357 bx i8:2 4-May-92 04:02 unzip.macr
X
XInfo-ZIP Last change: 19 Aug 92 (v1.0) 2
X
XZIPINFO(1) USER COMMANDS ZIPINFO(1)
X
X File attributes in the first two cases are indicated in a
X DOS-like format, where the file may or may not have its
X archive bit set; may be hidden or not; may be read-write or
X read-only; and may be a system file or not. If the attri-
X butes are too long, the version number of the encoding
X software is omitted. (The information is still available in
X the verbose listing, however.) Interpretation of Macintosh
X file attributes needs some work yet.
X
X Finally, the sixth field indicates the compression method
X and possible sub-method used. There are six methods known
X at present: storing (no compression), reducing, shrinking,
X imploding, tokenizing, and deflating. In addition, there
X are four levels of reducing (1 through 4); four types of
X imploding (4K or 8K sliding dictionary, and 2 or 3 Shannon-
X Fano trees); and three levels of deflating (fast, normal,
X maximum compression). ZipInfo represents these methods and
X their sub-methods as follows: `60`60stor''; `60`60re:1,'' `60`60re:2,'
V'
X etc.; `60`60shrk''; `60`60i4:2,'' `60`60i8:3,'' etc.; `60`60tokn''
V; and
X `60`60defF,'' `60`60defN,'' and `60`60defX.''
X
X The medium and long listings are almost identical to the
X short format except that they add information on the file's
X compression. The medium format indicates the file's
X compression factor as a percentage:
X
X-rw-rwl--- 1.5 unx 2802 t- 81% defX 11-Aug-91 13:48 perms.2660
X
X In this example, the file has been compressed by more than a
X factor of five; the compressed data are only 19% of the ori-
X ginal size. The long format gives the compressed file's
X size in bytes, instead:
X
X-rw-rwl--- 1.5 unx 2802 t- 538 defX 11-Aug-91 13:48 perms.2660
X
X In addition to individual file information, a default zip-
X file listing also includes header and trailer lines:
X
XArchive: OS2.zip 5453 bytes 5 files
X,,rw, 1.0 os2 730 b- i4:3 26-Jun-92 23:40 Contents
X,,rw, 1.0 os2 3710 b- i4:3 26-Jun-92 23:33 makefile.os2
X,,rw, 1.0 os2 8753 b- i8:3 26-Jun-92 15:29 os2unzip.c
X,,rw, 1.0 os2 98 b- stor 21-Aug-91 15:34 unzip.def
X,,rw, 1.0 os2 95 b- stor 21-Aug-91 17:51 zipinfo.def
X5 files, 13386 bytes uncompressed, 4951 bytes compressed: 63%
X
X The header line gives the name of the archive, its total
X size, and the total number of files; the trailer gives the
X number of files listed, their total uncompressed size, and
X their total compressed size (not including any of Zip's
X internal overhead). If, however, one or more filespecs are
X provided, the header and trailer lines are not listed. This
X
XInfo-ZIP Last change: 19 Aug 92 (v1.0) 3
X
XZIPINFO(1) USER COMMANDS ZIPINFO(1)
X
X behavior is also similar to that of Unix's `60`60ls -l''; it may
X be overridden by specifying the -h and -t options expli-
X citly. In such a case the listing format must also be
X specified explicitly, since -h or -t (or both) in the
X absence of other options implies that ONLY the header or
X trailer line (or both) is listed. See the EXAMPLES section
X below for a semi-intelligible translation of this nonsense.
X
X The verbose listing is self-explanatory. It also lists file
X comments and the zipfile comment, if any, and the number of
X bytes of OS/2 extended attributes stored. Note that the
X latter number will in general NOT match the number given by
X OS/2's `60`60dir'' command; OS/2 always reports the number of
X bytes required in 16-bit format, whereas ZipInfo always
X reports the 32-bit storage.
X
XENVIRONMENT OPTIONS
X Modifying ZipInfo's default behavior via options placed in
X an environment variable can be a bit complicated to explain,
X due to ZipInfo's attempts to handle various defaults in an
X intuitive, yet Unix-like, manner. Nevertheless, there is
X some underlying logic. In brief, there are three `60`60priority
X levels'' of options: the default options; environment
X options, which can override or add to the defaults; and
X explicit options given by the user, which can override or
X add to either of the above.
X
X The default listing format, as noted above, corresponds
X roughly to the "zipinfo -hst" command (except when indivi-
X dual zipfile members are specified). A user who prefers the
X long-listing format (-l) can make use of the ZIPINFO
X environment variable to change this default:
X
X setenv ZIPINFO -l Unix C shell
X
X ZIPINFO=-l; export ZIPINFO Unix Bourne shell
X
X set ZIPINFO=-l OS/2 or MS-DOS
X
X define ZIPINFO_OPTS "-l" VMS (quotes for LOWERCASE)
X
X If, in addition, the user dislikes the trailer line,
X ZipInfo's concept of `60`60negative options'' may be used to
X override the default inclusion of the line. This is accom-
X plished by preceding the undesired option with one or more
X minuses: e.g., `60`60-l-t'' or `60`60--tl'', in this example. The
X first hyphen is the regular switch character, but the one
X before the `60t' is a minus sign. The dual use of hyphens may
X seem a little awkward, but it's reasonably intuitive
X nonetheless: simply ignore the first hyphen and go from
X there. It is also consistent with the behavior of the Unix
X command nice(1).
X
XInfo-ZIP Last change: 19 Aug 92 (v1.0) 4
X
XZIPINFO(1) USER COMMANDS ZIPINFO(1)
X
XEXAMPLES
X To get a basic, short-format listing of the complete con-
X tents of a ZIP archive `60`60storage.zip,'' with both header and
X totals lines, use only the archive name as an argument to
X zipinfo:
X
X zipinfo storage
X
X To produce a basic, long-format listing (not verbose),
X including header and totals lines, use -l:
X
X zipinfo -l storage
X
X To list the complete contents of the archive without header
X and totals lines, either negate the -h and -t options or
X else specify the contents explicitly:
X
X zipinfo --h-t storage
X
X zipinfo storage \*
X
X (where the backslash is required only if the shell would
X otherwise expand the `60*' wildcard, as in Unix when globbing
X is turned on--double quotes around the asterisk would have
X worked as well). To turn off the totals line by default,
X use the environment variable (C shell is assumed here):
X
X setenv ZIPINFO --t
X
X zipinfo storage
X
X To get the full, short-format listing of the first example
X again, given that the environment variable is set as in the
X previous example, it is necessary to specify the -s option
X explicitly, since the -t option by itself implies that ONLY
X the footer line is to be printed:
X
X setenv ZIPINFO --t
X
X zipinfo -t storage `5Bonly totals line`5D
X
X zipinfo -st storage `5Bfull listing`5D
X
X The -s option, like -m and -l, includes headers and footers
X by default, unless otherwise specified. Since the environ-
X ment variable specified no footers and that has a higher
X precedence than the default behavior of -s, an explicit -t
X option was necessary to produce the full listing. Nothing
X was indicated about the header, however, so the -s option
X was sufficient. Note that both the -h and -t options, when
X used by themselves or with each other, override any default
X listing of member files; only the header and/or footer are
X
XInfo-ZIP Last change: 19 Aug 92 (v1.0) 5
X
XZIPINFO(1) USER COMMANDS ZIPINFO(1)
X
X printed. This behavior will be more useful when ZipInfo
X accepts wildcards for the zipfile name; one may then summar-
X ize the contents of all zipfiles with a single command.
X
X To list information on a single file within the archive, in
X medium format, specify the filename explicitly:
X
X zipinfo -m storage unshrink.c
X
X The specification of any member file, as in this example,
X will override the default header and totals lines; only the
X single line of information about the requested file will be
X printed. This is intuitively what one would expect when
X requesting information about a single file. For multiple
X files, it is often useful to know the total compressed and
X uncompressed size; in such cases -t may be specified expli-
X citly:
X
X zipinfo -mt storage "*.`5Bch`5D Mak\*
X
X Finally, to get maximal information about the ZIP archive,
X use the verbose option. It is usually wise to pipe the out-
X put into a filter such as more(1):
X
X zipinfo -v storage `7C more
X
XTIPS
X The author finds it convenient to set up an alias `60`60ii'' for
X ZipInfo on systems which allow aliases, or else to set up a
X batch file `60`60ii.bat'' or to rename the executable to
X `60`60ii.exe'' on systems such as MS-DOS which have no provision
X for aliases. The `60`60ii'' usage parallels the common `60`60ll''
X alias for long listings in Unix, and the similarity between
X the outputs of the two commands was intentional.
X
XSEE ALSO
X funzip(1), unzip(1), zip(1), zipcloak(1), zipnote(1),
X zipsplit(1)
X
XAUTHOR
X Greg Roelofs (also known as Cave Newt). ZipInfo is partly
X based on S. H. Smith's unzip and contains pattern-matching
X code by J. Kercheval, but mostly it was written from
X scratch. The OS/2 extra-field code is by Kai Uwe Rommel.
X
XInfo-ZIP Last change: 19 Aug 92 (v1.0) 6
X
$ CALL UNPACK [.UNZIP50]ZIPINFO.DOC;1 1196901134
$ create 'f'
XSubject: Info-ZIP Rules (No Feelthy ...)
X
XIn discussions with Mark Adler (and others), I realized we in the Info-ZIP
Xcommunity have been evolving a set of rules that maybe oughtta be
Xdocumented, archived, and available to potential contributors.
X
XThe following appear to meet our requirements. Please observe these
Xrules when submitting source, context diff, or other files to Info-ZIP.
X
X
X1 - "NO FEELTHY TABS"
X
X Many editors and EMail systems either have no capability to use and/or
Xdisplay the Ascii 9 TAB character correctly, or there are variable tab
Xcolumns, or other horrors. (My MaxEMail offline email editor for one.)
X
X Bottom line: use spaces, not tabs.
X
X Related utility programs: Unix and MS-DOS : expand, unexpand.
XMS-DOS: Buerg's TABS; Toad Hall's TOADSOFT. And some editors have the
Xconversion built-in.
X
X Exceptions: The Unix Makefile. Some makes seem to require "real"
Xtabs. If they need it there, fine. So don't fiddle the Makefile.
X
X
X2 - "NO FEELTHY CRS"
X
X All source, documentation and other text files shall have Unix style
Xline endings (LF, Ctrl-J), NOT the MS-DOS CR/LF or Mac CR line endings.
X
X Reason: "Real programmers" in any environment can convert back and
Xforth between Unix and DOS/Mac style. MS-DOS Turbo C can use Unix or
XMS-DOS line endings (donno about Mac Turbo C). Buerg's LIST file display
Xutility for MS-DOS can use Unix or MS-DOS line endings. Unix utilities
Xlike diff and patch die a horrible death (or produce horrible output) if
Xtarget files have CRs.
X
X Related utilities: flip for Unix and MS-DOS.
X
X Exceptions: The zip archive README and zip.doc files, which Mark
XAdler wants to leave in MSDOS for "unsophisticated" (read brain-dead) DOS
Xusers. Also the batch files to compile under MS-DOS (where it requires
Xthe CRs.)
X
X
X3 - "NO FEELTHY HEX"
X
X We'll use uuencode/uudecode compatible converters to move binary files
Xthrough our 7-bit EMail systems (xxencode on special request). Uuencoded
Xfiles, if larger than +/- 32Kb, will be broken into smaller (< 32Kb)
Xfiles (via David M. Read's UUXFER utility).
X
X Reason: to prevent sounds of gagging mailers from resounding
Xthroughout the land. To be standard with the Uunet side of the world.
XTo be relatively efficient in the binary->Ascii conversion. (Yeah, yeah,
XI know, there's better conversions out there. But not as widely known.)
X
X Related utilities: uuencode, uudecode, uuxfer20, quux, others.
XJust make sure they don't leave imbedded or trailing spaces. (E.g., they
Xshould use the "`60" character in place of Ascii 32.) Else mailers are
Xprone to truncate or whatever. Message me if you need one.
X
X
X4 - "NO FEELTHY TARS"
X
X unzip will be available in .tar.Z (16-bit compressed tar), .arc (as
Xavailable on Unix, SIMTEL20, PKPAK, etc., *NOT* the latest proprietary
XSEA version), or .zip format. (If requesting we EMail you source,
Xspecify desired format.) zip source will only be distributed in .zip
Xarchives.
X
X Reason: For unzip development or use, anyone should have one of the
Xspecified dearchivers. For zip development or use, you shouldn't be
Xmessing with zip unless you can already unzip. (This protects the
Xinnocent.)
X
X Related utilities: Unix: arc, tar, compress, zip, unzip. MS-DOS:
XPKUNPAK, PKUNZIP, PAK, TAR, COMPRESS, and others.
X
X Exceptions: EMail me directly for any special circumstances or
Xrequirements (zoo, BinHex, 12-bit compress, etc.)
X
X
X5 - "NO FEELTHY FANCY_NAMES"
X
X Assume the worst: that someone on a brain-damaged DOS system has to
Xwork with everything your magic fingers produced. Keep the file names
Xunimaginative and within MS-DOS limits (e.g., ordinary A..Z, 1..9, "-$_!"
Xtype characters, in the "filename.typ" 8-dot-3 format). MacUsers, giggle
Xall you want, but no spaces.
X
X Reason: Compatibility with different file systems. MS-DOS is the
Xmost limited.
X
X
X6 - "NO FEELTHY GRAPHICS"
X
X Do all your editing in a plain-text ASCII editor. No WordPerfect,
XWord, WordStar document mode, or other word processor files, thenkyew.
XNo desktop publishing. No TIFFs, no GIFs, no imbedded pictures or dancing
Xladies (too bad, Cave Newt).
X
X Reason: Compatibility with different consoles. My old XT clone is
Xthe most limited!
X
X Related utilities: vi, ed, EDLIN, Turbo C editor, UED, EASYEDIT, cat
Xor "COPY CON UNZIP.C"; various word processor -> text conversion utilities.
X
X
X7 - "NO FEELTHY DASHES"
X
X Don't have repeated dashes (starting at the left margin) in any
Xsource code or patches you try to EMail to me or Info-ZIP. Instead, be
Xsure to always prefix them with a space, asterisk, comment, whatever, like
Xthis:
X#--------------- or
X/*-------------- or even
X --------------- (just indented)
X
X Reason: Most "undigestify" utilities (that break down newsletters
Xinto their separate messages) use that "--------" (starting at the left
Xmargin) as the symbol that it's hit the end of a message. I'd rather not
Xhave your C source file broken up into a dozen separate untitled messages
Xin my mail system, thank you. I'll be going through the unzip source Any
XDay Now and changing anything like that by indenting, prefixing, whatever.
X
X
X*-------------------*
X
XDavid Kirschbaum
XInfo-ZIP Coordinator
$ CALL UNPACK [.UNZIP50]ZIPRULES.;1 486630870
$ create 'f'
XEncoding of file DISK$USER99:`5BBERRYMAN`5DZIP19.ZIP;1
X`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`
V7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E
X!@@QIM5R$T5TEIUN9(3VBU$TR%USA9TWZ%DT1$#KZ%DT;DCajm@C@5ag@DP@@Dah@efag@HB@@*4
VICAb
X@Dal@8IJc@B<??af@LA@@Hah@Hb@mPPM1ABA5DGan@H@TKM@ATc@m@@SAICYX/>fJN%Eb@D.b@0@
V@<BP
XX,f6d2%Ff(9BY/MVRMEA@V54TVA@@Eah@VU#K5@PRMQB@VYTPBE@@PAc@0@GHT@@4b@EXAc@mBPD
VF4&2
XQDF4&2A@I5$F@X%QHMT@@0B@T.@@4/#,@,mBPCPCPBGaf@I5DH@XEQAQU@@0Bag@T",@@NdJ/=8?
V>J9,
X)<6#?;+Db@I5$G@XETR=T@@mE@KU%UXf"XA8?A1@Tc@Laj@$TSW@mURQDUA@@E@00EEPPORA@8,)
V<6#?
X;+D4&UM=668@Q/3_EC:%:B((BG7"44Sd06mfSdQZ06,_mT4C42#,XC%(VRJ;8<+__C)$-S3gIN6"
V<M3<
X&7<Ff')?%AZEWd5Q#+#465N/I64R&@))MZ/I?@WM=9;N;LZ6'96g6g2f&M4<3O;,BJ0,235,';*X
VZIdf
Xd_UIfU$*Mf+@6C=VS%N2+(P4d:VGHSGEdX<Q?P$V)#:R".-!UA.25-"eUUC>LZH*:1+II$';-:Jm
V42f8
X7;f&.H;)(KAW/'7XeCAU><ES!)69d3@5+MgZ6JSH*A8E$%;VGdP2R_X<7PM;Y%54Z$<E@/84O!mE
V9PA)
XQ*%/Q:T4Q':47>.<)J)?.!AKN&C4JGm,3E35DmX76FPTS)6TJ_eXLQT)JFX?Y6@Hm@.V:BA>_G&(
VCK")
XWd'BGM;JAJ#4CCUgS/4,JT/LG?WR-C!H:ITT_/$W@M<W?RS4+=;gB0GU%&TN#&*mR5XM6C@#:%V&
V*Z4g
XM>Y_(<UJ5'3ITmeg*UG+ZgBIU9ZQQFB@#-PVQ.N&>=!::V$GQO3)@*27d51M!'fSMR)F)d#dUJ2%
V4?%O
XdH:<<JEXUf:gH;2-ffL13@W_TJRV#8,4:*.OCQ:_CTE2&F=FVZP*m9Q&&1OT1=2-G!8(4QT,B<)"
VI!P&
X&+%VW'R/Qd,I"*%df>fP_f181@1B2*54%FG6JR%GM=(5%?UTM)8Y"*-.A;J)1MD8:A+4@2E1DM$A
VL1L5
XH/Z2,QIM;VQL@ET052dE4BP'Z5)1$)"P:d_893%BUV;FmBXHH*WMHEAY)XPQX-##,S'7U+2=ZZQ:
V.&.@
X;E@G%7O969/AKA>A!G$TYPNKHR%e8N>!H0YTW_U=ADmgC@JDgR(/GBY.B&Q1fPDY-*_2fI_+I%D>
VeTG%
XgV2_I>$2I+D%'Zff+!4_TM#@EXKK#A%J5-OI)FU_,6W5$8Q4!D"d_mZf@GOWIAdL?JP#PU+7m2I4
V"<>X
XYOX>XC,C$)UR/Z#FSe+SS'BXS3MX"5-BPU>?'M8I6f0'(;g$1"JG?(<mNGDZVVLHBP38ZEPUGf="
VTTN,
XA@B'gmD2/J-GN9I>XR#JHFfN2YSL3Q@HPKNBU$A>U4V'ODO)RG$TIN$6gTPdXX7HD;327I7H#f'J
V:G:2
XRRIBTETSRSLK2JNL'L.@@'NZZA?$e=(Y2,4I3UP(_29X*;+.<45$G,6.U/K$VKQG7';f!mIM/&Z8
VKG"*
X5e'X*!*O/DSO>,-M&,$HUJe'dXfCJ_IL0BTHX,GL$=eR"&1U'STW6I#,:G7Q<F-MSO*VFDR'I4"9
V$ZY%
X6T<DC?<D65B1ACA.KO"V$*-Q)WHMf(U)JZ2Fg48JMW%E:2,UZ4RSO9$&0D&""X?R)=O<PdAT+gJ#
VP.IF
Xm3RJ6g/d5PU64H)@%-(G6T=*Q-M?,@/_Q'T7dEfFV*=E1"d+I0E)AR(GWCOS;!dfO<&K6#Y*D3OK
VSH)W
XgA0B3A@-+CR++1<G7#FG*C?8me*M$/7!&Q:.R/LL,<G(C&+9I)FLR4-"LT8Q51gI;3-#$F9&D,gF
V*8IU
XQJ?R-+Q.H/=+HO9G:YV&-)!>49768,2;I8*Ddd)7M9!K)*W2XI&XOC+08*CCLf)-VfY(2Y0HWDFW
VOBS@
XISR/,5XB1dm02$+(Z#?X7O-53:U;>II?GYf7IVGR3_C+;@A?C9K?RU#3ODJ+=J5_L=N!!7+T_Sg9
V1/S2
XdM>12BJ?R$4E8__1E4_6Ym?P@M8K6d>HL4WS/gR4mG<A,3U=+GJ=WTPWf9%WR7:5fAfU6TCL2Uf"
VS"@H
X@;=3MR4"1:We2?2YK)SWTPW;J)EE*>g<1"3NY1dVmJ9"d.9:/e;%%7>O7B/"*!VD2L@5Fd:U5.9S
V7f5M
X4<23W(S/X+PJ;W2/e'*N6KGd8!9%UAW9mY(*D=<7?:>*W3O0U'mO;/?192=17)/M?47UN?,7T>62
V7g>7
XU?G@5RCP@Ec@H@m@mIQFeU,5PS5c@ZGb@M@@/@DFf!IWZ/DFf!IWZ.LVRMEA@V54TVA@@Eah@VU#
VK5@P
XRMQB@VYTPBE@@PAag@GHT@@4b@EXAc@mBPDF4&2QDF4&2A@I5$F@X%QHMT@@0Baf@P/#,@,mBPCP
VBP4F
Xaf@I5DH@XEQAQU@@0Bag@T",@@*SUOS;R?J)NU=L-K=+Db@I5$G@XETR=T@@mEb@#JKe"XA8?A1@
VTc@L
Xaj@$TSW@mURQDUA@@Eag@PORA@(NU=L-K=+D4dU-=6D9@!?>>+X@D,+S76&"D=K!@JBZPU*WQ*TI
V84A*
X2d,f#U75N26K!@"?;7L6Nd;B'Nf_:V%D9fFOO3dO3$#'T@SmEW/8*3O:M8Q:-K%+$gO7-C4&m4)8
V+$m*
X7,J(-F_M4Y=!6fm2:mUV3W%NOJ',3*mM<0Z00;$>#PIGW<D-RHUI</9CWWmBL+Z;ER8%>mPdOZ=+
VFK*U
X7LVV0:GKP_$@H@97B$m"'m@+MRX9%?1"OAO?E'NH9=K+<:dY@>SQ1*5eGL1G.QYHEU)7Y,Y#TU9Y
V;_fV
X1OJ<AgP/B"R0@mRH8/2g:K327L@37+DACm-+5-R(BUL_"?mC@F<CTJ@ZUTHL_NTgeI0"B!$=%_>3
V%3"B
XBGe@f8'8W<#SF:f&*L<X0>3"B,Y@X06dZ5&;*T;CXEE0CV$5&RJE#%L=8I0R>fRL!:,BX+FdRfZ#
V.#7*
X=T"./;"/G6QfNLd9&fd9;mMR;FL-6*dd!FI2Hmm367DE!0DVKQW3EVCQI0Bm',FmMN+(G)QP3N<N
VZ$68
X1N(DJMVG:6R(7#DG@-+L@6-FB($%%A+-5W"%V(#d4d:d9AI)6KOB>R$U%+D1,)RUC<;+E0/<mYNE
VUI"Y
X6T>/f+8=8!mS74G0mNUL%BJ:/UFHDH-ULBB<*/S?5XH%0VEO>@395YD@#5e87%NKXMm"+d;fRBB*
V!E)E
XOB?2!'A_8&3?8U'_=YH)!MPZV&me(YVC'TCKWe3U'-8-/?2K>SF<RX:@_JS@N<D6,A:@LM7>)Rd7
VfAY7
XFP;1(JmEDWm&X)P?:gW#EgCmC_Ne,ON:B7Og$L<WFQ23@3JZ-&dAM9Se#PUX._FI&83,?34?@e8e
V8T:$
XF%"$Xe4%J?D6LO<T8$)1'K(+H,9AK?FG6NUU!Z81Of:)-"GWCZ4-19(!UX@@H@GW:UZ'OT!T0)_;
V9'0(
X@A+Z7W$0DKV%Vg>E'%VGX7H1:ff7CF1RG:FM+%.7P7)#MZN=_@DR3XH>WQm6BQ4;&G@!O8:WQZ9A
VXR3H
X,"W_@+&1X!KFE):m)VTOL0XFPT)ZZ/C&H&%GQF%(CFCI<M,:*161HPSge/KfRZ7EU7ECL':(G2,'
V??7,
X&3'e$%fQfN)D)-%8>7!L(S(fUCQ/XTQ9-BY+LH+FYL>7RR#@#KeI1+7?/g4D?_CP-4@DPAc@B@XW
VZT$A
XOB,OIDIb@49A@@PD@0K@!QWX2%6K-E6Z%YVZ,U&K3QWRMEA@V54TVA@@Eah@VU#K5@PRMQB@VYTP
VBE@@
XPAag@GHT@@4b@EXAc@mBPDF4&2QDF4&2A@I5$F@X%QHMT@@0Baf@m/#,@,mBPCPB0NGaf@I5DH@X
VEQAQ
XU@@0Bag@T",@@":>.XIZ?JI*;;"%(=+Db@I5$G@XETR=T@@mEb@#JKe"XA8?A1@Tc@Laj@$TSW@m
VURQD
XUA@@Eag@PORA@H*;;"%(=+D4Z%Q=&60@11_&;S1)Vg(Q*A-5'6PJR%E::2DE$VB/m*TTHXJV$F#R
VLfR;
XS?<E;8@U1d-S#GRN'?7=36'/3eI>P6g6VgAC7J*0U<CWSO&K$LL+eCYG_(mKIU8Re"L+"#1=@I@H
Vmm?$
XK7!IG+VK0P<&Q_XD(TSD81Z658FAg13J,(?V<YC>Q52KH_<O='%0Y_ERB?6"G.K81$P@B?:,I7GG
V8OA=
X/G=#Fg%V4;1(9!3VN=N4_:$$I?HJMNAV&DM38>T2FGg%NeOHLLP&'C3&FHK8%;UFZGQ?8mO=1O_C
V-4gQ
X-72VW0*!E_9;+0@<W<C#D43&MP#5Q:K4P.PYeT2KT/g*P,N+(VY%Q9'QBBP$B0F66"LIE*,"1HGV
V3%*W
X@90R=LP0Rd!'Z)'Z0'gJ_J,9:0JEMeUdQB%G)D+U*)3K%T+BP_d<@Z3e(:Id,Fd-7*A0@V>N!:,+
V$AmY
X_L6,!2!A*TY(G:'7%S-ZPSgROC;H&,*J%!L#WHH#J6K<Z.(TK:@&VA,Id78Zf1IG#JXN.g+K,#?!
V%V#F
X4g.;&(1#>9XEAff#dLM:=C1HA6ZB7TZf)_Pf*m-e:-&*Z<6Y22(Bf5"Me5698__JeA6P@@d_%;Ee
V+K=/
XJ;TAS')dRZG:'S+F(;+GO0I%FG:G"Q*-6O5,X4%1.RW'Q2g1'Z<"3/S9,&!V4T9<?DX=MT/*!(!Z
Vd1=;
XGd7=f'7m4mUW.??A*9F01:dFW9)_G9QT&M%FZ>WAEm0@2;"2=JVAC/-+G)C0e7AV>*H-W2ZBM6f(
V5'D:
X/AP-4@DPAc@B@(I!X#A.CUe6"Ab@PKb@0C@PQ+@H0.@DFf!IWZ/LGf:%Fe.0&d+%TSQ@mUMM%U@@
VPAag
X@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@G@@PAVaf@(@D!A-)eD!A-)e@PRM%A@VYDRCE@@,ah@;H
VK@K(
X@e@L@$Vc@$TSm@mUDEDUA@@Kag@PI2B@(*+(0Id2+$*."B',I/Rb@$TSg@mUPI5SA@@Vag@0I"Em
V?GDC
XPAb@0aj@PRMfA@VIEQTE@@Tah@=HE@m*."B',I/RPfM.$B@BCCDf/G&"7A/B.,d:'TIPmJ-SA1S/
V)TEW
XH.HI/<Xm1..XE6dC3&<4I/+d;-B!J"JX4Y2AW!GQR,PC*5#7_9,BM0"g6$,7IU%"TRe('EE":FO#
V:_M<
XJ)C<U"e=QgA@5RCP@Ec@H@@OE"MF1(YAI&Jb@m8Ab@O@@/@DFf!IWZ/LGf:%Fe.@'e*%TSQ@mUMM
V%U@@
XPAag@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@G@@PAVaf@(@D!A-)eD!A-)e@PRM)A@VYDRCE@@,a
Vh@;H
XK@K(@e@L@T<Ac@PRMAB@VQTPTE@@,ah@%HK@m"E)7-,I/RJV$g72&<JA@@PRM9A@VA%TOE@@XAag
V@'HV
X@>_PL@Ec@Caj@I54E@88Z@HmURQDUA@@Eag@PORA@(XQ:fKd2+D4H$A+mb0m!/''"f4AZ0W@O)"8
VIGCO
XHJg(+K3E(,J-Y"8S/+:e"GedEBM?P2W2_N.MASR7@82S3V->P2.4='!E@('#V8A_E5Q-/IAU94(&
VO29B
XY""M6WYN:F;YdEVFC"6K9FNCdBPIJG#:@)B6P/)=_R1!B+;F:XGY@Mdd;*O:5Bd:eT_Eg1X3TF?0
V;dNU
XXT2HL&8H2O,1"!LV<#ZG?9PKZ:.<UHV?G1S@TKM@ATc@m@@eUH6X0>"/<7Sc@FBc@A@;BPX4E&e)
V=2e4
X)WZ09&K,96ZI5TD@XUSSYE@@Tah@XUM.TC@I5DI@X%QAITb@Eag@emPA@0A@@TmEaf@J@QXPdJGQ
VXPdJ
XG@$TSY@mUF!4PA@@Kag@0N2B0BJ@G@C@MDc@I5DH@XEQAQU@@0Bag@T",@@":E.92&<JI*W8&Kd2
V+Db@
XI5$G@XETR=T@@mEag@e"XA8?A1@Tc@Laj@$TSW@mURQDUA@@Eag@PORA@H*W8&Kd2+D,XB19X2I3
V$"IY
XC4K_.R,$DKJSm4U%YA9%_I)B!UZY&S*1C!Y)E@"AHA2L_P,RO'<SJ1eJFH+XmZL%$e1%$BPF:AD#
V$m)V
XQIXJXI9WLLAA@TKM@ATc@PHF@H@B@mV!X#1!DZRNPAb@eHc@D@,K@!QWX2%6K3Q'g)A7e.0&d+%T
VSQ@m
XUMM%U@@PAag@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@G@@PAVaf@(@D!A-)eD!A-)e@PRM%A@VYD
VRCE@
X@,ah@;HK@K(@e@L@<Pc@$TSm@mUDEDUA@@Kag@PI2B@(Z//)Kd2+$*=>&.,I/Rb@$TSg@mUPI5SA
V@@Va
Xg@0I"Em?GDCPAb@0aj@PRMfA@VIEQTE@@Tah@=HE@m*=>&.,I/R0"ID'#I'LSJ&$MP/<9J1RR,(L
VARWU
X&ETeA9$YIPX&V&9$Z<PXVZAmX@RmL3GD+43I?$RL'"A2JF(&SIIWeI)@$!g@1HIX*UTB&BVR>ECS
VP@@5
XRCP@Ec@H@PNK*DFQ9BET+Oc@AJb@L@0.@DFf!IWZ/P7X.L&Y'%TSQ@mUMM%U@@PAag@mU58RM@$T
VS$@m
XUFE$PA@@Tag@0ABE@@M@@PAVaf@(@D!A-)eD!A-)e@PRM%A@VYDRCE@@,ah@;HK@K(@4@4@$af@$
VTSm@
XmUDEDUA@@Kag@PI2B@8(A<N-:W+$#F0;4*_-Rb@$TSg@mUPI5SA@@Vag@0I"Em?GDCPAb@0aj@PR
VMfA@
XVA6X@HmTDQU@@PAag@4#T@@NZ@/S+>5JA#I&XmKSXXT0PL@KXQ,T-J&RRN&L3K9eJM%T1#gfLDGC
V238C
XNDFXH"@<OHmTmIH_mQ&2@CFZmALX,Q@Y30(mQA4e@KLP$@KL4R(II!$;H'LS"V9&(M@7,J&(<L@X
VX=BH
XH/F0,_FeVOmT4W+_@GX/=6#)mL1@3L8FC"mTX#/N:-+.9)O.2@BV@ALCWGe>3_1@C&7EPA8X"OAH
V_A@3
XS@F8XV3"A.NdgPTDOe@QF$@e>K%@S3HCe@E3@X,@L09%J@,LNCE3@Z.H8)V(;.HX@FA9"e5*XB19
VXe1U
X7eLT_BAZ2W:*KBD+MAEC6E9d*EWe")'Z1LLPAXZ@3&1Ab@5RCP@Ec@H@m3gIQFWOd18_&Cb@G,b@
VF@0.
X@HVZ4M'K#%TSQ@mUMM%U@@PAag@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@1@@PAVaf@(@D!A-)eD
V!A-)
Xe@PRM%A@VYDRCE@@,ah@;HK@K(@DC<B$Cc@$TSm@mUDEDUA@@Kag@PI2B@(,I;Z+K=+$2&,+-.4/
VRb@$
XTSg@mUPI5SA@@Vag@0I"Em?GDCPAb@0aj@PRMfA@VIEQTE@@Tah@=HE@m2&,+-.4/RP-Z-?edd#D
V>75_
XE8e'!R%mN@H@d744G263$8:43We-=8GS';Z/1C%H(D'PQ*C$4JJ))?-__;"GDTRN135XM9!D9
V"EK6
XG_;.@8Yd7+'8(29KUYS&VKBNJT,;O<C;4G?3g"_IV=V1KS2%*H1%Y#'F+RD/Zm8W#3%UQ"?)L.(_
VgY3e
X1OG'%'/L*'8M1Y"dVHEWVNd&LWDW$HNYR)BL*HQAFHKgd9mg"K$*YYUUY%E",J1DUeQ-LQTW"A,T
V$U$$
XfWVRSe.@#L+(*N+.)&(ED4TI#D#!8F!W6S($IYU5*,QM5RQ=T0,*24:E1JI>"H/,X"H.RD'CV%"7
VK1m2
X&$U@V'&!5mmHL+XegS"L)'()XVYRVZ&LIBDGWK2*I9+(,FeKOQ$B9Y.*LM+N"WZLM<,N6)@A1Y#%
V=(1)
X$51YE2$A=:-=3:5;Yd7S,-PLJ+.Z0X1(%+)?Xg6UCBf%gTWS3B>S,(P.Pe'T1JO,(2&f+!#6%FX4
+-+-+-+-+-+-+-+- END OF PART 15 +-+-+-+-+-+-+-+-
Technical Details
Message-ID:
<8009686@MVB.SAIC.COM>Path:
arc1-ca.pugleaf.net!sparky!uunet!elroy.jpl.nasa.gov!ames!agate!dog.ee.lbl.gov!network.ucsd.edu!mvb.saic.com!vmsnet-sourcesShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!elroy.jpl.nasa.gov!ames!agate!dog.ee.lbl.gov!network.ucsd.edu!mvb.saic.com!vmsnet-sources From: goathunter@wkuvx1.bitnet Newsgroups: vmsnet.sources Subject: Zip v1.9 & UnZip v5.0, part 15/22 Message-ID: <8009686@MVB.SAIC.COM> Date: Tue, 01 Sep 1992 22:53:17 GMT Organization: Western Kentucky University, Bowling Green, KY Lines: 1212 Approved: Mark.Berryman@Mvb.Saic.Com