<?xml version="1.0"?> <!-- -*- sgml -*- -->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"[

<!-- various strings, dates etc. common to all docs -->
<!ENTITY % common-ents SYSTEM "entities.xml"> %common-ents;
]>

<book lang="en" id="userman" xreflabel="bzip2 Manual">

 <bookinfo>
  <title>bzip2 and libbzip2, version &bz-version;</title>
  <subtitle>A program and library for data compression</subtitle>
  <copyright>
   <year>&bz-lifespan;</year>
   <holder>Julian Seward</holder>
  </copyright>
  <releaseinfo>Version &bz-version; of &bz-date;</releaseinfo>

  <authorgroup>
   <author>
    <firstname>Julian</firstname>
    <surname>Seward</surname>
    <affiliation>
     <orgname>&bz-url;</orgname>
    </affiliation>
   </author>
  </authorgroup>

  <legalnotice id="legal">

  <para>This program, <computeroutput>bzip2</computeroutput>, the
  associated library <computeroutput>libbzip2</computeroutput>, and
  all documentation, are copyright &copy; &bz-lifespan; Julian Seward.
  All rights reserved.</para>

  <para>Redistribution and use in source and binary forms, with
  or without modification, are permitted provided that the
  following conditions are met:</para>

  <itemizedlist mark='bullet'>

   <listitem><para>Redistributions of source code must retain the
   above copyright notice, this list of conditions and the
   following disclaimer.</para></listitem>

   <listitem><para>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.</para></listitem>

   <listitem><para>Altered source versions must be plainly marked
   as such, and must not be misrepresented as being the original
   software.</para></listitem>

   <listitem><para>The name of the author may not be used to
   endorse or promote products derived from this software without
   specific prior written permission.</para></listitem>

  </itemizedlist>

  <para>THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY
  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
  AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  THE POSSIBILITY OF SUCH DAMAGE.</para>

 <para>PATENTS: To the best of my knowledge,
 <computeroutput>bzip2</computeroutput> and
 <computeroutput>libbzip2</computeroutput> do not use any patented
 algorithms.  However, I do not have the resources to carry
 out a patent search.  Therefore I cannot give any guarantee of
 the above statement.
 </para>

</legalnotice>

</bookinfo>



<chapter id="intro" xreflabel="Introduction">
<title>Introduction</title>

<para><computeroutput>bzip2</computeroutput> compresses files
using the Burrows-Wheeler block-sorting text compression
algorithm, and Huffman coding.  Compression is generally
considerably better than that achieved by more conventional
LZ77/LZ78-based compressors, and approaches the performance of
the PPM family of statistical compressors.</para>

<para><computeroutput>bzip2</computeroutput> is built on top of
<computeroutput>libbzip2</computeroutput>, a flexible library for
handling compressed data in the
<computeroutput>bzip2</computeroutput> format.  This manual
describes both how to use the program and how to work with the
library interface.  Most of the manual is devoted to this
library, not the program, which is good news if your interest is
only in the program.</para>

<itemizedlist mark='bullet'>

 <listitem><para><xref linkend="using"/> describes how to use
 <computeroutput>bzip2</computeroutput>; this is the only part
 you need to read if you just want to know how to operate the
 program.</para></listitem>

 <listitem><para><xref linkend="libprog"/> describes the
 programming interfaces in detail, and</para></listitem>

 <listitem><para><xref linkend="misc"/> records some
 miscellaneous notes which I thought ought to be recorded
 somewhere.</para></listitem>

</itemizedlist>

</chapter>


<chapter id="using" xreflabel="How to use bzip2">
<title>How to use bzip2</title>

<para>This chapter contains a copy of the
<computeroutput>bzip2</computeroutput> man page, and nothing
else.</para>

<sect1 id="name" xreflabel="NAME">
<title>NAME</title>

<itemizedlist mark='bullet'>

 <listitem><para><computeroutput>bzip2</computeroutput>,
  <computeroutput>bunzip2</computeroutput> - a block-sorting file
  compressor, v&bz-version;</para></listitem>

 <listitem><para><computeroutput>bzcat</computeroutput> -
   decompresses files to stdout</para></listitem>

 <listitem><para><computeroutput>bzip2recover</computeroutput> -
   recovers data from damaged bzip2 files</para></listitem>

</itemizedlist>

</sect1>


<sect1 id="synopsis" xreflabel="SYNOPSIS">
<title>SYNOPSIS</title>

<itemizedlist mark='bullet'>

 <listitem><para><computeroutput>bzip2</computeroutput> [
  -cdfkqstvzVL123456789 ] [ filenames ...  ]</para></listitem>

 <listitem><para><computeroutput>bzip2</computeroutput> [
  -h | --help ]</para></listitem>

 <listitem><para><computeroutput>bunzip2</computeroutput> [
  -fkvsVL ] [ filenames ...  ]</para></listitem>

 <listitem><para><computeroutput>bunzip2</computeroutput> [
  -h | --help ]</para></listitem>

 <listitem><para><computeroutput>bzcat</computeroutput> [ -s ] [
  filenames ...  ]</para></listitem>

 <listitem><para><computeroutput>bzcat</computeroutput> [
  -h | --help ]</para></listitem>

 <listitem><para><computeroutput>bzip2recover</computeroutput>
  filename</para></listitem>

</itemizedlist>

</sect1>


<sect1 id="description" xreflabel="DESCRIPTION">
<title>DESCRIPTION</title>

<para><computeroutput>bzip2</computeroutput> compresses files
using the Burrows-Wheeler block sorting text compression
algorithm, and Huffman coding.  Compression is generally
considerably better than that achieved by more conventional
LZ77/LZ78-based compressors, and approaches the performance of
the PPM family of statistical compressors.</para>

<para>The command-line options are deliberately very similar to
those of GNU <computeroutput>gzip</computeroutput>, but they are
not identical.</para>

<para><computeroutput>bzip2</computeroutput> expects a list of
file names to accompany the command-line flags.  Each file is
replaced by a compressed version of itself, with the name
<computeroutput>original_name.bz2</computeroutput>.  Each
compressed file has the same modification date, permissions, and,
when possible, ownership as the corresponding original, so that
these properties can be correctly restored at decompression time.
File name handling is naive in the sense that there is no
mechanism for preserving original file names, permissions,
ownerships or dates in filesystems which lack these concepts, or
have serious file name length restrictions, such as
MS-DOS.</para>

<para><computeroutput>bzip2</computeroutput> and
<computeroutput>bunzip2</computeroutput> will by default not
overwrite existing files.  If you want this to happen, specify
the <computeroutput>-f</computeroutput> flag.</para>

<para>If no file names are specified,
<computeroutput>bzip2</computeroutput> compresses from standard
input to standard output.  In this case,
<computeroutput>bzip2</computeroutput> will decline to write
compressed output to a terminal, as this would be entirely
incomprehensible and therefore pointless.</para>

<para><computeroutput>bunzip2</computeroutput> (or
<computeroutput>bzip2 -d</computeroutput>) decompresses all
specified files.  Files which were not created by
<computeroutput>bzip2</computeroutput> will be detected and
ignored, and a warning issued.
<computeroutput>bzip2</computeroutput> attempts to guess the
filename for the decompressed file from that of the compressed
file as follows:</para>

<itemizedlist mark='bullet'>

 <listitem><para><computeroutput>filename.bz2 </computeroutput>
  becomes
  <computeroutput>filename</computeroutput></para></listitem>

 <listitem><para><computeroutput>filename.bz </computeroutput>
  becomes
  <computeroutput>filename</computeroutput></para></listitem>

 <listitem><para><computeroutput>filename.tbz2</computeroutput>
  becomes
  <computeroutput>filename.tar</computeroutput></para></listitem>

 <listitem><para><computeroutput>filename.tbz </computeroutput>
  becomes
  <computeroutput>filename.tar</computeroutput></para></listitem>

 <listitem><para><computeroutput>anyothername </computeroutput>
  becomes
  <computeroutput>anyothername.out</computeroutput></para></listitem>

</itemizedlist>

<para>If the file does not end in one of the recognised endings,
<computeroutput>.bz2</computeroutput>,
<computeroutput>.bz</computeroutput>,
<computeroutput>.tbz2</computeroutput> or
<computeroutput>.tbz</computeroutput>,
<computeroutput>bzip2</computeroutput> complains that it cannot
guess the name of the original file, and uses the original name
with <computeroutput>.out</computeroutput> appended.</para>

<para>As with compression, supplying no filenames causes
decompression from standard input to standard output.</para>

<para><computeroutput>bunzip2</computeroutput> will correctly
decompress a file which is the concatenation of two or more
compressed files.  The result is the concatenation of the
corresponding uncompressed files.  Integrity testing
(<computeroutput>-t</computeroutput>) of concatenated compressed
files is also supported.</para>

<para>You can also compress or decompress files to the standard
output by giving the <computeroutput>-c</computeroutput> flag.
Multiple files may be compressed and decompressed like this.  The
resulting outputs are fed sequentially to stdout.  Compression of
multiple files in this manner generates a stream containing
multiple compressed file representations.  Such a stream can be
decompressed correctly only by
<computeroutput>bzip2</computeroutput> version 0.9.0 or later.
Earlier versions of <computeroutput>bzip2</computeroutput> will
stop after decompressing the first file in the stream.</para>

<para><computeroutput>bzcat</computeroutput> (or
<computeroutput>bzip2 -dc</computeroutput>) decompresses all
specified files to the standard output.</para>

<para><computeroutput>bzip2</computeroutput> will read arguments
from the environment variables
<computeroutput>BZIP2</computeroutput> and
<computeroutput>BZIP</computeroutput>, in that order, and will
process them before any arguments read from the command line.
This gives a convenient way to supply default arguments.</para>

<para>Compression is always performed, even if the compressed
file is slightly larger than the original.  Files of less than
about one hundred bytes tend to get larger, since the compression
mechanism has a constant overhead in the region of 50 bytes.
Random data (including the output of most file compressors) is
coded at about 8.05 bits per byte, giving an expansion of around
0.5%.</para>

<para>As a self-check for your protection,
<computeroutput>bzip2</computeroutput> uses 32-bit CRCs to make
sure that the decompressed version of a file is identical to the
original.  This guards against corruption of the compressed data,
and against undetected bugs in
<computeroutput>bzip2</computeroutput> (hopefully very unlikely).
The chances of data corruption going undetected is microscopic,
about one chance in four billion for each file processed.  Be
aware, though, that the check occurs upon decompression, so it
can only tell you that something is wrong.  It can't help you
recover the original uncompressed data.  You can use
<computeroutput>bzip2recover</computeroutput> to try to recover
data from damaged files.</para>

<para>Return values: 0 for a normal exit, 1 for environmental
problems (file not found, invalid flags, I/O errors, etc.), 2
to indicate a corrupt compressed file, 3 for an internal
consistency error (eg, bug) which caused
<computeroutput>bzip2</computeroutput> to panic.</para>

</sect1>


<sect1 id="options" xreflabel="OPTIONS">
<title>OPTIONS</title>

