----------------------------------------------------------------- compr23.txt - last modified Sun Apr 28 23:40:58 1991 CST ----------------------------------------------------------------- Universal archive utilities package v2.3 - Mark B. Foster See the 'utility history' section of this file for changes from v2.2. ----------------------------------------------------------------- The utilities were assembled using A86 v3.22. Special thanks to Pat Myrto, Mike Arst, Patrick Lee, Seth Chaiklin, and Eric Isaacson. Feel free to contact me with comments or problems, and especially with news of updated or new compression programs. I receive email regularly at the following BBS: Programmers Resource: (206) 823-1917 I occasionally log on to the following services as well: ExecRegion BBS: (312) 267-4749 GEnie: M.FOSTER3 I finally junked my Compu$erve account and, as a result, am now without an Internet mail address. If you know of a UNIX site in the Chicago area that has space for another user, please contact me. If you have renamed any of my utilities (or the supported compression programs), let me know and I will assemble custom versions for you as time permits. Although these utilities have been extensively tested and all known bugs eradicated, I explicitly disclaim any warranty whatsoever for them. Any and all risk of using them is yours alone. ----------------------------------------------------------------- Introduction. ----------------------------------------------------------------- This archive contains four extremely fast utilities that simplify the routine chores of extracting from, freshening, deleting from, and viewing file lists in compressed files: xt - extractor for zip, lzh, lzs, pak, arc, arj, dwc, md, zoo, uue, sh, tar, Z, sit, pit archives fr - freshener for zip, lzh, lzs, pak, arc, arj, zoo, dwc archives dl - deleter for zip, lzh, lzs, pak, arc, arj, zoo, dwc archives vw - file lister for zip, lzh, lzs, pak, arc, arj, dwc, md, zoo, tar, sit, pit archives They first identify the kind of archive(s) being operated on (by checking the internal archive format), and then invoke the appropriate compression programs to perform the desired task. ----------------------------------------------------------------- Program syntax. ----------------------------------------------------------------- xt usage: xt [-o -u] archive [filename{s}] -o overwrite existing output files -u unlink (delete) archive(s) after file extraction ----------------------------------------------------------------- fr usage: fr [-c -s] archive [filename{s}] -c set pak v2.x to use Crush for true-pak archives -s set pkzip v1.10 to use Shrink set pak to use Squash for arc-format archives ----------------------------------------------------------------- dl usage: dl archive filename[s] ----------------------------------------------------------------- vw usage: vw archive [filename{s}] ----------------------------------------------------------------- General notes. ----------------------------------------------------------------- Archive extensions need not be specified. Wildcards and pathnames are supported. For example, 'xt *' is equivalent to 'xt *.*', 'xt foo*' to 'xt foo*.*', and so on. The '/' switch character may be used instead of '-'. The compression programs must reside on the path or in the same directory as the utilities. The utilities return a nonzero errorlevel upon encountering an error during execution. A cryptic usage message may be viewed by entering the utility name with no parameters at the DOS prompt. The version ID and usage message may be viewed with the command 'type n' (where 'n' is the utility name) at the DOS prompt. ----------------------------------------------------------------- Specific notes. ----------------------------------------------------------------- Each of the tables in this section lists the programs supported by the utilities, and the switches passed to them. A dot ('.') indicates no arguments. Blanks denote that an option is not available. ----------------------------------------------------------------- Zip-format notes. Pkzip, written by Phil Katz, is the de facto BBS archiver of choice in the U.S. It uses two basic compression algorithms: a Huffman/ Sliding Window with 2-3 Shanno-Fano trees and a 4-8k sliding dictionary (Implode), and variable length 9-13 bit Lempel-Ziv 77 compression with an 8k buffer and partial clearing (Shrink, apparantly a variant of the older Squash). Xt and vw look first for pkunzip.exe, then for pak.exe if pkunzip is not found; fr and dl look first for pkzip.exe, then for pak.exe. For pkzip.exe v1.10, fr defaults to Implode; the 's' switch sets pkzip to use Shrink instead. +---------+------+----+-------+------+-------+----+----+ | pgm | vers | xt | xt -o | fr | fr -s | dl | vw | +=========+======+====+=======+======+=======+====+====+ | pkzip | 1.10 | | | -f | -fes | -d | | +---------+------+----+-------+------+-------+----+----+ | pkunzip | 1.10 | . | -o | | | | -v | +---------+------+----+-------+------+-------+----+----+ | pak | 2.51 | e | e /wa | f | | d | v | +---------+------+----+-------+------+-------+----+----+ ----------------------------------------------------------------- Pak notes. Pak, written by Gus Smedstad, is without doubt the most versatile archiving program available. Not only does it employ highly efficient compression routines of its own, but it handles zip archives and many older compression formats (see below) as well. Pak's generally most efficient compression algorithm is Distill, a Huffman/Sliding Window scheme with an 8k buffer, similar in some respects to pkzip's Implode. Pak's unique contribution in Lempel-Ziv-Welch (LZW) algorithms is Crush, which uses variable length 2-13 bit LZW compression with run-length encoding and an 8k buffer. Crush is usually more efficient than either Squash or Crunch. For most text and executable files, the files created by pak are slightly larger than those created by pkzip. However, for many other file types, e.g., Windows bitmaps and MSC function libraries, pak archives are quite a bit smaller. C and Pascal object files utilizing all the compression algorithms employed by pak are available in a programmers toolkit. With true-pak archives, fr sets pak.exe to use Distill by default. The command 'fr -c' sets pak to use Crush instead. Pak requires about 195k of memory. When 195k is not available, the utilities abort with a status message. +-------+------+----+-------+----+-------+----+----+ | pgm | vers | xt | xt -o | fr | fr -c | dl | vw | +=======+======+====+=======+====+=======+====+====+ | pak | 2.51 | e | e /wa | f | f /cr | d | v | +-------+------+----+-------+----+-------+----+----+ ----------------------------------------------------------------- Arc-format notes. Largely superseded by the compression methods employed by pak, pkzip, and lha (lharc), pre-Crush 'arc' formats are still sometimes encountered. Pkarc and pkxarc, older programs written but no longer supported by Phil Katz, handle them extremely fast. These older formats include: Pack - replacement of repeated byte values by codes, a method known as run-length encoding (RLE) Squeeze - Huffman encoding crunch - fixed length 12 bit Lempel-Ziv-Welch (LZW) compression with or without RLE, with a 4k buffer Crunch - variable length 9-12 bit LZW compression with RLE, with a 4k buffer Squash - variable-length 9-13 bit LZW compression without RLE, with an 8k buffer. Xt and vw look first for pkxarc.exe, then for pak.exe if pkxarc is not found; fr and dl look first for pkarc.exe, then for pak.exe. If pak is used for arc-format archives, fr sets pak to use Crunch by default. The command 'fr -s' sets pak to use Squash instead. Pkpak.exe and pkunpak.exe, essentially the same programs as pkarc and pkxarc, can be substituted for the latter programs simply by renaming them pkarc.exe and pkxarc.exe respectively. +---------+------+----+-------+------+-------+----+----+ | pgm | vers | xt | xt -o | fr | fr -s | dl | vw | +=========+======+====+=======+======+=======+====+====+ | pkarc | 3.6 | | | f | | d | | +---------+------+----+-------+------+-------+----+----+ | pkxarc | 3.6 | -e | -r | | | |-vv | +---------+------+----+-------+------+-------+----+----+ | pak | 2.51 | -e |-e /wa | f /c | f /s | d | v | +---------+------+----+-------+------+-------+----+----+ ----------------------------------------------------------------- Lha (lharc) and larc notes. Though relatively slow, lha (lharc) has enjoyed considerable popularity for generally producing the smallest archives of any compression program - until the advent of arj, that is (see below). Lha uses a new, static Huffman digital TRIE Lempel-Ziv 77 (LZ 77) encoding method with an 8k window. Its predecessor lharc uses an LZ 77 adaptive Huffman compression algorithm with a 4k buffer. Lha and lharc were written by Haruyasu Yoshizaki. The C source code for his algorithms is available. Larc, one of lharc's less efficient predecessors, employs LZ 77 compression with adaptive arithmetic encoding. Larc was written by Haruhito Okumura. For lzs archives xt, dl, and vw look first for larc.exe, then for lha.exe if larc is not found. Because larc and lha use incompatible compression methods, fr looks only for larc. +-------+------+------+-------+----+----+----+ | pgm | vers | xt | xt -o | fr | dl | vw | +=======+======+======+=======+====+====+====+ | lha | 2.12 | e /c | e /cm | f | d | l | +-------+------+------+-------+----+----+----+ | larc | 3.3 | e /c |e /c/o | f | d | l | +-------+------+------+-------+----+----+----+ ----------------------------------------------------------------- Arj notes. Arj is a relatively recent entry from Robert K. Jung that makes the smallest archives, generally speaking, of any major DOS compression program. The latest versions are also fairly fast. Three of its compression methods use a Lempel-Ziv 77 (LZ 77) Sliding Window algorithm with static Huffman encoding. A fourth method uses a LZ 77 Sliding Window with pointer/length unary encoding. ANSI C source for some of the algorithms is included with the distribution package. ANSI C source for arj.exe itself is available from the author. +-------+------+------+---------+----+----+----+ | pgm | vers | xt | xt -o | fr | dl | vw | +=======+======+======+=========+====+====+====+ | arj | 2.00 | e -c | e -c -y | f | d | l | +-------+------+------+---------+----+----+----+ ----------------------------------------------------------------- Dwc and mdcd notes. DWC, by Dean Cooper, is an older but very fast archiving program that uses variable length 9-12 bit Lempel-Ziv-Welch (LZW) compression with run-length encoding (RLE) and a 4k buffer (a variant of Crunch). MDCD, by Michael Davenport, is also older and employs variable length 9-13 bit LZW compression with RLE (a variant of Squash). The Pascal and ASM source code is available. +-------+------+----+-------+----+----+----+ | pgm | vers | xt | xt -o | fr | dl | vw | +=======+======+====+=======+====+====+====+ | dwc |a5.01 | e | ew | fz | d | v | +-------+------+----+-------+----+----+----+ | mdcd | 1.0 | d | r | | | l | +-------+------+----+-------+----+----+----+ ----------------------------------------------------------------- Zoo and looz notes. Although the archives created by zoo are not particularly small by today's standards, zoo is the most versatile utility for transferring files between DOS and UNIX and, indeed, is second only to pak in overall utility if archive size is not primary. It uses a variable length 9-12 bit Lempel-Ziv-Welch algorithm with run-length-encoding and a 4k buffer (a type of Crunch). Zoo and zoo archive extractor and lister looz were written by Rahul Dhesi. The C source code for zoo is available. Xt and vw look first for looz.exe, then for zoo.exe if looz is not found. Fr first directs zoo to freshen an archive, then to pack it. Dl first directs zoo to delete from an archive, then to pack it. Fr and dl require one or more filename arguments. The utilities also operate upon bak archives created by zoo. +-------+------+----+-------+------+----+----+ | pgm | vers | xt | xt -o | fr | dl | vw | +=======+======+====+=======+======+====+====+ | zoo | 2.01 | x | xSO | auP: | DP | l | +-------+------+----+-------+------+----+----+ | looz | 2.1 | x | | | | l | +-------+------+----+-------+------+----+----+ ----------------------------------------------------------------- Uudecode and shar notes. These utilities are DOS ports of their UNIX namesakes. Uudecode and its companion utility uuencode are used to transfer binary files via electronic mail. Shar is sometimes used on UNIX systems for concatenating source code and other text files for electronic mail transfer as well. Uuencode maps ASCII characters onto a standard character set for electronic transmission. The basic scheme is to break groups of 3 eight bit characters (24 bits) into 4 six bit characters and then add a space to each six bit character. Shar does not compress but rather concatenates files. Xt should work fine with standard sh archives, as long as any prepended text is less than 256 characters in length. This limit might be removed upon a showing of interest. When extracting from a sh archive, shar automatically overwrites files of the same name if they exist in the target directory. Thus, the command 'xt foo.sh bar.doc' will overwrite bar.doc if it exists in the current directory. +----------+------------------------+----+ | pgm | version | xt | +==========+========================+====+ | uudecode | Richard Marks - v4.13 | . | +----------+------------------------+----+ | shar | unknown - 09/14/87 | -u | +----------+------------------------+----+ ----------------------------------------------------------------- Tar and compress notes. These utilities are DOS ports of their UNIX namesakes. Often used in tandem to maximally compress source code on UNIX, they are also sometimes used for transferring files between DOS and UNIX. The C source code for compress and for both tar versions is available. Tar does not compress but rather concatenates files. Compress is unique among Lempel-Ziv-Welch (LZW) archiving programs in that it offers variable length 9-16 bit compression with RLE, rather than the more common 9-12 bit (Crunch) or 9-13 bit (Squash) LZW routines. It is extremely efficient with ASCII text files. Compress requires about 450k of memory. If less than 450k is available, xt aborts with a status message. Compress cannot uncompress Z archives nondestructively. Thus, 'xt foo.z' automatically overwrites 'foo' if it exists in the current directory, as well as unlinking 'foo.z'. +----------+------------------------+------+-----+-----+ | pgm | version | xt |xt -o| vw | +==========+========================+======+=====+=====+ | tar | Gnu v1.09 | xfvk | xfv | tfv | +----------+------------------------+------+-----+-----+ | tar | Eric Roskos - 10/24/88 | xfvk | xfv | tfv | +----------+------------------------+------+-----+-----+ | compress | Pat Myrto - 06/19/88 | -dv | | | +----------+------------------------+------+-----+-----+ ----------------------------------------------------------------- Unstufit and unpackit notes. These utilities are useful for transferring sit (stuffit) and pit (packit) archives from the Macintosh O/S to DOS. Though not very efficient, Stuffit is the most popular Macintosh compression program, presumably for lack of real competition. It uses three different compression methods: run-length encoding, a fixed length 14 bit Lempel-Ziv-Welch algorithm with an 18k buffer, and Huffman encoding. For sit archives, xt and vw search first for unstufit.exe, then for unsit.exe if unstufit is not found. +----------+------------------------+-----+----+ | pgm | version | xt | vw | +==========+========================+=====+====+ | unsit | Brian Uechi - v2.3 | e | v | +----------+------------------------+-----+----+ | unstufit | Scott McGinnis - v1.0 | /de | v | +----------+------------------------+-----+----+ | unpackit | Scott McGinnis - v1.0 | /de | v | +----------+------------------------+-----+----+ ----------------------------------------------------------------- Utility history. ----------------------------------------------------------------- compr23 05-01-91 Updated utilities for lha v2.12. Updated utilities for arj v2.00. Corrected vw usage message. Minor expansion/correction of documentation. ----------------------------------------------------------------- compr22 01-23-91 Added support for arj v0.20. Added support for Gnu tar v1.09. Updated utilities for uuencode/uudecode v4.13. Deleted mn.com and ma.com (mr) from distribution; just wasn't happy with them. Corrected parsing of zip-format archives for processing by pak. Expanded documentation to be more informative and opinionated. ----------------------------------------------------------------- compr21 12-01-90 Updated utilities for pak v2.51. Abbreviated the mr help key list to one line. ----------------------------------------------------------------- compr20 05-30-90 Initial release of dl.com. Updated utilities for pkzip/unzip v1.10. Minor optimizations of fr.com. ----------------------------------------------------------------- compr19 01-20-90 Reversed arc-format pak and pkarc/xarc precedence. Reversed zoo and looz precedence. Reversed unsit and unstufit precedence. ----------------------------------------------------------------- compr18 01-01-90 Added support for unsit v2.3. Removed support for pkzip/unzip v0.92. Improved xt and vw tar archive parsing routine to reduce number of false hits. ----------------------------------------------------------------- compr17 12-14-89 Added support for uue (uuencode), sh (shar), tar, Z (compress), sit (stuffit), and pit (packit) archives. Added standard key choices at 'mr' prompt. Added pak bypass based on available memory. Corrected parameter error in xt. Corrected name of larc.exe in fr and an error in 'lharc and larc notes'. Renamed mr_n.com 'mn.com', and mr_a.com 'ma.com'. ----------------------------------------------------------------- compr16 08-26-89 Initial release of mr.com. Added support for larc v3.3. Concatenated usage message to version ID. Corrected parsing of lzh archives. Made fr pkzip defaults user-configurable. Changed fr arc-format pak default to Crunch. Merged fr switch letters and operation. Removed fr switch letter configurability. Reversed fr arc-format pak and pkarc/xarc precedence. Adjusted fr zoo and looz precedence. Added history section to dox. ----------------------------------------------------------------- compr15 08-12-89 Added support for pkzip/unzip v1.0x. Added support for all pre-Crunch arc formats. Changed fr pkzip default to Implode for v1.01. Made fr pak v2.x default user-configurable. Added fr 'S' switch. Made fr switch letters user-configurable. Adjusted fr arc-format pak and pkarc/xarc precedence. Optimized utilities for A86 v3.21 assembler. ----------------------------------------------------------------- compr14 08-02-89 Added support for pak v2.x. Removed support for pkpak/unpak and tau. Added version ID. Changed fr true-pak pak default to Distill for v2.x. Added fr 'C' switch. Adjusted fr zoo and looz precedence. ----------------------------------------------------------------- compr13 07-27-89 Modified error handling and display. Corrected parsing of Packed arc-format archives. ----------------------------------------------------------------- compr12 07-20-89 Added support for pkpak/unpak v3.61. Added fr 'c' and 's' switches. Changed fr pkzip v0.92 default to Reduce4. ----------------------------------------------------------------- compr11 07-11-89 Initial release of fr.com and vw.com. Fixed parsing of Squashed true-pak archives. Added archiver version and switch table to dox. ----------------------------------------------------------------- xt10 07-05-89 Initial release of xt.com. -----------------------------------------------------------------