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