<variablelist>

 <varlistentry>
 <term><computeroutput>-c --stdout</computeroutput></term>
 <listitem><para>Compress or decompress to standard
  output.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-d --decompress</computeroutput></term>
 <listitem><para>Force decompression.
  <computeroutput>bzip2</computeroutput>,
  <computeroutput>bunzip2</computeroutput> and
  <computeroutput>bzcat</computeroutput> are really the same
  program, and the decision about what actions to take is done on
  the basis of which name is used.  This flag overrides that
  mechanism, and forces bzip2 to decompress.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-z --compress</computeroutput></term>
 <listitem><para>The complement to
  <computeroutput>-d</computeroutput>: forces compression,
  regardless of the invokation name.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-t --test</computeroutput></term>
 <listitem><para>Check integrity of the specified file(s), but
  don't decompress them.  This really performs a trial
  decompression and throws away the result.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-f --force</computeroutput></term>
 <listitem><para>Force overwrite of output files.  Normally,
  <computeroutput>bzip2</computeroutput> will not overwrite
  existing output files.  Also forces
  <computeroutput>bzip2</computeroutput> to break hard links to
  files, which it otherwise wouldn't do.</para>
  <para><computeroutput>bzip2</computeroutput> normally declines
  to decompress files which don't have the correct magic header
  bytes. If forced (<computeroutput>-f</computeroutput>),
  however, it will pass such files through unmodified. This is
  how GNU <computeroutput>gzip</computeroutput> behaves.</para>
 </listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-k --keep</computeroutput></term>
 <listitem><para>Keep (don't delete) input files during
  compression or decompression.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-s --small</computeroutput></term>
 <listitem><para>Reduce memory usage, for compression,
  decompression and testing.  Files are decompressed and tested
  using a modified algorithm which only requires 2.5 bytes per
  block byte.  This means any file can be decompressed in 2300k
  of memory, albeit at about half the normal speed.</para>
  <para>During compression, <computeroutput>-s</computeroutput>
  selects a block size of 200k, which limits memory use to around
  the same figure, at the expense of your compression ratio.  In
  short, if your machine is low on memory (8 megabytes or less),
  use <computeroutput>-s</computeroutput> for everything.  See
  <xref linkend="memory-management"/> below.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-q --quiet</computeroutput></term>
 <listitem><para>Suppress non-essential warning messages.
  Messages pertaining to I/O errors and other critical events
  will not be suppressed.</para></listitem>
 </varlistentry>

 <varlistentry><term><computeroutput>-h --help</computeroutput></term>
 <listitem><para>Print a help message and exit.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-v --verbose</computeroutput></term>
 <listitem><para>Verbose mode -- show the compression ratio for
  each file processed.  Further
  <computeroutput>-v</computeroutput>'s increase the verbosity
  level, spewing out lots of information which is primarily of
  interest for diagnostic purposes.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-L --license -V --version</computeroutput></term>
 <listitem><para>Display the software version, license terms and
  conditions.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>-1</computeroutput> (or
 <computeroutput>--fast</computeroutput>) to
 <computeroutput>-9</computeroutput> (or
 <computeroutput>-best</computeroutput>)</term>
 <listitem><para>Set the block size to 100 k, 200 k ...  900 k
  when compressing.  Has no effect when decompressing.  See <xref
  linkend="memory-management" /> below.  The
  <computeroutput>--fast</computeroutput> and
  <computeroutput>--best</computeroutput> aliases are primarily
  for GNU <computeroutput>gzip</computeroutput> compatibility.
  In particular, <computeroutput>--fast</computeroutput> doesn't
  make things significantly faster.  And
  <computeroutput>--best</computeroutput> merely selects the
  default behaviour.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>--</computeroutput></term>
 <listitem><para>Treats all subsequent arguments as file names,
  even if they start with a dash.  This is so you can handle
  files with names beginning with a dash, for example:
  <computeroutput>bzip2 --
  -myfilename</computeroutput>.</para></listitem>
 </varlistentry>

 <varlistentry>
 <term><computeroutput>--repetitive-fast</computeroutput></term>
 <term><computeroutput>--repetitive-best</computeroutput></term>
 <listitem><para>These flags are redundant in versions 0.9.5 and
  above.  They provided some coarse control over the behaviour of
  the sorting algorithm in earlier versions, which was sometimes
  useful.  0.9.5 and above have an improved algorithm which
  renders these flags irrelevant.</para></listitem>
 </varlistentry>

</variablelist>

</sect1>


<sect1 id="memory-management" xreflabel="MEMORY MANAGEMENT">
<title>MEMORY MANAGEMENT</title>

<para><computeroutput>bzip2</computeroutput> compresses large
files in blocks.  The block size affects both the compression
ratio achieved, and the amount of memory needed for compression
and decompression.  The flags <computeroutput>-1</computeroutput>
through <computeroutput>-9</computeroutput> specify the block
size to be 100,000 bytes through 900,000 bytes (the default)
respectively.  At decompression time, the block size used for
compression is read from the header of the compressed file, and
<computeroutput>bunzip2</computeroutput> then allocates itself
just enough memory to decompress the file.  Since block sizes are
stored in compressed files, it follows that the flags
<computeroutput>-1</computeroutput> to
<computeroutput>-9</computeroutput> are irrelevant to and so
ignored during decompression.</para>

<para>Compression and decompression requirements, in bytes, can be
estimated as:</para>
<programlisting>
Compression:   400k + ( 8 x block size )

Decompression: 100k + ( 4 x block size ), or
               100k + ( 2.5 x block size )
</programlisting>

<para>Larger block sizes give rapidly diminishing marginal
returns.  Most of the compression comes from the first two or
three hundred k of block size, a fact worth bearing in mind when
using <computeroutput>bzip2</computeroutput> on small machines.
It is also important to appreciate that the decompression memory
requirement is set at compression time by the choice of block
size.</para>

<para>For files compressed with the default 900k block size,
<computeroutput>bunzip2</computeroutput> will require about 3700
kbytes to decompress.  To support decompression of any file on a
4 megabyte machine, <computeroutput>bunzip2</computeroutput> has
an option to decompress using approximately half this amount of
memory, about 2300 kbytes.  Decompression speed is also halved,
so you should use this option only where necessary.  The relevant
flag is <computeroutput>-s</computeroutput>.</para>

<para>In general, try and use the largest block size memory
constraints allow, since that maximises the compression achieved.
Compression and decompression speed are virtually unaffected by
block size.</para>

<para>Another significant point applies to files which fit in a
single block -- that means most files you'd encounter using a
large block size.  The amount of real memory touched is
proportional to the size of the file, since the file is smaller
than a block.  For example, compressing a file 20,000 bytes long
with the flag <computeroutput>-9</computeroutput> will cause the
compressor to allocate around 7600k of memory, but only touch
400k + 20000 * 8 = 560 kbytes of it.  Similarly, the decompressor
will allocate 3700k but only touch 100k + 20000 * 4 = 180
kbytes.</para>

<para>Here is a table which summarises the maximum memory usage
for different block sizes.  Also recorded is the total compressed
size for 14 files of the Calgary Text Compression Corpus
totalling 3,141,622 bytes.  This column gives some feel for how
compression varies with block size.  These figures tend to
understate the advantage of larger block sizes for larger files,
since the Corpus is dominated by smaller files.</para>

<programlisting>
        Compress   Decompress   Decompress   Corpus
Flag     usage      usage       -s usage     Size

 -1      1200k       500k         350k      914704
 -2      2000k       900k         600k      877703
 -3      2800k      1300k         850k      860338
 -4      3600k      1700k        1100k      846899
 -5      4400k      2100k        1350k      845160
 -6      5200k      2500k        1600k      838626
 -7      6100k      2900k        1850k      834096
 -8      6800k      3300k        2100k      828642
 -9      7600k      3700k        2350k      828642
</programlisting>

</sect1>


<sect1 id="recovering" xreflabel="RECOVERING DATA FROM DAMAGED FILES">
<title>RECOVERING DATA FROM DAMAGED FILES</title>

<para><computeroutput>bzip2</computeroutput> compresses files in
blocks, usually 900kbytes long.  Each block is handled
independently.  If a media or transmission error causes a
multi-block <computeroutput>.bz2</computeroutput> file to become
damaged, it may be possible to recover data from the undamaged
blocks in the file.</para>

<para>The compressed representation of each block is delimited by
a 48-bit pattern, which makes it possible to find the block
boundaries with reasonable certainty.  Each block also carries
its own 32-bit CRC, so damaged blocks can be distinguished from
undamaged ones.</para>

<para><computeroutput>bzip2recover</computeroutput> is a simple
program whose purpose is to search for blocks in
<computeroutput>.bz2</computeroutput> files, and write each block
out into its own <computeroutput>.bz2</computeroutput> file.  You
can then use <computeroutput>bzip2 -t</computeroutput> to test
the integrity of the resulting files, and decompress those which
are undamaged.</para>

<para><computeroutput>bzip2recover</computeroutput> takes a
single argument, the name of the damaged file, and writes a
number of files <computeroutput>rec0001file.bz2</computeroutput>,
<computeroutput>rec0002file.bz2</computeroutput>, etc, containing
the extracted blocks.  The output filenames are designed so that
the use of wildcards in subsequent processing -- for example,
<computeroutput>bzip2 -dc rec*file.bz2 &#62;
recovered_data</computeroutput> -- lists the files in the correct
order.</para>

<para><computeroutput>bzip2recover</computeroutput> should be of
most use dealing with large <computeroutput>.bz2</computeroutput>
files, as these will contain many blocks.  It is clearly futile
to use it on damaged single-block files, since a damaged block
cannot be recovered.  If you wish to minimise any potential data
loss through media or transmission errors, you might consider
compressing with a smaller block size.</para>

</sect1>


<sect1 id="performance" xreflabel="PERFORMANCE NOTES">
<title>PERFORMANCE NOTES</title>

<para>The sorting phase of compression gathers together similar
strings in the file.  Because of this, files containing very long
runs of repeated symbols, like "aabaabaabaab ..."  (repeated
several hundred times) may compress more slowly than normal.
Versions 0.9.5 and above fare much better than previous versions
in this respect.  The ratio between worst-case and average-case
compression time is in the region of 10:1.  For previous
versions, this figure was more like 100:1.  You can use the
<computeroutput>-vvvv</computeroutput> option to monitor progress
in great detail, if you want.</para>

<para>Decompression speed is unaffected by these
phenomena.</para>

<para><computeroutput>bzip2</computeroutput> usually allocates
several megabytes of memory to operate in, and then charges all
over it in a fairly random fashion.  This means that performance,
both for compressing and decompressing, is largely determined by
the speed at which your machine can service cache misses.
Because of this, small changes to the code to reduce the miss
rate have been observed to give disproportionately large
performance improvements.  I imagine
<computeroutput>bzip2</computeroutput> will perform best on
machines with very large caches.</para>

</sect1>



<sect1 id="caveats" xreflabel="CAVEATS">
<title>CAVEATS</title>

<para>I/O error messages are not as helpful as they could be.
<computeroutput>bzip2</computeroutput> tries hard to detect I/O
errors and exit cleanly, but the details of what the problem is
sometimes seem rather misleading.</para>

<para>This manual page pertains to version &bz-version; of
<computeroutput>bzip2</computeroutput>.  Compressed data created by
this version is entirely forwards and backwards compatible with the
previous public releases, versions 0.1pl2, 0.9.0 and 0.9.5, 1.0.0,
1.0.1, 1.0.2 and 1.0.3, but with the following exception: 0.9.0 and
above can correctly decompress multiple concatenated compressed files.
0.1pl2 cannot do this; it will stop after decompressing just the first
file in the stream.</para>

<para><computeroutput>bzip2recover</computeroutput> versions
prior to 1.0.2 used 32-bit integers to represent bit positions in
compressed files, so it could not handle compressed files more
than 512 megabytes long.  Versions 1.0.2 and above use 64-bit ints
on some platforms which support them (GNU supported targets, and
Windows). To establish whether or not
<computeroutput>bzip2recover</computeroutput> was built with such
a limitation, run it without arguments. In any event you can
build yourself an unlimited version if you can recompile it with
<computeroutput>MaybeUInt64</computeroutput> set to be an
unsigned 64-bit integer.</para>

</sect1>



<sect1 id="author" xreflabel="AUTHOR">
<title>AUTHOR</title>

<para>Julian Seward,
<computeroutput>&bz-author;</computeroutput></para>

<para>The ideas embodied in
<computeroutput>bzip2</computeroutput> are due to (at least) the
following people: Michael Burrows and David Wheeler (for the
block sorting transformation), David Wheeler (again, for the
Huffman coder), Peter Fenwick (for the structured coding model in
the original <computeroutput>bzip</computeroutput>, and many
refinements), and Alistair Moffat, Radford Neal and Ian Witten
(for the arithmetic coder in the original
<computeroutput>bzip</computeroutput>).  I am much indebted for
their help, support and advice.  See the manual in the source
distribution for pointers to sources of documentation.  Christian
von Roques encouraged me to look for faster sorting algorithms,
so as to speed up compression.  Bela Lubkin encouraged me to
improve the worst-case compression performance.  
Donna Robinson XMLised the documentation.
Many people sent
patches, helped with portability problems, lent machines, gave
advice and were generally helpful.</para>

</sect1>

</chapter>



<chapter id="libprog" xreflabel="Programming with libbzip2">
<title>
Programming with <computeroutput>libbzip2</computeroutput>
</title>

<para>This chapter describes the programming interface to
<computeroutput>libbzip2</computeroutput>.</para>

<para>For general background information, particularly about
memory use and performance aspects, you'd be well advised to read
<xref linkend="using"/> as well.</para>


<sect1 id="top-level" xreflabel="Top-level structure">
<title>Top-level structure</title>

<para><computeroutput>libbzip2</computeroutput> is a flexible
library for compressing and decompressing data in the
<computeroutput>bzip2</computeroutput> data format.  Although
packaged as a single entity, it helps to regard the library as
three separate parts: the low level interface, and the high level
interface, and some utility functions.</para>

<para>The structure of
<computeroutput>libbzip2</computeroutput>'s interfaces is similar
to that of Jean-loup Gailly's and Mark Adler's excellent
<computeroutput>zlib</computeroutput> library.</para>

<para>All externally visible symbols have names beginning
<computeroutput>BZ2_</computeroutput>.  This is new in version
1.0.  The intention is to minimise pollution of the namespaces of
library clients.</para>

<para>To use any part of the library, you need to
<computeroutput>#include &lt;bzlib.h&gt;</computeroutput>
into your sources.</para>



<sect2 id="ll-summary" xreflabel="Low-level summary">
<title>Low-level summary</title>

<para>This interface provides services for compressing and
decompressing data in memory.  There's no provision for dealing
with files, streams or any other I/O mechanisms, just straight
memory-to-memory work.  In fact, this part of the library can be
compiled without inclusion of
<computeroutput>stdio.h</computeroutput>, which may be helpful
for embedded applications.</para>

<para>The low-level part of the library has no global variables
and is therefore thread-safe.</para>

<para>Six routines make up the low level interface:
<computeroutput>BZ2_bzCompressInit</computeroutput>,
<computeroutput>BZ2_bzCompress</computeroutput>, and
<computeroutput>BZ2_bzCompressEnd</computeroutput> for
compression, and a corresponding trio
<computeroutput>BZ2_bzDecompressInit</computeroutput>,
<computeroutput>BZ2_bzDecompress</computeroutput> and
<computeroutput>BZ2_bzDecompressEnd</computeroutput> for
decompression.  The <computeroutput>*Init</computeroutput>
functions allocate memory for compression/decompression and do
other initialisations, whilst the
<computeroutput>*End</computeroutput> functions close down
operations and release memory.</para>

<para>The real work is done by
<computeroutput>BZ2_bzCompress</computeroutput> and
<computeroutput>BZ2_bzDecompress</computeroutput>.  These
compress and decompress data from a user-supplied input buffer to
a user-supplied output buffer.  These buffers can be any size;
arbitrary quantities of data are handled by making repeated calls
to these functions.  This is a flexible mechanism allowing a
consumer-pull style of activity, or producer-push, or a mixture
of both.</para>

</sect2>


<sect2 id="hl-summary" xreflabel="High-level summary">
<title>High-level summary</title>

<para>This interface provides some handy wrappers around the
low-level interface to facilitate reading and writing
<computeroutput>bzip2</computeroutput> format files
(<computeroutput>.bz2</computeroutput> files).  The routines
provide hooks to facilitate reading files in which the
<computeroutput>bzip2</computeroutput> data stream is embedded
within some larger-scale file structure, or where there are
multiple <computeroutput>bzip2</computeroutput> data streams
concatenated end-to-end.</para>

<para>For reading files,
<computeroutput>BZ2_bzReadOpen</computeroutput>,
<computeroutput>BZ2_bzRead</computeroutput>,
<computeroutput>BZ2_bzReadClose</computeroutput> and 
<computeroutput>BZ2_bzReadGetUnused</computeroutput> are
supplied.  For writing files,
<computeroutput>BZ2_bzWriteOpen</computeroutput>,
<computeroutput>BZ2_bzWrite</computeroutput> and
<computeroutput>BZ2_bzWriteFinish</computeroutput> are
available.</para>

<para>As with the low-level library, no global variables are used
so the library is per se thread-safe.  However, if I/O errors
occur whilst reading or writing the underlying compressed files,
you may have to consult <computeroutput>errno</computeroutput> to
determine the cause of the error.  In that case, you'd need a C
library which correctly supports
<computeroutput>errno</computeroutput> in a multithreaded
environment.</para>

<para>To make the library a little simpler and more portable,
<computeroutput>BZ2_bzReadOpen</computeroutput> and
<computeroutput>BZ2_bzWriteOpen</computeroutput> require you to
pass them file handles (<computeroutput>FILE*</computeroutput>s)
which have previously been opened for reading or writing
respectively.  That avoids portability problems associated with
file operations and file attributes, whilst not being much of an
imposition on the programmer.</para>

</sect2>


<sect2 id="util-fns-summary" xreflabel="Utility functions summary">
<title>Utility functions summary</title>

<para>For very simple needs,
<computeroutput>BZ2_bzBuffToBuffCompress</computeroutput> and
<computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput> are
provided.  These compress data in memory from one buffer to
another buffer in a single function call.  You should assess
whether these functions fulfill your memory-to-memory
compression/decompression requirements before investing effort in
understanding the more general but more complex low-level
interface.</para>

<para>Yoshioka Tsuneo
(<computeroutput>tsuneo@rr.iij4u.or.jp</computeroutput>) has
contributed some functions to give better
<computeroutput>zlib</computeroutput> compatibility.  These
functions are <computeroutput>BZ2_bzopen</computeroutput>,
<computeroutput>BZ2_bzread</computeroutput>,
<computeroutput>BZ2_bzwrite</computeroutput>,
<computeroutput>BZ2_bzflush</computeroutput>,
<computeroutput>BZ2_bzclose</computeroutput>,
<computeroutput>BZ2_bzerror</computeroutput> and
<computeroutput>BZ2_bzlibVersion</computeroutput>.  You may find
these functions more convenient for simple file reading and
writing, than those in the high-level interface.  These functions
are not (yet) officially part of the library, and are minimally
documented here.  If they break, you get to keep all the pieces.
I hope to document them properly when time permits.</para>

<para>Yoshioka also contributed modifications to allow the
library to be built as a Windows DLL.</para>

</sect2>

</sect1>


<sect1 id="err-handling" xreflabel="Error handling">
<title>Error handling</title>

<para>The library is designed to recover cleanly in all
situations, including the worst-case situation of decompressing
random data.  I'm not 100% sure that it can always do this, so
you might want to add a signal handler to catch segmentation
violations during decompression if you are feeling especially
paranoid.  I would be interested in hearing more about the
robustness of the library to corrupted compressed data.</para>

<para>Version 1.0.3 more robust in this respect than any
previous version.  Investigations with Valgrind (a tool for detecting
problems with memory management) indicate
that, at least for the few files I tested, all single-bit errors
in the decompressed data are caught properly, with no
segmentation faults, no uses of uninitialised data, no out of
range reads or writes, and no infinite looping in the decompressor.
So it's certainly pretty robust, although
I wouldn't claim it to be totally bombproof.</para>

<para>The file <computeroutput>bzlib.h</computeroutput> contains
all definitions needed to use the library.  In particular, you
should definitely not include
<computeroutput>bzlib_private.h</computeroutput>.</para>

<para>In <computeroutput>bzlib.h</computeroutput>, the various
return values are defined.  The following list is not intended as
an exhaustive description of the circumstances in which a given
value may be returned -- those descriptions are given later.
Rather, it is intended to convey the rough meaning of each return
value.  The first five actions are normal and not intended to
denote an error situation.</para>

<variablelist>

 <varlistentry>
  <term><computeroutput>BZ_OK</computeroutput></term>
  <listitem><para>The requested action was completed
   successfully.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_RUN_OK, BZ_FLUSH_OK,
    BZ_FINISH_OK</computeroutput></term>
  <listitem><para>In 
   <computeroutput>BZ2_bzCompress</computeroutput>, the requested
   flush/finish/nothing-special action was completed
   successfully.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_STREAM_END</computeroutput></term>
  <listitem><para>Compression of data was completed, or the
   logical stream end was detected during
   decompression.</para></listitem>
 </varlistentry>

</variablelist>

<para>The following return values indicate an error of some
kind.</para>

<variablelist>

 <varlistentry>
  <term><computeroutput>BZ_CONFIG_ERROR</computeroutput></term>
  <listitem><para>Indicates that the library has been improperly
   compiled on your platform -- a major configuration error.
   Specifically, it means that
   <computeroutput>sizeof(char)</computeroutput>,
   <computeroutput>sizeof(short)</computeroutput> and
   <computeroutput>sizeof(int)</computeroutput> are not 1, 2 and
   4 respectively, as they should be.  Note that the library
   should still work properly on 64-bit platforms which follow
   the LP64 programming model -- that is, where
   <computeroutput>sizeof(long)</computeroutput> and
   <computeroutput>sizeof(void*)</computeroutput> are 8.  Under
   LP64, <computeroutput>sizeof(int)</computeroutput> is still 4,
   so <computeroutput>libbzip2</computeroutput>, which doesn't
   use the <computeroutput>long</computeroutput> type, is
   OK.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_SEQUENCE_ERROR</computeroutput></term>
  <listitem><para>When using the library, it is important to call
   the functions in the correct sequence and with data structures
   (buffers etc) in the correct states.
   <computeroutput>libbzip2</computeroutput> checks as much as it
   can to ensure this is happening, and returns
   <computeroutput>BZ_SEQUENCE_ERROR</computeroutput> if not.
   Code which complies precisely with the function semantics, as
   detailed below, should never receive this value; such an event
   denotes buggy code which you should
   investigate.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_PARAM_ERROR</computeroutput></term>
  <listitem><para>Returned when a parameter to a function call is
   out of range or otherwise manifestly incorrect.  As with
   <computeroutput>BZ_SEQUENCE_ERROR</computeroutput>, this
   denotes a bug in the client code.  The distinction between
   <computeroutput>BZ_PARAM_ERROR</computeroutput> and
   <computeroutput>BZ_SEQUENCE_ERROR</computeroutput> is a bit
   hazy, but still worth making.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_MEM_ERROR</computeroutput></term>
  <listitem><para>Returned when a request to allocate memory
   failed.  Note that the quantity of memory needed to decompress
   a stream cannot be determined until the stream's header has
   been read.  So
   <computeroutput>BZ2_bzDecompress</computeroutput> and
   <computeroutput>BZ2_bzRead</computeroutput> may return
   <computeroutput>BZ_MEM_ERROR</computeroutput> even though some
   of the compressed data has been read.  The same is not true
   for compression; once
   <computeroutput>BZ2_bzCompressInit</computeroutput> or
   <computeroutput>BZ2_bzWriteOpen</computeroutput> have
   successfully completed,
   <computeroutput>BZ_MEM_ERROR</computeroutput> cannot
   occur.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_DATA_ERROR</computeroutput></term>
  <listitem><para>Returned when a data integrity error is
   detected during decompression.  Most importantly, this means
   when stored and computed CRCs for the data do not match.  This
   value is also returned upon detection of any other anomaly in
   the compressed data.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_DATA_ERROR_MAGIC</computeroutput></term>
  <listitem><para>As a special case of
   <computeroutput>BZ_DATA_ERROR</computeroutput>, it is
   sometimes useful to know when the compressed stream does not
   start with the correct magic bytes (<computeroutput>'B' 'Z'
   'h'</computeroutput>).</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_IO_ERROR</computeroutput></term>
  <listitem><para>Returned by
   <computeroutput>BZ2_bzRead</computeroutput> and
   <computeroutput>BZ2_bzWrite</computeroutput> when there is an
   error reading or writing in the compressed file, and by
   <computeroutput>BZ2_bzReadOpen</computeroutput> and
   <computeroutput>BZ2_bzWriteOpen</computeroutput> for attempts
   to use a file for which the error indicator (viz,
   <computeroutput>ferror(f)</computeroutput>) is set.  On
   receipt of <computeroutput>BZ_IO_ERROR</computeroutput>, the
   caller should consult <computeroutput>errno</computeroutput>
   and/or <computeroutput>perror</computeroutput> to acquire
   operating-system specific information about the
   problem.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_UNEXPECTED_EOF</computeroutput></term>
  <listitem><para>Returned by
   <computeroutput>BZ2_bzRead</computeroutput> when the
   compressed file finishes before the logical end of stream is
   detected.</para></listitem>
 </varlistentry>

 <varlistentry>
  <term><computeroutput>BZ_OUTBUFF_FULL</computeroutput></term>
  <listitem><para>Returned by
   <computeroutput>BZ2_bzBuffToBuffCompress</computeroutput> and
   <computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput> to
   indicate that the output data will not fit into the output
   buffer provided.</para></listitem>
 </varlistentry>

</variablelist>

</sect1>



<sect1 id="low-level" xreflabel=">Low-level interface">
<title>Low-level interface</title>


<sect2 id="bzcompress-init" xreflabel="BZ2_bzCompressInit">
<title>BZ2_bzCompressInit</title>

<programlisting>
typedef struct {
  char *next_in;
  unsigned int avail_in;
  unsigned int total_in_lo32;
  unsigned int total_in_hi32;

  char *next_out;
  unsigned int avail_out;
  unsigned int total_out_lo32;
  unsigned int total_out_hi32;

  void *state;

  void *(*bzalloc)(void *,int,int);
  void (*bzfree)(void *,void *);
  void *opaque;
} bz_stream;

int BZ2_bzCompressInit ( bz_stream *strm, 
                         int blockSize100k, 
                         int verbosity,
                         int workFactor );
</programlisting>

<para>Prepares for compression.  The
<computeroutput>bz_stream</computeroutput> structure holds all
data pertaining to the compression activity.  A
<computeroutput>bz_stream</computeroutput> structure should be
allocated and initialised prior to the call.  The fields of
<computeroutput>bz_stream</computeroutput> comprise the entirety
of the user-visible data.  <computeroutput>state</computeroutput>
is a pointer to the private data structures required for
compression.</para>

<para>Custom memory allocators are supported, via fields
<computeroutput>bzalloc</computeroutput>,
<computeroutput>bzfree</computeroutput>, and
<computeroutput>opaque</computeroutput>.  The value
<computeroutput>opaque</computeroutput> is passed to as the first
argument to all calls to <computeroutput>bzalloc</computeroutput>
and <computeroutput>bzfree</computeroutput>, but is otherwise
ignored by the library.  The call <computeroutput>bzalloc (
opaque, n, m )</computeroutput> is expected to return a pointer
<computeroutput>p</computeroutput> to <computeroutput>n *
m</computeroutput> bytes of memory, and <computeroutput>bzfree (
opaque, p )</computeroutput> should free that memory.</para>

<para>If you don't want to use a custom memory allocator, set
<computeroutput>bzalloc</computeroutput>,
<computeroutput>bzfree</computeroutput> and
<computeroutput>opaque</computeroutput> to
<computeroutput>NULL</computeroutput>, and the library will then
use the standard <computeroutput>malloc</computeroutput> /
<computeroutput>free</computeroutput> routines.</para>

<para>Before calling
<computeroutput>BZ2_bzCompressInit</computeroutput>, fields
<computeroutput>bzalloc</computeroutput>,
<computeroutput>bzfree</computeroutput> and
<computeroutput>opaque</computeroutput> should be filled
appropriately, as just described.  Upon return, the internal
state will have been allocated and initialised, and
<computeroutput>total_in_lo32</computeroutput>,
<computeroutput>total_in_hi32</computeroutput>,
<computeroutput>total_out_lo32</computeroutput> and
<computeroutput>total_out_hi32</computeroutput> will have been
set to zero.  These four fields are used by the library to inform
the caller of the total amount of data passed into and out of the
library, respectively.  You should not try to change them.  As of
version 1.0, 64-bit counts are maintained, even on 32-bit
platforms, using the <computeroutput>_hi32</computeroutput>
fields to store the upper 32 bits of the count.  So, for example,
the total amount of data in is <computeroutput>(total_in_hi32
&#60;&#60; 32) + total_in_lo32</computeroutput>.</para>

<para>Parameter <computeroutput>blockSize100k</computeroutput>
specifies the block size to be used for compression.  It should
be a value between 1 and 9 inclusive, and the actual block size
used is 100000 x this figure.  9 gives the best compression but
takes most memory.</para>

<para>Parameter <computeroutput>verbosity</computeroutput> should
be set to a number between 0 and 4 inclusive.  0 is silent, and
greater numbers give increasingly verbose monitoring/debugging
output.  If the library has been compiled with
<computeroutput>-DBZ_NO_STDIO</computeroutput>, no such output
will appear for any verbosity setting.</para>

<para>Parameter <computeroutput>workFactor</computeroutput>
controls how the compression phase behaves when presented with
worst case, highly repetitive, input data.  If compression runs
into difficulties caused by repetitive data, the library switches
from the standard sorting algorithm to a fallback algorithm.  The
fallback is slower than the standard algorithm by perhaps a
factor of three, but always behaves reasonably, no matter how bad
the input.</para>

<para>Lower values of <computeroutput>workFactor</computeroutput>
reduce the amount of effort the standard algorithm will expend
before resorting to the fallback.  You should set this parameter
carefully; too low, and many inputs will be handled by the
fallback algorithm and so compress rather slowly, too high, and
your average-to-worst case compression times can become very
large.  The default value of 30 gives reasonable behaviour over a
wide range of circumstances.</para>

<para>Allowable values range from 0 to 250 inclusive.  0 is a
special case, equivalent to using the default value of 30.</para>

<para>Note that the compressed output generated is the same
regardless of whether or not the fallback algorithm is
used.</para>

<para>Be aware also that this parameter may disappear entirely in
future versions of the library.  In principle it should be
possible to devise a good way to automatically choose which
algorithm to use.  Such a mechanism would render the parameter
obsolete.</para>

<para>Possible return values:</para>

<programlisting>
BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if strm is NULL 
  or blockSize < 1 or blockSize > 9
  or verbosity < 0 or verbosity > 4
  or workFactor < 0 or workFactor > 250
BZ_MEM_ERROR 
  if not enough memory is available
BZ_OK 
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
BZ2_bzCompress
  if BZ_OK is returned
  no specific action needed in case of error
</programlisting>

</sect2>


<sect2 id="bzCompress" xreflabel="BZ2_bzCompress">
<title>BZ2_bzCompress</title>

<programlisting>
int BZ2_bzCompress ( bz_stream *strm, int action );
</programlisting>

<para>Provides more input and/or output buffer space for the
library.  The caller maintains input and output buffers, and
calls <computeroutput>BZ2_bzCompress</computeroutput> to transfer
data between them.</para>

<para>Before each call to
<computeroutput>BZ2_bzCompress</computeroutput>,
<computeroutput>next_in</computeroutput> should point at the data
to be compressed, and <computeroutput>avail_in</computeroutput>
should indicate how many bytes the library may read.
<computeroutput>BZ2_bzCompress</computeroutput> updates
<computeroutput>next_in</computeroutput>,
<computeroutput>avail_in</computeroutput> and
<computeroutput>total_in</computeroutput> to reflect the number
of bytes it has read.</para>

<para>Similarly, <computeroutput>next_out</computeroutput> should
point to a buffer in which the compressed data is to be placed,
with <computeroutput>avail_out</computeroutput> indicating how
much output space is available.
<computeroutput>BZ2_bzCompress</computeroutput> updates
<computeroutput>next_out</computeroutput>,
<computeroutput>avail_out</computeroutput> and
<computeroutput>total_out</computeroutput> to reflect the number
of bytes output.</para>

<para>You may provide and remove as little or as much data as you
like on each call of
<computeroutput>BZ2_bzCompress</computeroutput>.  In the limit,
it is acceptable to supply and remove data one byte at a time,
although this would be terribly inefficient.  You should always
ensure that at least one byte of output space is available at
each call.</para>

<para>A second purpose of
<computeroutput>BZ2_bzCompress</computeroutput> is to request a
change of mode of the compressed stream.</para>

<para>Conceptually, a compressed stream can be in one of four
states: IDLE, RUNNING, FLUSHING and FINISHING.  Before
initialisation
(<computeroutput>BZ2_bzCompressInit</computeroutput>) and after
termination (<computeroutput>BZ2_bzCompressEnd</computeroutput>),
a stream is regarded as IDLE.</para>

<para>Upon initialisation
(<computeroutput>BZ2_bzCompressInit</computeroutput>), the stream
is placed in the RUNNING state.  Subsequent calls to
<computeroutput>BZ2_bzCompress</computeroutput> should pass
<computeroutput>BZ_RUN</computeroutput> as the requested action;
other actions are illegal and will result in
<computeroutput>BZ_SEQUENCE_ERROR</computeroutput>.</para>

<para>At some point, the calling program will have provided all
the input data it wants to.  It will then want to finish up -- in
effect, asking the library to process any data it might have
buffered internally.  In this state,
<computeroutput>BZ2_bzCompress</computeroutput> will no longer
attempt to read data from
<computeroutput>next_in</computeroutput>, but it will want to
write data to <computeroutput>next_out</computeroutput>.  Because
the output buffer supplied by the user can be arbitrarily small,
the finishing-up operation cannot necessarily be done with a
single call of
<computeroutput>BZ2_bzCompress</computeroutput>.</para>

<para>Instead, the calling program passes
<computeroutput>BZ_FINISH</computeroutput> as an action to
<computeroutput>BZ2_bzCompress</computeroutput>.  This changes
the stream's state to FINISHING.  Any remaining input (ie,
<computeroutput>next_in[0 .. avail_in-1]</computeroutput>) is
compressed and transferred to the output buffer.  To do this,
<computeroutput>BZ2_bzCompress</computeroutput> must be called
repeatedly until all the output has been consumed.  At that
point, <computeroutput>BZ2_bzCompress</computeroutput> returns
<computeroutput>BZ_STREAM_END</computeroutput>, and the stream's
state is set back to IDLE.
<computeroutput>BZ2_bzCompressEnd</computeroutput> should then be
called.</para>

<para>Just to make sure the calling program does not cheat, the
library makes a note of <computeroutput>avail_in</computeroutput>
at the time of the first call to
<computeroutput>BZ2_bzCompress</computeroutput> which has
<computeroutput>BZ_FINISH</computeroutput> as an action (ie, at
the time the program has announced its intention to not supply
any more input).  By comparing this value with that of
<computeroutput>avail_in</computeroutput> over subsequent calls
to <computeroutput>BZ2_bzCompress</computeroutput>, the library
can detect any attempts to slip in more data to compress.  Any
calls for which this is detected will return
<computeroutput>BZ_SEQUENCE_ERROR</computeroutput>.  This
indicates a programming mistake which should be corrected.</para>

<para>Instead of asking to finish, the calling program may ask
<computeroutput>BZ2_bzCompress</computeroutput> to take all the
remaining input, compress it and terminate the current
(Burrows-Wheeler) compression block.  This could be useful for
error control purposes.  The mechanism is analogous to that for
finishing: call <computeroutput>BZ2_bzCompress</computeroutput>
with an action of <computeroutput>BZ_FLUSH</computeroutput>,
remove output data, and persist with the
<computeroutput>BZ_FLUSH</computeroutput> action until the value
<computeroutput>BZ_RUN</computeroutput> is returned.  As with
finishing, <computeroutput>BZ2_bzCompress</computeroutput>
detects any attempt to provide more input data once the flush has
begun.</para>

<para>Once the flush is complete, the stream returns to the
normal RUNNING state.</para>

<para>This all sounds pretty complex, but isn't really.  Here's a
table which shows which actions are allowable in each state, what
action will be taken, what the next state is, and what the
non-error return values are.  Note that you can't explicitly ask
what state the stream is in, but nor do you need to -- it can be
inferred from the values returned by
<computeroutput>BZ2_bzCompress</computeroutput>.</para>

<programlisting>
IDLE/any
  Illegal.  IDLE state only exists after BZ2_bzCompressEnd or
  before BZ2_bzCompressInit.
  Return value = BZ_SEQUENCE_ERROR

RUNNING/BZ_RUN
  Compress from next_in to next_out as much as possible.
  Next state = RUNNING
  Return value = BZ_RUN_OK

RUNNING/BZ_FLUSH
  Remember current value of next_in. Compress from next_in
  to next_out as much as possible, but do not accept any more input.
  Next state = FLUSHING
  Return value = BZ_FLUSH_OK

RUNNING/BZ_FINISH
  Remember current value of next_in. Compress from next_in
  to next_out as much as possible, but do not accept any more input.
  Next state = FINISHING
  Return value = BZ_FINISH_OK

FLUSHING/BZ_FLUSH
  Compress from next_in to next_out as much as possible, 
  but do not accept any more input.
  If all the existing input has been used up and all compressed
  output has been removed
    Next state = RUNNING; Return value = BZ_RUN_OK
  else
    Next state = FLUSHING; Return value = BZ_FLUSH_OK

FLUSHING/other     
  Illegal.
  Return value = BZ_SEQUENCE_ERROR

FINISHING/BZ_FINISH
  Compress from next_in to next_out as much as possible,
  but to not accept any more input.  
  If all the existing input has been used up and all compressed
  output has been removed
    Next state = IDLE; Return value = BZ_STREAM_END
  else
    Next state = FINISHING; Return value = BZ_FINISH_OK

FINISHING/other
  Illegal.
  Return value = BZ_SEQUENCE_ERROR
</programlisting>


<para>That still looks complicated?  Well, fair enough.  The
usual sequence of calls for compressing a load of data is:</para>

<orderedlist>

 <listitem><para>Get started with
  <computeroutput>BZ2_bzCompressInit</computeroutput>.</para></listitem>

 <listitem><para>Shovel data in and shlurp out its compressed form
  using zero or more calls of
  <computeroutput>BZ2_bzCompress</computeroutput> with action =
  <computeroutput>BZ_RUN</computeroutput>.</para></listitem>

 <listitem><para>Finish up. Repeatedly call
  <computeroutput>BZ2_bzCompress</computeroutput> with action =
  <computeroutput>BZ_FINISH</computeroutput>, copying out the
  compressed output, until
  <computeroutput>BZ_STREAM_END</computeroutput> is
  returned.</para></listitem> <listitem><para>Close up and go home.  Call
  <computeroutput>BZ2_bzCompressEnd</computeroutput>.</para></listitem>

</orderedlist>

<para>If the data you want to compress fits into your input
buffer all at once, you can skip the calls of
<computeroutput>BZ2_bzCompress ( ..., BZ_RUN )</computeroutput>
and just do the <computeroutput>BZ2_bzCompress ( ..., BZ_FINISH
)</computeroutput> calls.</para>

<para>All required memory is allocated by
<computeroutput>BZ2_bzCompressInit</computeroutput>.  The
compression library can accept any data at all (obviously).  So
you shouldn't get any error return values from the
<computeroutput>BZ2_bzCompress</computeroutput> calls.  If you
do, they will be
<computeroutput>BZ_SEQUENCE_ERROR</computeroutput>, and indicate
a bug in your programming.</para>

<para>Trivial other possible return values:</para>

<programlisting>
BZ_PARAM_ERROR
  if strm is NULL, or strm->s is NULL
</programlisting>

</sect2>


<sect2 id="bzCompress-end" xreflabel="BZ2_bzCompressEnd">
<title>BZ2_bzCompressEnd</title>

<programlisting>
int BZ2_bzCompressEnd ( bz_stream *strm );
</programlisting>

<para>Releases all memory associated with a compression
stream.</para>

<para>Possible return values:</para>

<programlisting>
BZ_PARAM_ERROR  if strm is NULL or strm->s is NULL
BZ_OK           otherwise
</programlisting>

</sect2>


<sect2 id="bzDecompress-init" xreflabel="BZ2_bzDecompressInit">
<title>BZ2_bzDecompressInit</title>

<programlisting>
int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );
</programlisting>

