<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Tue, 15 Jul 1986 01:32:11 GMT
From   : Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Subject: l-z-w crunch and uncrunch

Just to give you something to exercise your new uuencode and uudecode
programs on (see earlier messages for source and object, contact me
if they don't arrive soon), here are two VERY nice utilities for
CP/M.  They compress and expand files using the L-Z-W algorithm, and
typically achieve ratios of 50% or better (crunched/uncrunched) on
text, even WordStar text, which the usual sq/usq pair does fairly
poorly on due to use of high-bit-set ASCII (I suppose).  I do
not have the source for these.  It is available on RCP/M Royal Oak
at 313-759-6569.  I have used these successfully on a Kaypro 4-83,
an Apple running 56k Microsoft CP/M, and a NEC8401 laptop.  These
little programs are amazing.  I wish I had downloaded the source
myself.  If anyone has it, I'm sure a posting would be appreciated.
I apologize to the author for lack of acknowledgment, but the .doc
file included here is unaltered from that in the original .lbr.
 
Ross Alford
   ...mcnc!ecsvax!alford




     This  .LBR  file contains Revs 1.2 of CRUNCH  and  UNCRunch.  
These programs are 100% upward and downward compatible with prev-
ious releases.

     These  are data compression utilities. They  are  completely 
analogous to the popular SQueeze and UNSQUEEZE programs, but  use 
a  form of compression known as Lempel-Ziv [-Welch]  rather  than 
Huffman  encoding.  CRUNCH creates the compressed file  from  the 
original, while UNCR recreates the original from the  compressed.  
They  may be used on any type of file, but compression ratio  re-
sults vary according to data type.


Usage:  CRUNCH  [d:] <filename> [d:]

where  the  first  "d:"  is an optional  source  drive  spec  for 
<filename>  and the second "d:" is an optional destination  drive 
spec  for the resulting compressed file. If either "d:" is  omit-
ted,  the corresponding input or output will be to the  currently 
logged  drive. The output filename will be the same as the  input 
filename with the middle letter of the extension changed to  "Z". 
If a file with this name already exists, it will be  overwritten. 
If the extension of the original file was blank, the extension of 
the   resulting   file  will  be   "ZZZ".   Ambiguous   filenames 
("wildcards") ARE fully supported.

     Additionally,  the command line above can be followed  by  a 
date or other information inside a pair of square brackets.   For 
obvious reasons, this is difficult to show clearly on the command 
usage line, so hopefully this sentence will suffice.  The "stamp" 
information  is recorded in the header of the crunched  file  and 
reproduced  at the console when uncrunching. It has no effect  on 
the resulting uncrunched file.  The stamp may any typeable  char-
acters other than "]", and may be any length that will fit on the 
command line.  A practical limit of 40 characters will be  repro-
duced at the console when uncrunching.

The  cruncher  outputs a running display to the  console  of  the 
form:

nnnn/mmmm  pp%

where  "nnnn"  is #of input records read, "mmmm"  is  #of  output 
records  created,  and  pp%  is  the  current  compression  ratio  
nnnn/mmmm.   When complete, the final line additionally  contains 
the  input and output file sizes converted to "k".  These  values 
are kilobytes (recs/8) upward rounded to the next integral value.

This cruncher will flag the unusual situations where the  result-
ing  file  is larger than the original (ie  compression  ratio  > 
100%). When this occurs, the user will be prompted as to  whether 
he wants to keep the "crunched" file.







Usage:  UNCR  [d:] <filename> [d:]


where  the  first  "d:"  is an optional  source  drive  spec  for 
<filename>  and the second "d:" is an optional destination  drive 
spec for the resulting uncompressed file. If either "d:" is omit-
ted,  the corresponding input or output will be to the  currently 
logged  drive. The output filename will be automatically  created 
to be the same as the name of the file that was originally  comp-
ressed.  In general (ie assuming the compressed file has not been 
renamed)  this is the same as the input filename with the  middle 
letter  of  the extension converted from "Z"  to  an  appropriate 
character.   If a file with this name already exists, it will  be 
overwritten. Ambiguous filenames ("wildcards") ARE fully  suppor-
ted.  Note  however, that "*.*" will be  converted  to   "*.?Z?".  
This  is a convenience feature to allow quickly  uncrunching  all 
files with the appropriate extension.


   In operation, the uncruncher displays information to the  con-
sole analogous to the cruncher.  In this case the percent  figure 
is  the  "expansion" ratio (still output file size /  input  file 
size).
begin 600 CRUNCH.COM
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
7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH!
 
end
begin 600 UNCR.COM
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
7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
 
end
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>