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