<para>Prepares for decompression.  As with
<computeroutput>BZ2_bzCompressInit</computeroutput>, a
<computeroutput>bz_stream</computeroutput> record should be
allocated and initialised before the call.  Fields
<computeroutput>bzalloc</computeroutput>,
<computeroutput>bzfree</computeroutput> and
<computeroutput>opaque</computeroutput> should be set if a custom
memory allocator is required, or made
<computeroutput>NULL</computeroutput> for the normal
<computeroutput>malloc</computeroutput> /
<computeroutput>free</computeroutput> routines.  Upon return, the
internal state will have been initialised, and
<computeroutput>total_in</computeroutput> and
<computeroutput>total_out</computeroutput> will be zero.</para>

<para>For the meaning of parameter
<computeroutput>verbosity</computeroutput>, see
<computeroutput>BZ2_bzCompressInit</computeroutput>.</para>

<para>If <computeroutput>small</computeroutput> is nonzero, the
library will use an alternative decompression algorithm which
uses less memory but at the cost of decompressing more slowly
(roughly speaking, half the speed, but the maximum memory
requirement drops to around 2300k).  See <xref linkend="using"/>
for more information on memory management.</para>

<para>Note that the amount of memory needed to decompress a
stream cannot be determined until the stream's header has been
read, so even if
<computeroutput>BZ2_bzDecompressInit</computeroutput> succeeds, a
subsequent <computeroutput>BZ2_bzDecompress</computeroutput>
could fail with
<computeroutput>BZ_MEM_ERROR</computeroutput>.</para>

