00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _BZLIB_PRIVATE_H
00023 #define _BZLIB_PRIVATE_H
00024
00025 #include <stdlib.h>
00026
00027 #ifndef BZ_NO_STDIO
00028 #include <stdio.h>
00029 #include <ctype.h>
00030 #include <string.h>
00031 #endif
00032
00033 #include "bzlib.h"
00034
00035
00036
00037
00038
00039 #define BZ_VERSION "1.0.6, 6-Sept-2010"
00040
00041 typedef char Char;
00042 typedef unsigned char Bool;
00043 typedef unsigned char UChar;
00044 typedef int Int32;
00045 typedef unsigned int UInt32;
00046 typedef short Int16;
00047 typedef unsigned short UInt16;
00048
00049 #define True ((Bool)1)
00050 #define False ((Bool)0)
00051
00052 #ifndef __GNUC__
00053 #define __inline__
00054 #endif
00055
00056 #ifndef BZ_NO_STDIO
00057
00058 extern void BZ2_bz__AssertH__fail ( int errcode );
00059 #define AssertH(cond,errcode) \
00060 { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
00061
00062 #if BZ_DEBUG
00063 #define AssertD(cond,msg) \
00064 { if (!(cond)) { \
00065 fprintf ( stderr, \
00066 "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
00067 exit(1); \
00068 }}
00069 #else
00070 #define AssertD(cond,msg)
00071 #endif
00072
00073 #define VPrintf0(zf) \
00074 fprintf(stderr,zf)
00075 #define VPrintf1(zf,za1) \
00076 fprintf(stderr,zf,za1)
00077 #define VPrintf2(zf,za1,za2) \
00078 fprintf(stderr,zf,za1,za2)
00079 #define VPrintf3(zf,za1,za2,za3) \
00080 fprintf(stderr,zf,za1,za2,za3)
00081 #define VPrintf4(zf,za1,za2,za3,za4) \
00082 fprintf(stderr,zf,za1,za2,za3,za4)
00083 #define VPrintf5(zf,za1,za2,za3,za4,za5) \
00084 fprintf(stderr,zf,za1,za2,za3,za4,za5)
00085
00086 #else
00087
00088 extern void bz_internal_error ( int errcode );
00089 #define AssertH(cond,errcode) \
00090 { if (!(cond)) bz_internal_error ( errcode ); }
00091 #define AssertD(cond,msg) do { } while (0)
00092 #define VPrintf0(zf) do { } while (0)
00093 #define VPrintf1(zf,za1) do { } while (0)
00094 #define VPrintf2(zf,za1,za2) do { } while (0)
00095 #define VPrintf3(zf,za1,za2,za3) do { } while (0)
00096 #define VPrintf4(zf,za1,za2,za3,za4) do { } while (0)
00097 #define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)
00098
00099 #endif
00100
00101
00102 #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
00103 #define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
00104
00105
00106
00107
00108 #define BZ_HDR_B 0x42
00109 #define BZ_HDR_Z 0x5a
00110 #define BZ_HDR_h 0x68
00111 #define BZ_HDR_0 0x30
00112
00113
00114
00115 #define BZ_MAX_ALPHA_SIZE 258
00116 #define BZ_MAX_CODE_LEN 23
00117
00118 #define BZ_RUNA 0
00119 #define BZ_RUNB 1
00120
00121 #define BZ_N_GROUPS 6
00122 #define BZ_G_SIZE 50
00123 #define BZ_N_ITERS 4
00124
00125 #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
00126
00127
00128
00129
00130
00131 extern Int32 BZ2_rNums[512];
00132
00133 #define BZ_RAND_DECLS \
00134 Int32 rNToGo; \
00135 Int32 rTPos \
00136
00137 #define BZ_RAND_INIT_MASK \
00138 s->rNToGo = 0; \
00139 s->rTPos = 0 \
00140
00141 #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
00142
00143 #define BZ_RAND_UPD_MASK \
00144 if (s->rNToGo == 0) { \
00145 s->rNToGo = BZ2_rNums[s->rTPos]; \
00146 s->rTPos++; \
00147 if (s->rTPos == 512) s->rTPos = 0; \
00148 } \
00149 s->rNToGo--;
00150
00151
00152
00153
00154
00155 extern UInt32 BZ2_crc32Table[256];
00156
00157 #define BZ_INITIALISE_CRC(crcVar) \
00158 { \
00159 crcVar = 0xffffffffL; \
00160 }
00161
00162 #define BZ_FINALISE_CRC(crcVar) \
00163 { \
00164 crcVar = ~(crcVar); \
00165 }
00166
00167 #define BZ_UPDATE_CRC(crcVar,cha) \
00168 { \
00169 crcVar = (crcVar << 8) ^ \
00170 BZ2_crc32Table[(crcVar >> 24) ^ \
00171 ((UChar)cha)]; \
00172 }
00173
00174
00175
00176
00177
00178 #define BZ_M_IDLE 1
00179 #define BZ_M_RUNNING 2
00180 #define BZ_M_FLUSHING 3
00181 #define BZ_M_FINISHING 4
00182
00183 #define BZ_S_OUTPUT 1
00184 #define BZ_S_INPUT 2
00185
00186 #define BZ_N_RADIX 2
00187 #define BZ_N_QSORT 12
00188 #define BZ_N_SHELL 18
00189 #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
00190
00191
00192
00193
00194
00195
00196 typedef
00197 struct {
00198
00199 bz_stream* strm;
00200
00201
00202
00203 Int32 mode;
00204 Int32 state;
00205
00206
00207 UInt32 avail_in_expect;
00208
00209
00210 UInt32* arr1;
00211 UInt32* arr2;
00212 UInt32* ftab;
00213 Int32 origPtr;
00214
00215
00216 UInt32* ptr;
00217 UChar* block;
00218 UInt16* mtfv;
00219 UChar* zbits;
00220
00221
00222 Int32 workFactor;
00223
00224
00225 UInt32 state_in_ch;
00226 Int32 state_in_len;
00227 BZ_RAND_DECLS;
00228
00229
00230 Int32 nblock;
00231 Int32 nblockMAX;
00232 Int32 numZ;
00233 Int32 state_out_pos;
00234
00235
00236 Int32 nInUse;
00237 Bool inUse[256];
00238 UChar unseqToSeq[256];
00239
00240
00241 UInt32 bsBuff;
00242 Int32 bsLive;
00243
00244
00245 UInt32 blockCRC;
00246 UInt32 combinedCRC;
00247
00248
00249 Int32 verbosity;
00250 Int32 blockNo;
00251 Int32 blockSize100k;
00252
00253
00254 Int32 nMTF;
00255 Int32 mtfFreq [BZ_MAX_ALPHA_SIZE];
00256 UChar selector [BZ_MAX_SELECTORS];
00257 UChar selectorMtf[BZ_MAX_SELECTORS];
00258
00259 UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
00260 Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
00261 Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
00262
00263 UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4];
00264
00265 }
00266 EState;
00267
00268
00269
00270
00271
00272 extern void
00273 BZ2_blockSort ( EState* );
00274
00275 extern void
00276 BZ2_compressBlock ( EState*, Bool );
00277
00278 extern void
00279 BZ2_bsInitWrite ( EState* );
00280
00281 extern void
00282 BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
00283
00284 extern void
00285 BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
00286
00287
00288
00289
00290
00291 #define BZ_X_IDLE 1
00292 #define BZ_X_OUTPUT 2
00293
00294 #define BZ_X_MAGIC_1 10
00295 #define BZ_X_MAGIC_2 11
00296 #define BZ_X_MAGIC_3 12
00297 #define BZ_X_MAGIC_4 13
00298 #define BZ_X_BLKHDR_1 14
00299 #define BZ_X_BLKHDR_2 15
00300 #define BZ_X_BLKHDR_3 16
00301 #define BZ_X_BLKHDR_4 17
00302 #define BZ_X_BLKHDR_5 18
00303 #define BZ_X_BLKHDR_6 19
00304 #define BZ_X_BCRC_1 20
00305 #define BZ_X_BCRC_2 21
00306 #define BZ_X_BCRC_3 22
00307 #define BZ_X_BCRC_4 23
00308 #define BZ_X_RANDBIT 24
00309 #define BZ_X_ORIGPTR_1 25
00310 #define BZ_X_ORIGPTR_2 26
00311 #define BZ_X_ORIGPTR_3 27
00312 #define BZ_X_MAPPING_1 28
00313 #define BZ_X_MAPPING_2 29
00314 #define BZ_X_SELECTOR_1 30
00315 #define BZ_X_SELECTOR_2 31
00316 #define BZ_X_SELECTOR_3 32
00317 #define BZ_X_CODING_1 33
00318 #define BZ_X_CODING_2 34
00319 #define BZ_X_CODING_3 35
00320 #define BZ_X_MTF_1 36
00321 #define BZ_X_MTF_2 37
00322 #define BZ_X_MTF_3 38
00323 #define BZ_X_MTF_4 39
00324 #define BZ_X_MTF_5 40
00325 #define BZ_X_MTF_6 41
00326 #define BZ_X_ENDHDR_2 42
00327 #define BZ_X_ENDHDR_3 43
00328 #define BZ_X_ENDHDR_4 44
00329 #define BZ_X_ENDHDR_5 45
00330 #define BZ_X_ENDHDR_6 46
00331 #define BZ_X_CCRC_1 47
00332 #define BZ_X_CCRC_2 48
00333 #define BZ_X_CCRC_3 49
00334 #define BZ_X_CCRC_4 50
00335
00336
00337
00338
00339
00340 #define MTFA_SIZE 4096
00341 #define MTFL_SIZE 16
00342
00343
00344
00345
00346
00347 typedef
00348 struct {
00349
00350 bz_stream* strm;
00351
00352
00353 Int32 state;
00354
00355
00356 UChar state_out_ch;
00357 Int32 state_out_len;
00358 Bool blockRandomised;
00359 BZ_RAND_DECLS;
00360
00361
00362 UInt32 bsBuff;
00363 Int32 bsLive;
00364
00365
00366 Int32 blockSize100k;
00367 Bool smallDecompress;
00368 Int32 currBlockNo;
00369 Int32 verbosity;
00370
00371
00372 Int32 origPtr;
00373 UInt32 tPos;
00374 Int32 k0;
00375 Int32 unzftab[256];
00376 Int32 nblock_used;
00377 Int32 cftab[257];
00378 Int32 cftabCopy[257];
00379
00380
00381 UInt32 *tt;
00382
00383
00384 UInt16 *ll16;
00385 UChar *ll4;
00386
00387
00388 UInt32 storedBlockCRC;
00389 UInt32 storedCombinedCRC;
00390 UInt32 calculatedBlockCRC;
00391 UInt32 calculatedCombinedCRC;
00392
00393
00394 Int32 nInUse;
00395 Bool inUse[256];
00396 Bool inUse16[16];
00397 UChar seqToUnseq[256];
00398
00399
00400 UChar mtfa [MTFA_SIZE];
00401 Int32 mtfbase[256 / MTFL_SIZE];
00402 UChar selector [BZ_MAX_SELECTORS];
00403 UChar selectorMtf[BZ_MAX_SELECTORS];
00404 UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
00405
00406 Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
00407 Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
00408 Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
00409 Int32 minLens[BZ_N_GROUPS];
00410
00411
00412 Int32 save_i;
00413 Int32 save_j;
00414 Int32 save_t;
00415 Int32 save_alphaSize;
00416 Int32 save_nGroups;
00417 Int32 save_nSelectors;
00418 Int32 save_EOB;
00419 Int32 save_groupNo;
00420 Int32 save_groupPos;
00421 Int32 save_nextSym;
00422 Int32 save_nblockMAX;
00423 Int32 save_nblock;
00424 Int32 save_es;
00425 Int32 save_N;
00426 Int32 save_curr;
00427 Int32 save_zt;
00428 Int32 save_zn;
00429 Int32 save_zvec;
00430 Int32 save_zj;
00431 Int32 save_gSel;
00432 Int32 save_gMinlen;
00433 Int32* save_gLimit;
00434 Int32* save_gBase;
00435 Int32* save_gPerm;
00436
00437 }
00438 DState;
00439
00440
00441
00442
00443
00444 #define BZ_GET_FAST(cccc) \
00445 \
00446 if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
00447 s->tPos = s->tt[s->tPos]; \
00448 cccc = (UChar)(s->tPos & 0xff); \
00449 s->tPos >>= 8;
00450
00451 #define BZ_GET_FAST_C(cccc) \
00452 \
00453 if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \
00454 c_tPos = c_tt[c_tPos]; \
00455 cccc = (UChar)(c_tPos & 0xff); \
00456 c_tPos >>= 8;
00457
00458 #define SET_LL4(i,n) \
00459 { if (((i) & 0x1) == 0) \
00460 s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \
00461 s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \
00462 }
00463
00464 #define GET_LL4(i) \
00465 ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
00466
00467 #define SET_LL(i,n) \
00468 { s->ll16[i] = (UInt16)(n & 0x0000ffff); \
00469 SET_LL4(i, n >> 16); \
00470 }
00471
00472 #define GET_LL(i) \
00473 (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
00474
00475 #define BZ_GET_SMALL(cccc) \
00476 \
00477 if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
00478 cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \
00479 s->tPos = GET_LL(s->tPos);
00480
00481
00482
00483
00484 extern Int32
00485 BZ2_indexIntoF ( Int32, Int32* );
00486
00487 extern Int32
00488 BZ2_decompress ( DState* );
00489
00490 extern void
00491 BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
00492 Int32, Int32, Int32 );
00493
00494
00495 #endif
00496
00497
00498
00499
00500 #ifdef BZ_NO_STDIO
00501 #ifndef NULL
00502 #define NULL 0
00503 #endif
00504 #endif
00505
00506
00507
00508
00509