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