<para>Possible return values:</para>

<programlisting>
BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if ( small != 0 && small != 1 )
  or (verbosity <; 0 || verbosity > 4)
BZ_MEM_ERROR
  if insufficient memory is available
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
BZ2_bzDecompress
  if BZ_OK was returned
  no specific action required in case of error
</programlisting>

</sect2>


<sect2 id="bzDecompress" xreflabel="BZ2_bzDecompress">
<title>BZ2_bzDecompress</title>

<programlisting>
int BZ2_bzDecompress ( bz_stream *strm );
</programlisting>

<para>Provides more input and/out output buffer space for the
library.  The caller maintains input and output buffers, and uses
<computeroutput>BZ2_bzDecompress</computeroutput> to transfer
data between them.</para>

<para>Before each call to
<computeroutput>BZ2_bzDecompress</computeroutput>,
<computeroutput>next_in</computeroutput> should point at the
compressed data, and <computeroutput>avail_in</computeroutput>
should indicate how many bytes the library may read.
<computeroutput>BZ2_bzDecompress</computeroutput> updates
<computeroutput>next_in</computeroutput>,
<computeroutput>avail_in</computeroutput> and
<computeroutput>total_in</computeroutput> to reflect the number
of bytes it has read.</para>

<para>Similarly, <computeroutput>next_out</computeroutput> should
point to a buffer in which the uncompressed output is to be
placed, with <computeroutput>avail_out</computeroutput>
indicating how much output space is available.
<computeroutput>BZ2_bzCompress</computeroutput> updates
<computeroutput>next_out</computeroutput>,
<computeroutput>avail_out</computeroutput> and
<computeroutput>total_out</computeroutput> to reflect the number
of bytes output.</para>

