DESCRIPTION
-----------
This archive contains a simple and readable ANSI C library implementing LZSS
encoding and decoding.  This implementation is not intended to be the best,
fastest, smallest, or any other performance related adjective.

Included in this library is a sample program demonstrating the usage of the
encode and decoding routines.  The library has been designed so that it may
be linked with different sliding window search routines which can speed up
the compression time at the cost of additional memory space.

More information on LZSS encoding may be found at:
http://www.datacompression.info/LZSS.shtml

FILES
-----
COPYING         - Rules for copying and distributing LGPL software
bitfile.c       - Library to allow bitwise reading and writing of files.
bitfile.h       - Header for bitfile library.
brute.c         - File implementing brute force search for strings matching the
                  strings to be encoded.
getopt.c        - LGPL version of getopt source from GNU project
getopt.h        - LGPL version of getopt headers from GNU project
hash.c          - File implementing hash table search for strings matching the
                  strings to be encoded.
LICENSE         - GNU Lesser General Public License
list.c          - File implementing linked list indexed search for strings
                  matching the strings to be encoded.
lzlocal.h       - Header file defining interface to be used by files
                  implementing searches for strings matching strings to be
                  encoded.
lzsample.c      - Sample program demonstrating usage of encode and decode
                  routines.
lzss.c          - LZSS encoding/decoding source
lzss.h          - LZSS encoding/decoding header files
Makefile        - makefile for this project (assumes gcc compiler and GNU make)
README          - this file

BUILDING
--------
To build these files with GNU make and gcc, simply enter "make" from the
command line.  Edit the variable FMOBJ to choose the version of find match
which will be used.

USAGE
-----
Usage: lzsample <options>

options:
  -c : Encode input file to output file.
  -d : Decode input file to output file.
  -i <filename> : Name of input file.
  -o <filename> : Name of output file.
  -h|?  : Print out command line options.

-c      Performs LZSS style compression on specified input file (see -i)
        writing the results to the specified output file (see -o).

-d      Decompresses the specified input file (see -i) writing the results to
        the specified output file (see -o).  Only files compressed by this
        program may be decompressed.

-i <filename>   The name of the input file.  There is no valid usage of this
                program without a specified input file.

-o <filename>   The name of the output file.  There is no valid usage of this
                program without a specified input file.

HISTORY
-------
11/24/03  - Initial release
12/10/03  - Changed handling of sliding window to better match standard
            algorithm description.
12/11/03  - Added version with linked lists to speed up encode.
12/12/03  - Added version with hash table to speed up encode.
02/21/04  - Major changes:
            * Separated encode/decode, match finding, and main.
            * Use bitfiles for reading/writing files
            * Use traditional LZSS encoding where the coded/uncoded bits
              precede the symbol they are associated with, rather than
              aggregating the bits.

TODO
----
- Replace sequential string search with a multi-level hash and tree searches.

AUTHOR
------
Michael Dipperstein (mdipper@cs.ucsb.edu)
