xref: /titanic_53/usr/src/common/bzip2/bzlib_private.h (revision ca3e8d88e8c867355e441fbc914c52e7416fc537)
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