xref: /freebsd/contrib/bzip2/bzlib_private.h (revision 51f61fc0c7ece7a30c737341e65455841bc3f04e)
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