1*ca3e8d88SDave Plauger 2*ca3e8d88SDave Plauger /*-------------------------------------------------------------*/ 3*ca3e8d88SDave Plauger /*--- Private header file for the library. ---*/ 4*ca3e8d88SDave Plauger /*--- bzlib_private.h ---*/ 5*ca3e8d88SDave Plauger /*-------------------------------------------------------------*/ 6*ca3e8d88SDave Plauger 7*ca3e8d88SDave Plauger /* ------------------------------------------------------------------ 8*ca3e8d88SDave Plauger This file is part of bzip2/libbzip2, a program and library for 9*ca3e8d88SDave Plauger lossless, block-sorting data compression. 10*ca3e8d88SDave Plauger 11*ca3e8d88SDave Plauger bzip2/libbzip2 version 1.0.5 of 10 December 2007 12*ca3e8d88SDave Plauger Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> 13*ca3e8d88SDave Plauger 14*ca3e8d88SDave Plauger Please read the WARNING, DISCLAIMER and PATENTS sections in the 15*ca3e8d88SDave Plauger README file. 16*ca3e8d88SDave Plauger 17*ca3e8d88SDave Plauger This program is released under the terms of the license contained 18*ca3e8d88SDave Plauger in the file LICENSE. 19*ca3e8d88SDave Plauger ------------------------------------------------------------------ */ 20*ca3e8d88SDave Plauger 21*ca3e8d88SDave Plauger 22*ca3e8d88SDave Plauger #ifndef _BZLIB_PRIVATE_H 23*ca3e8d88SDave Plauger #define _BZLIB_PRIVATE_H 24*ca3e8d88SDave Plauger 25*ca3e8d88SDave Plauger #ifdef _KERNEL 26*ca3e8d88SDave Plauger #define BZ_NO_STDIO 27*ca3e8d88SDave Plauger #else 28*ca3e8d88SDave Plauger #include <stdlib.h> 29*ca3e8d88SDave Plauger #endif 30*ca3e8d88SDave Plauger 31*ca3e8d88SDave Plauger #ifndef BZ_NO_STDIO 32*ca3e8d88SDave Plauger #include <stdio.h> 33*ca3e8d88SDave Plauger #include <ctype.h> 34*ca3e8d88SDave Plauger #include <string.h> 35*ca3e8d88SDave Plauger #endif 36*ca3e8d88SDave Plauger 37*ca3e8d88SDave Plauger #include "bzlib.h" 38*ca3e8d88SDave Plauger 39*ca3e8d88SDave Plauger 40*ca3e8d88SDave Plauger 41*ca3e8d88SDave Plauger /*-- General stuff. --*/ 42*ca3e8d88SDave Plauger 43*ca3e8d88SDave Plauger #define BZ_VERSION "1.0.5, 10-Dec-2007" 44*ca3e8d88SDave Plauger 45*ca3e8d88SDave Plauger typedef char Char; 46*ca3e8d88SDave Plauger typedef unsigned char Bool; 47*ca3e8d88SDave Plauger typedef unsigned char UChar; 48*ca3e8d88SDave Plauger typedef int Int32; 49*ca3e8d88SDave Plauger typedef unsigned int UInt32; 50*ca3e8d88SDave Plauger typedef short Int16; 51*ca3e8d88SDave Plauger typedef unsigned short UInt16; 52*ca3e8d88SDave Plauger 53*ca3e8d88SDave Plauger #define True ((Bool)1) 54*ca3e8d88SDave Plauger #define False ((Bool)0) 55*ca3e8d88SDave Plauger 56*ca3e8d88SDave Plauger #ifndef __GNUC__ 57*ca3e8d88SDave Plauger #define __inline__ /* */ 58*ca3e8d88SDave Plauger #endif 59*ca3e8d88SDave Plauger 60*ca3e8d88SDave Plauger #ifndef BZ_NO_STDIO 61*ca3e8d88SDave Plauger 62*ca3e8d88SDave Plauger extern void BZ2_bz__AssertH__fail ( int errcode ); 63*ca3e8d88SDave Plauger #define AssertH(cond,errcode) \ 64*ca3e8d88SDave Plauger { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } 65*ca3e8d88SDave Plauger 66*ca3e8d88SDave Plauger #if BZ_DEBUG 67*ca3e8d88SDave Plauger #define AssertD(cond,msg) \ 68*ca3e8d88SDave Plauger { if (!(cond)) { \ 69*ca3e8d88SDave Plauger fprintf ( stderr, \ 70*ca3e8d88SDave Plauger "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ 71*ca3e8d88SDave Plauger exit(1); \ 72*ca3e8d88SDave Plauger }} 73*ca3e8d88SDave Plauger #else 74*ca3e8d88SDave Plauger #define AssertD(cond,msg) /* */ 75*ca3e8d88SDave Plauger #endif 76*ca3e8d88SDave Plauger 77*ca3e8d88SDave Plauger #define VPrintf0(zf) \ 78*ca3e8d88SDave Plauger fprintf(stderr,zf) 79*ca3e8d88SDave Plauger #define VPrintf1(zf,za1) \ 80*ca3e8d88SDave Plauger fprintf(stderr,zf,za1) 81*ca3e8d88SDave Plauger #define VPrintf2(zf,za1,za2) \ 82*ca3e8d88SDave Plauger fprintf(stderr,zf,za1,za2) 83*ca3e8d88SDave Plauger #define VPrintf3(zf,za1,za2,za3) \ 84*ca3e8d88SDave Plauger fprintf(stderr,zf,za1,za2,za3) 85*ca3e8d88SDave Plauger #define VPrintf4(zf,za1,za2,za3,za4) \ 86*ca3e8d88SDave Plauger fprintf(stderr,zf,za1,za2,za3,za4) 87*ca3e8d88SDave Plauger #define VPrintf5(zf,za1,za2,za3,za4,za5) \ 88*ca3e8d88SDave Plauger fprintf(stderr,zf,za1,za2,za3,za4,za5) 89*ca3e8d88SDave Plauger 90*ca3e8d88SDave Plauger #else 91*ca3e8d88SDave Plauger 92*ca3e8d88SDave Plauger #pragma weak bz_internal_error 93*ca3e8d88SDave Plauger extern void bz_internal_error ( int errcode ); 94*ca3e8d88SDave Plauger #define AssertH(cond,errcode) \ 95*ca3e8d88SDave Plauger { if (!(cond) && &bz_internal_error != NULL) bz_internal_error ( errcode ); } 96*ca3e8d88SDave Plauger #define AssertD(cond,msg) do { } while (0) 97*ca3e8d88SDave Plauger #define VPrintf0(zf) do { } while (0) 98*ca3e8d88SDave Plauger #define VPrintf1(zf,za1) do { } while (0) 99*ca3e8d88SDave Plauger #define VPrintf2(zf,za1,za2) do { } while (0) 100*ca3e8d88SDave Plauger #define VPrintf3(zf,za1,za2,za3) do { } while (0) 101*ca3e8d88SDave Plauger #define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) 102*ca3e8d88SDave Plauger #define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) 103*ca3e8d88SDave Plauger 104*ca3e8d88SDave Plauger #endif 105*ca3e8d88SDave Plauger 106*ca3e8d88SDave Plauger 107*ca3e8d88SDave Plauger #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) 108*ca3e8d88SDave Plauger #define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) 109*ca3e8d88SDave Plauger 110*ca3e8d88SDave Plauger 111*ca3e8d88SDave Plauger /*-- Header bytes. --*/ 112*ca3e8d88SDave Plauger 113*ca3e8d88SDave Plauger #define BZ_HDR_B 0x42 /* 'B' */ 114*ca3e8d88SDave Plauger #define BZ_HDR_Z 0x5a /* 'Z' */ 115*ca3e8d88SDave Plauger #define BZ_HDR_h 0x68 /* 'h' */ 116*ca3e8d88SDave Plauger #define BZ_HDR_0 0x30 /* '0' */ 117*ca3e8d88SDave Plauger 118*ca3e8d88SDave Plauger /*-- Constants for the back end. --*/ 119*ca3e8d88SDave Plauger 120*ca3e8d88SDave Plauger #define BZ_MAX_ALPHA_SIZE 258 121*ca3e8d88SDave Plauger #define BZ_MAX_CODE_LEN 23 122*ca3e8d88SDave Plauger 123*ca3e8d88SDave Plauger #define BZ_RUNA 0 124*ca3e8d88SDave Plauger #define BZ_RUNB 1 125*ca3e8d88SDave Plauger 126*ca3e8d88SDave Plauger #define BZ_N_GROUPS 6 127*ca3e8d88SDave Plauger #define BZ_G_SIZE 50 128*ca3e8d88SDave Plauger #define BZ_N_ITERS 4 129*ca3e8d88SDave Plauger 130*ca3e8d88SDave Plauger #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) 131*ca3e8d88SDave Plauger 132*ca3e8d88SDave Plauger 133*ca3e8d88SDave Plauger 134*ca3e8d88SDave Plauger /*-- Stuff for randomising repetitive blocks. --*/ 135*ca3e8d88SDave Plauger 136*ca3e8d88SDave Plauger extern Int32 BZ2_rNums[512]; 137*ca3e8d88SDave Plauger 138*ca3e8d88SDave Plauger #define BZ_RAND_DECLS \ 139*ca3e8d88SDave Plauger Int32 rNToGo; \ 140*ca3e8d88SDave Plauger Int32 rTPos \ 141*ca3e8d88SDave Plauger 142*ca3e8d88SDave Plauger #define BZ_RAND_INIT_MASK \ 143*ca3e8d88SDave Plauger s->rNToGo = 0; \ 144*ca3e8d88SDave Plauger s->rTPos = 0 \ 145*ca3e8d88SDave Plauger 146*ca3e8d88SDave Plauger #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) 147*ca3e8d88SDave Plauger 148*ca3e8d88SDave Plauger #define BZ_RAND_UPD_MASK \ 149*ca3e8d88SDave Plauger if (s->rNToGo == 0) { \ 150*ca3e8d88SDave Plauger s->rNToGo = BZ2_rNums[s->rTPos]; \ 151*ca3e8d88SDave Plauger s->rTPos++; \ 152*ca3e8d88SDave Plauger if (s->rTPos == 512) s->rTPos = 0; \ 153*ca3e8d88SDave Plauger } \ 154*ca3e8d88SDave Plauger s->rNToGo--; 155*ca3e8d88SDave Plauger 156*ca3e8d88SDave Plauger 157*ca3e8d88SDave Plauger 158*ca3e8d88SDave Plauger /*-- Stuff for doing CRCs. --*/ 159*ca3e8d88SDave Plauger 160*ca3e8d88SDave Plauger extern UInt32 BZ2_crc32Table[256]; 161*ca3e8d88SDave Plauger 162*ca3e8d88SDave Plauger #define BZ_INITIALISE_CRC(crcVar) \ 163*ca3e8d88SDave Plauger { \ 164*ca3e8d88SDave Plauger crcVar = 0xffffffffUL; \ 165*ca3e8d88SDave Plauger } 166*ca3e8d88SDave Plauger 167*ca3e8d88SDave Plauger #define BZ_FINALISE_CRC(crcVar) \ 168*ca3e8d88SDave Plauger { \ 169*ca3e8d88SDave Plauger crcVar = ~(crcVar); \ 170*ca3e8d88SDave Plauger } 171*ca3e8d88SDave Plauger 172*ca3e8d88SDave Plauger #define BZ_UPDATE_CRC(crcVar,cha) \ 173*ca3e8d88SDave Plauger { \ 174*ca3e8d88SDave Plauger crcVar = (crcVar << 8) ^ \ 175*ca3e8d88SDave Plauger BZ2_crc32Table[(crcVar >> 24) ^ \ 176*ca3e8d88SDave Plauger ((UChar)cha)]; \ 177*ca3e8d88SDave Plauger } 178*ca3e8d88SDave Plauger 179*ca3e8d88SDave Plauger 180*ca3e8d88SDave Plauger 181*ca3e8d88SDave Plauger /*-- States and modes for compression. --*/ 182*ca3e8d88SDave Plauger 183*ca3e8d88SDave Plauger #define BZ_M_IDLE 1 184*ca3e8d88SDave Plauger #define BZ_M_RUNNING 2 185*ca3e8d88SDave Plauger #define BZ_M_FLUSHING 3 186*ca3e8d88SDave Plauger #define BZ_M_FINISHING 4 187*ca3e8d88SDave Plauger 188*ca3e8d88SDave Plauger #define BZ_S_OUTPUT 1 189*ca3e8d88SDave Plauger #define BZ_S_INPUT 2 190*ca3e8d88SDave Plauger 191*ca3e8d88SDave Plauger #define BZ_N_RADIX 2 192*ca3e8d88SDave Plauger #define BZ_N_QSORT 12 193*ca3e8d88SDave Plauger #define BZ_N_SHELL 18 194*ca3e8d88SDave Plauger #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) 195*ca3e8d88SDave Plauger 196*ca3e8d88SDave Plauger 197*ca3e8d88SDave Plauger 198*ca3e8d88SDave Plauger 199*ca3e8d88SDave Plauger /*-- Structure holding all the compression-side stuff. --*/ 200*ca3e8d88SDave Plauger 201*ca3e8d88SDave Plauger typedef 202*ca3e8d88SDave Plauger struct { 203*ca3e8d88SDave Plauger /* pointer back to the struct bz_stream */ 204*ca3e8d88SDave Plauger bz_stream* strm; 205*ca3e8d88SDave Plauger 206*ca3e8d88SDave Plauger /* mode this stream is in, and whether inputting */ 207*ca3e8d88SDave Plauger /* or outputting data */ 208*ca3e8d88SDave Plauger Int32 mode; 209*ca3e8d88SDave Plauger Int32 state; 210*ca3e8d88SDave Plauger 211*ca3e8d88SDave Plauger /* remembers avail_in when flush/finish requested */ 212*ca3e8d88SDave Plauger UInt32 avail_in_expect; 213*ca3e8d88SDave Plauger 214*ca3e8d88SDave Plauger /* for doing the block sorting */ 215*ca3e8d88SDave Plauger UInt32* arr1; 216*ca3e8d88SDave Plauger UInt32* arr2; 217*ca3e8d88SDave Plauger UInt32* ftab; 218*ca3e8d88SDave Plauger Int32 origPtr; 219*ca3e8d88SDave Plauger 220*ca3e8d88SDave Plauger /* aliases for arr1 and arr2 */ 221*ca3e8d88SDave Plauger UInt32* ptr; 222*ca3e8d88SDave Plauger UChar* block; 223*ca3e8d88SDave Plauger UInt16* mtfv; 224*ca3e8d88SDave Plauger UChar* zbits; 225*ca3e8d88SDave Plauger 226*ca3e8d88SDave Plauger /* for deciding when to use the fallback sorting algorithm */ 227*ca3e8d88SDave Plauger Int32 workFactor; 228*ca3e8d88SDave Plauger 229*ca3e8d88SDave Plauger /* run-length-encoding of the input */ 230*ca3e8d88SDave Plauger UInt32 state_in_ch; 231*ca3e8d88SDave Plauger Int32 state_in_len; 232*ca3e8d88SDave Plauger BZ_RAND_DECLS; 233*ca3e8d88SDave Plauger 234*ca3e8d88SDave Plauger /* input and output limits and current posns */ 235*ca3e8d88SDave Plauger Int32 nblock; 236*ca3e8d88SDave Plauger Int32 nblockMAX; 237*ca3e8d88SDave Plauger Int32 numZ; 238*ca3e8d88SDave Plauger Int32 state_out_pos; 239*ca3e8d88SDave Plauger 240*ca3e8d88SDave Plauger /* map of bytes used in block */ 241*ca3e8d88SDave Plauger Int32 nInUse; 242*ca3e8d88SDave Plauger Bool inUse[256]; 243*ca3e8d88SDave Plauger UChar unseqToSeq[256]; 244*ca3e8d88SDave Plauger 245*ca3e8d88SDave Plauger /* the buffer for bit stream creation */ 246*ca3e8d88SDave Plauger UInt32 bsBuff; 247*ca3e8d88SDave Plauger Int32 bsLive; 248*ca3e8d88SDave Plauger 249*ca3e8d88SDave Plauger /* block and combined CRCs */ 250*ca3e8d88SDave Plauger UInt32 blockCRC; 251*ca3e8d88SDave Plauger UInt32 combinedCRC; 252*ca3e8d88SDave Plauger 253*ca3e8d88SDave Plauger /* misc administratium */ 254*ca3e8d88SDave Plauger Int32 verbosity; 255*ca3e8d88SDave Plauger Int32 blockNo; 256*ca3e8d88SDave Plauger Int32 blockSize100k; 257*ca3e8d88SDave Plauger 258*ca3e8d88SDave Plauger /* stuff for coding the MTF values */ 259*ca3e8d88SDave Plauger Int32 nMTF; 260*ca3e8d88SDave Plauger Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; 261*ca3e8d88SDave Plauger UChar selector [BZ_MAX_SELECTORS]; 262*ca3e8d88SDave Plauger UChar selectorMtf[BZ_MAX_SELECTORS]; 263*ca3e8d88SDave Plauger 264*ca3e8d88SDave Plauger UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 265*ca3e8d88SDave Plauger Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 266*ca3e8d88SDave Plauger Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 267*ca3e8d88SDave Plauger /* second dimension: only 3 needed; 4 makes index calculations faster */ 268*ca3e8d88SDave Plauger UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; 269*ca3e8d88SDave Plauger 270*ca3e8d88SDave Plauger } 271*ca3e8d88SDave Plauger EState; 272*ca3e8d88SDave Plauger 273*ca3e8d88SDave Plauger 274*ca3e8d88SDave Plauger 275*ca3e8d88SDave Plauger /*-- externs for compression. --*/ 276*ca3e8d88SDave Plauger 277*ca3e8d88SDave Plauger extern void 278*ca3e8d88SDave Plauger BZ2_blockSort ( EState* ); 279*ca3e8d88SDave Plauger 280*ca3e8d88SDave Plauger extern void 281*ca3e8d88SDave Plauger BZ2_compressBlock ( EState*, Bool ); 282*ca3e8d88SDave Plauger 283*ca3e8d88SDave Plauger extern void 284*ca3e8d88SDave Plauger BZ2_bsInitWrite ( EState* ); 285*ca3e8d88SDave Plauger 286*ca3e8d88SDave Plauger extern void 287*ca3e8d88SDave Plauger BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); 288*ca3e8d88SDave Plauger 289*ca3e8d88SDave Plauger extern void 290*ca3e8d88SDave Plauger BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); 291*ca3e8d88SDave Plauger 292*ca3e8d88SDave Plauger 293*ca3e8d88SDave Plauger 294*ca3e8d88SDave Plauger /*-- states for decompression. --*/ 295*ca3e8d88SDave Plauger 296*ca3e8d88SDave Plauger #define BZ_X_IDLE 1 297*ca3e8d88SDave Plauger #define BZ_X_OUTPUT 2 298*ca3e8d88SDave Plauger 299*ca3e8d88SDave Plauger #define BZ_X_MAGIC_1 10 300*ca3e8d88SDave Plauger #define BZ_X_MAGIC_2 11 301*ca3e8d88SDave Plauger #define BZ_X_MAGIC_3 12 302*ca3e8d88SDave Plauger #define BZ_X_MAGIC_4 13 303*ca3e8d88SDave Plauger #define BZ_X_BLKHDR_1 14 304*ca3e8d88SDave Plauger #define BZ_X_BLKHDR_2 15 305*ca3e8d88SDave Plauger #define BZ_X_BLKHDR_3 16 306*ca3e8d88SDave Plauger #define BZ_X_BLKHDR_4 17 307*ca3e8d88SDave Plauger #define BZ_X_BLKHDR_5 18 308*ca3e8d88SDave Plauger #define BZ_X_BLKHDR_6 19 309*ca3e8d88SDave Plauger #define BZ_X_BCRC_1 20 310*ca3e8d88SDave Plauger #define BZ_X_BCRC_2 21 311*ca3e8d88SDave Plauger #define BZ_X_BCRC_3 22 312*ca3e8d88SDave Plauger #define BZ_X_BCRC_4 23 313*ca3e8d88SDave Plauger #define BZ_X_RANDBIT 24 314*ca3e8d88SDave Plauger #define BZ_X_ORIGPTR_1 25 315*ca3e8d88SDave Plauger #define BZ_X_ORIGPTR_2 26 316*ca3e8d88SDave Plauger #define BZ_X_ORIGPTR_3 27 317*ca3e8d88SDave Plauger #define BZ_X_MAPPING_1 28 318*ca3e8d88SDave Plauger #define BZ_X_MAPPING_2 29 319*ca3e8d88SDave Plauger #define BZ_X_SELECTOR_1 30 320*ca3e8d88SDave Plauger #define BZ_X_SELECTOR_2 31 321*ca3e8d88SDave Plauger #define BZ_X_SELECTOR_3 32 322*ca3e8d88SDave Plauger #define BZ_X_CODING_1 33 323*ca3e8d88SDave Plauger #define BZ_X_CODING_2 34 324*ca3e8d88SDave Plauger #define BZ_X_CODING_3 35 325*ca3e8d88SDave Plauger #define BZ_X_MTF_1 36 326*ca3e8d88SDave Plauger #define BZ_X_MTF_2 37 327*ca3e8d88SDave Plauger #define BZ_X_MTF_3 38 328*ca3e8d88SDave Plauger #define BZ_X_MTF_4 39 329*ca3e8d88SDave Plauger #define BZ_X_MTF_5 40 330*ca3e8d88SDave Plauger #define BZ_X_MTF_6 41 331*ca3e8d88SDave Plauger #define BZ_X_ENDHDR_2 42 332*ca3e8d88SDave Plauger #define BZ_X_ENDHDR_3 43 333*ca3e8d88SDave Plauger #define BZ_X_ENDHDR_4 44 334*ca3e8d88SDave Plauger #define BZ_X_ENDHDR_5 45 335*ca3e8d88SDave Plauger #define BZ_X_ENDHDR_6 46 336*ca3e8d88SDave Plauger #define BZ_X_CCRC_1 47 337*ca3e8d88SDave Plauger #define BZ_X_CCRC_2 48 338*ca3e8d88SDave Plauger #define BZ_X_CCRC_3 49 339*ca3e8d88SDave Plauger #define BZ_X_CCRC_4 50 340*ca3e8d88SDave Plauger 341*ca3e8d88SDave Plauger 342*ca3e8d88SDave Plauger 343*ca3e8d88SDave Plauger /*-- Constants for the fast MTF decoder. --*/ 344*ca3e8d88SDave Plauger 345*ca3e8d88SDave Plauger #define MTFA_SIZE 4096 346*ca3e8d88SDave Plauger #define MTFL_SIZE 16 347*ca3e8d88SDave Plauger 348*ca3e8d88SDave Plauger 349*ca3e8d88SDave Plauger 350*ca3e8d88SDave Plauger /*-- Structure holding all the decompression-side stuff. --*/ 351*ca3e8d88SDave Plauger 352*ca3e8d88SDave Plauger typedef 353*ca3e8d88SDave Plauger struct { 354*ca3e8d88SDave Plauger /* pointer back to the struct bz_stream */ 355*ca3e8d88SDave Plauger bz_stream* strm; 356*ca3e8d88SDave Plauger 357*ca3e8d88SDave Plauger /* state indicator for this stream */ 358*ca3e8d88SDave Plauger Int32 state; 359*ca3e8d88SDave Plauger 360*ca3e8d88SDave Plauger /* for doing the final run-length decoding */ 361*ca3e8d88SDave Plauger UChar state_out_ch; 362*ca3e8d88SDave Plauger Int32 state_out_len; 363*ca3e8d88SDave Plauger Bool blockRandomised; 364*ca3e8d88SDave Plauger BZ_RAND_DECLS; 365*ca3e8d88SDave Plauger 366*ca3e8d88SDave Plauger /* the buffer for bit stream reading */ 367*ca3e8d88SDave Plauger UInt32 bsBuff; 368*ca3e8d88SDave Plauger Int32 bsLive; 369*ca3e8d88SDave Plauger 370*ca3e8d88SDave Plauger /* misc administratium */ 371*ca3e8d88SDave Plauger Int32 blockSize100k; 372*ca3e8d88SDave Plauger Bool smallDecompress; 373*ca3e8d88SDave Plauger Int32 currBlockNo; 374*ca3e8d88SDave Plauger Int32 verbosity; 375*ca3e8d88SDave Plauger 376*ca3e8d88SDave Plauger /* for undoing the Burrows-Wheeler transform */ 377*ca3e8d88SDave Plauger Int32 origPtr; 378*ca3e8d88SDave Plauger UInt32 tPos; 379*ca3e8d88SDave Plauger Int32 k0; 380*ca3e8d88SDave Plauger Int32 unzftab[256]; 381*ca3e8d88SDave Plauger Int32 nblock_used; 382*ca3e8d88SDave Plauger Int32 cftab[257]; 383*ca3e8d88SDave Plauger Int32 cftabCopy[257]; 384*ca3e8d88SDave Plauger 385*ca3e8d88SDave Plauger /* for undoing the Burrows-Wheeler transform (FAST) */ 386*ca3e8d88SDave Plauger UInt32 *tt; 387*ca3e8d88SDave Plauger 388*ca3e8d88SDave Plauger /* for undoing the Burrows-Wheeler transform (SMALL) */ 389*ca3e8d88SDave Plauger UInt16 *ll16; 390*ca3e8d88SDave Plauger UChar *ll4; 391*ca3e8d88SDave Plauger 392*ca3e8d88SDave Plauger /* stored and calculated CRCs */ 393*ca3e8d88SDave Plauger UInt32 storedBlockCRC; 394*ca3e8d88SDave Plauger UInt32 storedCombinedCRC; 395*ca3e8d88SDave Plauger UInt32 calculatedBlockCRC; 396*ca3e8d88SDave Plauger UInt32 calculatedCombinedCRC; 397*ca3e8d88SDave Plauger 398*ca3e8d88SDave Plauger /* map of bytes used in block */ 399*ca3e8d88SDave Plauger Int32 nInUse; 400*ca3e8d88SDave Plauger Bool inUse[256]; 401*ca3e8d88SDave Plauger Bool inUse16[16]; 402*ca3e8d88SDave Plauger UChar seqToUnseq[256]; 403*ca3e8d88SDave Plauger 404*ca3e8d88SDave Plauger /* for decoding the MTF values */ 405*ca3e8d88SDave Plauger UChar mtfa [MTFA_SIZE]; 406*ca3e8d88SDave Plauger Int32 mtfbase[256 / MTFL_SIZE]; 407*ca3e8d88SDave Plauger UChar selector [BZ_MAX_SELECTORS]; 408*ca3e8d88SDave Plauger UChar selectorMtf[BZ_MAX_SELECTORS]; 409*ca3e8d88SDave Plauger UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 410*ca3e8d88SDave Plauger 411*ca3e8d88SDave Plauger Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 412*ca3e8d88SDave Plauger Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 413*ca3e8d88SDave Plauger Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; 414*ca3e8d88SDave Plauger Int32 minLens[BZ_N_GROUPS]; 415*ca3e8d88SDave Plauger 416*ca3e8d88SDave Plauger /* save area for scalars in the main decompress code */ 417*ca3e8d88SDave Plauger Int32 save_i; 418*ca3e8d88SDave Plauger Int32 save_j; 419*ca3e8d88SDave Plauger Int32 save_t; 420*ca3e8d88SDave Plauger Int32 save_alphaSize; 421*ca3e8d88SDave Plauger Int32 save_nGroups; 422*ca3e8d88SDave Plauger Int32 save_nSelectors; 423*ca3e8d88SDave Plauger Int32 save_EOB; 424*ca3e8d88SDave Plauger Int32 save_groupNo; 425*ca3e8d88SDave Plauger Int32 save_groupPos; 426*ca3e8d88SDave Plauger Int32 save_nextSym; 427*ca3e8d88SDave Plauger Int32 save_nblockMAX; 428*ca3e8d88SDave Plauger Int32 save_nblock; 429*ca3e8d88SDave Plauger Int32 save_es; 430*ca3e8d88SDave Plauger Int32 save_N; 431*ca3e8d88SDave Plauger Int32 save_curr; 432*ca3e8d88SDave Plauger Int32 save_zt; 433*ca3e8d88SDave Plauger Int32 save_zn; 434*ca3e8d88SDave Plauger Int32 save_zvec; 435*ca3e8d88SDave Plauger Int32 save_zj; 436*ca3e8d88SDave Plauger Int32 save_gSel; 437*ca3e8d88SDave Plauger Int32 save_gMinlen; 438*ca3e8d88SDave Plauger Int32* save_gLimit; 439*ca3e8d88SDave Plauger Int32* save_gBase; 440*ca3e8d88SDave Plauger Int32* save_gPerm; 441*ca3e8d88SDave Plauger 442*ca3e8d88SDave Plauger } 443*ca3e8d88SDave Plauger DState; 444*ca3e8d88SDave Plauger 445*ca3e8d88SDave Plauger 446*ca3e8d88SDave Plauger 447*ca3e8d88SDave Plauger /*-- Macros for decompression. --*/ 448*ca3e8d88SDave Plauger 449*ca3e8d88SDave Plauger #define BZ_GET_FAST(cccc) \ 450*ca3e8d88SDave Plauger /* c_tPos is unsigned, hence test < 0 is pointless. */ \ 451*ca3e8d88SDave Plauger if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ 452*ca3e8d88SDave Plauger s->tPos = s->tt[s->tPos]; \ 453*ca3e8d88SDave Plauger cccc = (UChar)(s->tPos & 0xff); \ 454*ca3e8d88SDave Plauger s->tPos >>= 8; 455*ca3e8d88SDave Plauger 456*ca3e8d88SDave Plauger #define BZ_GET_FAST_C(cccc) \ 457*ca3e8d88SDave Plauger /* c_tPos is unsigned, hence test < 0 is pointless. */ \ 458*ca3e8d88SDave Plauger if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ 459*ca3e8d88SDave Plauger c_tPos = c_tt[c_tPos]; \ 460*ca3e8d88SDave Plauger cccc = (UChar)(c_tPos & 0xff); \ 461*ca3e8d88SDave Plauger c_tPos >>= 8; 462*ca3e8d88SDave Plauger 463*ca3e8d88SDave Plauger #define SET_LL4(i,n) \ 464*ca3e8d88SDave Plauger { if (((i) & 0x1) == 0) \ 465*ca3e8d88SDave Plauger s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ 466*ca3e8d88SDave Plauger s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ 467*ca3e8d88SDave Plauger } 468*ca3e8d88SDave Plauger 469*ca3e8d88SDave Plauger #define GET_LL4(i) \ 470*ca3e8d88SDave Plauger ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) 471*ca3e8d88SDave Plauger 472*ca3e8d88SDave Plauger #define SET_LL(i,n) \ 473*ca3e8d88SDave Plauger { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ 474*ca3e8d88SDave Plauger SET_LL4(i, n >> 16); \ 475*ca3e8d88SDave Plauger } 476*ca3e8d88SDave Plauger 477*ca3e8d88SDave Plauger #define GET_LL(i) \ 478*ca3e8d88SDave Plauger (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) 479*ca3e8d88SDave Plauger 480*ca3e8d88SDave Plauger #define BZ_GET_SMALL(cccc) \ 481*ca3e8d88SDave Plauger /* c_tPos is unsigned, hence test < 0 is pointless. */ \ 482*ca3e8d88SDave Plauger if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ 483*ca3e8d88SDave Plauger cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ 484*ca3e8d88SDave Plauger s->tPos = GET_LL(s->tPos); 485*ca3e8d88SDave Plauger 486*ca3e8d88SDave Plauger 487*ca3e8d88SDave Plauger /*-- externs for decompression. --*/ 488*ca3e8d88SDave Plauger 489*ca3e8d88SDave Plauger extern Int32 490*ca3e8d88SDave Plauger BZ2_indexIntoF ( Int32, Int32* ); 491*ca3e8d88SDave Plauger 492*ca3e8d88SDave Plauger extern Int32 493*ca3e8d88SDave Plauger BZ2_decompress ( DState* ); 494*ca3e8d88SDave Plauger 495*ca3e8d88SDave Plauger extern void 496*ca3e8d88SDave Plauger BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, 497*ca3e8d88SDave Plauger Int32, Int32, Int32 ); 498*ca3e8d88SDave Plauger 499*ca3e8d88SDave Plauger 500*ca3e8d88SDave Plauger /*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ 501*ca3e8d88SDave Plauger 502*ca3e8d88SDave Plauger #ifdef BZ_NO_STDIO 503*ca3e8d88SDave Plauger #ifndef NULL 504*ca3e8d88SDave Plauger #define NULL 0 505*ca3e8d88SDave Plauger #endif 506*ca3e8d88SDave Plauger #endif 507*ca3e8d88SDave Plauger 508*ca3e8d88SDave Plauger 509*ca3e8d88SDave Plauger /*-------------------------------------------------------------*/ 510*ca3e8d88SDave Plauger /*--- end bzlib_private.h ---*/ 511*ca3e8d88SDave Plauger /*-------------------------------------------------------------*/ 512*ca3e8d88SDave Plauger #endif /* _BZLIB_PRIVATE_H */ 513