178556Sobrien 278556Sobrien/*-------------------------------------------------------------*/ 378556Sobrien/*--- Private header file for the library. ---*/ 478556Sobrien/*--- bzlib_private.h ---*/ 578556Sobrien/*-------------------------------------------------------------*/ 678556Sobrien 7167974Sdelphij/* ------------------------------------------------------------------ 8167974Sdelphij This file is part of bzip2/libbzip2, a program and library for 9167974Sdelphij lossless, block-sorting data compression. 1078556Sobrien 11215041Sobrien bzip2/libbzip2 version 1.0.6 of 6 September 2010 12215041Sobrien Copyright (C) 1996-2010 Julian Seward <jseward@bzip.org> 1378556Sobrien 14167974Sdelphij Please read the WARNING, DISCLAIMER and PATENTS sections in the 15167974Sdelphij README file. 1678556Sobrien 17167974Sdelphij This program is released under the terms of the license contained 18167974Sdelphij in the file LICENSE. 19167974Sdelphij ------------------------------------------------------------------ */ 2078556Sobrien 2178556Sobrien 2278556Sobrien#ifndef _BZLIB_PRIVATE_H 2378556Sobrien#define _BZLIB_PRIVATE_H 2478556Sobrien 2578556Sobrien#include <stdlib.h> 2678556Sobrien 2778556Sobrien#ifndef BZ_NO_STDIO 2878556Sobrien#include <stdio.h> 2978556Sobrien#include <ctype.h> 3078556Sobrien#include <string.h> 3178556Sobrien#endif 3278556Sobrien 3378556Sobrien#include "bzlib.h" 3478556Sobrien 3578556Sobrien 3678556Sobrien 3778556Sobrien/*-- General stuff. --*/ 3878556Sobrien 39215041Sobrien#define BZ_VERSION "1.0.6, 6-Sept-2010" 4078556Sobrien 4178556Sobrientypedef char Char; 4278556Sobrientypedef unsigned char Bool; 4378556Sobrientypedef unsigned char UChar; 4478556Sobrientypedef int Int32; 4578556Sobrientypedef unsigned int UInt32; 4678556Sobrientypedef short Int16; 4778556Sobrientypedef unsigned short UInt16; 4878556Sobrien 4978556Sobrien#define True ((Bool)1) 5078556Sobrien#define False ((Bool)0) 5178556Sobrien 5278556Sobrien#ifndef __GNUC__ 5378556Sobrien#define __inline__ /* */ 5478556Sobrien#endif 5578556Sobrien 5678556Sobrien#ifndef BZ_NO_STDIO 57167974Sdelphij 5878556Sobrienextern void BZ2_bz__AssertH__fail ( int errcode ); 5978556Sobrien#define AssertH(cond,errcode) \ 6078556Sobrien { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } 61167974Sdelphij 6278556Sobrien#if BZ_DEBUG 6378556Sobrien#define AssertD(cond,msg) \ 6478556Sobrien { if (!(cond)) { \ 6578556Sobrien fprintf ( stderr, \ 6678556Sobrien "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ 6778556Sobrien exit(1); \ 6878556Sobrien }} 6978556Sobrien#else 7078556Sobrien#define AssertD(cond,msg) /* */ 7178556Sobrien#endif 72167974Sdelphij 7378556Sobrien#define VPrintf0(zf) \ 7478556Sobrien fprintf(stderr,zf) 7578556Sobrien#define VPrintf1(zf,za1) \ 7678556Sobrien fprintf(stderr,zf,za1) 7778556Sobrien#define VPrintf2(zf,za1,za2) \ 7878556Sobrien fprintf(stderr,zf,za1,za2) 7978556Sobrien#define VPrintf3(zf,za1,za2,za3) \ 8078556Sobrien fprintf(stderr,zf,za1,za2,za3) 8178556Sobrien#define VPrintf4(zf,za1,za2,za3,za4) \ 8278556Sobrien fprintf(stderr,zf,za1,za2,za3,za4) 8378556Sobrien#define VPrintf5(zf,za1,za2,za3,za4,za5) \ 8478556Sobrien fprintf(stderr,zf,za1,za2,za3,za4,za5) 85167974Sdelphij 8678556Sobrien#else 87167974Sdelphij 8878556Sobrienextern void bz_internal_error ( int errcode ); 8978556Sobrien#define AssertH(cond,errcode) \ 9078556Sobrien { if (!(cond)) bz_internal_error ( errcode ); } 91167974Sdelphij#define AssertD(cond,msg) do { } while (0) 92167974Sdelphij#define VPrintf0(zf) do { } while (0) 93167974Sdelphij#define VPrintf1(zf,za1) do { } while (0) 94167974Sdelphij#define VPrintf2(zf,za1,za2) do { } while (0) 95167974Sdelphij#define VPrintf3(zf,za1,za2,za3) do { } while (0) 96167974Sdelphij#define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) 97167974Sdelphij#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) 98167974Sdelphij 9978556Sobrien#endif 10078556Sobrien 10178556Sobrien 10278556Sobrien#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) 10378556Sobrien#define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) 10478556Sobrien 10578556Sobrien 10690067Ssobomax/*-- Header bytes. --*/ 10790067Ssobomax 10890067Ssobomax#define BZ_HDR_B 0x42 /* 'B' */ 10990067Ssobomax#define BZ_HDR_Z 0x5a /* 'Z' */ 11090067Ssobomax#define BZ_HDR_h 0x68 /* 'h' */ 11190067Ssobomax#define BZ_HDR_0 0x30 /* '0' */ 11290067Ssobomax 11378556Sobrien/*-- Constants for the back end. --*/ 11478556Sobrien 11578556Sobrien#define BZ_MAX_ALPHA_SIZE 258 11678556Sobrien#define BZ_MAX_CODE_LEN 23 11778556Sobrien 11878556Sobrien#define BZ_RUNA 0 11978556Sobrien#define BZ_RUNB 1 12078556Sobrien 12178556Sobrien#define BZ_N_GROUPS 6 12278556Sobrien#define BZ_G_SIZE 50 12378556Sobrien#define BZ_N_ITERS 4 12478556Sobrien 12578556Sobrien#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) 12678556Sobrien 12778556Sobrien 12878556Sobrien 12978556Sobrien/*-- Stuff for randomising repetitive blocks. --*/ 13078556Sobrien 13178556Sobrienextern Int32 BZ2_rNums[512]; 13278556Sobrien 13378556Sobrien#define BZ_RAND_DECLS \ 13478556Sobrien Int32 rNToGo; \ 13578556Sobrien Int32 rTPos \ 13678556Sobrien 13778556Sobrien#define BZ_RAND_INIT_MASK \ 13878556Sobrien s->rNToGo = 0; \ 13978556Sobrien s->rTPos = 0 \ 14078556Sobrien 14178556Sobrien#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) 14278556Sobrien 14378556Sobrien#define BZ_RAND_UPD_MASK \ 14478556Sobrien if (s->rNToGo == 0) { \ 14578556Sobrien s->rNToGo = BZ2_rNums[s->rTPos]; \ 14678556Sobrien s->rTPos++; \ 14778556Sobrien if (s->rTPos == 512) s->rTPos = 0; \ 14878556Sobrien } \ 14978556Sobrien s->rNToGo--; 15078556Sobrien 15178556Sobrien 15278556Sobrien 15378556Sobrien/*-- Stuff for doing CRCs. --*/ 15478556Sobrien 15578556Sobrienextern UInt32 BZ2_crc32Table[256]; 15678556Sobrien 15778556Sobrien#define BZ_INITIALISE_CRC(crcVar) \ 15878556Sobrien{ \ 15978556Sobrien crcVar = 0xffffffffL; \ 16078556Sobrien} 16178556Sobrien 16278556Sobrien#define BZ_FINALISE_CRC(crcVar) \ 16378556Sobrien{ \ 16478556Sobrien crcVar = ~(crcVar); \ 16578556Sobrien} 16678556Sobrien 16778556Sobrien#define BZ_UPDATE_CRC(crcVar,cha) \ 16878556Sobrien{ \ 16978556Sobrien crcVar = (crcVar << 8) ^ \ 17078556Sobrien BZ2_crc32Table[(crcVar >> 24) ^ \ 17178556Sobrien ((UChar)cha)]; \ 17278556Sobrien} 17378556Sobrien 17478556Sobrien 17578556Sobrien 17678556Sobrien/*-- States and modes for compression. --*/ 17778556Sobrien 17878556Sobrien#define BZ_M_IDLE 1 17978556Sobrien#define BZ_M_RUNNING 2 18078556Sobrien#define BZ_M_FLUSHING 3 18178556Sobrien#define BZ_M_FINISHING 4 18278556Sobrien 18378556Sobrien#define BZ_S_OUTPUT 1 18478556Sobrien#define BZ_S_INPUT 2 18578556Sobrien 18678556Sobrien#define BZ_N_RADIX 2 18778556Sobrien#define BZ_N_QSORT 12 18878556Sobrien#define BZ_N_SHELL 18 18978556Sobrien#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) 19078556Sobrien 19178556Sobrien 19278556Sobrien 19378556Sobrien 19478556Sobrien/*-- Structure holding all the compression-side stuff. --*/ 19578556Sobrien 19678556Sobrientypedef 19778556Sobrien struct { 19878556Sobrien /* pointer back to the struct bz_stream */ 19978556Sobrien bz_stream* strm; 20078556Sobrien 20178556Sobrien /* mode this stream is in, and whether inputting */ 20278556Sobrien /* or outputting data */ 20378556Sobrien Int32 mode; 20478556Sobrien Int32 state; 20578556Sobrien 20678556Sobrien /* remembers avail_in when flush/finish requested */ 20778556Sobrien UInt32 avail_in_expect; 20878556Sobrien 20978556Sobrien /* for doing the block sorting */ 21078556Sobrien UInt32* arr1; 21178556Sobrien UInt32* arr2; 21278556Sobrien UInt32* ftab; 21378556Sobrien Int32 origPtr; 21478556Sobrien 21578556Sobrien /* aliases for arr1 and arr2 */ 21678556Sobrien UInt32* ptr; 21778556Sobrien UChar* block; 21878556Sobrien UInt16* mtfv; 21978556Sobrien UChar* zbits; 22078556Sobrien 22178556Sobrien /* for deciding when to use the fallback sorting algorithm */ 22278556Sobrien Int32 workFactor; 22378556Sobrien 22478556Sobrien /* run-length-encoding of the input */ 22578556Sobrien UInt32 state_in_ch; 22678556Sobrien Int32 state_in_len; 22778556Sobrien BZ_RAND_DECLS; 22878556Sobrien 22978556Sobrien /* input and output limits and current posns */ 23078556Sobrien Int32 nblock; 23178556Sobrien Int32 nblockMAX; 23278556Sobrien Int32 numZ; 23378556Sobrien Int32 state_out_pos; 23478556Sobrien 23578556Sobrien /* map of bytes used in block */ 23678556Sobrien Int32 nInUse; 23778556Sobrien Bool inUse[256]; 23878556Sobrien UChar unseqToSeq[256]; 23978556Sobrien 24078556Sobrien /* the buffer for bit stream creation */ 24178556Sobrien UInt32 bsBuff; 24278556Sobrien Int32 bsLive; 24378556Sobrien 24478556Sobrien /* block and combined CRCs */ 24578556Sobrien UInt32 blockCRC; 24678556Sobrien UInt32 combinedCRC; 24778556Sobrien 24878556Sobrien /* misc administratium */ 24978556Sobrien Int32 verbosity; 25078556Sobrien Int32 blockNo; 25178556Sobrien Int32 blockSize100k; 25278556Sobrien 25378556Sobrien /* stuff for coding the MTF values */ 25478556Sobrien Int32 nMTF; 25578556Sobrien Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; 25678556Sobrien UChar selector [BZ_MAX_SELECTORS]; 25778556Sobrien UChar selectorMtf[BZ_MAX_SELECTORS]; 25878556Sobrien 25978556Sobrien UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 26078556Sobrien Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 26178556Sobrien Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 26278556Sobrien /* second dimension: only 3 needed; 4 makes index calculations faster */ 26378556Sobrien UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; 26478556Sobrien 26578556Sobrien } 26678556Sobrien EState; 26778556Sobrien 26878556Sobrien 26978556Sobrien 27078556Sobrien/*-- externs for compression. --*/ 27178556Sobrien 27278556Sobrienextern void 27378556SobrienBZ2_blockSort ( EState* ); 27478556Sobrien 27578556Sobrienextern void 27678556SobrienBZ2_compressBlock ( EState*, Bool ); 27778556Sobrien 27878556Sobrienextern void 27978556SobrienBZ2_bsInitWrite ( EState* ); 28078556Sobrien 28178556Sobrienextern void 28278556SobrienBZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); 28378556Sobrien 28478556Sobrienextern void 28578556SobrienBZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); 28678556Sobrien 28778556Sobrien 28878556Sobrien 28978556Sobrien/*-- states for decompression. --*/ 29078556Sobrien 29178556Sobrien#define BZ_X_IDLE 1 29278556Sobrien#define BZ_X_OUTPUT 2 29378556Sobrien 29478556Sobrien#define BZ_X_MAGIC_1 10 29578556Sobrien#define BZ_X_MAGIC_2 11 29678556Sobrien#define BZ_X_MAGIC_3 12 29778556Sobrien#define BZ_X_MAGIC_4 13 29878556Sobrien#define BZ_X_BLKHDR_1 14 29978556Sobrien#define BZ_X_BLKHDR_2 15 30078556Sobrien#define BZ_X_BLKHDR_3 16 30178556Sobrien#define BZ_X_BLKHDR_4 17 30278556Sobrien#define BZ_X_BLKHDR_5 18 30378556Sobrien#define BZ_X_BLKHDR_6 19 30478556Sobrien#define BZ_X_BCRC_1 20 30578556Sobrien#define BZ_X_BCRC_2 21 30678556Sobrien#define BZ_X_BCRC_3 22 30778556Sobrien#define BZ_X_BCRC_4 23 30878556Sobrien#define BZ_X_RANDBIT 24 30978556Sobrien#define BZ_X_ORIGPTR_1 25 31078556Sobrien#define BZ_X_ORIGPTR_2 26 31178556Sobrien#define BZ_X_ORIGPTR_3 27 31278556Sobrien#define BZ_X_MAPPING_1 28 31378556Sobrien#define BZ_X_MAPPING_2 29 31478556Sobrien#define BZ_X_SELECTOR_1 30 31578556Sobrien#define BZ_X_SELECTOR_2 31 31678556Sobrien#define BZ_X_SELECTOR_3 32 31778556Sobrien#define BZ_X_CODING_1 33 31878556Sobrien#define BZ_X_CODING_2 34 31978556Sobrien#define BZ_X_CODING_3 35 32078556Sobrien#define BZ_X_MTF_1 36 32178556Sobrien#define BZ_X_MTF_2 37 32278556Sobrien#define BZ_X_MTF_3 38 32378556Sobrien#define BZ_X_MTF_4 39 32478556Sobrien#define BZ_X_MTF_5 40 32578556Sobrien#define BZ_X_MTF_6 41 32678556Sobrien#define BZ_X_ENDHDR_2 42 32778556Sobrien#define BZ_X_ENDHDR_3 43 32878556Sobrien#define BZ_X_ENDHDR_4 44 32978556Sobrien#define BZ_X_ENDHDR_5 45 33078556Sobrien#define BZ_X_ENDHDR_6 46 33178556Sobrien#define BZ_X_CCRC_1 47 33278556Sobrien#define BZ_X_CCRC_2 48 33378556Sobrien#define BZ_X_CCRC_3 49 33478556Sobrien#define BZ_X_CCRC_4 50 33578556Sobrien 33678556Sobrien 33778556Sobrien 33878556Sobrien/*-- Constants for the fast MTF decoder. --*/ 33978556Sobrien 34078556Sobrien#define MTFA_SIZE 4096 34178556Sobrien#define MTFL_SIZE 16 34278556Sobrien 34378556Sobrien 34478556Sobrien 34578556Sobrien/*-- Structure holding all the decompression-side stuff. --*/ 34678556Sobrien 34778556Sobrientypedef 34878556Sobrien struct { 34978556Sobrien /* pointer back to the struct bz_stream */ 35078556Sobrien bz_stream* strm; 35178556Sobrien 35278556Sobrien /* state indicator for this stream */ 35378556Sobrien Int32 state; 35478556Sobrien 35578556Sobrien /* for doing the final run-length decoding */ 35678556Sobrien UChar state_out_ch; 35778556Sobrien Int32 state_out_len; 35878556Sobrien Bool blockRandomised; 35978556Sobrien BZ_RAND_DECLS; 36078556Sobrien 36178556Sobrien /* the buffer for bit stream reading */ 36278556Sobrien UInt32 bsBuff; 36378556Sobrien Int32 bsLive; 36478556Sobrien 36578556Sobrien /* misc administratium */ 36678556Sobrien Int32 blockSize100k; 36778556Sobrien Bool smallDecompress; 36878556Sobrien Int32 currBlockNo; 36978556Sobrien Int32 verbosity; 37078556Sobrien 37178556Sobrien /* for undoing the Burrows-Wheeler transform */ 37278556Sobrien Int32 origPtr; 37378556Sobrien UInt32 tPos; 37478556Sobrien Int32 k0; 37578556Sobrien Int32 unzftab[256]; 37678556Sobrien Int32 nblock_used; 37778556Sobrien Int32 cftab[257]; 37878556Sobrien Int32 cftabCopy[257]; 37978556Sobrien 38078556Sobrien /* for undoing the Burrows-Wheeler transform (FAST) */ 38178556Sobrien UInt32 *tt; 38278556Sobrien 38378556Sobrien /* for undoing the Burrows-Wheeler transform (SMALL) */ 38478556Sobrien UInt16 *ll16; 38578556Sobrien UChar *ll4; 38678556Sobrien 38778556Sobrien /* stored and calculated CRCs */ 38878556Sobrien UInt32 storedBlockCRC; 38978556Sobrien UInt32 storedCombinedCRC; 39078556Sobrien UInt32 calculatedBlockCRC; 39178556Sobrien UInt32 calculatedCombinedCRC; 39278556Sobrien 39378556Sobrien /* map of bytes used in block */ 39478556Sobrien Int32 nInUse; 39578556Sobrien Bool inUse[256]; 39678556Sobrien Bool inUse16[16]; 39778556Sobrien UChar seqToUnseq[256]; 39878556Sobrien 39978556Sobrien /* for decoding the MTF values */ 40078556Sobrien UChar mtfa [MTFA_SIZE]; 40178556Sobrien Int32 mtfbase[256 / MTFL_SIZE]; 40278556Sobrien UChar selector [BZ_MAX_SELECTORS]; 40378556Sobrien UChar selectorMtf[BZ_MAX_SELECTORS]; 40478556Sobrien UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 40578556Sobrien 40678556Sobrien Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 40778556Sobrien Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 40878556Sobrien Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 40978556Sobrien Int32 minLens[BZ_N_GROUPS]; 41078556Sobrien 41178556Sobrien /* save area for scalars in the main decompress code */ 41278556Sobrien Int32 save_i; 41378556Sobrien Int32 save_j; 41478556Sobrien Int32 save_t; 41578556Sobrien Int32 save_alphaSize; 41678556Sobrien Int32 save_nGroups; 41778556Sobrien Int32 save_nSelectors; 41878556Sobrien Int32 save_EOB; 41978556Sobrien Int32 save_groupNo; 42078556Sobrien Int32 save_groupPos; 42178556Sobrien Int32 save_nextSym; 42278556Sobrien Int32 save_nblockMAX; 42378556Sobrien Int32 save_nblock; 42478556Sobrien Int32 save_es; 42578556Sobrien Int32 save_N; 42678556Sobrien Int32 save_curr; 42778556Sobrien Int32 save_zt; 42878556Sobrien Int32 save_zn; 42978556Sobrien Int32 save_zvec; 43078556Sobrien Int32 save_zj; 43178556Sobrien Int32 save_gSel; 43278556Sobrien Int32 save_gMinlen; 43378556Sobrien Int32* save_gLimit; 43478556Sobrien Int32* save_gBase; 43578556Sobrien Int32* save_gPerm; 43678556Sobrien 43778556Sobrien } 43878556Sobrien DState; 43978556Sobrien 44078556Sobrien 44178556Sobrien 44278556Sobrien/*-- Macros for decompression. --*/ 44378556Sobrien 44478556Sobrien#define BZ_GET_FAST(cccc) \ 445177420Sdelphij /* c_tPos is unsigned, hence test < 0 is pointless. */ \ 446177420Sdelphij if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ 44778556Sobrien s->tPos = s->tt[s->tPos]; \ 44878556Sobrien cccc = (UChar)(s->tPos & 0xff); \ 44978556Sobrien s->tPos >>= 8; 45078556Sobrien 45178556Sobrien#define BZ_GET_FAST_C(cccc) \ 452177420Sdelphij /* c_tPos is unsigned, hence test < 0 is pointless. */ \ 453177420Sdelphij if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ 45478556Sobrien c_tPos = c_tt[c_tPos]; \ 45578556Sobrien cccc = (UChar)(c_tPos & 0xff); \ 45678556Sobrien c_tPos >>= 8; 45778556Sobrien 45878556Sobrien#define SET_LL4(i,n) \ 45978556Sobrien { if (((i) & 0x1) == 0) \ 46078556Sobrien s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ 46178556Sobrien s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ 46278556Sobrien } 46378556Sobrien 46478556Sobrien#define GET_LL4(i) \ 46578556Sobrien ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) 46678556Sobrien 46778556Sobrien#define SET_LL(i,n) \ 46878556Sobrien { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ 46978556Sobrien SET_LL4(i, n >> 16); \ 47078556Sobrien } 47178556Sobrien 47278556Sobrien#define GET_LL(i) \ 47378556Sobrien (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) 47478556Sobrien 47578556Sobrien#define BZ_GET_SMALL(cccc) \ 476177420Sdelphij /* c_tPos is unsigned, hence test < 0 is pointless. */ \ 477177420Sdelphij if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ 478177420Sdelphij cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ 479177420Sdelphij s->tPos = GET_LL(s->tPos); 48078556Sobrien 48178556Sobrien 48278556Sobrien/*-- externs for decompression. --*/ 48378556Sobrien 48478556Sobrienextern Int32 48578556SobrienBZ2_indexIntoF ( Int32, Int32* ); 48678556Sobrien 48778556Sobrienextern Int32 48878556SobrienBZ2_decompress ( DState* ); 48978556Sobrien 49078556Sobrienextern void 49178556SobrienBZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, 49278556Sobrien Int32, Int32, Int32 ); 49378556Sobrien 49478556Sobrien 49578556Sobrien#endif 49678556Sobrien 49778556Sobrien 49878556Sobrien/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ 49978556Sobrien 50078556Sobrien#ifdef BZ_NO_STDIO 50178556Sobrien#ifndef NULL 50278556Sobrien#define NULL 0 50378556Sobrien#endif 50478556Sobrien#endif 50578556Sobrien 50678556Sobrien 50778556Sobrien/*-------------------------------------------------------------*/ 50878556Sobrien/*--- end bzlib_private.h ---*/ 50978556Sobrien/*-------------------------------------------------------------*/ 510