Lines Matching +full:- +full:s
5 /*-------------------------------------------------------------*/
6 /*--- Decompression machinery ---*/
7 /*--- decompress.c ---*/
8 /*-------------------------------------------------------------*/
10 /*--
12 library for lossless, block-sorting data compression.
14 Copyright (C) 1996-2002 Julian R Seward. All rights reserved.
62 --*/
68 /*---------------------------------------------------*/
70 void makeMaps_d ( DState* s ) in makeMaps_d() argument
73 s->nInUse = 0; in makeMaps_d()
75 if (s->inUse[i]) { in makeMaps_d()
76 s->seqToUnseq[s->nInUse] = i; in makeMaps_d()
77 s->nInUse++; in makeMaps_d()
82 /*---------------------------------------------------*/
87 case lll: s->state = lll; \
89 if (s->bsLive >= nnn) { \
91 v = (s->bsBuff >> \
92 (s->bsLive-nnn)) & ((1 << nnn)-1); \
93 s->bsLive -= nnn; \
97 if (s->strm->avail_in == 0) RETURN(BZ_OK); \
98 s->bsBuff \
99 = (s->bsBuff << 8) | \
101 (*((UChar*)(s->strm->next_in)))); \
102 s->bsLive += 8; \
103 s->strm->next_in++; \
104 s->strm->avail_in--; \
105 s->strm->total_in_lo32++; \
106 if (s->strm->total_in_lo32 == 0) \
107 s->strm->total_in_hi32++; \
116 /*---------------------------------------------------*/
124 gSel = s->selector[groupNo]; \
125 gMinlen = s->minLens[gSel]; \
126 gLimit = &(s->limit[gSel][0]); \
127 gPerm = &(s->perm[gSel][0]); \
128 gBase = &(s->base[gSel][0]); \
130 groupPos--; \
141 if (zvec - gBase[zn] < 0 \
142 || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
144 lval = gPerm[zvec - gBase[zn]]; \
148 /*---------------------------------------------------*/
149 Int32 BZ2_decompress ( DState* s ) in BZ2_decompress() argument
154 bz_stream* strm = s->strm; in BZ2_decompress()
182 if (s->state == BZ_X_MAGIC_1) { in BZ2_decompress()
184 s->save_i = 0; in BZ2_decompress()
185 s->save_j = 0; in BZ2_decompress()
186 s->save_t = 0; in BZ2_decompress()
187 s->save_alphaSize = 0; in BZ2_decompress()
188 s->save_nGroups = 0; in BZ2_decompress()
189 s->save_nSelectors = 0; in BZ2_decompress()
190 s->save_EOB = 0; in BZ2_decompress()
191 s->save_groupNo = 0; in BZ2_decompress()
192 s->save_groupPos = 0; in BZ2_decompress()
193 s->save_nextSym = 0; in BZ2_decompress()
194 s->save_nblockMAX = 0; in BZ2_decompress()
195 s->save_nblock = 0; in BZ2_decompress()
196 s->save_es = 0; in BZ2_decompress()
197 s->save_N = 0; in BZ2_decompress()
198 s->save_curr = 0; in BZ2_decompress()
199 s->save_zt = 0; in BZ2_decompress()
200 s->save_zn = 0; in BZ2_decompress()
201 s->save_zvec = 0; in BZ2_decompress()
202 s->save_zj = 0; in BZ2_decompress()
203 s->save_gSel = 0; in BZ2_decompress()
204 s->save_gMinlen = 0; in BZ2_decompress()
205 s->save_gLimit = NULL; in BZ2_decompress()
206 s->save_gBase = NULL; in BZ2_decompress()
207 s->save_gPerm = NULL; in BZ2_decompress()
211 i = s->save_i; in BZ2_decompress()
212 j = s->save_j; in BZ2_decompress()
213 t = s->save_t; in BZ2_decompress()
214 alphaSize = s->save_alphaSize; in BZ2_decompress()
215 nGroups = s->save_nGroups; in BZ2_decompress()
216 nSelectors = s->save_nSelectors; in BZ2_decompress()
217 EOB = s->save_EOB; in BZ2_decompress()
218 groupNo = s->save_groupNo; in BZ2_decompress()
219 groupPos = s->save_groupPos; in BZ2_decompress()
220 nextSym = s->save_nextSym; in BZ2_decompress()
221 nblockMAX = s->save_nblockMAX; in BZ2_decompress()
222 nblock = s->save_nblock; in BZ2_decompress()
223 es = s->save_es; in BZ2_decompress()
224 N = s->save_N; in BZ2_decompress()
225 curr = s->save_curr; in BZ2_decompress()
226 zt = s->save_zt; in BZ2_decompress()
227 zn = s->save_zn; in BZ2_decompress()
228 zvec = s->save_zvec; in BZ2_decompress()
229 zj = s->save_zj; in BZ2_decompress()
230 gSel = s->save_gSel; in BZ2_decompress()
231 gMinlen = s->save_gMinlen; in BZ2_decompress()
232 gLimit = s->save_gLimit; in BZ2_decompress()
233 gBase = s->save_gBase; in BZ2_decompress()
234 gPerm = s->save_gPerm; in BZ2_decompress()
238 switch (s->state) { in BZ2_decompress()
249 GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) in BZ2_decompress()
250 if (s->blockSize100k < (BZ_HDR_0 + 1) || in BZ2_decompress()
251 s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); in BZ2_decompress()
252 s->blockSize100k -= BZ_HDR_0; in BZ2_decompress()
254 if (s->smallDecompress) { in BZ2_decompress()
255 s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); in BZ2_decompress()
256 s->ll4 = BZALLOC( in BZ2_decompress()
257 ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) in BZ2_decompress()
259 if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); in BZ2_decompress()
261 s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); in BZ2_decompress()
262 if (s->tt == NULL) RETURN(BZ_MEM_ERROR); in BZ2_decompress()
280 s->currBlockNo++; in BZ2_decompress()
281 if (s->verbosity >= 2) in BZ2_decompress()
282 VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); in BZ2_decompress()
284 s->storedBlockCRC = 0; in BZ2_decompress()
286 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); in BZ2_decompress()
288 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); in BZ2_decompress()
290 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); in BZ2_decompress()
292 s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); in BZ2_decompress()
294 GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); in BZ2_decompress()
296 s->origPtr = 0; in BZ2_decompress()
298 s->origPtr = (s->origPtr << 8) | ((Int32)uc); in BZ2_decompress()
300 s->origPtr = (s->origPtr << 8) | ((Int32)uc); in BZ2_decompress()
302 s->origPtr = (s->origPtr << 8) | ((Int32)uc); in BZ2_decompress()
304 if (s->origPtr < 0) in BZ2_decompress()
306 if (s->origPtr > 10 + 100000*s->blockSize100k) in BZ2_decompress()
309 /*--- Receive the mapping table ---*/ in BZ2_decompress()
313 s->inUse16[i] = True; else in BZ2_decompress()
314 s->inUse16[i] = False; in BZ2_decompress()
317 for (i = 0; i < 256; i++) s->inUse[i] = False; in BZ2_decompress()
320 if (s->inUse16[i]) in BZ2_decompress()
323 if (uc == 1) s->inUse[i * 16 + j] = True; in BZ2_decompress()
325 makeMaps_d ( s ); in BZ2_decompress()
326 if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); in BZ2_decompress()
327 alphaSize = s->nInUse+2; in BZ2_decompress()
329 /*--- Now the selectors ---*/ in BZ2_decompress()
342 s->selectorMtf[i] = j; in BZ2_decompress()
345 /*--- Undo the MTF values for the selectors. ---*/ in BZ2_decompress()
351 v = s->selectorMtf[i]; in BZ2_decompress()
353 while (v > 0) { pos[v] = pos[v-1]; v--; } in BZ2_decompress()
355 s->selector[i] = tmp; in BZ2_decompress()
359 /*--- Now the coding tables ---*/ in BZ2_decompress()
368 if (uc == 0) curr++; else curr--; in BZ2_decompress()
370 s->len[t][i] = curr; in BZ2_decompress()
374 /*--- Create the Huffman decoding tables ---*/ in BZ2_decompress()
379 if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; in BZ2_decompress()
380 if (s->len[t][i] < minLen) minLen = s->len[t][i]; in BZ2_decompress()
383 &(s->limit[t][0]), in BZ2_decompress()
384 &(s->base[t][0]), in BZ2_decompress()
385 &(s->perm[t][0]), in BZ2_decompress()
386 &(s->len[t][0]), in BZ2_decompress()
389 s->minLens[t] = minLen; in BZ2_decompress()
392 /*--- Now the MTF values ---*/ in BZ2_decompress()
394 EOB = s->nInUse+1; in BZ2_decompress()
395 nblockMAX = 100000 * s->blockSize100k; in BZ2_decompress()
396 groupNo = -1; in BZ2_decompress()
399 for (i = 0; i <= 255; i++) s->unzftab[i] = 0; in BZ2_decompress()
401 /*-- MTF init --*/ in BZ2_decompress()
404 kk = MTFA_SIZE-1; in BZ2_decompress()
405 for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { in BZ2_decompress()
406 for (jj = MTFL_SIZE-1; jj >= 0; jj--) { in BZ2_decompress()
407 s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); in BZ2_decompress()
408 kk--; in BZ2_decompress()
410 s->mtfbase[ii] = kk + 1; in BZ2_decompress()
413 /*-- end MTF init --*/ in BZ2_decompress()
427 es = -1; in BZ2_decompress()
438 uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; in BZ2_decompress()
439 s->unzftab[uc] += es; in BZ2_decompress()
441 if (s->smallDecompress) in BZ2_decompress()
444 s->ll16[nblock] = (UInt16)uc; in BZ2_decompress()
446 es--; in BZ2_decompress()
451 s->tt[nblock] = (UInt32)uc; in BZ2_decompress()
453 es--; in BZ2_decompress()
462 /*-- uc = MTF ( nextSym-1 ) --*/ in BZ2_decompress()
466 nn = (UInt32)(nextSym - 1); in BZ2_decompress()
469 /* avoid general-case expense */ in BZ2_decompress()
470 pp = s->mtfbase[0]; in BZ2_decompress()
471 uc = s->mtfa[pp+nn]; in BZ2_decompress()
474 s->mtfa[(z) ] = s->mtfa[(z)-1]; in BZ2_decompress()
475 s->mtfa[(z)-1] = s->mtfa[(z)-2]; in BZ2_decompress()
476 s->mtfa[(z)-2] = s->mtfa[(z)-3]; in BZ2_decompress()
477 s->mtfa[(z)-3] = s->mtfa[(z)-4]; in BZ2_decompress()
478 nn -= 4; in BZ2_decompress()
481 s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; in BZ2_decompress()
483 s->mtfa[pp] = uc; in BZ2_decompress()
488 pp = s->mtfbase[lno] + off; in BZ2_decompress()
489 uc = s->mtfa[pp]; in BZ2_decompress()
490 while (pp > s->mtfbase[lno]) { in BZ2_decompress()
491 s->mtfa[pp] = s->mtfa[pp-1]; pp--; in BZ2_decompress()
493 s->mtfbase[lno]++; in BZ2_decompress()
495 s->mtfbase[lno]--; in BZ2_decompress()
496 s->mtfa[s->mtfbase[lno]] in BZ2_decompress()
497 = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; in BZ2_decompress()
498 lno--; in BZ2_decompress()
500 s->mtfbase[0]--; in BZ2_decompress()
501 s->mtfa[s->mtfbase[0]] = uc; in BZ2_decompress()
502 if (s->mtfbase[0] == 0) { in BZ2_decompress()
503 kk = MTFA_SIZE-1; in BZ2_decompress()
504 for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { in BZ2_decompress()
508 for (jj = MTFL_SIZE-1; jj >= 0; jj--) { in BZ2_decompress()
509 s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; in BZ2_decompress()
510 kk--; in BZ2_decompress()
512 s->mtfbase[ii] = kk + 1; in BZ2_decompress()
517 /*-- end uc = MTF ( nextSym-1 ) --*/ in BZ2_decompress()
519 s->unzftab[s->seqToUnseq[uc]]++; in BZ2_decompress()
520 if (s->smallDecompress) in BZ2_decompress()
521 s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else in BZ2_decompress()
522 s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); in BZ2_decompress()
531 check on s->origPtr. in BZ2_decompress()
533 if (s->origPtr < 0 || s->origPtr >= nblock) in BZ2_decompress()
536 s->state_out_len = 0; in BZ2_decompress()
537 s->state_out_ch = 0; in BZ2_decompress()
538 BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); in BZ2_decompress()
539 s->state = BZ_X_OUTPUT; in BZ2_decompress()
540 if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); in BZ2_decompress()
542 /*-- Set up cftab to facilitate generation of T^(-1) --*/ in BZ2_decompress()
543 s->cftab[0] = 0; in BZ2_decompress()
544 for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; in BZ2_decompress()
545 for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; in BZ2_decompress()
547 if (s->smallDecompress) { in BZ2_decompress()
549 /*-- Make a copy of cftab, used in generation of T --*/ in BZ2_decompress()
550 for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; in BZ2_decompress()
552 /*-- compute the T vector --*/ in BZ2_decompress()
554 uc = (UChar)(s->ll16[i]); in BZ2_decompress()
555 SET_LL(i, s->cftabCopy[uc]); in BZ2_decompress()
556 s->cftabCopy[uc]++; in BZ2_decompress()
559 /*-- Compute T^(-1) by pointer reversal on T --*/ in BZ2_decompress()
560 i = s->origPtr; in BZ2_decompress()
568 while (i != s->origPtr); in BZ2_decompress()
573 s->tPos = s->origPtr; in BZ2_decompress()
574 s->nblock_used = 0; in BZ2_decompress()
575 if (s->blockRandomised) { in BZ2_decompress()
577 BZ_GET_SMALL(s->k0); s->nblock_used++; in BZ2_decompress()
578 BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; in BZ2_decompress()
580 BZ_GET_SMALL(s->k0); s->nblock_used++; in BZ2_decompress()
588 /*-- compute the T^(-1) vector --*/ in BZ2_decompress()
590 uc = (UChar)(s->tt[i] & 0xff); in BZ2_decompress()
591 s->tt[s->cftab[uc]] |= (i << 8); in BZ2_decompress()
592 s->cftab[uc]++; in BZ2_decompress()
595 s->tPos = s->tt[s->origPtr] >> 8; in BZ2_decompress()
596 s->nblock_used = 0; in BZ2_decompress()
597 if (s->blockRandomised) { in BZ2_decompress()
599 BZ_GET_FAST(s->k0); s->nblock_used++; in BZ2_decompress()
600 BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; in BZ2_decompress()
602 BZ_GET_FAST(s->k0); s->nblock_used++; in BZ2_decompress()
623 s->storedCombinedCRC = 0; in BZ2_decompress()
625 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); in BZ2_decompress()
627 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); in BZ2_decompress()
629 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); in BZ2_decompress()
631 s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); in BZ2_decompress()
633 s->state = BZ_X_IDLE; in BZ2_decompress()
643 s->save_i = i; in BZ2_decompress()
644 s->save_j = j; in BZ2_decompress()
645 s->save_t = t; in BZ2_decompress()
646 s->save_alphaSize = alphaSize; in BZ2_decompress()
647 s->save_nGroups = nGroups; in BZ2_decompress()
648 s->save_nSelectors = nSelectors; in BZ2_decompress()
649 s->save_EOB = EOB; in BZ2_decompress()
650 s->save_groupNo = groupNo; in BZ2_decompress()
651 s->save_groupPos = groupPos; in BZ2_decompress()
652 s->save_nextSym = nextSym; in BZ2_decompress()
653 s->save_nblockMAX = nblockMAX; in BZ2_decompress()
654 s->save_nblock = nblock; in BZ2_decompress()
655 s->save_es = es; in BZ2_decompress()
656 s->save_N = N; in BZ2_decompress()
657 s->save_curr = curr; in BZ2_decompress()
658 s->save_zt = zt; in BZ2_decompress()
659 s->save_zn = zn; in BZ2_decompress()
660 s->save_zvec = zvec; in BZ2_decompress()
661 s->save_zj = zj; in BZ2_decompress()
662 s->save_gSel = gSel; in BZ2_decompress()
663 s->save_gMinlen = gMinlen; in BZ2_decompress()
664 s->save_gLimit = gLimit; in BZ2_decompress()
665 s->save_gBase = gBase; in BZ2_decompress()
666 s->save_gPerm = gPerm; in BZ2_decompress()
672 /*-------------------------------------------------------------*/
673 /*--- end decompress.c ---*/
674 /*-------------------------------------------------------------*/