Home | History | Annotate | Line # | Download | only in doc
      1  1.1  cgd /*
      2  1.2  cgd  * $Hdr: compress.c,v 4.0 85/07/30 12:50:00 joe Release $
      3  1.2  cgd  * $Lg:	compress.c,v $
      4  1.1  cgd  * Revision 4.0  85/07/30  12:50:00  joe
      5  1.1  cgd  * Removed ferror() calls in output routine on every output except first.
      6  1.1  cgd  * Prepared for release to the world.
      7  1.1  cgd  *
      8  1.1  cgd  * Revision 3.6  85/07/04  01:22:21  joe
      9  1.1  cgd  * Remove much wasted storage by overlaying hash table with the tables
     10  1.1  cgd  * used by decompress: tab_suffix[1<<BITS], stack[8000].  Updated USERMEM
     11  1.1  cgd  * computations.  Fixed dump_tab() DEBUG routine.
     12  1.1  cgd  *
     13  1.1  cgd  * Revision 3.5  85/06/30  20:47:21  jaw
     14  1.1  cgd  * Change hash function to use exclusive-or.  Rip out hash cache.  These
     15  1.1  cgd  * speedups render the megamemory version defunct, for now.  Make decoder
     16  1.1  cgd  * stack global.  Parts of the RCS trunks 2.7, 2.6, and 2.1 no longer apply.
     17  1.1  cgd  *
     18  1.1  cgd  * Revision 3.4  85/06/27  12:00:00  ken
     19  1.1  cgd  * Get rid of all floating-point calculations by doing all compression ratio
     20  1.1  cgd  * calculations in fixed point.
     21  1.1  cgd  *
     22  1.1  cgd  * Revision 3.3  85/06/24  21:53:24  joe
     23  1.1  cgd  * Incorporate portability suggestion for M_XENIX.  Got rid of text on #else
     24  1.1  cgd  * and #endif lines.  Cleaned up #ifdefs for vax and interdata.
     25  1.1  cgd  *
     26  1.1  cgd  * Revision 3.2  85/06/06  21:53:24  jaw
     27  1.1  cgd  * Incorporate portability suggestions for Z8000, IBM PC/XT from mailing list.
     28  1.1  cgd  * Default to "quiet" output (no compression statistics).
     29  1.1  cgd  *
     30  1.1  cgd  * Revision 3.1  85/05/12  18:56:13  jaw
     31  1.1  cgd  * Integrate decompress() stack speedups (from early pointer mods by McKie).
     32  1.1  cgd  * Repair multi-file USERMEM gaffe.  Unify 'force' flags to mimic semantics
     33  1.1  cgd  * of SVR2 'pack'.  Streamline block-compress table clear logic.  Increase
     34  1.1  cgd  * output byte count by magic number size.
     35  1.1  cgd  *
     36  1.1  cgd  * Revision 3.0   84/11/27  11:50:00  petsd!joe
     37  1.1  cgd  * Set HSIZE depending on BITS.  Set BITS depending on USERMEM.  Unrolled
     38  1.1  cgd  * loops in clear routines.  Added "-C" flag for 2.0 compatibility.  Used
     39  1.1  cgd  * unsigned compares on Perkin-Elmer.  Fixed foreground check.
     40  1.1  cgd  *
     41  1.1  cgd  * Revision 2.7   84/11/16  19:35:39  ames!jaw
     42  1.1  cgd  * Cache common hash codes based on input statistics; this improves
     43  1.1  cgd  * performance for low-density raster images.  Pass on #ifdef bundle
     44  1.1  cgd  * from Turkowski.
     45  1.1  cgd  *
     46  1.1  cgd  * Revision 2.6   84/11/05  19:18:21  ames!jaw
     47  1.1  cgd  * Vary size of hash tables to reduce time for small files.
     48  1.1  cgd  * Tune PDP-11 hash function.
     49  1.1  cgd  *
     50  1.1  cgd  * Revision 2.5   84/10/30  20:15:14  ames!jaw
     51  1.1  cgd  * Junk chaining; replace with the simpler (and, on the VAX, faster)
     52  1.1  cgd  * double hashing, discussed within.  Make block compression standard.
     53  1.1  cgd  *
     54  1.1  cgd  * Revision 2.4   84/10/16  11:11:11  ames!jaw
     55  1.1  cgd  * Introduce adaptive reset for block compression, to boost the rate
     56  1.1  cgd  * another several percent.  (See mailing list notes.)
     57  1.1  cgd  *
     58  1.1  cgd  * Revision 2.3   84/09/22  22:00:00  petsd!joe
     59  1.1  cgd  * Implemented "-B" block compress.  Implemented REVERSE sorting of tab_next.
     60  1.1  cgd  * Bug fix for last bits.  Changed fwrite to putchar loop everywhere.
     61  1.1  cgd  *
     62  1.1  cgd  * Revision 2.2   84/09/18  14:12:21  ames!jaw
     63  1.1  cgd  * Fold in news changes, small machine typedef from thomas,
     64  1.1  cgd  * #ifdef interdata from joe.
     65  1.1  cgd  *
     66  1.1  cgd  * Revision 2.1   84/09/10  12:34:56  ames!jaw
     67  1.1  cgd  * Configured fast table lookup for 32-bit machines.
     68  1.1  cgd  * This cuts user time in half for b <= FBITS, and is useful for news batching
     69  1.1  cgd  * from VAX to PDP sites.  Also sped up decompress() [fwrite->putc] and
     70  1.1  cgd  * added signal catcher [plus beef in writeerr()] to delete effluvia.
     71  1.1  cgd  *
     72  1.1  cgd  * Revision 2.0   84/08/28  22:00:00  petsd!joe
     73  1.1  cgd  * Add check for foreground before prompting user.  Insert maxbits into
     74  1.1  cgd  * compressed file.  Force file being uncompressed to end with ".Z".
     75  1.1  cgd  * Added "-c" flag and "zcat".  Prepared for release.
     76  1.1  cgd  *
     77  1.1  cgd  * Revision 1.10  84/08/24  18:28:00  turtlevax!ken
     78  1.1  cgd  * Will only compress regular files (no directories), added a magic number
     79  1.1  cgd  * header (plus an undocumented -n flag to handle old files without headers),
     80  1.1  cgd  * added -f flag to force overwriting of possibly existing destination file,
     81  1.1  cgd  * otherwise the user is prompted for a response.  Will tack on a .Z to a
     82  1.1  cgd  * filename if it doesn't have one when decompressing.  Will only replace
     83  1.1  cgd  * file if it was compressed.
     84  1.1  cgd  *
     85  1.1  cgd  * Revision 1.9  84/08/16  17:28:00  turtlevax!ken
     86  1.1  cgd  * Removed scanargs(), getopt(), added .Z extension and unlimited number of
     87  1.1  cgd  * filenames to compress.  Flags may be clustered (-Ddvb12) or separated
     88  1.1  cgd  * (-D -d -v -b 12), or combination thereof.  Modes and other status is
     89  1.1  cgd  * copied with copystat().  -O bug for 4.2 seems to have disappeared with
     90  1.1  cgd  * 1.8.
     91  1.1  cgd  *
     92  1.1  cgd  * Revision 1.8  84/08/09  23:15:00  joe
     93  1.1  cgd  * Made it compatible with vax version, installed jim's fixes/enhancements
     94  1.1  cgd  *
     95  1.1  cgd  * Revision 1.6  84/08/01  22:08:00  joe
     96  1.1  cgd  * Sped up algorithm significantly by sorting the compress chain.
     97  1.1  cgd  *
     98  1.1  cgd  * Revision 1.5  84/07/13  13:11:00  srd
     99  1.1  cgd  * Added C version of vax asm routines.  Changed structure to arrays to
    100  1.1  cgd  * save much memory.  Do unsigned compares where possible (faster on
    101  1.1  cgd  * Perkin-Elmer)
    102  1.1  cgd  *
    103  1.1  cgd  * Revision 1.4  84/07/05  03:11:11  thomas
    104  1.1  cgd  * Clean up the code a little and lint it.  (Lint complains about all
    105  1.1  cgd  * the regs used in the asm, but I'm not going to "fix" this.)
    106  1.1  cgd  *
    107  1.1  cgd  * Revision 1.3  84/07/05  02:06:54  thomas
    108  1.1  cgd  * Minor fixes.
    109  1.1  cgd  *
    110  1.1  cgd  * Revision 1.2  84/07/05  00:27:27  thomas
    111  1.1  cgd  * Add variable bit length output.
    112  1.1  cgd  *
    113  1.1  cgd  */
    114  1.1  cgd 
    115  1.1  cgd static char rcs_ident[] =
    116  1.2  cgd 	"$Hdr: compress.c,v 4.0 85/07/30 12:50:00 joe Release $";
    117