<para>You may provide and remove as little or as much data as you
like on each call of
<computeroutput>BZ2_bzDecompress</computeroutput>.  In the limit,
it is acceptable to supply and remove data one byte at a time,
although this would be terribly inefficient.  You should always
ensure that at least one byte of output space is available at
each call.</para>

<para>Use of <computeroutput>BZ2_bzDecompress</computeroutput> is
simpler than
<computeroutput>BZ2_bzCompress</computeroutput>.</para>

<para>You should provide input and remove output as described
above, and repeatedly call
<computeroutput>BZ2_bzDecompress</computeroutput> until
<computeroutput>BZ_STREAM_END</computeroutput> is returned.
Appearance of <computeroutput>BZ_STREAM_END</computeroutput>
denotes that <computeroutput>BZ2_bzDecompress</computeroutput>
has detected the logical end of the compressed stream.
<computeroutput>BZ2_bzDecompress</computeroutput> will not
produce <computeroutput>BZ_STREAM_END</computeroutput> until all
output data has been placed into the output buffer, so once
<computeroutput>BZ_STREAM_END</computeroutput> appears, you are
guaranteed to have available all the decompressed output, and
<computeroutput>BZ2_bzDecompressEnd</computeroutput> can safely
be called.</para>

<para>If case of an error return value, you should call
<computeroutput>BZ2_bzDecompressEnd</computeroutput> to clean up
and release memory.</para>

<para>Possible return values:</para>

<programlisting>
BZ_PARAM_ERROR
  if strm is NULL or strm->s is NULL
  or strm->avail_out < 1
BZ_DATA_ERROR
  if a data integrity error is detected in the compressed stream
BZ_DATA_ERROR_MAGIC
  if the compressed stream doesn't begin with the right magic bytes
BZ_MEM_ERROR
  if there wasn't enough memory available
BZ_STREAM_END
  if the logical end of the data stream was detected and all
  output in has been consumed, eg s-->avail_out > 0
BZ_SEQUENCE_ERROR
  if called after an earlier call already returned BZ_STREAM_END
BZ_OK
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
BZ2_bzDecompress
  if BZ_OK was returned
BZ2_bzDecompressEnd
  otherwise
</programlisting>

</sect2>


<sect2 id="bzDecompress-end" xreflabel="BZ2_bzDecompressEnd">
<title>BZ2_bzDecompressEnd</title>

<programlisting>
int BZ2_bzDecompressEnd ( bz_stream *strm );
</programlisting>

<para>Releases all memory associated with a decompression
stream.</para>

<para>Possible return values:</para>

<programlisting>
BZ_PARAM_ERROR
  if strm is NULL or strm->s is NULL
BZ_OK
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
  None.
</programlisting>

</sect2>

</sect1>


<sect1 id="hl-interface" xreflabel="High-level interface">
<title>High-level interface</title>

<para>This interface provides functions for reading and writing
<computeroutput>bzip2</computeroutput> format files.  First, some
general points.</para>

<itemizedlist mark='bullet'>

 <listitem><para>All of the functions take an
  <computeroutput>int*</computeroutput> first argument,
  <computeroutput>bzerror</computeroutput>.  After each call,
  <computeroutput>bzerror</computeroutput> should be consulted
  first to determine the outcome of the call.  If
  <computeroutput>bzerror</computeroutput> is
  <computeroutput>BZ_OK</computeroutput>, the call completed
  successfully, and only then should the return value of the
  function (if any) be consulted.  If
  <computeroutput>bzerror</computeroutput> is
  <computeroutput>BZ_IO_ERROR</computeroutput>, there was an
  error reading/writing the underlying compressed file, and you
  should then consult <computeroutput>errno</computeroutput> /
  <computeroutput>perror</computeroutput> to determine the cause
  of the difficulty.  <computeroutput>bzerror</computeroutput>
  may also be set to various other values; precise details are
  given on a per-function basis below.</para></listitem>

 <listitem><para>If <computeroutput>bzerror</computeroutput> indicates
  an error (ie, anything except
  <computeroutput>BZ_OK</computeroutput> and
  <computeroutput>BZ_STREAM_END</computeroutput>), you should
  immediately call
  <computeroutput>BZ2_bzReadClose</computeroutput> (or
  <computeroutput>BZ2_bzWriteClose</computeroutput>, depending on
  whether you are attempting to read or to write) to free up all
  resources associated with the stream.  Once an error has been
  indicated, behaviour of all calls except
  <computeroutput>BZ2_bzReadClose</computeroutput>
  (<computeroutput>BZ2_bzWriteClose</computeroutput>) is
  undefined.  The implication is that (1)
  <computeroutput>bzerror</computeroutput> should be checked
  after each call, and (2) if
  <computeroutput>bzerror</computeroutput> indicates an error,
  <computeroutput>BZ2_bzReadClose</computeroutput>
  (<computeroutput>BZ2_bzWriteClose</computeroutput>) should then
  be called to clean up.</para></listitem>

 <listitem><para>The <computeroutput>FILE*</computeroutput> arguments
  passed to <computeroutput>BZ2_bzReadOpen</computeroutput> /
  <computeroutput>BZ2_bzWriteOpen</computeroutput> should be set
  to binary mode.  Most Unix systems will do this by default, but
  other platforms, including Windows and Mac, will not.  If you
  omit this, you may encounter problems when moving code to new
  platforms.</para></listitem>

 <listitem><para>Memory allocation requests are handled by
  <computeroutput>malloc</computeroutput> /
  <computeroutput>free</computeroutput>.  At present there is no
  facility for user-defined memory allocators in the file I/O
  functions (could easily be added, though).</para></listitem>

</itemizedlist>



<sect2 id="bzreadopen" xreflabel="BZ2_bzReadOpen">
<title>BZ2_bzReadOpen</title>

<programlisting>
typedef void BZFILE;

BZFILE *BZ2_bzReadOpen( int *bzerror, FILE *f, 
                        int verbosity, int small,
                        void *unused, int nUnused );
</programlisting>

<para>Prepare to read compressed data from file handle
<computeroutput>f</computeroutput>.
<computeroutput>f</computeroutput> should refer to a file which
has been opened for reading, and for which the error indicator
(<computeroutput>ferror(f)</computeroutput>)is not set.  If
<computeroutput>small</computeroutput> is 1, the library will try
to decompress using less memory, at the expense of speed.</para>

<para>For reasons explained below,
<computeroutput>BZ2_bzRead</computeroutput> will decompress the
<computeroutput>nUnused</computeroutput> bytes starting at
<computeroutput>unused</computeroutput>, before starting to read
from the file <computeroutput>f</computeroutput>.  At most
<computeroutput>BZ_MAX_UNUSED</computeroutput> bytes may be
supplied like this.  If this facility is not required, you should
pass <computeroutput>NULL</computeroutput> and
<computeroutput>0</computeroutput> for
<computeroutput>unused</computeroutput> and
n<computeroutput>Unused</computeroutput> respectively.</para>

<para>For the meaning of parameters
<computeroutput>small</computeroutput> and
<computeroutput>verbosity</computeroutput>, see
<computeroutput>BZ2_bzDecompressInit</computeroutput>.</para>

<para>The amount of memory needed to decompress a file cannot be
determined until the file's header has been read.  So it is
possible that <computeroutput>BZ2_bzReadOpen</computeroutput>
returns <computeroutput>BZ_OK</computeroutput> but a subsequent
call of <computeroutput>BZ2_bzRead</computeroutput> will return
<computeroutput>BZ_MEM_ERROR</computeroutput>.</para>

<para>Possible assignments to
<computeroutput>bzerror</computeroutput>:</para>

<programlisting>
BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if f is NULL
  or small is neither 0 nor 1
  or ( unused == NULL && nUnused != 0 )
  or ( unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED) )
BZ_IO_ERROR
  if ferror(f) is nonzero
BZ_MEM_ERROR
  if insufficient memory is available
BZ_OK
  otherwise.
</programlisting>

<para>Possible return values:</para>

<programlisting>
Pointer to an abstract BZFILE
  if bzerror is BZ_OK
NULL
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
BZ2_bzRead
  if bzerror is BZ_OK
BZ2_bzClose
  otherwise
</programlisting>

</sect2>


<sect2 id="bzread" xreflabel="BZ2_bzRead">
<title>BZ2_bzRead</title>

<programlisting>
int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );
</programlisting>

<para>Reads up to <computeroutput>len</computeroutput>
(uncompressed) bytes from the compressed file
<computeroutput>b</computeroutput> into the buffer
<computeroutput>buf</computeroutput>.  If the read was
successful, <computeroutput>bzerror</computeroutput> is set to
<computeroutput>BZ_OK</computeroutput> and the number of bytes
read is returned.  If the logical end-of-stream was detected,
<computeroutput>bzerror</computeroutput> will be set to
<computeroutput>BZ_STREAM_END</computeroutput>, and the number of
bytes read is returned.  All other
<computeroutput>bzerror</computeroutput> values denote an
error.</para>

<para><computeroutput>BZ2_bzRead</computeroutput> will supply
<computeroutput>len</computeroutput> bytes, unless the logical
stream end is detected or an error occurs.  Because of this, it
is possible to detect the stream end by observing when the number
of bytes returned is less than the number requested.
Nevertheless, this is regarded as inadvisable; you should instead
check <computeroutput>bzerror</computeroutput> after every call
and watch out for
<computeroutput>BZ_STREAM_END</computeroutput>.</para>

<para>Internally, <computeroutput>BZ2_bzRead</computeroutput>
copies data from the compressed file in chunks of size
<computeroutput>BZ_MAX_UNUSED</computeroutput> bytes before
decompressing it.  If the file contains more bytes than strictly
needed to reach the logical end-of-stream,
<computeroutput>BZ2_bzRead</computeroutput> will almost certainly
read some of the trailing data before signalling
<computeroutput>BZ_SEQUENCE_END</computeroutput>.  To collect the
read but unused data once
<computeroutput>BZ_SEQUENCE_END</computeroutput> has appeared,
call <computeroutput>BZ2_bzReadGetUnused</computeroutput>
immediately before
<computeroutput>BZ2_bzReadClose</computeroutput>.</para>

<para>Possible assignments to
<computeroutput>bzerror</computeroutput>:</para>

<programlisting>
BZ_PARAM_ERROR
  if b is NULL or buf is NULL or len < 0
BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzWriteOpen
BZ_IO_ERROR
  if there is an error reading from the compressed file
BZ_UNEXPECTED_EOF
  if the compressed file ended before 
  the logical end-of-stream was detected
BZ_DATA_ERROR
  if a data integrity error was detected in the compressed stream
BZ_DATA_ERROR_MAGIC
  if the stream does not begin with the requisite header bytes 
  (ie, is not a bzip2 data file).  This is really 
  a special case of BZ_DATA_ERROR.
BZ_MEM_ERROR
  if insufficient memory was available
BZ_STREAM_END
  if the logical end of stream was detected.
BZ_OK
  otherwise.
</programlisting>

<para>Possible return values:</para>

<programlisting>
number of bytes read
  if bzerror is BZ_OK or BZ_STREAM_END
undefined
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
collect data from buf, then BZ2_bzRead or BZ2_bzReadClose
  if bzerror is BZ_OK
collect data from buf, then BZ2_bzReadClose or BZ2_bzReadGetUnused
  if bzerror is BZ_SEQUENCE_END
BZ2_bzReadClose
  otherwise
</programlisting>

</sect2>


<sect2 id="bzreadgetunused" xreflabel="BZ2_bzReadGetUnused">
<title>BZ2_bzReadGetUnused</title>

<programlisting>
void BZ2_bzReadGetUnused( int* bzerror, BZFILE *b, 
                          void** unused, int* nUnused );
</programlisting>

<para>Returns data which was read from the compressed file but
was not needed to get to the logical end-of-stream.
<computeroutput>*unused</computeroutput> is set to the address of
the data, and <computeroutput>*nUnused</computeroutput> to the
number of bytes.  <computeroutput>*nUnused</computeroutput> will
be set to a value between <computeroutput>0</computeroutput> and
<computeroutput>BZ_MAX_UNUSED</computeroutput> inclusive.</para>

<para>This function may only be called once
<computeroutput>BZ2_bzRead</computeroutput> has signalled
<computeroutput>BZ_STREAM_END</computeroutput> but before
<computeroutput>BZ2_bzReadClose</computeroutput>.</para>

<para>Possible assignments to
<computeroutput>bzerror</computeroutput>:</para>

<programlisting>
BZ_PARAM_ERROR
  if b is NULL
  or unused is NULL or nUnused is NULL
BZ_SEQUENCE_ERROR
  if BZ_STREAM_END has not been signalled
  or if b was opened with BZ2_bzWriteOpen
BZ_OK
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
BZ2_bzReadClose
</programlisting>

</sect2>


<sect2 id="bzreadclose" xreflabel="BZ2_bzReadClose">
<title>BZ2_bzReadClose</title>

<programlisting>
void BZ2_bzReadClose ( int *bzerror, BZFILE *b );
</programlisting>

<para>Releases all memory pertaining to the compressed file
<computeroutput>b</computeroutput>.
<computeroutput>BZ2_bzReadClose</computeroutput> does not call
<computeroutput>fclose</computeroutput> on the underlying file
handle, so you should do that yourself if appropriate.
<computeroutput>BZ2_bzReadClose</computeroutput> should be called
to clean up after all error situations.</para>

<para>Possible assignments to
<computeroutput>bzerror</computeroutput>:</para>

<programlisting>
BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzOpenWrite
BZ_OK
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
none
</programlisting>

</sect2>


<sect2 id="bzwriteopen" xreflabel="BZ2_bzWriteOpen">
<title>BZ2_bzWriteOpen</title>

<programlisting>
BZFILE *BZ2_bzWriteOpen( int *bzerror, FILE *f, 
                         int blockSize100k, int verbosity,
                         int workFactor );
</programlisting>

<para>Prepare to write compressed data to file handle
<computeroutput>f</computeroutput>.
<computeroutput>f</computeroutput> should refer to a file which
has been opened for writing, and for which the error indicator
(<computeroutput>ferror(f)</computeroutput>)is not set.</para>

<para>For the meaning of parameters
<computeroutput>blockSize100k</computeroutput>,
<computeroutput>verbosity</computeroutput> and
<computeroutput>workFactor</computeroutput>, see
<computeroutput>BZ2_bzCompressInit</computeroutput>.</para>

<para>All required memory is allocated at this stage, so if the
call completes successfully,
<computeroutput>BZ_MEM_ERROR</computeroutput> cannot be signalled
by a subsequent call to
<computeroutput>BZ2_bzWrite</computeroutput>.</para>

<para>Possible assignments to
<computeroutput>bzerror</computeroutput>:</para>

<programlisting>
BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if f is NULL
  or blockSize100k < 1 or blockSize100k > 9
BZ_IO_ERROR
  if ferror(f) is nonzero
BZ_MEM_ERROR
  if insufficient memory is available
BZ_OK
  otherwise
</programlisting>

<para>Possible return values:</para>

<programlisting>
Pointer to an abstract BZFILE
  if bzerror is BZ_OK
NULL
  otherwise
</programlisting>

<para>Allowable next actions:</para>

<programlisting>
BZ2_bzWrite
  if bzerror is BZ_OK
  (you could go directly to BZ2_bzWriteClose, but this would be pretty pointless)
BZ2_bzWriteClose
  otherwise
</programlisting>

</sect2>


<sect2 id="bzwrite" xreflabel="BZ2_bzWrite">
<title>BZ2_bzWrite</title>

<programlisting>
void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );
</programlisting>

<para>Absorbs <computeroutput>len</computeroutput> bytes from the
buffer <computeroutput>buf</computeroutput>, eventually to be
compressed and written to the file.</para>

<para>Possible assignments to
<computeroutput>bzerror</computeroutput>:</para>

<programlisting>
BZ_PARAM_ERROR
  if b is NULL or buf is NULL or len < 0
BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzReadOpen
BZ_IO_ERROR
  if there is an error writing the compressed file.
BZ_OK
  otherwise
</programlisting>

</sect2>


<sect2 id="bzwriteclose" xreflabel="BZ2_bzWriteClose">
<title>BZ2_bzWriteClose</title>

<programlisting>
void BZ2_bzWriteClose( int *bzerror, BZFILE* f,
                       int abandon,
                       unsigned int* nbytes_in,
                       unsigned int* nbytes_out );

void BZ2_bzWriteClose64( int *bzerror, BZFILE* f,
                         int abandon,
                         unsigned int* nbytes_in_lo32,
                         unsigned int* nbytes_in_hi32,
                         unsigned int* nbytes_out_lo32,
                         unsigned int* nbytes_out_hi32 );
</programlisting>

<para>Compresses and flushes to the compressed file all data so
far supplied by <computeroutput>BZ2_bzWrite</computeroutput>.
The logical end-of-stream markers are also written, so subsequent
calls to <computeroutput>BZ2_bzWrite</computeroutput> are
illegal.  All memory associated with the compressed file
<computeroutput>b</computeroutput> is released.
<computeroutput>fflush</computeroutput> is called on the
compressed file, but it is not
<computeroutput>fclose</computeroutput>'d.</para>

<para>If <computeroutput>BZ2_bzWriteClose</computeroutput> is
called to clean up after an error, the only action is to release
the memory.  The library records the error codes issued by
previous calls, so this situation will be detected automatically.
There is no attempt to complete the compression operation, nor to
<computeroutput>fflush</computeroutput> the compressed file.  You
can force this behaviour to happen even in the case of no error,
by passing a nonzero value to
<computeroutput>abandon</computeroutput>.</para>

<para>If <computeroutput>nbytes_in</computeroutput> is non-null,
<computeroutput>*nbytes_in</computeroutput> will be set to be the
total volume of uncompressed data handled.  Similarly,
<computeroutput>nbytes_out</computeroutput> will be set to the
total volume of compressed data written.  For compatibility with
older versions of the library,
<computeroutput>BZ2_bzWriteClose</computeroutput> only yields the
lower 32 bits of these counts.  Use
<computeroutput>BZ2_bzWriteClose64</computeroutput> if you want
the full 64 bit counts.  These two functions are otherwise
absolutely identical.</para>

<para>Possible assignments to
<computeroutput>bzerror</computeroutput>:</para>

<programlisting>
BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzReadOpen
BZ_IO_ERROR
  if there is an error writing the compressed file
BZ_OK
  otherwise
</programlisting>

</sect2>


<sect2 id="embed" xreflabel="Handling embedded compressed data streams">
<title>Handling embedded compressed data streams</title>

<para>The high-level library facilitates use of
<computeroutput>bzip2</computeroutput> data streams which form
some part of a surrounding, larger data stream.</para>

<itemizedlist mark='bullet'>

 <listitem><para>For writing, the library takes an open file handle,
  writes compressed data to it,
  <computeroutput>fflush</computeroutput>es it but does not
  <computeroutput>fclose</computeroutput> it.  The calling
  application can write its own data before and after the
  compressed data stream, using that same file handle.</para></listitem>

 <listitem><para>Reading is more complex, and the facilities are not as
  general as they could be since generality is hard to reconcile
  with efficiency.  <computeroutput>BZ2_bzRead</computeroutput>
  reads from the compressed file in blocks of size
  <computeroutput>BZ_MAX_UNUSED</computeroutput> bytes, and in
  doing so probably will overshoot the logical end of compressed
  stream.  To recover this data once decompression has ended,
  call <computeroutput>BZ2_bzReadGetUnused</computeroutput> after
  the last call of <computeroutput>BZ2_bzRead</computeroutput>
  (the one returning
  <computeroutput>BZ_STREAM_END</computeroutput>) but before
  calling
  <computeroutput>BZ2_bzReadClose</computeroutput>.</para></listitem>

</itemizedlist>

<para>This mechanism makes it easy to decompress multiple
<computeroutput>bzip2</computeroutput> streams placed end-to-end.
As the end of one stream, when
<computeroutput>BZ2_bzRead</computeroutput> returns
<computeroutput>BZ_STREAM_END</computeroutput>, call
<computeroutput>BZ2_bzReadGetUnused</computeroutput> to collect
the unused data (copy it into your own buffer somewhere).  That
data forms the start of the next compressed stream.  To start
uncompressing that next stream, call
<computeroutput>BZ2_bzReadOpen</computeroutput> again, feeding in
the unused data via the <computeroutput>unused</computeroutput> /
<computeroutput>nUnused</computeroutput> parameters.  Keep doing
this until <computeroutput>BZ_STREAM_END</computeroutput> return
coincides with the physical end of file
(<computeroutput>feof(f)</computeroutput>).  In this situation
<computeroutput>BZ2_bzReadGetUnused</computeroutput> will of
course return no data.</para>

<para>This should give some feel for how the high-level interface
can be used.  If you require extra flexibility, you'll have to
bite the bullet and get to grips with the low-level
interface.</para>

</sect2>


<sect2 id="std-rdwr" xreflabel="Standard file-reading/writing code">
<title>Standard file-reading/writing code</title>

<para>Here's how you'd write data to a compressed file:</para>

<programlisting>
FILE*   f;
BZFILE* b;
int     nBuf;
char    buf[ /* whatever size you like */ ];
int     bzerror;
int     nWritten;

f = fopen ( "myfile.bz2", "w" );
if ( !f ) {
 /* handle error */
}
b = BZ2_bzWriteOpen( &bzerror, f, 9 );
if (bzerror != BZ_OK) {
 BZ2_bzWriteClose ( b );
 /* handle error */
}

while ( /* condition */ ) {
 /* get data to write into buf, and set nBuf appropriately */
 nWritten = BZ2_bzWrite ( &bzerror, b, buf, nBuf );
 if (bzerror == BZ_IO_ERROR) { 
   BZ2_bzWriteClose ( &bzerror, b );
   /* handle error */
 }
}

BZ2_bzWriteClose( &bzerror, b );
if (bzerror == BZ_IO_ERROR) {
 /* handle error */
}
</programlisting>

<para>And to read from a compressed file:</para>

<programlisting>
FILE*   f;
BZFILE* b;
int     nBuf;
char    buf[ /* whatever size you like */ ];
int     bzerror;
int     nWritten;

f = fopen ( "myfile.bz2", "r" );
if ( !f ) {
  /* handle error */
}
b = BZ2_bzReadOpen ( &bzerror, f, 0, NULL, 0 );
if ( bzerror != BZ_OK ) {
  BZ2_bzReadClose ( &bzerror, b );
  /* handle error */
}

bzerror = BZ_OK;
while ( bzerror == BZ_OK && /* arbitrary other conditions */) {
  nBuf = BZ2_bzRead ( &bzerror, b, buf, /* size of buf */ );
  if ( bzerror == BZ_OK ) {
    /* do something with buf[0 .. nBuf-1] */
  }
}
if ( bzerror != BZ_STREAM_END ) {
   BZ2_bzReadClose ( &bzerror, b );
   /* handle error */
} else {
   BZ2_bzReadClose ( &bzerror, b );
}
</programlisting>

</sect2>

</sect1>


<sect1 id="util-fns" xreflabel="Utility functions">
<title>Utility functions</title>


<sect2 id="bzbufftobuffcompress" xreflabel="BZ2_bzBuffToBuffCompress">
<title>BZ2_bzBuffToBuffCompress</title>

