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