xref: /plan9/sys/src/cmd/bzip2/lib/bzlib.h (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
1*59cc4ca5SDavid du Colombier /*
2*59cc4ca5SDavid du Colombier  * THIS FILE IS NOT IDENTICAL TO THE ORIGINAL
3*59cc4ca5SDavid du Colombier  * FROM THE BZIP2 DISTRIBUTION.
4*59cc4ca5SDavid du Colombier  *
5*59cc4ca5SDavid du Colombier  * It has been modified, mainly to break the library
6*59cc4ca5SDavid du Colombier  * into smaller pieces.
7*59cc4ca5SDavid du Colombier  *
8*59cc4ca5SDavid du Colombier  * Russ Cox
9*59cc4ca5SDavid du Colombier  * rsc@plan9.bell-labs.com
10*59cc4ca5SDavid du Colombier  * July 2000
11*59cc4ca5SDavid du Colombier  */
12*59cc4ca5SDavid du Colombier 
13*59cc4ca5SDavid du Colombier 
14*59cc4ca5SDavid du Colombier /*-------------------------------------------------------------*/
15*59cc4ca5SDavid du Colombier /*--- Public header file for the library.                   ---*/
16*59cc4ca5SDavid du Colombier /*---                                               bzlib.h ---*/
17*59cc4ca5SDavid du Colombier /*-------------------------------------------------------------*/
18*59cc4ca5SDavid du Colombier 
19*59cc4ca5SDavid du Colombier /*--
20*59cc4ca5SDavid du Colombier   This file is a part of bzip2 and/or libbzip2, a program and
21*59cc4ca5SDavid du Colombier   library for lossless, block-sorting data compression.
22*59cc4ca5SDavid du Colombier 
23*59cc4ca5SDavid du Colombier   Copyright (C) 1996-2000 Julian R Seward.  All rights reserved.
24*59cc4ca5SDavid du Colombier 
25*59cc4ca5SDavid du Colombier   Redistribution and use in source and binary forms, with or without
26*59cc4ca5SDavid du Colombier   modification, are permitted provided that the following conditions
27*59cc4ca5SDavid du Colombier   are met:
28*59cc4ca5SDavid du Colombier 
29*59cc4ca5SDavid du Colombier   1. Redistributions of source code must retain the above copyright
30*59cc4ca5SDavid du Colombier      notice, this list of conditions and the following disclaimer.
31*59cc4ca5SDavid du Colombier 
32*59cc4ca5SDavid du Colombier   2. The origin of this software must not be misrepresented; you must
33*59cc4ca5SDavid du Colombier      not claim that you wrote the original software.  If you use this
34*59cc4ca5SDavid du Colombier      software in a product, an acknowledgment in the product
35*59cc4ca5SDavid du Colombier      documentation would be appreciated but is not required.
36*59cc4ca5SDavid du Colombier 
37*59cc4ca5SDavid du Colombier   3. Altered source versions must be plainly marked as such, and must
38*59cc4ca5SDavid du Colombier      not be misrepresented as being the original software.
39*59cc4ca5SDavid du Colombier 
40*59cc4ca5SDavid du Colombier   4. The name of the author may not be used to endorse or promote
41*59cc4ca5SDavid du Colombier      products derived from this software without specific prior written
42*59cc4ca5SDavid du Colombier      permission.
43*59cc4ca5SDavid du Colombier 
44*59cc4ca5SDavid du Colombier   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
45*59cc4ca5SDavid du Colombier   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
46*59cc4ca5SDavid du Colombier   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
47*59cc4ca5SDavid du Colombier   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
48*59cc4ca5SDavid du Colombier   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
49*59cc4ca5SDavid du Colombier   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
50*59cc4ca5SDavid du Colombier   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
51*59cc4ca5SDavid du Colombier   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
52*59cc4ca5SDavid du Colombier   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
53*59cc4ca5SDavid du Colombier   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
54*59cc4ca5SDavid du Colombier   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55*59cc4ca5SDavid du Colombier 
56*59cc4ca5SDavid du Colombier   Julian Seward, Cambridge, UK.
57*59cc4ca5SDavid du Colombier   jseward@acm.org
58*59cc4ca5SDavid du Colombier   bzip2/libbzip2 version 1.0 of 21 March 2000
59*59cc4ca5SDavid du Colombier 
60*59cc4ca5SDavid du Colombier   This program is based on (at least) the work of:
61*59cc4ca5SDavid du Colombier      Mike Burrows
62*59cc4ca5SDavid du Colombier      David Wheeler
63*59cc4ca5SDavid du Colombier      Peter Fenwick
64*59cc4ca5SDavid du Colombier      Alistair Moffat
65*59cc4ca5SDavid du Colombier      Radford Neal
66*59cc4ca5SDavid du Colombier      Ian H. Witten
67*59cc4ca5SDavid du Colombier      Robert Sedgewick
68*59cc4ca5SDavid du Colombier      Jon L. Bentley
69*59cc4ca5SDavid du Colombier 
70*59cc4ca5SDavid du Colombier   For more information on these sources, see the manual.
71*59cc4ca5SDavid du Colombier --*/
72*59cc4ca5SDavid du Colombier 
73*59cc4ca5SDavid du Colombier #ifndef _BZLIB_H
74*59cc4ca5SDavid du Colombier #define _BZLIB_H
75*59cc4ca5SDavid du Colombier 
76*59cc4ca5SDavid du Colombier #ifdef __cplusplus
77*59cc4ca5SDavid du Colombier extern "C" {
78*59cc4ca5SDavid du Colombier #endif
79*59cc4ca5SDavid du Colombier 
80*59cc4ca5SDavid du Colombier #define BZ_RUN               0
81*59cc4ca5SDavid du Colombier #define BZ_FLUSH             1
82*59cc4ca5SDavid du Colombier #define BZ_FINISH            2
83*59cc4ca5SDavid du Colombier 
84*59cc4ca5SDavid du Colombier #define BZ_OK                0
85*59cc4ca5SDavid du Colombier #define BZ_RUN_OK            1
86*59cc4ca5SDavid du Colombier #define BZ_FLUSH_OK          2
87*59cc4ca5SDavid du Colombier #define BZ_FINISH_OK         3
88*59cc4ca5SDavid du Colombier #define BZ_STREAM_END        4
89*59cc4ca5SDavid du Colombier #define BZ_SEQUENCE_ERROR    (-1)
90*59cc4ca5SDavid du Colombier #define BZ_PARAM_ERROR       (-2)
91*59cc4ca5SDavid du Colombier #define BZ_MEM_ERROR         (-3)
92*59cc4ca5SDavid du Colombier #define BZ_DATA_ERROR        (-4)
93*59cc4ca5SDavid du Colombier #define BZ_DATA_ERROR_MAGIC  (-5)
94*59cc4ca5SDavid du Colombier #define BZ_IO_ERROR          (-6)
95*59cc4ca5SDavid du Colombier #define BZ_UNEXPECTED_EOF    (-7)
96*59cc4ca5SDavid du Colombier #define BZ_OUTBUFF_FULL      (-8)
97*59cc4ca5SDavid du Colombier #define BZ_CONFIG_ERROR      (-9)
98*59cc4ca5SDavid du Colombier 
99*59cc4ca5SDavid du Colombier typedef
100*59cc4ca5SDavid du Colombier    struct {
101*59cc4ca5SDavid du Colombier       char *next_in;
102*59cc4ca5SDavid du Colombier       unsigned int avail_in;
103*59cc4ca5SDavid du Colombier       unsigned int total_in_lo32;
104*59cc4ca5SDavid du Colombier       unsigned int total_in_hi32;
105*59cc4ca5SDavid du Colombier 
106*59cc4ca5SDavid du Colombier       char *next_out;
107*59cc4ca5SDavid du Colombier       unsigned int avail_out;
108*59cc4ca5SDavid du Colombier       unsigned int total_out_lo32;
109*59cc4ca5SDavid du Colombier       unsigned int total_out_hi32;
110*59cc4ca5SDavid du Colombier 
111*59cc4ca5SDavid du Colombier       void *state;
112*59cc4ca5SDavid du Colombier 
113*59cc4ca5SDavid du Colombier       void *(*bzalloc)(void *,int,int);
114*59cc4ca5SDavid du Colombier       void (*bzfree)(void *,void *);
115*59cc4ca5SDavid du Colombier       void *opaque;
116*59cc4ca5SDavid du Colombier    }
117*59cc4ca5SDavid du Colombier    bz_stream;
118*59cc4ca5SDavid du Colombier 
119*59cc4ca5SDavid du Colombier 
120*59cc4ca5SDavid du Colombier #ifndef BZ_IMPORT
121*59cc4ca5SDavid du Colombier #define BZ_EXPORT
122*59cc4ca5SDavid du Colombier #endif
123*59cc4ca5SDavid du Colombier 
124*59cc4ca5SDavid du Colombier #ifdef _WIN32
125*59cc4ca5SDavid du Colombier #   include <stdio.h>
126*59cc4ca5SDavid du Colombier #   include <windows.h>
127*59cc4ca5SDavid du Colombier #   ifdef small
128*59cc4ca5SDavid du Colombier       /* windows.h define small to char */
129*59cc4ca5SDavid du Colombier #      undef small
130*59cc4ca5SDavid du Colombier #   endif
131*59cc4ca5SDavid du Colombier #   ifdef BZ_EXPORT
132*59cc4ca5SDavid du Colombier #   define BZ_API(func) WINAPI func
133*59cc4ca5SDavid du Colombier #   define BZ_EXTERN extern
134*59cc4ca5SDavid du Colombier #   else
135*59cc4ca5SDavid du Colombier    /* import windows dll dynamically */
136*59cc4ca5SDavid du Colombier #   define BZ_API(func) (WINAPI * func)
137*59cc4ca5SDavid du Colombier #   define BZ_EXTERN
138*59cc4ca5SDavid du Colombier #   endif
139*59cc4ca5SDavid du Colombier #else
140*59cc4ca5SDavid du Colombier #   define BZ_API(func) func
141*59cc4ca5SDavid du Colombier #   define BZ_EXTERN extern
142*59cc4ca5SDavid du Colombier #endif
143*59cc4ca5SDavid du Colombier 
144*59cc4ca5SDavid du Colombier 
145*59cc4ca5SDavid du Colombier /*-- Core (low-level) library functions --*/
146*59cc4ca5SDavid du Colombier 
147*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzCompressInit) (
148*59cc4ca5SDavid du Colombier       bz_stream* strm,
149*59cc4ca5SDavid du Colombier       int        blockSize100k,
150*59cc4ca5SDavid du Colombier       int        verbosity,
151*59cc4ca5SDavid du Colombier       int        workFactor
152*59cc4ca5SDavid du Colombier    );
153*59cc4ca5SDavid du Colombier 
154*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzCompress) (
155*59cc4ca5SDavid du Colombier       bz_stream* strm,
156*59cc4ca5SDavid du Colombier       int action
157*59cc4ca5SDavid du Colombier    );
158*59cc4ca5SDavid du Colombier 
159*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) (
160*59cc4ca5SDavid du Colombier       bz_stream* strm
161*59cc4ca5SDavid du Colombier    );
162*59cc4ca5SDavid du Colombier 
163*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) (
164*59cc4ca5SDavid du Colombier       bz_stream *strm,
165*59cc4ca5SDavid du Colombier       int       verbosity,
166*59cc4ca5SDavid du Colombier       int       small
167*59cc4ca5SDavid du Colombier    );
168*59cc4ca5SDavid du Colombier 
169*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzDecompress) (
170*59cc4ca5SDavid du Colombier       bz_stream* strm
171*59cc4ca5SDavid du Colombier    );
172*59cc4ca5SDavid du Colombier 
173*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) (
174*59cc4ca5SDavid du Colombier       bz_stream *strm
175*59cc4ca5SDavid du Colombier    );
176*59cc4ca5SDavid du Colombier 
177*59cc4ca5SDavid du Colombier 
178*59cc4ca5SDavid du Colombier 
179*59cc4ca5SDavid du Colombier /*-- Utility functions --*/
180*59cc4ca5SDavid du Colombier 
181*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) (
182*59cc4ca5SDavid du Colombier       char*         dest,
183*59cc4ca5SDavid du Colombier       unsigned int* destLen,
184*59cc4ca5SDavid du Colombier       char*         source,
185*59cc4ca5SDavid du Colombier       unsigned int  sourceLen,
186*59cc4ca5SDavid du Colombier       int           blockSize100k,
187*59cc4ca5SDavid du Colombier       int           verbosity,
188*59cc4ca5SDavid du Colombier       int           workFactor
189*59cc4ca5SDavid du Colombier    );
190*59cc4ca5SDavid du Colombier 
191*59cc4ca5SDavid du Colombier BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) (
192*59cc4ca5SDavid du Colombier       char*         dest,
193*59cc4ca5SDavid du Colombier       unsigned int* destLen,
194*59cc4ca5SDavid du Colombier       char*         source,
195*59cc4ca5SDavid du Colombier       unsigned int  sourceLen,
196*59cc4ca5SDavid du Colombier       int           small,
197*59cc4ca5SDavid du Colombier       int           verbosity
198*59cc4ca5SDavid du Colombier    );
199*59cc4ca5SDavid du Colombier 
200*59cc4ca5SDavid du Colombier 
201*59cc4ca5SDavid du Colombier /*--
202*59cc4ca5SDavid du Colombier    Code contributed by Yoshioka Tsuneo
203*59cc4ca5SDavid du Colombier    (QWF00133@niftyserve.or.jp/tsuneo-y@is.aist-nara.ac.jp),
204*59cc4ca5SDavid du Colombier    to support better zlib compatibility.
205*59cc4ca5SDavid du Colombier    This code is not _officially_ part of libbzip2 (yet);
206*59cc4ca5SDavid du Colombier    I haven't tested it, documented it, or considered the
207*59cc4ca5SDavid du Colombier    threading-safeness of it.
208*59cc4ca5SDavid du Colombier    If this code breaks, please contact both Yoshioka and me.
209*59cc4ca5SDavid du Colombier --*/
210*59cc4ca5SDavid du Colombier 
211*59cc4ca5SDavid du Colombier BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
212*59cc4ca5SDavid du Colombier       void
213*59cc4ca5SDavid du Colombier    );
214*59cc4ca5SDavid du Colombier 
215*59cc4ca5SDavid du Colombier #ifdef __cplusplus
216*59cc4ca5SDavid du Colombier }
217*59cc4ca5SDavid du Colombier #endif
218*59cc4ca5SDavid du Colombier 
219*59cc4ca5SDavid du Colombier #endif
220*59cc4ca5SDavid du Colombier 
221*59cc4ca5SDavid du Colombier /*-------------------------------------------------------------*/
222*59cc4ca5SDavid du Colombier /*--- end                                           bzlib.h ---*/
223*59cc4ca5SDavid du Colombier /*-------------------------------------------------------------*/
224