From: Frank Prindle
To: Keith Petersen, W8SDZ
Date: Friday, 19 December 1986 23:07-EST

UNCR231.C is a copy of what I consider to be a first release of
UNCR.C.  It is portable enough to compile and execute ok on an 8-bit
CP/M system, though about 2.5 times slower than the real UNCR 2.3.  So
it's major application is uncrunching on the host (UNIX, VMS, TOPS-20,
etc...)  systems.  I've tested it through all it's major paths on a
Sun-3, a VAX-11/780, and the C-128 CP/M.  Here is an abstract:

UNCR231.C is a C language implementation of the LZW decompression
algorithm utilized by Steven Greenberg's Z-80 CP/M program UNCR
Version 2.3 (from PD:<CPM.SQUSQ>CRUNCH23.LBR).  This program will
decompress (uncrunch) any file written with CRUNCH 2.x, although it
will not work with files written by CRUNCH 1.x (an earlier algorithm).
The only requirements placed on the C compiler used are that it
support a long type of at least 4 bytes (actually 21 bits will do),
and that it will read and write files in binary (no newline or ^Z
translation) using getc()/putc() when the files have been opened with
mode "rb"/"wb".  This is absolutely the case for UNIX on 32 bit
machines, but may require some coaxing on other systems, particularly
CP/M and MSDOS compilers.  Note that UNCR231.C is not recommended for
use on z-80 CP/M systems, since the real thing is over twice as fast;
rather it is meant to fill the gap and allow these "crunched" files to
be recovered on more powerful systems where speed is not an issue.
Usage is just:

$ uncr <filename> [<another filename> ...]

If your shell or O.S. does wildcard expansion, by all means use that.
Files not in "crunched" format will be skipped.  The decompressed
files will have the names of the original CP/M files (in lower case if
that is significant on your system).  This program follows in the
footsteps of usq.c and lar.c in attempting to provide a portable
implentation of a popular algorithm.

Sincerely,
Frank Prindle