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