% XXX The module has been extended (by Jeremy) but this documentation hasn't been updated yet

\section{Built-in Module \sectcode{zlib}}
\label{module-zlib}
\bimodindex{zlib}

For applications that require data compression, the functions in this
module allow compression and decompression, using the zlib library,
which is based on GNU zip.  The zlib library has its own home page at
\code{http://www.cdrom.com/pub/infozip/zlib/}.
Version 1.0.4 is the most recent version as of December, 1997; use a
later version if one is available.

The available functions in this module are:

\renewcommand{\indexsubitem}{(in module zlib)}
\begin{funcdesc}{adler32}{string\optional{\, value}}
   Computes a Adler-32 checksum of \var{string}.  (An Adler-32
   checksum is almost as reliable as a CRC32 but can be computed much
   more quickly.)  If \var{value} is present, it is used as the
   starting value of the checksum; otherwise, a fixed default value is
   used.  This allows computing a running checksum over the
   concatenation of several input strings.  The algorithm is not
   cryptographically strong, and should not be used for
   authentication or digital signatures.
\end{funcdesc}

\begin{funcdesc}{compress}{string\optional{\, level}}
Compresses the data in \var{string}, returning a string contained
compressed data.  \var{level} is an integer from 1 to 9 controlling
the level of compression; 1 is fastest and produces the least
compression, 9 is slowest and produces the most.  The default value is
6.  Raises the \code{zlib.error} exception if any error occurs.
\end{funcdesc}

\begin{funcdesc}{compressobj}{\optional{level}}
Returns a compression object, to be used for compressing data streams
  that won't fit into memory at once.  \var{level} is an integer from
  1 to 9 controlling the level of compression; 1 is fastest and
  produces the least compression, 9 is slowest and produces the most.
  The default value is 6.
\end{funcdesc}

\begin{funcdesc}{crc32}{string\optional{\, value}}
   Computes a CRC (Cyclic Redundancy Check) sum of \var{string}. If
   \var{value} is present, it is used as the starting value of the
   checksum; otherwise, a fixed default value is used.  This allows
   computing a running checksum over the concatenation of several
   input strings.  The algorithm is not cryptographically strong, and
   should not be used for authentication or digital signatures.
\end{funcdesc}

\begin{funcdesc}{decompress}{string}
Decompresses the data in \var{string}, returning a string containing
the uncompressed data.  Raises the \code{zlib.error} exception if any
error occurs.
\end{funcdesc}

\begin{funcdesc}{decompressobj}{\optional{wbits}}
Returns a compression object, to be used for decompressing data streams
that won't fit into memory at once.  The \var{wbits} parameter
controls the size of the window buffer; usually this can be left
alone.
\end{funcdesc}

Compression objects support the following methods:

\begin{funcdesc}{compress}{string}
Compress \var{string}, returning a string containing compressed data
for at least part of the data in \var{string}.  This data should be
concatenated to the output produced by any preceding calls to the
\code{compress()} method.  Some input may be kept in internal buffers
for later processing.
\end{funcdesc}

\begin{funcdesc}{flush}{}
All pending input is processed, and an string containing the remaining
compressed output is returned.  After calling \code{flush()}, the
\code{compress()} method cannot be called again; the only realistic
action is to delete the object.
\end{funcdesc}

Decompression objects support the following methods:

\begin{funcdesc}{decompress}{string}
Decompress \var{string}, returning a string containing the
uncompressed data corresponding to at least part of the data in
\var{string}.  This data should be concatenated to the output produced
by any preceding calls to the
\code{decompress()} method.  Some of the input data may be preserved
in internal buffers for later processing.
\end{funcdesc}

\begin{funcdesc}{flush}{}
All pending input is processed, and a string containing the remaining
uncompressed output is returned.  After calling \code{flush()}, the
\code{decompress()} method cannot be called again; the only realistic
action is to delete the object.
\end{funcdesc}

\begin{seealso}
\seemodule{gzip}{reading and writing \file{gzip}-format files}
\end{seealso}