<programlisting>
int BZ2_bzBuffToBuffCompress( char*         dest,
                              unsigned int* destLen,
                              char*         source,
                              unsigned int  sourceLen,
                              int           blockSize100k,
                              int           verbosity,
                              int           workFactor );
</programlisting>

<para>Attempts to compress the data in <computeroutput>source[0
.. sourceLen-1]</computeroutput> into the destination buffer,
<computeroutput>dest[0 .. *destLen-1]</computeroutput>.  If the
destination buffer is big enough,
<computeroutput>*destLen</computeroutput> is set to the size of
the compressed data, and <computeroutput>BZ_OK</computeroutput>
is returned.  If the compressed data won't fit,
<computeroutput>*destLen</computeroutput> is unchanged, and
<computeroutput>BZ_OUTBUFF_FULL</computeroutput> is
returned.</para>

<para>Compression in this manner is a one-shot event, done with a
single call to this function.  The resulting compressed data is a
complete <computeroutput>bzip2</computeroutput> format data
stream.  There is no mechanism for making additional calls to
provide extra input data.  If you want that kind of mechanism,
use the low-level interface.</para>

<para>For the meaning of parameters
<computeroutput>blockSize100k</computeroutput>,
<computeroutput>verbosity</computeroutput> and
<computeroutput>workFactor</computeroutput>, see
<computeroutput>BZ2_bzCompressInit</computeroutput>.</para>

<para>To guarantee that the compressed data will fit in its
buffer, allocate an output buffer of size 1% larger than the
uncompressed data, plus six hundred extra bytes.</para>

<para><computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput>
will not write data at or beyond
<computeroutput>dest[*destLen]</computeroutput>, even in case of
buffer overflow.</para>

<para>Possible return values:</para>

<programlisting>
BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if dest is NULL or destLen is NULL
  or blockSize100k < 1 or blockSize100k > 9
  or verbosity < 0 or verbosity > 4
  or workFactor < 0 or workFactor > 250
BZ_MEM_ERROR
  if insufficient memory is available 
BZ_OUTBUFF_FULL
  if the size of the compressed data exceeds *destLen
BZ_OK
  otherwise
</programlisting>

</sect2>


<sect2 id="bzbufftobuffdecompress" xreflabel="BZ2_bzBuffToBuffDecompress">
<title>BZ2_bzBuffToBuffDecompress</title>

<programlisting>
int BZ2_bzBuffToBuffDecompress( char*         dest,
                                unsigned int* destLen,
                                char*         source,
                                unsigned int  sourceLen,
                                int           small,
                                int           verbosity );
</programlisting>

<para>Attempts to decompress the data in <computeroutput>source[0
.. sourceLen-1]</computeroutput> into the destination buffer,
<computeroutput>dest[0 .. *destLen-1]</computeroutput>.  If the
destination buffer is big enough,
<computeroutput>*destLen</computeroutput> is set to the size of
the uncompressed data, and <computeroutput>BZ_OK</computeroutput>
is returned.  If the compressed data won't fit,
<computeroutput>*destLen</computeroutput> is unchanged, and
<computeroutput>BZ_OUTBUFF_FULL</computeroutput> is
returned.</para>

<para><computeroutput>source</computeroutput> is assumed to hold
a complete <computeroutput>bzip2</computeroutput> format data
stream.
<computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput> tries
to decompress the entirety of the stream into the output
buffer.</para>

<para>For the meaning of parameters
<computeroutput>small</computeroutput> and
<computeroutput>verbosity</computeroutput>, see
<computeroutput>BZ2_bzDecompressInit</computeroutput>.</para>

<para>Because the compression ratio of the compressed data cannot
be known in advance, there is no easy way to guarantee that the
output buffer will be big enough.  You may of course make
arrangements in your code to record the size of the uncompressed
data, but such a mechanism is beyond the scope of this
library.</para>

<para><computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput>
will not write data at or beyond
<computeroutput>dest[*destLen]</computeroutput>, even in case of
buffer overflow.</para>

<para>Possible return values:</para>

<programlisting>
BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if dest is NULL or destLen is NULL
  or small != 0 && small != 1
  or verbosity < 0 or verbosity > 4
BZ_MEM_ERROR
  if insufficient memory is available 
BZ_OUTBUFF_FULL
  if the size of the compressed data exceeds *destLen
BZ_DATA_ERROR
  if a data integrity error was detected in the compressed data
BZ_DATA_ERROR_MAGIC
  if the compressed data doesn't begin with the right magic bytes
BZ_UNEXPECTED_EOF
  if the compressed data ends unexpectedly
BZ_OK
  otherwise
</programlisting>

</sect2>

</sect1>


<sect1 id="zlib-compat" xreflabel="zlib compatibility functions">
<title>zlib compatibility functions</title>

<para>Yoshioka Tsuneo has contributed some functions to give
better <computeroutput>zlib</computeroutput> compatibility.
These functions are <computeroutput>BZ2_bzopen</computeroutput>,
<computeroutput>BZ2_bzread</computeroutput>,
<computeroutput>BZ2_bzwrite</computeroutput>,
<computeroutput>BZ2_bzflush</computeroutput>,
<computeroutput>BZ2_bzclose</computeroutput>,
<computeroutput>BZ2_bzerror</computeroutput> and
<computeroutput>BZ2_bzlibVersion</computeroutput>.  These
functions are not (yet) officially part of the library.  If they
break, you get to keep all the pieces.  Nevertheless, I think
they work ok.</para>

<programlisting>
typedef void BZFILE;

const char * BZ2_bzlibVersion ( void );
</programlisting>

<para>Returns a string indicating the library version.</para>

<programlisting>
BZFILE * BZ2_bzopen  ( const char *path, const char *mode );
BZFILE * BZ2_bzdopen ( int        fd,    const char *mode );
</programlisting>

<para>Opens a <computeroutput>.bz2</computeroutput> file for
reading or writing, using either its name or a pre-existing file
descriptor.  Analogous to <computeroutput>fopen</computeroutput>
and <computeroutput>fdopen</computeroutput>.</para>

<programlisting>
int BZ2_bzread  ( BZFILE* b, void* buf, int len );
int BZ2_bzwrite ( BZFILE* b, void* buf, int len );
</programlisting>

<para>Reads/writes data from/to a previously opened
<computeroutput>BZFILE</computeroutput>.  Analogous to
<computeroutput>fread</computeroutput> and
<computeroutput>fwrite</computeroutput>.</para>

<programlisting>
int  BZ2_bzflush ( BZFILE* b );
void BZ2_bzclose ( BZFILE* b );
</programlisting>

<para>Flushes/closes a <computeroutput>BZFILE</computeroutput>.
<computeroutput>BZ2_bzflush</computeroutput> doesn't actually do
anything.  Analogous to <computeroutput>fflush</computeroutput>
and <computeroutput>fclose</computeroutput>.</para>

<programlisting>
const char * BZ2_bzerror ( BZFILE *b, int *errnum )
</programlisting>

<para>Returns a string describing the more recent error status of
<computeroutput>b</computeroutput>, and also sets
<computeroutput>*errnum</computeroutput> to its numerical
value.</para>

</sect1>


<sect1 id="stdio-free" 
       xreflabel="Using the library in a stdio-free environment">
<title>Using the library in a stdio-free environment</title>


<sect2 id="stdio-bye" xreflabel="Getting rid of stdio">
<title>Getting rid of stdio</title>

<para>In a deeply embedded application, you might want to use
just the memory-to-memory functions.  You can do this
conveniently by compiling the library with preprocessor symbol
<computeroutput>BZ_NO_STDIO</computeroutput> defined.  Doing this
gives you a library containing only the following eight
functions:</para>

<para><computeroutput>BZ2_bzCompressInit</computeroutput>,
<computeroutput>BZ2_bzCompress</computeroutput>,
<computeroutput>BZ2_bzCompressEnd</computeroutput>
<computeroutput>BZ2_bzDecompressInit</computeroutput>,
<computeroutput>BZ2_bzDecompress</computeroutput>,
<computeroutput>BZ2_bzDecompressEnd</computeroutput>
<computeroutput>BZ2_bzBuffToBuffCompress</computeroutput>,
<computeroutput>BZ2_bzBuffToBuffDecompress</computeroutput></para>

<para>When compiled like this, all functions will ignore
<computeroutput>verbosity</computeroutput> settings.</para>

</sect2>


<sect2 id="critical-error" xreflabel="Critical error handling">
<title>Critical error handling</title>

<para><computeroutput>libbzip2</computeroutput> contains a number
of internal assertion checks which should, needless to say, never
be activated.  Nevertheless, if an assertion should fail,
behaviour depends on whether or not the library was compiled with
<computeroutput>BZ_NO_STDIO</computeroutput> set.</para>

<para>For a normal compile, an assertion failure yields the
message:</para>

<blockquote>
<para>bzip2/libbzip2: internal error number N.</para>
<para>This is a bug in bzip2/libbzip2, &bz-version; of &bz-date;.
Please report it to: &bz-email;.  If this happened
when you were using some program which uses libbzip2 as a
component, you should also report this bug to the author(s)
of that program.  Please make an effort to report this bug;
timely and accurate bug reports eventually lead to higher
quality software.  Thanks.
</para></blockquote>

<para>where <computeroutput>N</computeroutput> is some error code
number.  If <computeroutput>N == 1007</computeroutput>, it also
prints some extra text advising the reader that unreliable memory
is often associated with internal error 1007. (This is a
frequently-observed-phenomenon with versions 1.0.0/1.0.1).</para>

<para><computeroutput>exit(3)</computeroutput> is then
called.</para>

<para>For a <computeroutput>stdio</computeroutput>-free library,
assertion failures result in a call to a function declared
as:</para>

<programlisting>
extern void bz_internal_error ( int errcode );
</programlisting>

<para>The relevant code is passed as a parameter.  You should
supply such a function.</para>

<para>In either case, once an assertion failure has occurred, any
<computeroutput>bz_stream</computeroutput> records involved can
be regarded as invalid.  You should not attempt to resume normal
operation with them.</para>

<para>You may, of course, change critical error handling to suit
your needs.  As I said above, critical errors indicate bugs in
the library and should not occur.  All "normal" error situations
are indicated via error return codes from functions, and can be
recovered from.</para>

</sect2>

</sect1>


<sect1 id="win-dll" xreflabel="Making a Windows DLL">
<title>Making a Windows DLL</title>

<para>Everything related to Windows has been contributed by
Yoshioka Tsuneo
(<computeroutput>tsuneo@rr.iij4u.or.jp</computeroutput>), so
you should send your queries to him (but please Cc:
<computeroutput>&bz-email;</computeroutput>).</para>

<para>My vague understanding of what to do is: using Visual C++
5.0, open the project file
<computeroutput>libbz2.dsp</computeroutput>, and build.  That's
all.</para>

<para>If you can't open the project file for some reason, make a
new one, naming these files:
<computeroutput>blocksort.c</computeroutput>,
<computeroutput>bzlib.c</computeroutput>,
<computeroutput>compress.c</computeroutput>,
<computeroutput>crctable.c</computeroutput>,
<computeroutput>decompress.c</computeroutput>,
<computeroutput>huffman.c</computeroutput>,
<computeroutput>randtable.c</computeroutput> and
<computeroutput>libbz2.def</computeroutput>.  You will also need
to name the header files <computeroutput>bzlib.h</computeroutput>
and <computeroutput>bzlib_private.h</computeroutput>.</para>

<para>If you don't use VC++, you may need to define the
proprocessor symbol
<computeroutput>_WIN32</computeroutput>.</para>

<para>Finally, <computeroutput>dlltest.c</computeroutput> is a
sample program using the DLL.  It has a project file,
<computeroutput>dlltest.dsp</computeroutput>.</para>

<para>If you just want a makefile for Visual C, have a look at
<computeroutput>makefile.msc</computeroutput>.</para>

<para>Be aware that if you compile
<computeroutput>bzip2</computeroutput> itself on Win32, you must
set <computeroutput>BZ_UNIX</computeroutput> to 0 and
<computeroutput>BZ_LCCWIN32</computeroutput> to 1, in the file
<computeroutput>bzip2.c</computeroutput>, before compiling.
Otherwise the resulting binary won't work correctly.</para>

<para>I haven't tried any of this stuff myself, but it all looks
plausible.</para>

</sect1>

</chapter>



<chapter id="misc" xreflabel="Miscellanea">
<title>Miscellanea</title>

<para>These are just some random thoughts of mine.  Your mileage
may vary.</para>


<sect1 id="limits" xreflabel="Limitations of the compressed file format">
<title>Limitations of the compressed file format</title>

<para><computeroutput>bzip2-1.0.X</computeroutput>,
<computeroutput>0.9.5</computeroutput> and
<computeroutput>0.9.0</computeroutput> use exactly the same file
format as the original version,
<computeroutput>bzip2-0.1</computeroutput>.  This decision was
made in the interests of stability.  Creating yet another
incompatible compressed file format would create further
confusion and disruption for users.</para>

<para>Nevertheless, this is not a painless decision.  Development
work since the release of
<computeroutput>bzip2-0.1</computeroutput> in August 1997 has
shown complexities in the file format which slow down
decompression and, in retrospect, are unnecessary.  These
are:</para>

