ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
decompress.c
Go to the documentation of this file.
1
2/*-------------------------------------------------------------*/
3/*--- Decompression machinery ---*/
4/*--- decompress.c ---*/
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.5 of 10 December 2007
12 Copyright (C) 1996-2007 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#include "bzlib_private.h"
23
24#if (__GNUC__ >= 8)
25 #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
26#endif
27
29
30
31
32/*---------------------------------------------------*/
33static
34void makeMaps_d ( DState* s )
35{
36 Int32 i;
37 s->nInUse = 0;
38 for (i = 0; i < 256; i++)
39 if (s->inUse[i]) {
40 s->seqToUnseq[s->nInUse] = i;
41 s->nInUse++;
42 }
43}
44
45
46/*---------------------------------------------------*/
47#define RETURN(rrr) \
48 { retVal = rrr; goto save_state_and_return; };
49
50#define GET_BITS(lll,vvv,nnn) \
51 case lll: s->state = lll; \
52 while (True) { \
53 if (s->bsLive >= nnn) { \
54 UInt32 v; \
55 v = (s->bsBuff >> \
56 (s->bsLive-nnn)) & ((1 << nnn)-1); \
57 s->bsLive -= nnn; \
58 vvv = v; \
59 break; \
60 } \
61 if (s->strm->avail_in == 0) RETURN(BZ_OK); \
62 s->bsBuff \
63 = (s->bsBuff << 8) | \
64 ((UInt32) \
65 (*((UChar*)(s->strm->next_in)))); \
66 s->bsLive += 8; \
67 s->strm->next_in++; \
68 s->strm->avail_in--; \
69 s->strm->total_in_lo32++; \
70 if (s->strm->total_in_lo32 == 0) \
71 s->strm->total_in_hi32++; \
72 }
73
74#define GET_UCHAR(lll,uuu) \
75 GET_BITS(lll,uuu,8)
76
77#define GET_BIT(lll,uuu) \
78 GET_BITS(lll,uuu,1)
79
80/*---------------------------------------------------*/
81#define GET_MTF_VAL(label1,label2,lval) \
82{ \
83 if (groupPos == 0) { \
84 groupNo++; \
85 if (groupNo >= nSelectors) \
86 RETURN(BZ_DATA_ERROR); \
87 groupPos = BZ_G_SIZE; \
88 gSel = s->selector[groupNo]; \
89 gMinlen = s->minLens[gSel]; \
90 gLimit = &(s->limit[gSel][0]); \
91 gPerm = &(s->perm[gSel][0]); \
92 gBase = &(s->base[gSel][0]); \
93 } \
94 groupPos--; \
95 zn = gMinlen; \
96 GET_BITS(label1, zvec, zn); \
97 while (1) { \
98 if (zn > 20 /* the longest code */) \
99 RETURN(BZ_DATA_ERROR); \
100 if (zvec <= gLimit[zn]) break; \
101 zn++; \
102 GET_BIT(label2, zj); \
103 zvec = (zvec << 1) | zj; \
104 }; \
105 if (zvec - gBase[zn] < 0 \
106 || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
107 RETURN(BZ_DATA_ERROR); \
108 lval = gPerm[zvec - gBase[zn]]; \
109}
110
111
112/*---------------------------------------------------*/
114{
115 UChar uc;
116 Int32 retVal;
117 Int32 minLen, maxLen;
118 bz_stream* strm = s->strm;
119
120 /* stuff that needs to be saved/restored */
121 Int32 i;
122 Int32 j;
123 Int32 t;
124 Int32 alphaSize;
125 Int32 nGroups;
126 Int32 nSelectors;
127 Int32 EOB;
128 Int32 groupNo;
129 Int32 groupPos;
130 Int32 nextSym;
131 Int32 nblockMAX;
132 Int32 nblock;
133 Int32 es;
134 Int32 N;
135 Int32 curr;
136 Int32 zt;
137 Int32 zn;
138 Int32 zvec;
139 Int32 zj;
140 Int32 gSel;
141 Int32 gMinlen;
142 Int32* gLimit;
143 Int32* gBase;
144 Int32* gPerm;
145
146 if (s->state == BZ_X_MAGIC_1) {
147 /*initialise the save area*/
148 s->save_i = 0;
149 s->save_j = 0;
150 s->save_t = 0;
151 s->save_alphaSize = 0;
152 s->save_nGroups = 0;
153 s->save_nSelectors = 0;
154 s->save_EOB = 0;
155 s->save_groupNo = 0;
156 s->save_groupPos = 0;
157 s->save_nextSym = 0;
158 s->save_nblockMAX = 0;
159 s->save_nblock = 0;
160 s->save_es = 0;
161 s->save_N = 0;
162 s->save_curr = 0;
163 s->save_zt = 0;
164 s->save_zn = 0;
165 s->save_zvec = 0;
166 s->save_zj = 0;
167 s->save_gSel = 0;
168 s->save_gMinlen = 0;
169 s->save_gLimit = NULL;
170 s->save_gBase = NULL;
171 s->save_gPerm = NULL;
172 }
173
174 /*restore from the save area*/
175 i = s->save_i;
176 j = s->save_j;
177 t = s->save_t;
178 alphaSize = s->save_alphaSize;
179 nGroups = s->save_nGroups;
180 nSelectors = s->save_nSelectors;
181 EOB = s->save_EOB;
182 groupNo = s->save_groupNo;
183 groupPos = s->save_groupPos;
184 nextSym = s->save_nextSym;
185 nblockMAX = s->save_nblockMAX;
186 nblock = s->save_nblock;
187 es = s->save_es;
188 N = s->save_N;
189 curr = s->save_curr;
190 zt = s->save_zt;
191 zn = s->save_zn;
192 zvec = s->save_zvec;
193 zj = s->save_zj;
194 gSel = s->save_gSel;
195 gMinlen = s->save_gMinlen;
196 gLimit = s->save_gLimit;
197 gBase = s->save_gBase;
198 gPerm = s->save_gPerm;
199
200 retVal = BZ_OK;
201
202 switch (s->state) {
203
206
209
212
214 if (s->blockSize100k < (BZ_HDR_0 + 1) ||
217
218 if (s->smallDecompress) {
219 s->ll16 = (unsigned short *)BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
220 s->ll4 = (unsigned char *)BZALLOC(
221 ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)
222 );
223 if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
224 } else {
225 s->tt = (unsigned *)BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
226 if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
227 }
228
230
231 if (uc == 0x17) goto endhdr_2;
232 if (uc != 0x31) RETURN(BZ_DATA_ERROR);
234 if (uc != 0x41) RETURN(BZ_DATA_ERROR);
236 if (uc != 0x59) RETURN(BZ_DATA_ERROR);
238 if (uc != 0x26) RETURN(BZ_DATA_ERROR);
240 if (uc != 0x53) RETURN(BZ_DATA_ERROR);
242 if (uc != 0x59) RETURN(BZ_DATA_ERROR);
243
244 s->currBlockNo++;
245 if (s->verbosity >= 2)
246 VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo );
247
248 s->storedBlockCRC = 0;
250 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
252 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
254 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
256 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
257
259
260 s->origPtr = 0;
262 s->origPtr = (s->origPtr << 8) | ((Int32)uc);
264 s->origPtr = (s->origPtr << 8) | ((Int32)uc);
266 s->origPtr = (s->origPtr << 8) | ((Int32)uc);
267
268 if (s->origPtr < 0)
270 if (s->origPtr > 10 + 100000*s->blockSize100k)
272
273 /*--- Receive the mapping table ---*/
274 for (i = 0; i < 16; i++) {
276 if (uc == 1)
277 s->inUse16[i] = True; else
278 s->inUse16[i] = False;
279 }
280
281 for (i = 0; i < 256; i++) s->inUse[i] = False;
282
283 for (i = 0; i < 16; i++)
284 if (s->inUse16[i])
285 for (j = 0; j < 16; j++) {
287 if (uc == 1) s->inUse[i * 16 + j] = True;
288 }
289 makeMaps_d ( s );
290 if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
291 alphaSize = s->nInUse+2;
292
293 /*--- Now the selectors ---*/
294 GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
295 if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
296 GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
297 if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
298 for (i = 0; i < nSelectors; i++) {
299 j = 0;
300 while (True) {
302 if (uc == 0) break;
303 j++;
304 if (j >= nGroups) RETURN(BZ_DATA_ERROR);
305 }
306 s->selectorMtf[i] = j;
307 }
308
309 /*--- Undo the MTF values for the selectors. ---*/
310 {
311 UChar pos[BZ_N_GROUPS], tmp, v;
312 for (v = 0; v < nGroups; v++) pos[v] = v;
313
314 for (i = 0; i < nSelectors; i++) {
315 v = s->selectorMtf[i];
316 tmp = pos[v];
317 while (v > 0) { pos[v] = pos[v-1]; v--; }
318 pos[0] = tmp;
319 s->selector[i] = tmp;
320 }
321 }
322
323 /*--- Now the coding tables ---*/
324 for (t = 0; t < nGroups; t++) {
325 GET_BITS(BZ_X_CODING_1, curr, 5);
326 for (i = 0; i < alphaSize; i++) {
327 while (True) {
328 if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
330 if (uc == 0) break;
332 if (uc == 0) curr++; else curr--;
333 }
334 s->len[t][i] = curr;
335 }
336 }
337
338 /*--- Create the Huffman decoding tables ---*/
339 for (t = 0; t < nGroups; t++) {
340 minLen = 32;
341 maxLen = 0;
342 for (i = 0; i < alphaSize; i++) {
343 if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
344 if (s->len[t][i] < minLen) minLen = s->len[t][i];
345 }
347 &(s->limit[t][0]),
348 &(s->base[t][0]),
349 &(s->perm[t][0]),
350 &(s->len[t][0]),
351 minLen, maxLen, alphaSize
352 );
353 s->minLens[t] = minLen;
354 }
355
356 /*--- Now the MTF values ---*/
357
358 EOB = s->nInUse+1;
359 nblockMAX = 100000 * s->blockSize100k;
360 groupNo = -1;
361 groupPos = 0;
362
363 for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
364
365 /*-- MTF init --*/
366 {
367 Int32 ii, jj, kk;
368 kk = MTFA_SIZE-1;
369 for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
370 for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
371 s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
372 kk--;
373 }
374 s->mtfbase[ii] = kk + 1;
375 }
376 }
377 /*-- end MTF init --*/
378
379 nblock = 0;
381
382 while (True) {
383
384 if (nextSym == EOB) break;
385
386 if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
387
388 es = -1;
389 N = 1;
390 do {
391 if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
392 if (nextSym == BZ_RUNB) es = es + (1+1) * N;
393 N = N * 2;
395 }
396 while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
397
398 es++;
399 uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
400 s->unzftab[uc] += es;
401
402 if (s->smallDecompress)
403 while (es > 0) {
404 if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
405 s->ll16[nblock] = (UInt16)uc;
406 nblock++;
407 es--;
408 }
409 else
410 while (es > 0) {
411 if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
412 s->tt[nblock] = (UInt32)uc;
413 nblock++;
414 es--;
415 };
416
417 continue;
418
419 } else {
420
421 if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
422
423 /*-- uc = MTF ( nextSym-1 ) --*/
424 {
425 Int32 ii, jj, kk, pp, lno, off;
426 UInt32 nn;
427 nn = (UInt32)(nextSym - 1);
428
429 if (nn < MTFL_SIZE) {
430 /* avoid general-case expense */
431 pp = s->mtfbase[0];
432 uc = s->mtfa[pp+nn];
433 while (nn > 3) {
434 Int32 z = pp+nn;
435 s->mtfa[(z) ] = s->mtfa[(z)-1];
436 s->mtfa[(z)-1] = s->mtfa[(z)-2];
437 s->mtfa[(z)-2] = s->mtfa[(z)-3];
438 s->mtfa[(z)-3] = s->mtfa[(z)-4];
439 nn -= 4;
440 }
441 while (nn > 0) {
442 s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
443 };
444 s->mtfa[pp] = uc;
445 } else {
446 /* general case */
447 lno = nn / MTFL_SIZE;
448 off = nn % MTFL_SIZE;
449 pp = s->mtfbase[lno] + off;
450 uc = s->mtfa[pp];
451 while (pp > s->mtfbase[lno]) {
452 s->mtfa[pp] = s->mtfa[pp-1]; pp--;
453 };
454 s->mtfbase[lno]++;
455 while (lno > 0) {
456 s->mtfbase[lno]--;
457 s->mtfa[s->mtfbase[lno]]
458 = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
459 lno--;
460 }
461 s->mtfbase[0]--;
462 s->mtfa[s->mtfbase[0]] = uc;
463 if (s->mtfbase[0] == 0) {
464 kk = MTFA_SIZE-1;
465 for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
466 for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
467 s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
468 kk--;
469 }
470 s->mtfbase[ii] = kk + 1;
471 }
472 }
473 }
474 }
475 /*-- end uc = MTF ( nextSym-1 ) --*/
476
477 s->unzftab[s->seqToUnseq[uc]]++;
478 if (s->smallDecompress)
479 s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
480 s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
481 nblock++;
482
484 continue;
485 }
486 }
487
488 /* Now we know what nblock is, we can do a better sanity
489 check on s->origPtr.
490 */
491 if (s->origPtr < 0 || s->origPtr >= nblock)
493
494 /*-- Set up cftab to facilitate generation of T^(-1) --*/
495 s->cftab[0] = 0;
496 for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
497 for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
498 for (i = 0; i <= 256; i++) {
499 if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
500 /* s->cftab[i] can legitimately be == nblock */
502 }
503 }
504
505 s->state_out_len = 0;
506 s->state_out_ch = 0;
508 s->state = BZ_X_OUTPUT;
509 if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
510
511 if (s->smallDecompress) {
512
513 /*-- Make a copy of cftab, used in generation of T --*/
514 for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
515
516 /*-- compute the T vector --*/
517 for (i = 0; i < nblock; i++) {
518 uc = (UChar)(s->ll16[i]);
519 SET_LL(i, s->cftabCopy[uc]);
520 s->cftabCopy[uc]++;
521 }
522
523 /*-- Compute T^(-1) by pointer reversal on T --*/
524 i = s->origPtr;
525 j = GET_LL(i);
526 do {
527 Int32 tmp = GET_LL(j);
528 SET_LL(j, i);
529 i = j;
530 j = tmp;
531 }
532 while (i != s->origPtr);
533
534 s->tPos = s->origPtr;
535 s->nblock_used = 0;
536 if (s->blockRandomised) {
538 BZ_GET_SMALL(s->k0); s->nblock_used++;
540 } else {
541 BZ_GET_SMALL(s->k0); s->nblock_used++;
542 }
543
544 } else {
545
546 /*-- compute the T^(-1) vector --*/
547 for (i = 0; i < nblock; i++) {
548 uc = (UChar)(s->tt[i] & 0xff);
549 s->tt[s->cftab[uc]] |= (i << 8);
550 s->cftab[uc]++;
551 }
552
553 s->tPos = s->tt[s->origPtr] >> 8;
554 s->nblock_used = 0;
555 if (s->blockRandomised) {
557 BZ_GET_FAST(s->k0); s->nblock_used++;
559 } else {
560 BZ_GET_FAST(s->k0); s->nblock_used++;
561 }
562
563 }
564
565 RETURN(BZ_OK);
566
567
568
569 endhdr_2:
570
572 if (uc != 0x72) RETURN(BZ_DATA_ERROR);
574 if (uc != 0x45) RETURN(BZ_DATA_ERROR);
576 if (uc != 0x38) RETURN(BZ_DATA_ERROR);
578 if (uc != 0x50) RETURN(BZ_DATA_ERROR);
580 if (uc != 0x90) RETURN(BZ_DATA_ERROR);
581
582 s->storedCombinedCRC = 0;
584 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
586 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
588 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
590 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
591
592 s->state = BZ_X_IDLE;
594
595 default: AssertH ( False, 4001 );
596 }
597
598 AssertH ( False, 4002 );
599
600 save_state_and_return:
601
602 s->save_i = i;
603 s->save_j = j;
604 s->save_t = t;
605 s->save_alphaSize = alphaSize;
606 s->save_nGroups = nGroups;
607 s->save_nSelectors = nSelectors;
608 s->save_EOB = EOB;
609 s->save_groupNo = groupNo;
610 s->save_groupPos = groupPos;
611 s->save_nextSym = nextSym;
612 s->save_nblockMAX = nblockMAX;
613 s->save_nblock = nblock;
614 s->save_es = es;
615 s->save_N = N;
616 s->save_curr = curr;
617 s->save_zt = zt;
618 s->save_zn = zn;
619 s->save_zvec = zvec;
620 s->save_zj = zj;
621 s->save_gSel = gSel;
622 s->save_gMinlen = gMinlen;
623 s->save_gLimit = gLimit;
624 s->save_gBase = gBase;
625 s->save_gPerm = gPerm;
626
627 return retVal;
628}
629
630
631/*-------------------------------------------------------------*/
632/*--- end decompress.c ---*/
633/*-------------------------------------------------------------*/
635
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define BZ_MEM_ERROR
Definition bzlib.h:41
#define BZ_DATA_ERROR_MAGIC
Definition bzlib.h:43
#define BZ_OK
Definition bzlib.h:34
#define BZ_DATA_ERROR
Definition bzlib.h:42
#define BZ_STREAM_END
Definition bzlib.h:38
#define BZ_X_MTF_4
#define BZ_X_IDLE
#define BZ_N_GROUPS
#define BZ_X_ENDHDR_5
#define BZ_GET_FAST(cccc)
#define BZ_X_MTF_5
#define BZ_HDR_Z
#define BZ_HDR_B
#define BZ_X_SELECTOR_1
#define BZ_X_MTF_3
#define BZ_X_ORIGPTR_3
#define BZ_X_MAGIC_1
#define SET_LL(i, n)
#define BZ_X_BLKHDR_1
#define False
#define BZALLOC(nnn)
#define GET_LL(i)
#define BZ_X_BLKHDR_2
#define MTFL_SIZE
#define BZ_RAND_UPD_MASK
#define BZ_X_MAPPING_1
#define BZ_X_ORIGPTR_1
#define BZ_HDR_h
unsigned int UInt32
#define BZ_X_RANDBIT
#define BZ_X_ORIGPTR_2
unsigned char UChar
#define BZ_X_MAGIC_3
#define BZ_RAND_MASK
#define BZ_X_MTF_6
#define BZ_X_BLKHDR_5
#define BZ_GET_SMALL(cccc)
#define BZ_X_CODING_2
#define BZ_X_ENDHDR_4
#define BZ_X_BCRC_1
#define BZ_X_MAGIC_2
#define BZ_X_CCRC_2
#define BZ_X_CODING_3
#define BZ_X_ENDHDR_2
#define BZ_X_MAGIC_4
#define BZ_RAND_INIT_MASK
#define BZ_RUNA
#define BZ_X_MTF_1
#define MTFA_SIZE
#define BZ_X_SELECTOR_2
void BZ2_hbCreateDecodeTables(Int32 *, Int32 *, Int32 *, UChar *, Int32, Int32, Int32)
Definition huffman.c:173
#define BZ_X_MTF_2
#define BZ_X_BLKHDR_6
#define BZ_X_BCRC_4
#define BZ_X_CODING_1
#define BZ_X_ENDHDR_3
#define AssertH(cond, errcode)
#define BZ_X_BLKHDR_4
#define BZ_X_BLKHDR_3
#define BZ_X_CCRC_3
#define BZ_INITIALISE_CRC(crcVar)
#define BZ_X_CCRC_1
#define BZ_X_ENDHDR_6
unsigned short UInt16
#define BZ_HDR_0
#define BZ_X_OUTPUT
#define VPrintf0(zf)
#define BZ_X_BCRC_2
#define BZ_X_BCRC_3
#define True
int Int32
#define BZ_X_CCRC_4
#define BZ_X_MAPPING_2
#define BZ_RUNB
#define BZ_X_SELECTOR_3
#define VPrintf1(zf, za1)
#define GET_UCHAR(lll, uuu)
Definition decompress.c:74
#define RETURN(rrr)
Definition decompress.c:47
Int32 BZ2_decompress(DState *s)
Definition decompress.c:113
#define GET_MTF_VAL(label1, label2, lval)
Definition decompress.c:81
#define GET_BIT(lll, uuu)
Definition decompress.c:77
#define GET_BITS(lll, vvv, nnn)
Definition decompress.c:50
bool pos
Definition globals.c:30
UInt32 calculatedBlockCRC
Int32 save_zn
bz_stream * strm
UChar selector[BZ_MAX_SELECTORS]
Bool smallDecompress
Int32 base[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
UChar mtfa[MTFA_SIZE]
Int32 save_nextSym
Int32 save_alphaSize
Int32 save_t
UInt32 storedBlockCRC
Int32 save_zt
UInt32 storedCombinedCRC
Int32 * save_gLimit
Int32 save_nblock
Int32 save_i
Int32 origPtr
Int32 save_j
Int32 save_gMinlen
Int32 save_EOB
Int32 state_out_len
Int32 currBlockNo
UInt32 * tt
Int32 nblock_used
Int32 state
Int32 save_nGroups
Int32 unzftab[256]
Int32 cftab[257]
Int32 verbosity
Int32 perm[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
Int32 save_nSelectors
UChar len[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
UChar * ll4
UInt32 tPos
Int32 save_zvec
UChar seqToUnseq[256]
UInt16 * ll16
Int32 minLens[BZ_N_GROUPS]
Int32 * save_gPerm
UChar state_out_ch
Int32 save_gSel
Bool inUse[256]
Int32 save_curr
Int32 save_N
Int32 save_groupPos
UChar selectorMtf[BZ_MAX_SELECTORS]
Int32 mtfbase[256/MTFL_SIZE]
Int32 save_zj
Int32 save_groupNo
Int32 nInUse
Bool inUse16[16]
Int32 blockSize100k
Int32 save_nblockMAX
Int32 limit[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
Int32 * save_gBase
Bool blockRandomised
Int32 save_es
Int32 cftabCopy[257]