zlib 1.0 is a general purpose data compression library.
All the code is reentrant (thread safe).

The data format used by the zlib library is described in the
files zlib-3.2.doc, deflate-1.2.doc and gzip-4.2.doc, available
in ftp://ftp.uu.net/pub/archiving/zip/doc

All functions of the compression library are documented in the file
zlib.h. A usage example of the library is given in the file example.c
which also tests that the library is working correctly. Another
example is given in the file minigzip.c.

To compile all files and run the test program, just type: make test
(For MSDOS, use one of the special makefiles such as Makefile.msc;
for VMS, use Make_vms.com or descrip.mms.)
To install the zlib library (libz.a) in /usr/local/lib, type: make install
To install in a different directory, use for example:
  make install prefix=$HOME
This will install in $HOME/lib instead of /usr/local/lib.

Questions about zlib should be sent to <zlib@quest.jpl.nasa.gov>.

The changes made in version 1.0 are documented in the file ChangeLog.
The main changes since 0.95 are:
- allow compression level 0 (no compression)
- add deflateParams in zlib.h: allow dynamic change of compression level
  and compression strategy.
- test large buffers and deflateParams in example.c
- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2)
- fixes for 64-bit systems (needed for Alpha and Cray)
- always return Z_BUF_ERROR when deflate() has nothing to do
- fix some very unlikely race conditions.
- several minor fixes for better portability
- free in reverse order of allocation to help memory manager

Notes for some targets:

- For MSDOS, the small and medium models have been tested only with
  Microsoft C.  (This should work for Borland C also, but I don't have
  a Borland compiler to test with.) The small model was tested with
  Turbo C but only with reduced performance to avoid any far
  allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3

  MS Visual C++1.5 in far model gives:
     warning C4746: 'z_errmsg' : unsized array treated as '__far'
     warning C4746: 'inflate_mask' : unsized array treated as  '__far'
  Ignore those warnings.

- For 64-bit Iris, deflate.c must be compiled without any optimization.
  With -O, one libpng test fails. The test works in 32 bit mode (with the
  -32 compiler flag).


Copyright notice:

 (C) 1995-1996 Jean-loup Gailly and Mark Adler

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

  Jean-loup Gailly        Mark Adler
  gzip@prep.ai.mit.edu    madler@alumni.caltech.edu

If you use the zlib library in a product, we would appreciate *not*
receiving lengthy legal documents to sign. The sources are provided
for free but without warranty of any kind.  The library has been
entirely written by Jean-loup Gailly and Mark Adler; it does not
include third-party code.

If you redistribute modified sources, we would appreciate that you include
in the file ChangeLog history information documenting your changes.