<itemizedlist mark='bullet'>

 <listitem><para>The run-length encoder, which is the first of the
   compression transformations, is entirely irrelevant.  The
   original purpose was to protect the sorting algorithm from the
   very worst case input: a string of repeated symbols.  But
   algorithm steps Q6a and Q6b in the original Burrows-Wheeler
   technical report (SRC-124) show how repeats can be handled
   without difficulty in block sorting.</para></listitem>

 <listitem><para>The randomisation mechanism doesn't really need to be
   there.  Udi Manber and Gene Myers published a suffix array
   construction algorithm a few years back, which can be employed
   to sort any block, no matter how repetitive, in O(N log N)
   time.  Subsequent work by Kunihiko Sadakane has produced a
   derivative O(N (log N)^2) algorithm which usually outperforms
   the Manber-Myers algorithm.</para>

   <para>I could have changed to Sadakane's algorithm, but I find
   it to be slower than <computeroutput>bzip2</computeroutput>'s
   existing algorithm for most inputs, and the randomisation
   mechanism protects adequately against bad cases.  I didn't
   think it was a good tradeoff to make.  Partly this is due to
   the fact that I was not flooded with email complaints about
   <computeroutput>bzip2-0.1</computeroutput>'s performance on
   repetitive data, so perhaps it isn't a problem for real
   inputs.</para>

   <para>Probably the best long-term solution, and the one I have
   incorporated into 0.9.5 and above, is to use the existing
   sorting algorithm initially, and fall back to a O(N (log N)^2)
   algorithm if the standard algorithm gets into
   difficulties.</para></listitem>

  <listitem><para>The compressed file format was never designed to be
   handled by a library, and I have had to jump though some hoops
   to produce an efficient implementation of decompression.  It's
   a bit hairy.  Try passing
   <computeroutput>decompress.c</computeroutput> through the C
   preprocessor and you'll see what I mean.  Much of this
   complexity could have been avoided if the compressed size of
   each block of data was recorded in the data stream.</para></listitem>

 <listitem><para>An Adler-32 checksum, rather than a CRC32 checksum,
   would be faster to compute.</para></listitem>

</itemizedlist>

<para>It would be fair to say that the
<computeroutput>bzip2</computeroutput> format was frozen before I
properly and fully understood the performance consequences of
doing so.</para>

<para>Improvements which I was able to incorporate into 0.9.0,
despite using the same file format, are:</para>

<itemizedlist mark='bullet'>

 <listitem><para>Single array implementation of the inverse BWT.  This
  significantly speeds up decompression, presumably because it
  reduces the number of cache misses.</para></listitem>

 <listitem><para>Faster inverse MTF transform for large MTF values.
  The new implementation is based on the notion of sliding blocks
  of values.</para></listitem>

 <listitem><para><computeroutput>bzip2-0.9.0</computeroutput> now reads
  and writes files with <computeroutput>fread</computeroutput>
  and <computeroutput>fwrite</computeroutput>; version 0.1 used
  <computeroutput>putc</computeroutput> and
  <computeroutput>getc</computeroutput>.  Duh!  Well, you live
  and learn.</para></listitem>

</itemizedlist>

<para>Further ahead, it would be nice to be able to do random
access into files.  This will require some careful design of
compressed file formats.</para>

</sect1>


<sect1 id="port-issues" xreflabel="Portability issues">
<title>Portability issues</title>

<para>After some consideration, I have decided not to use GNU
<computeroutput>autoconf</computeroutput> to configure 0.9.5 or
1.0.</para>

<para><computeroutput>autoconf</computeroutput>, admirable and
wonderful though it is, mainly assists with portability problems
between Unix-like platforms.  But
<computeroutput>bzip2</computeroutput> doesn't have much in the
way of portability problems on Unix; most of the difficulties
appear when porting to the Mac, or to Microsoft's operating
systems.  <computeroutput>autoconf</computeroutput> doesn't help
in those cases, and brings in a whole load of new
complexity.</para>

<para>Most people should be able to compile the library and
program under Unix straight out-of-the-box, so to speak,
especially if you have a version of GNU C available.</para>

<para>There are a couple of
<computeroutput>__inline__</computeroutput> directives in the
code.  GNU C (<computeroutput>gcc</computeroutput>) should be
able to handle them.  If you're not using GNU C, your C compiler
shouldn't see them at all.  If your compiler does, for some
reason, see them and doesn't like them, just
<computeroutput>#define</computeroutput>
<computeroutput>__inline__</computeroutput> to be
<computeroutput>/* */</computeroutput>.  One easy way to do this
is to compile with the flag
<computeroutput>-D__inline__=</computeroutput>, which should be
understood by most Unix compilers.</para>

<para>If you still have difficulties, try compiling with the
macro <computeroutput>BZ_STRICT_ANSI</computeroutput> defined.
This should enable you to build the library in a strictly ANSI
compliant environment.  Building the program itself like this is
dangerous and not supported, since you remove
<computeroutput>bzip2</computeroutput>'s checks against
compressing directories, symbolic links, devices, and other
not-really-a-file entities.  This could cause filesystem
corruption!</para>

<para>One other thing: if you create a
<computeroutput>bzip2</computeroutput> binary for public distribution,
please consider linking it statically (<computeroutput>gcc
-static</computeroutput>).  This avoids all sorts of library-version
issues that others may encounter later on.</para>

<para>If you build <computeroutput>bzip2</computeroutput> on
Win32, you must set <computeroutput>BZ_UNIX</computeroutput> to 0
and <computeroutput>BZ_LCCWIN32</computeroutput> to 1, in the
file <computeroutput>bzip2.c</computeroutput>, before compiling.
Otherwise the resulting binary won't work correctly.</para>

</sect1>


<sect1 id="bugs" xreflabel="Reporting bugs">
<title>Reporting bugs</title>

<para>I tried pretty hard to make sure
<computeroutput>bzip2</computeroutput> is bug free, both by
design and by testing.  Hopefully you'll never need to read this
section for real.</para>

<para>Nevertheless, if <computeroutput>bzip2</computeroutput> dies
with a segmentation fault, a bus error or an internal assertion
failure, it will ask you to email me a bug report.  Experience from
years of feedback of bzip2 users indicates that almost all these
problems can be traced to either compiler bugs or hardware
problems.</para>

<itemizedlist mark='bullet'>

 <listitem><para>Recompile the program with no optimisation, and
  see if it works.  And/or try a different compiler.  I heard all
  sorts of stories about various flavours of GNU C (and other
  compilers) generating bad code for
  <computeroutput>bzip2</computeroutput>, and I've run across two
  such examples myself.</para>

  <para>2.7.X versions of GNU C are known to generate bad code
  from time to time, at high optimisation levels.  If you get
  problems, try using the flags
  <computeroutput>-O2</computeroutput>
  <computeroutput>-fomit-frame-pointer</computeroutput>
  <computeroutput>-fno-strength-reduce</computeroutput>.  You
  should specifically <emphasis>not</emphasis> use
  <computeroutput>-funroll-loops</computeroutput>.</para>

  <para>You may notice that the Makefile runs six tests as part
  of the build process.  If the program passes all of these, it's
  a pretty good (but not 100%) indication that the compiler has
  done its job correctly.</para></listitem>

 <listitem><para>If <computeroutput>bzip2</computeroutput>
  crashes randomly, and the crashes are not repeatable, you may
  have a flaky memory subsystem.
  <computeroutput>bzip2</computeroutput> really hammers your
  memory hierarchy, and if it's a bit marginal, you may get these
  problems.  Ditto if your disk or I/O subsystem is slowly
  failing.  Yup, this really does happen.</para>

  <para>Try using a different machine of the same type, and see
  if you can repeat the problem.</para></listitem>

  <listitem><para>This isn't really a bug, but ... If
  <computeroutput>bzip2</computeroutput> tells you your file is
  corrupted on decompression, and you obtained the file via FTP,
  there is a possibility that you forgot to tell FTP to do a
  binary mode transfer.  That absolutely will cause the file to
  be non-decompressible.  You'll have to transfer it
  again.</para></listitem>

</itemizedlist>

<para>If you've incorporated
<computeroutput>libbzip2</computeroutput> into your own program
and are getting problems, please, please, please, check that the
parameters you are passing in calls to the library, are correct,
and in accordance with what the documentation says is allowable.
I have tried to make the library robust against such problems,
but I'm sure I haven't succeeded.</para>

<para>Finally, if the above comments don't help, you'll have to
send me a bug report.  Now, it's just amazing how many people
will send me a bug report saying something like:</para>

<programlisting>
bzip2 crashed with segmentation fault on my machine
</programlisting>

<para>and absolutely nothing else.  Needless to say, a such a
report is <emphasis>totally, utterly, completely and
comprehensively 100% useless; a waste of your time, my time, and
net bandwidth</emphasis>.  With no details at all, there's no way
I can possibly begin to figure out what the problem is.</para>

<para>The rules of the game are: facts, facts, facts.  Don't omit
them because "oh, they won't be relevant".  At the bare
minimum:</para>

<programlisting>
Machine type.  Operating system version.  
Exact version of bzip2 (do bzip2 -V).  
Exact version of the compiler used.  
Flags passed to the compiler.
</programlisting>

<para>However, the most important single thing that will help me
is the file that you were trying to compress or decompress at the
time the problem happened.  Without that, my ability to do
anything more than speculate about the cause, is limited.</para>

</sect1>


<sect1 id="package" xreflabel="Did you get the right package?">
<title>Did you get the right package?</title>

<para><computeroutput>bzip2</computeroutput> is a resource hog.
It soaks up large amounts of CPU cycles and memory.  Also, it
gives very large latencies.  In the worst case, you can feed many
megabytes of uncompressed data into the library before getting
any compressed output, so this probably rules out applications
requiring interactive behaviour.</para>

<para>These aren't faults of my implementation, I hope, but more
an intrinsic property of the Burrows-Wheeler transform
(unfortunately).  Maybe this isn't what you want.</para>

<para>If you want a compressor and/or library which is faster,
uses less memory but gets pretty good compression, and has
minimal latency, consider Jean-loup Gailly's and Mark Adler's
work, <computeroutput>zlib-1.2.1</computeroutput> and
<computeroutput>gzip-1.2.4</computeroutput>.  Look for them at 
<ulink url="http://www.zlib.org">http://www.zlib.org</ulink> and 
<ulink url="http://www.gzip.org">http://www.gzip.org</ulink>
respectively.</para>

<para>For something faster and lighter still, you might try Markus F
X J Oberhumer's <computeroutput>LZO</computeroutput> real-time
compression/decompression library, at 
<ulink url="http://www.oberhumer.com/opensource">http://www.oberhumer.com/opensource</ulink>.</para>

</sect1>



<sect1 id="reading" xreflabel="Further Reading">
<title>Further Reading</title>

<para><computeroutput>bzip2</computeroutput> is not research
work, in the sense that it doesn't present any new ideas.
Rather, it's an engineering exercise based on existing
ideas.</para>

<para>Four documents describe essentially all the ideas behind
<computeroutput>bzip2</computeroutput>:</para>

<literallayout>Michael Burrows and D. J. Wheeler:
  "A block-sorting lossless data compression algorithm"
   10th May 1994. 
   Digital SRC Research Report 124.
   ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz
   If you have trouble finding it, try searching at the
   New Zealand Digital Library, http://www.nzdl.org.

Daniel S. Hirschberg and Debra A. LeLewer
  "Efficient Decoding of Prefix Codes"
   Communications of the ACM, April 1990, Vol 33, Number 4.
   You might be able to get an electronic copy of this
   from the ACM Digital Library.

David J. Wheeler
   Program bred3.c and accompanying document bred3.ps.
   This contains the idea behind the multi-table Huffman coding scheme.
   ftp://ftp.cl.cam.ac.uk/users/djw3/

Jon L. Bentley and Robert Sedgewick
  "Fast Algorithms for Sorting and Searching Strings"
   Available from Sedgewick's web page,
   www.cs.princeton.edu/~rs
</literallayout>

<para>The following paper gives valuable additional insights into
the algorithm, but is not immediately the basis of any code used
in bzip2.</para>

<literallayout>Peter Fenwick:
   Block Sorting Text Compression
   Proceedings of the 19th Australasian Computer Science Conference,
     Melbourne, Australia.  Jan 31 - Feb 2, 1996.
   ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps</literallayout>

<para>Kunihiko Sadakane's sorting algorithm, mentioned above, is
available from:</para>

<literallayout>http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz
</literallayout>

<para>The Manber-Myers suffix array construction algorithm is
described in a paper available from:</para>

<literallayout>http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps
</literallayout>

<para>Finally, the following papers document some
investigations I made into the performance of sorting
and decompression algorithms:</para>

<literallayout>Julian Seward
   On the Performance of BWT Sorting Algorithms
   Proceedings of the IEEE Data Compression Conference 2000
     Snowbird, Utah.  28-30 March 2000.

Julian Seward
   Space-time Tradeoffs in the Inverse B-W Transform
   Proceedings of the IEEE Data Compression Conference 2001
     Snowbird, Utah.  27-29 March 2001.
</literallayout>

</sect1>

</chapter>

</book>
