Blame


1 ff3adf60 2004-04-14 devnull
2 ff3adf60 2004-04-14 devnull /*-------------------------------------------------------------*/
3 ff3adf60 2004-04-14 devnull /*--- Decompression machinery ---*/
4 ff3adf60 2004-04-14 devnull /*--- decompress.c ---*/
5 ff3adf60 2004-04-14 devnull /*-------------------------------------------------------------*/
6 ff3adf60 2004-04-14 devnull
7 ff3adf60 2004-04-14 devnull /*--
8 ff3adf60 2004-04-14 devnull This file is a part of bzip2 and/or libbzip2, a program and
9 ff3adf60 2004-04-14 devnull library for lossless, block-sorting data compression.
10 ff3adf60 2004-04-14 devnull
11 ff3adf60 2004-04-14 devnull Copyright (C) 1996-2000 Julian R Seward. All rights reserved.
12 ff3adf60 2004-04-14 devnull
13 ff3adf60 2004-04-14 devnull Redistribution and use in source and binary forms, with or without
14 ff3adf60 2004-04-14 devnull modification, are permitted provided that the following conditions
15 ff3adf60 2004-04-14 devnull are met:
16 ff3adf60 2004-04-14 devnull
17 ff3adf60 2004-04-14 devnull 1. Redistributions of source code must retain the above copyright
18 ff3adf60 2004-04-14 devnull notice, this list of conditions and the following disclaimer.
19 ff3adf60 2004-04-14 devnull
20 ff3adf60 2004-04-14 devnull 2. The origin of this software must not be misrepresented; you must
21 ff3adf60 2004-04-14 devnull not claim that you wrote the original software. If you use this
22 ff3adf60 2004-04-14 devnull software in a product, an acknowledgment in the product
23 ff3adf60 2004-04-14 devnull documentation would be appreciated but is not required.
24 ff3adf60 2004-04-14 devnull
25 ff3adf60 2004-04-14 devnull 3. Altered source versions must be plainly marked as such, and must
26 ff3adf60 2004-04-14 devnull not be misrepresented as being the original software.
27 ff3adf60 2004-04-14 devnull
28 ff3adf60 2004-04-14 devnull 4. The name of the author may not be used to endorse or promote
29 ff3adf60 2004-04-14 devnull products derived from this software without specific prior written
30 ff3adf60 2004-04-14 devnull permission.
31 ff3adf60 2004-04-14 devnull
32 ff3adf60 2004-04-14 devnull THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
33 ff3adf60 2004-04-14 devnull OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34 ff3adf60 2004-04-14 devnull WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35 ff3adf60 2004-04-14 devnull ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
36 ff3adf60 2004-04-14 devnull DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 ff3adf60 2004-04-14 devnull DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
38 ff3adf60 2004-04-14 devnull GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
39 ff3adf60 2004-04-14 devnull INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
40 ff3adf60 2004-04-14 devnull WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
41 ff3adf60 2004-04-14 devnull NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
42 ff3adf60 2004-04-14 devnull SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43 ff3adf60 2004-04-14 devnull
44 ff3adf60 2004-04-14 devnull Julian Seward, Cambridge, UK.
45 ff3adf60 2004-04-14 devnull jseward@acm.org
46 ff3adf60 2004-04-14 devnull bzip2/libbzip2 version 1.0 of 21 March 2000
47 ff3adf60 2004-04-14 devnull
48 ff3adf60 2004-04-14 devnull This program is based on (at least) the work of:
49 ff3adf60 2004-04-14 devnull Mike Burrows
50 ff3adf60 2004-04-14 devnull David Wheeler
51 ff3adf60 2004-04-14 devnull Peter Fenwick
52 ff3adf60 2004-04-14 devnull Alistair Moffat
53 ff3adf60 2004-04-14 devnull Radford Neal
54 ff3adf60 2004-04-14 devnull Ian H. Witten
55 ff3adf60 2004-04-14 devnull Robert Sedgewick
56 ff3adf60 2004-04-14 devnull Jon L. Bentley
57 ff3adf60 2004-04-14 devnull
58 ff3adf60 2004-04-14 devnull For more information on these sources, see the manual.
59 ff3adf60 2004-04-14 devnull --*/
60 ff3adf60 2004-04-14 devnull
61 ff3adf60 2004-04-14 devnull
62 ff3adf60 2004-04-14 devnull #include "os.h"
63 ff3adf60 2004-04-14 devnull #include "bzlib.h"
64 ff3adf60 2004-04-14 devnull #include "bzlib_private.h"
65 ff3adf60 2004-04-14 devnull
66 ff3adf60 2004-04-14 devnull
67 ff3adf60 2004-04-14 devnull /*---------------------------------------------------*/
68 ff3adf60 2004-04-14 devnull static
69 ff3adf60 2004-04-14 devnull void makeMaps_d ( DState* s )
70 ff3adf60 2004-04-14 devnull {
71 ff3adf60 2004-04-14 devnull Int32 i;
72 ff3adf60 2004-04-14 devnull s->nInUse = 0;
73 ff3adf60 2004-04-14 devnull for (i = 0; i < 256; i++)
74 ff3adf60 2004-04-14 devnull if (s->inUse[i]) {
75 ff3adf60 2004-04-14 devnull s->seqToUnseq[s->nInUse] = i;
76 ff3adf60 2004-04-14 devnull s->nInUse++;
77 ff3adf60 2004-04-14 devnull }
78 ff3adf60 2004-04-14 devnull }
79 ff3adf60 2004-04-14 devnull
80 ff3adf60 2004-04-14 devnull
81 ff3adf60 2004-04-14 devnull /*---------------------------------------------------*/
82 ff3adf60 2004-04-14 devnull #define RETURN(rrr) \
83 ff3adf60 2004-04-14 devnull { retVal = rrr; goto save_state_and_return; };
84 ff3adf60 2004-04-14 devnull
85 ff3adf60 2004-04-14 devnull #define GET_BITS(lll,vvv,nnn) \
86 ff3adf60 2004-04-14 devnull case lll: s->state = lll; \
87 ff3adf60 2004-04-14 devnull while (True) { \
88 ff3adf60 2004-04-14 devnull if (s->bsLive >= nnn) { \
89 ff3adf60 2004-04-14 devnull UInt32 v; \
90 ff3adf60 2004-04-14 devnull v = (s->bsBuff >> \
91 ff3adf60 2004-04-14 devnull (s->bsLive-nnn)) & ((1 << nnn)-1); \
92 ff3adf60 2004-04-14 devnull s->bsLive -= nnn; \
93 ff3adf60 2004-04-14 devnull vvv = v; \
94 ff3adf60 2004-04-14 devnull break; \
95 ff3adf60 2004-04-14 devnull } \
96 ff3adf60 2004-04-14 devnull if (s->strm->avail_in == 0) RETURN(BZ_OK); \
97 ff3adf60 2004-04-14 devnull s->bsBuff \
98 ff3adf60 2004-04-14 devnull = (s->bsBuff << 8) | \
99 ff3adf60 2004-04-14 devnull ((UInt32) \
100 ff3adf60 2004-04-14 devnull (*((UChar*)(s->strm->next_in)))); \
101 ff3adf60 2004-04-14 devnull s->bsLive += 8; \
102 ff3adf60 2004-04-14 devnull s->strm->next_in++; \
103 ff3adf60 2004-04-14 devnull s->strm->avail_in--; \
104 ff3adf60 2004-04-14 devnull s->strm->total_in_lo32++; \
105 ff3adf60 2004-04-14 devnull if (s->strm->total_in_lo32 == 0) \
106 ff3adf60 2004-04-14 devnull s->strm->total_in_hi32++; \
107 ff3adf60 2004-04-14 devnull }
108 ff3adf60 2004-04-14 devnull
109 ff3adf60 2004-04-14 devnull #define GET_UCHAR(lll,uuu) \
110 ff3adf60 2004-04-14 devnull GET_BITS(lll,uuu,8)
111 ff3adf60 2004-04-14 devnull
112 ff3adf60 2004-04-14 devnull #define GET_BIT(lll,uuu) \
113 ff3adf60 2004-04-14 devnull GET_BITS(lll,uuu,1)
114 ff3adf60 2004-04-14 devnull
115 ff3adf60 2004-04-14 devnull /*---------------------------------------------------*/
116 ff3adf60 2004-04-14 devnull #define GET_MTF_VAL(label1,label2,lval) \
117 ff3adf60 2004-04-14 devnull { \
118 ff3adf60 2004-04-14 devnull if (groupPos == 0) { \
119 ff3adf60 2004-04-14 devnull groupNo++; \
120 ff3adf60 2004-04-14 devnull if (groupNo >= nSelectors) \
121 ff3adf60 2004-04-14 devnull RETURN(BZ_DATA_ERROR); \
122 ff3adf60 2004-04-14 devnull groupPos = BZ_G_SIZE; \
123 ff3adf60 2004-04-14 devnull gSel = s->selector[groupNo]; \
124 ff3adf60 2004-04-14 devnull gMinlen = s->minLens[gSel]; \
125 ff3adf60 2004-04-14 devnull gLimit = &(s->limit[gSel][0]); \
126 ff3adf60 2004-04-14 devnull gPerm = &(s->perm[gSel][0]); \
127 ff3adf60 2004-04-14 devnull gBase = &(s->base[gSel][0]); \
128 ff3adf60 2004-04-14 devnull } \
129 ff3adf60 2004-04-14 devnull groupPos--; \
130 ff3adf60 2004-04-14 devnull zn = gMinlen; \
131 ff3adf60 2004-04-14 devnull GET_BITS(label1, zvec, zn); \
132 ff3adf60 2004-04-14 devnull while (1) { \
133 ff3adf60 2004-04-14 devnull if (zn > 20 /* the longest code */) \
134 ff3adf60 2004-04-14 devnull RETURN(BZ_DATA_ERROR); \
135 ff3adf60 2004-04-14 devnull if (zvec <= gLimit[zn]) break; \
136 ff3adf60 2004-04-14 devnull zn++; \
137 ff3adf60 2004-04-14 devnull GET_BIT(label2, zj); \
138 ff3adf60 2004-04-14 devnull zvec = (zvec << 1) | zj; \
139 ff3adf60 2004-04-14 devnull }; \
140 ff3adf60 2004-04-14 devnull if (zvec - gBase[zn] < 0 \
141 ff3adf60 2004-04-14 devnull || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \
142 ff3adf60 2004-04-14 devnull RETURN(BZ_DATA_ERROR); \
143 ff3adf60 2004-04-14 devnull lval = gPerm[zvec - gBase[zn]]; \
144 ff3adf60 2004-04-14 devnull }
145 ff3adf60 2004-04-14 devnull
146 ff3adf60 2004-04-14 devnull
147 ff3adf60 2004-04-14 devnull /*---------------------------------------------------*/
148 ff3adf60 2004-04-14 devnull Int32 BZ2_decompress ( DState* s )
149 ff3adf60 2004-04-14 devnull {
150 ff3adf60 2004-04-14 devnull UChar uc;
151 ff3adf60 2004-04-14 devnull Int32 retVal;
152 ff3adf60 2004-04-14 devnull Int32 minLen, maxLen;
153 ff3adf60 2004-04-14 devnull bz_stream* strm = s->strm;
154 ff3adf60 2004-04-14 devnull
155 ff3adf60 2004-04-14 devnull /* stuff that needs to be saved/restored */
156 ff3adf60 2004-04-14 devnull Int32 i;
157 ff3adf60 2004-04-14 devnull Int32 j;
158 ff3adf60 2004-04-14 devnull Int32 t;
159 ff3adf60 2004-04-14 devnull Int32 alphaSize;
160 ff3adf60 2004-04-14 devnull Int32 nGroups;
161 ff3adf60 2004-04-14 devnull Int32 nSelectors;
162 ff3adf60 2004-04-14 devnull Int32 EOB;
163 ff3adf60 2004-04-14 devnull Int32 groupNo;
164 ff3adf60 2004-04-14 devnull Int32 groupPos;
165 ff3adf60 2004-04-14 devnull Int32 nextSym;
166 ff3adf60 2004-04-14 devnull Int32 nblockMAX;
167 ff3adf60 2004-04-14 devnull Int32 nblock;
168 ff3adf60 2004-04-14 devnull Int32 es;
169 ff3adf60 2004-04-14 devnull Int32 N;
170 ff3adf60 2004-04-14 devnull Int32 curr;
171 ff3adf60 2004-04-14 devnull Int32 zt;
172 ff3adf60 2004-04-14 devnull Int32 zn;
173 ff3adf60 2004-04-14 devnull Int32 zvec;
174 ff3adf60 2004-04-14 devnull Int32 zj;
175 ff3adf60 2004-04-14 devnull Int32 gSel;
176 ff3adf60 2004-04-14 devnull Int32 gMinlen;
177 ff3adf60 2004-04-14 devnull Int32* gLimit;
178 ff3adf60 2004-04-14 devnull Int32* gBase;
179 ff3adf60 2004-04-14 devnull Int32* gPerm;
180 ff3adf60 2004-04-14 devnull
181 ff3adf60 2004-04-14 devnull if (s->state == BZ_X_MAGIC_1) {
182 ff3adf60 2004-04-14 devnull /*initialise the save area*/
183 ff3adf60 2004-04-14 devnull s->save_i = 0;
184 ff3adf60 2004-04-14 devnull s->save_j = 0;
185 ff3adf60 2004-04-14 devnull s->save_t = 0;
186 ff3adf60 2004-04-14 devnull s->save_alphaSize = 0;
187 ff3adf60 2004-04-14 devnull s->save_nGroups = 0;
188 ff3adf60 2004-04-14 devnull s->save_nSelectors = 0;
189 ff3adf60 2004-04-14 devnull s->save_EOB = 0;
190 ff3adf60 2004-04-14 devnull s->save_groupNo = 0;
191 ff3adf60 2004-04-14 devnull s->save_groupPos = 0;
192 ff3adf60 2004-04-14 devnull s->save_nextSym = 0;
193 ff3adf60 2004-04-14 devnull s->save_nblockMAX = 0;
194 ff3adf60 2004-04-14 devnull s->save_nblock = 0;
195 ff3adf60 2004-04-14 devnull s->save_es = 0;
196 ff3adf60 2004-04-14 devnull s->save_N = 0;
197 ff3adf60 2004-04-14 devnull s->save_curr = 0;
198 ff3adf60 2004-04-14 devnull s->save_zt = 0;
199 ff3adf60 2004-04-14 devnull s->save_zn = 0;
200 ff3adf60 2004-04-14 devnull s->save_zvec = 0;
201 ff3adf60 2004-04-14 devnull s->save_zj = 0;
202 ff3adf60 2004-04-14 devnull s->save_gSel = 0;
203 ff3adf60 2004-04-14 devnull s->save_gMinlen = 0;
204 ff3adf60 2004-04-14 devnull s->save_gLimit = NULL;
205 ff3adf60 2004-04-14 devnull s->save_gBase = NULL;
206 ff3adf60 2004-04-14 devnull s->save_gPerm = NULL;
207 ff3adf60 2004-04-14 devnull }
208 ff3adf60 2004-04-14 devnull
209 ff3adf60 2004-04-14 devnull /*restore from the save area*/
210 ff3adf60 2004-04-14 devnull i = s->save_i;
211 ff3adf60 2004-04-14 devnull j = s->save_j;
212 ff3adf60 2004-04-14 devnull t = s->save_t;
213 ff3adf60 2004-04-14 devnull alphaSize = s->save_alphaSize;
214 ff3adf60 2004-04-14 devnull nGroups = s->save_nGroups;
215 ff3adf60 2004-04-14 devnull nSelectors = s->save_nSelectors;
216 ff3adf60 2004-04-14 devnull EOB = s->save_EOB;
217 ff3adf60 2004-04-14 devnull groupNo = s->save_groupNo;
218 ff3adf60 2004-04-14 devnull groupPos = s->save_groupPos;
219 ff3adf60 2004-04-14 devnull nextSym = s->save_nextSym;
220 ff3adf60 2004-04-14 devnull nblockMAX = s->save_nblockMAX;
221 ff3adf60 2004-04-14 devnull nblock = s->save_nblock;
222 ff3adf60 2004-04-14 devnull es = s->save_es;
223 ff3adf60 2004-04-14 devnull N = s->save_N;
224 ff3adf60 2004-04-14 devnull curr = s->save_curr;
225 ff3adf60 2004-04-14 devnull zt = s->save_zt;
226 ff3adf60 2004-04-14 devnull zn = s->save_zn;
227 ff3adf60 2004-04-14 devnull zvec = s->save_zvec;
228 ff3adf60 2004-04-14 devnull zj = s->save_zj;
229 ff3adf60 2004-04-14 devnull gSel = s->save_gSel;
230 ff3adf60 2004-04-14 devnull gMinlen = s->save_gMinlen;
231 ff3adf60 2004-04-14 devnull gLimit = s->save_gLimit;
232 ff3adf60 2004-04-14 devnull gBase = s->save_gBase;
233 ff3adf60 2004-04-14 devnull gPerm = s->save_gPerm;
234 ff3adf60 2004-04-14 devnull
235 ff3adf60 2004-04-14 devnull retVal = BZ_OK;
236 ff3adf60 2004-04-14 devnull
237 ff3adf60 2004-04-14 devnull switch (s->state) {
238 ff3adf60 2004-04-14 devnull
239 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_MAGIC_1, uc);
240 ff3adf60 2004-04-14 devnull if (uc != 'B') RETURN(BZ_DATA_ERROR_MAGIC);
241 ff3adf60 2004-04-14 devnull
242 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_MAGIC_2, uc);
243 ff3adf60 2004-04-14 devnull if (uc != 'Z') RETURN(BZ_DATA_ERROR_MAGIC);
244 ff3adf60 2004-04-14 devnull
245 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_MAGIC_3, uc)
246 ff3adf60 2004-04-14 devnull if (uc != 'h') RETURN(BZ_DATA_ERROR_MAGIC);
247 ff3adf60 2004-04-14 devnull
248 ff3adf60 2004-04-14 devnull GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
249 ff3adf60 2004-04-14 devnull if (s->blockSize100k < '1' ||
250 ff3adf60 2004-04-14 devnull s->blockSize100k > '9') RETURN(BZ_DATA_ERROR_MAGIC);
251 ff3adf60 2004-04-14 devnull s->blockSize100k -= '0';
252 ff3adf60 2004-04-14 devnull
253 ff3adf60 2004-04-14 devnull if (s->smallDecompress) {
254 ff3adf60 2004-04-14 devnull s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
255 ff3adf60 2004-04-14 devnull s->ll4 = BZALLOC(
256 ff3adf60 2004-04-14 devnull ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar)
257 ff3adf60 2004-04-14 devnull );
258 ff3adf60 2004-04-14 devnull if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
259 ff3adf60 2004-04-14 devnull } else {
260 ff3adf60 2004-04-14 devnull s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
261 ff3adf60 2004-04-14 devnull if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
262 ff3adf60 2004-04-14 devnull }
263 ff3adf60 2004-04-14 devnull
264 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BLKHDR_1, uc);
265 ff3adf60 2004-04-14 devnull
266 ff3adf60 2004-04-14 devnull if (uc == 0x17) goto endhdr_2;
267 ff3adf60 2004-04-14 devnull if (uc != 0x31) RETURN(BZ_DATA_ERROR);
268 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BLKHDR_2, uc);
269 ff3adf60 2004-04-14 devnull if (uc != 0x41) RETURN(BZ_DATA_ERROR);
270 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BLKHDR_3, uc);
271 ff3adf60 2004-04-14 devnull if (uc != 0x59) RETURN(BZ_DATA_ERROR);
272 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BLKHDR_4, uc);
273 ff3adf60 2004-04-14 devnull if (uc != 0x26) RETURN(BZ_DATA_ERROR);
274 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BLKHDR_5, uc);
275 ff3adf60 2004-04-14 devnull if (uc != 0x53) RETURN(BZ_DATA_ERROR);
276 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BLKHDR_6, uc);
277 ff3adf60 2004-04-14 devnull if (uc != 0x59) RETURN(BZ_DATA_ERROR);
278 ff3adf60 2004-04-14 devnull
279 ff3adf60 2004-04-14 devnull s->currBlockNo++;
280 ff3adf60 2004-04-14 devnull if (s->verbosity >= 2)
281 ff3adf60 2004-04-14 devnull VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo );
282 ff3adf60 2004-04-14 devnull
283 ff3adf60 2004-04-14 devnull s->storedBlockCRC = 0;
284 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BCRC_1, uc);
285 ff3adf60 2004-04-14 devnull s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
286 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BCRC_2, uc);
287 ff3adf60 2004-04-14 devnull s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
288 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BCRC_3, uc);
289 ff3adf60 2004-04-14 devnull s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
290 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_BCRC_4, uc);
291 ff3adf60 2004-04-14 devnull s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
292 ff3adf60 2004-04-14 devnull
293 ff3adf60 2004-04-14 devnull GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
294 ff3adf60 2004-04-14 devnull
295 ff3adf60 2004-04-14 devnull s->origPtr = 0;
296 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ORIGPTR_1, uc);
297 ff3adf60 2004-04-14 devnull s->origPtr = (s->origPtr << 8) | ((Int32)uc);
298 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ORIGPTR_2, uc);
299 ff3adf60 2004-04-14 devnull s->origPtr = (s->origPtr << 8) | ((Int32)uc);
300 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ORIGPTR_3, uc);
301 ff3adf60 2004-04-14 devnull s->origPtr = (s->origPtr << 8) | ((Int32)uc);
302 ff3adf60 2004-04-14 devnull
303 ff3adf60 2004-04-14 devnull if (s->origPtr < 0)
304 ff3adf60 2004-04-14 devnull RETURN(BZ_DATA_ERROR);
305 ff3adf60 2004-04-14 devnull if (s->origPtr > 10 + 100000*s->blockSize100k)
306 ff3adf60 2004-04-14 devnull RETURN(BZ_DATA_ERROR);
307 ff3adf60 2004-04-14 devnull
308 ff3adf60 2004-04-14 devnull /*--- Receive the mapping table ---*/
309 ff3adf60 2004-04-14 devnull for (i = 0; i < 16; i++) {
310 ff3adf60 2004-04-14 devnull GET_BIT(BZ_X_MAPPING_1, uc);
311 ff3adf60 2004-04-14 devnull if (uc == 1)
312 ff3adf60 2004-04-14 devnull s->inUse16[i] = True; else
313 ff3adf60 2004-04-14 devnull s->inUse16[i] = False;
314 ff3adf60 2004-04-14 devnull }
315 ff3adf60 2004-04-14 devnull
316 ff3adf60 2004-04-14 devnull for (i = 0; i < 256; i++) s->inUse[i] = False;
317 ff3adf60 2004-04-14 devnull
318 ff3adf60 2004-04-14 devnull for (i = 0; i < 16; i++)
319 ff3adf60 2004-04-14 devnull if (s->inUse16[i])
320 ff3adf60 2004-04-14 devnull for (j = 0; j < 16; j++) {
321 ff3adf60 2004-04-14 devnull GET_BIT(BZ_X_MAPPING_2, uc);
322 ff3adf60 2004-04-14 devnull if (uc == 1) s->inUse[i * 16 + j] = True;
323 ff3adf60 2004-04-14 devnull }
324 ff3adf60 2004-04-14 devnull makeMaps_d ( s );
325 ff3adf60 2004-04-14 devnull if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
326 ff3adf60 2004-04-14 devnull alphaSize = s->nInUse+2;
327 ff3adf60 2004-04-14 devnull
328 ff3adf60 2004-04-14 devnull /*--- Now the selectors ---*/
329 ff3adf60 2004-04-14 devnull GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
330 ff3adf60 2004-04-14 devnull if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
331 ff3adf60 2004-04-14 devnull GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
332 ff3adf60 2004-04-14 devnull if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
333 ff3adf60 2004-04-14 devnull for (i = 0; i < nSelectors; i++) {
334 ff3adf60 2004-04-14 devnull j = 0;
335 ff3adf60 2004-04-14 devnull while (True) {
336 ff3adf60 2004-04-14 devnull GET_BIT(BZ_X_SELECTOR_3, uc);
337 ff3adf60 2004-04-14 devnull if (uc == 0) break;
338 ff3adf60 2004-04-14 devnull j++;
339 ff3adf60 2004-04-14 devnull if (j >= nGroups) RETURN(BZ_DATA_ERROR);
340 ff3adf60 2004-04-14 devnull }
341 ff3adf60 2004-04-14 devnull s->selectorMtf[i] = j;
342 ff3adf60 2004-04-14 devnull }
343 ff3adf60 2004-04-14 devnull
344 ff3adf60 2004-04-14 devnull /*--- Undo the MTF values for the selectors. ---*/
345 ff3adf60 2004-04-14 devnull {
346 ff3adf60 2004-04-14 devnull UChar pos[BZ_N_GROUPS], tmp, v;
347 ff3adf60 2004-04-14 devnull for (v = 0; v < nGroups; v++) pos[v] = v;
348 ff3adf60 2004-04-14 devnull
349 ff3adf60 2004-04-14 devnull for (i = 0; i < nSelectors; i++) {
350 ff3adf60 2004-04-14 devnull v = s->selectorMtf[i];
351 ff3adf60 2004-04-14 devnull tmp = pos[v];
352 ff3adf60 2004-04-14 devnull while (v > 0) { pos[v] = pos[v-1]; v--; }
353 ff3adf60 2004-04-14 devnull pos[0] = tmp;
354 ff3adf60 2004-04-14 devnull s->selector[i] = tmp;
355 ff3adf60 2004-04-14 devnull }
356 ff3adf60 2004-04-14 devnull }
357 ff3adf60 2004-04-14 devnull
358 ff3adf60 2004-04-14 devnull /*--- Now the coding tables ---*/
359 ff3adf60 2004-04-14 devnull for (t = 0; t < nGroups; t++) {
360 ff3adf60 2004-04-14 devnull GET_BITS(BZ_X_CODING_1, curr, 5);
361 ff3adf60 2004-04-14 devnull for (i = 0; i < alphaSize; i++) {
362 ff3adf60 2004-04-14 devnull while (True) {
363 ff3adf60 2004-04-14 devnull if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
364 ff3adf60 2004-04-14 devnull GET_BIT(BZ_X_CODING_2, uc);
365 ff3adf60 2004-04-14 devnull if (uc == 0) break;
366 ff3adf60 2004-04-14 devnull GET_BIT(BZ_X_CODING_3, uc);
367 ff3adf60 2004-04-14 devnull if (uc == 0) curr++; else curr--;
368 ff3adf60 2004-04-14 devnull }
369 ff3adf60 2004-04-14 devnull s->len[t][i] = curr;
370 ff3adf60 2004-04-14 devnull }
371 ff3adf60 2004-04-14 devnull }
372 ff3adf60 2004-04-14 devnull
373 ff3adf60 2004-04-14 devnull /*--- Create the Huffman decoding tables ---*/
374 ff3adf60 2004-04-14 devnull for (t = 0; t < nGroups; t++) {
375 ff3adf60 2004-04-14 devnull minLen = 32;
376 ff3adf60 2004-04-14 devnull maxLen = 0;
377 ff3adf60 2004-04-14 devnull for (i = 0; i < alphaSize; i++) {
378 ff3adf60 2004-04-14 devnull if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
379 ff3adf60 2004-04-14 devnull if (s->len[t][i] < minLen) minLen = s->len[t][i];
380 ff3adf60 2004-04-14 devnull }
381 ff3adf60 2004-04-14 devnull BZ2_hbCreateDecodeTables (
382 ff3adf60 2004-04-14 devnull &(s->limit[t][0]),
383 ff3adf60 2004-04-14 devnull &(s->base[t][0]),
384 ff3adf60 2004-04-14 devnull &(s->perm[t][0]),
385 ff3adf60 2004-04-14 devnull &(s->len[t][0]),
386 ff3adf60 2004-04-14 devnull minLen, maxLen, alphaSize
387 ff3adf60 2004-04-14 devnull );
388 ff3adf60 2004-04-14 devnull s->minLens[t] = minLen;
389 ff3adf60 2004-04-14 devnull }
390 ff3adf60 2004-04-14 devnull
391 ff3adf60 2004-04-14 devnull /*--- Now the MTF values ---*/
392 ff3adf60 2004-04-14 devnull
393 ff3adf60 2004-04-14 devnull EOB = s->nInUse+1;
394 ff3adf60 2004-04-14 devnull nblockMAX = 100000 * s->blockSize100k;
395 ff3adf60 2004-04-14 devnull groupNo = -1;
396 ff3adf60 2004-04-14 devnull groupPos = 0;
397 ff3adf60 2004-04-14 devnull
398 ff3adf60 2004-04-14 devnull for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
399 ff3adf60 2004-04-14 devnull
400 ff3adf60 2004-04-14 devnull /*-- MTF init --*/
401 ff3adf60 2004-04-14 devnull {
402 ff3adf60 2004-04-14 devnull Int32 ii, jj, kk;
403 ff3adf60 2004-04-14 devnull kk = MTFA_SIZE-1;
404 ff3adf60 2004-04-14 devnull for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
405 ff3adf60 2004-04-14 devnull for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
406 ff3adf60 2004-04-14 devnull s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
407 ff3adf60 2004-04-14 devnull kk--;
408 ff3adf60 2004-04-14 devnull }
409 ff3adf60 2004-04-14 devnull s->mtfbase[ii] = kk + 1;
410 ff3adf60 2004-04-14 devnull }
411 ff3adf60 2004-04-14 devnull }
412 ff3adf60 2004-04-14 devnull /*-- end MTF init --*/
413 ff3adf60 2004-04-14 devnull
414 ff3adf60 2004-04-14 devnull nblock = 0;
415 ff3adf60 2004-04-14 devnull GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
416 ff3adf60 2004-04-14 devnull
417 ff3adf60 2004-04-14 devnull while (True) {
418 ff3adf60 2004-04-14 devnull
419 ff3adf60 2004-04-14 devnull if (nextSym == EOB) break;
420 ff3adf60 2004-04-14 devnull
421 ff3adf60 2004-04-14 devnull if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
422 ff3adf60 2004-04-14 devnull
423 ff3adf60 2004-04-14 devnull es = -1;
424 ff3adf60 2004-04-14 devnull N = 1;
425 ff3adf60 2004-04-14 devnull do {
426 ff3adf60 2004-04-14 devnull if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
427 ff3adf60 2004-04-14 devnull if (nextSym == BZ_RUNB) es = es + (1+1) * N;
428 ff3adf60 2004-04-14 devnull N = N * 2;
429 ff3adf60 2004-04-14 devnull GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
430 ff3adf60 2004-04-14 devnull }
431 ff3adf60 2004-04-14 devnull while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
432 ff3adf60 2004-04-14 devnull
433 ff3adf60 2004-04-14 devnull es++;
434 ff3adf60 2004-04-14 devnull uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
435 ff3adf60 2004-04-14 devnull s->unzftab[uc] += es;
436 ff3adf60 2004-04-14 devnull
437 ff3adf60 2004-04-14 devnull if (s->smallDecompress)
438 ff3adf60 2004-04-14 devnull while (es > 0) {
439 ff3adf60 2004-04-14 devnull if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
440 ff3adf60 2004-04-14 devnull s->ll16[nblock] = (UInt16)uc;
441 ff3adf60 2004-04-14 devnull nblock++;
442 ff3adf60 2004-04-14 devnull es--;
443 ff3adf60 2004-04-14 devnull }
444 ff3adf60 2004-04-14 devnull else
445 ff3adf60 2004-04-14 devnull while (es > 0) {
446 ff3adf60 2004-04-14 devnull if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
447 ff3adf60 2004-04-14 devnull s->tt[nblock] = (UInt32)uc;
448 ff3adf60 2004-04-14 devnull nblock++;
449 ff3adf60 2004-04-14 devnull es--;
450 ff3adf60 2004-04-14 devnull };
451 ff3adf60 2004-04-14 devnull
452 ff3adf60 2004-04-14 devnull continue;
453 ff3adf60 2004-04-14 devnull
454 ff3adf60 2004-04-14 devnull } else {
455 ff3adf60 2004-04-14 devnull
456 ff3adf60 2004-04-14 devnull if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
457 ff3adf60 2004-04-14 devnull
458 ff3adf60 2004-04-14 devnull /*-- uc = MTF ( nextSym-1 ) --*/
459 ff3adf60 2004-04-14 devnull {
460 ff3adf60 2004-04-14 devnull Int32 ii, jj, kk, pp, lno, off;
461 ff3adf60 2004-04-14 devnull UInt32 nn;
462 ff3adf60 2004-04-14 devnull nn = (UInt32)(nextSym - 1);
463 ff3adf60 2004-04-14 devnull
464 ff3adf60 2004-04-14 devnull if (nn < MTFL_SIZE) {
465 ff3adf60 2004-04-14 devnull /* avoid general-case expense */
466 ff3adf60 2004-04-14 devnull pp = s->mtfbase[0];
467 ff3adf60 2004-04-14 devnull uc = s->mtfa[pp+nn];
468 ff3adf60 2004-04-14 devnull while (nn > 3) {
469 ff3adf60 2004-04-14 devnull Int32 z = pp+nn;
470 ff3adf60 2004-04-14 devnull s->mtfa[(z) ] = s->mtfa[(z)-1];
471 ff3adf60 2004-04-14 devnull s->mtfa[(z)-1] = s->mtfa[(z)-2];
472 ff3adf60 2004-04-14 devnull s->mtfa[(z)-2] = s->mtfa[(z)-3];
473 ff3adf60 2004-04-14 devnull s->mtfa[(z)-3] = s->mtfa[(z)-4];
474 ff3adf60 2004-04-14 devnull nn -= 4;
475 ff3adf60 2004-04-14 devnull }
476 ff3adf60 2004-04-14 devnull while (nn > 0) {
477 ff3adf60 2004-04-14 devnull s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--;
478 ff3adf60 2004-04-14 devnull };
479 ff3adf60 2004-04-14 devnull s->mtfa[pp] = uc;
480 ff3adf60 2004-04-14 devnull } else {
481 ff3adf60 2004-04-14 devnull /* general case */
482 ff3adf60 2004-04-14 devnull lno = nn / MTFL_SIZE;
483 ff3adf60 2004-04-14 devnull off = nn % MTFL_SIZE;
484 ff3adf60 2004-04-14 devnull pp = s->mtfbase[lno] + off;
485 ff3adf60 2004-04-14 devnull uc = s->mtfa[pp];
486 ff3adf60 2004-04-14 devnull while (pp > s->mtfbase[lno]) {
487 ff3adf60 2004-04-14 devnull s->mtfa[pp] = s->mtfa[pp-1]; pp--;
488 ff3adf60 2004-04-14 devnull };
489 ff3adf60 2004-04-14 devnull s->mtfbase[lno]++;
490 ff3adf60 2004-04-14 devnull while (lno > 0) {
491 ff3adf60 2004-04-14 devnull s->mtfbase[lno]--;
492 ff3adf60 2004-04-14 devnull s->mtfa[s->mtfbase[lno]]
493 ff3adf60 2004-04-14 devnull = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
494 ff3adf60 2004-04-14 devnull lno--;
495 ff3adf60 2004-04-14 devnull }
496 ff3adf60 2004-04-14 devnull s->mtfbase[0]--;
497 ff3adf60 2004-04-14 devnull s->mtfa[s->mtfbase[0]] = uc;
498 ff3adf60 2004-04-14 devnull if (s->mtfbase[0] == 0) {
499 ff3adf60 2004-04-14 devnull kk = MTFA_SIZE-1;
500 ff3adf60 2004-04-14 devnull for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
501 ff3adf60 2004-04-14 devnull for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
502 ff3adf60 2004-04-14 devnull s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
503 ff3adf60 2004-04-14 devnull kk--;
504 ff3adf60 2004-04-14 devnull }
505 ff3adf60 2004-04-14 devnull s->mtfbase[ii] = kk + 1;
506 ff3adf60 2004-04-14 devnull }
507 ff3adf60 2004-04-14 devnull }
508 ff3adf60 2004-04-14 devnull }
509 ff3adf60 2004-04-14 devnull }
510 ff3adf60 2004-04-14 devnull /*-- end uc = MTF ( nextSym-1 ) --*/
511 ff3adf60 2004-04-14 devnull
512 ff3adf60 2004-04-14 devnull s->unzftab[s->seqToUnseq[uc]]++;
513 ff3adf60 2004-04-14 devnull if (s->smallDecompress)
514 ff3adf60 2004-04-14 devnull s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
515 ff3adf60 2004-04-14 devnull s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]);
516 ff3adf60 2004-04-14 devnull nblock++;
517 ff3adf60 2004-04-14 devnull
518 ff3adf60 2004-04-14 devnull GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
519 ff3adf60 2004-04-14 devnull continue;
520 ff3adf60 2004-04-14 devnull }
521 ff3adf60 2004-04-14 devnull }
522 ff3adf60 2004-04-14 devnull
523 ff3adf60 2004-04-14 devnull /* Now we know what nblock is, we can do a better sanity
524 ff3adf60 2004-04-14 devnull check on s->origPtr.
525 ff3adf60 2004-04-14 devnull */
526 ff3adf60 2004-04-14 devnull if (s->origPtr < 0 || s->origPtr >= nblock)
527 ff3adf60 2004-04-14 devnull RETURN(BZ_DATA_ERROR);
528 ff3adf60 2004-04-14 devnull
529 ff3adf60 2004-04-14 devnull s->state_out_len = 0;
530 ff3adf60 2004-04-14 devnull s->state_out_ch = 0;
531 ff3adf60 2004-04-14 devnull BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
532 ff3adf60 2004-04-14 devnull s->state = BZ_X_OUTPUT;
533 ff3adf60 2004-04-14 devnull if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
534 ff3adf60 2004-04-14 devnull
535 ff3adf60 2004-04-14 devnull /*-- Set up cftab to facilitate generation of T^(-1) --*/
536 ff3adf60 2004-04-14 devnull s->cftab[0] = 0;
537 ff3adf60 2004-04-14 devnull for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
538 ff3adf60 2004-04-14 devnull for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
539 ff3adf60 2004-04-14 devnull
540 ff3adf60 2004-04-14 devnull if (s->smallDecompress) {
541 ff3adf60 2004-04-14 devnull
542 ff3adf60 2004-04-14 devnull /*-- Make a copy of cftab, used in generation of T --*/
543 ff3adf60 2004-04-14 devnull for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
544 ff3adf60 2004-04-14 devnull
545 ff3adf60 2004-04-14 devnull /*-- compute the T vector --*/
546 ff3adf60 2004-04-14 devnull for (i = 0; i < nblock; i++) {
547 ff3adf60 2004-04-14 devnull uc = (UChar)(s->ll16[i]);
548 ff3adf60 2004-04-14 devnull SET_LL(i, s->cftabCopy[uc]);
549 ff3adf60 2004-04-14 devnull s->cftabCopy[uc]++;
550 ff3adf60 2004-04-14 devnull }
551 ff3adf60 2004-04-14 devnull
552 ff3adf60 2004-04-14 devnull /*-- Compute T^(-1) by pointer reversal on T --*/
553 ff3adf60 2004-04-14 devnull i = s->origPtr;
554 ff3adf60 2004-04-14 devnull j = GET_LL(i);
555 ff3adf60 2004-04-14 devnull do {
556 ff3adf60 2004-04-14 devnull Int32 tmp = GET_LL(j);
557 ff3adf60 2004-04-14 devnull SET_LL(j, i);
558 ff3adf60 2004-04-14 devnull i = j;
559 ff3adf60 2004-04-14 devnull j = tmp;
560 ff3adf60 2004-04-14 devnull }
561 ff3adf60 2004-04-14 devnull while (i != s->origPtr);
562 ff3adf60 2004-04-14 devnull
563 ff3adf60 2004-04-14 devnull s->tPos = s->origPtr;
564 ff3adf60 2004-04-14 devnull s->nblock_used = 0;
565 ff3adf60 2004-04-14 devnull if (s->blockRandomised) {
566 ff3adf60 2004-04-14 devnull BZ_RAND_INIT_MASK;
567 ff3adf60 2004-04-14 devnull BZ_GET_SMALL(s->k0); s->nblock_used++;
568 ff3adf60 2004-04-14 devnull BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
569 ff3adf60 2004-04-14 devnull } else {
570 ff3adf60 2004-04-14 devnull BZ_GET_SMALL(s->k0); s->nblock_used++;
571 ff3adf60 2004-04-14 devnull }
572 ff3adf60 2004-04-14 devnull
573 ff3adf60 2004-04-14 devnull } else {
574 ff3adf60 2004-04-14 devnull
575 ff3adf60 2004-04-14 devnull /*-- compute the T^(-1) vector --*/
576 ff3adf60 2004-04-14 devnull for (i = 0; i < nblock; i++) {
577 ff3adf60 2004-04-14 devnull uc = (UChar)(s->tt[i] & 0xff);
578 ff3adf60 2004-04-14 devnull s->tt[s->cftab[uc]] |= (i << 8);
579 ff3adf60 2004-04-14 devnull s->cftab[uc]++;
580 ff3adf60 2004-04-14 devnull }
581 ff3adf60 2004-04-14 devnull
582 ff3adf60 2004-04-14 devnull s->tPos = s->tt[s->origPtr] >> 8;
583 ff3adf60 2004-04-14 devnull s->nblock_used = 0;
584 ff3adf60 2004-04-14 devnull if (s->blockRandomised) {
585 ff3adf60 2004-04-14 devnull BZ_RAND_INIT_MASK;
586 ff3adf60 2004-04-14 devnull BZ_GET_FAST(s->k0); s->nblock_used++;
587 ff3adf60 2004-04-14 devnull BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK;
588 ff3adf60 2004-04-14 devnull } else {
589 ff3adf60 2004-04-14 devnull BZ_GET_FAST(s->k0); s->nblock_used++;
590 ff3adf60 2004-04-14 devnull }
591 ff3adf60 2004-04-14 devnull
592 ff3adf60 2004-04-14 devnull }
593 ff3adf60 2004-04-14 devnull
594 ff3adf60 2004-04-14 devnull RETURN(BZ_OK);
595 ff3adf60 2004-04-14 devnull
596 ff3adf60 2004-04-14 devnull
597 ff3adf60 2004-04-14 devnull
598 ff3adf60 2004-04-14 devnull endhdr_2:
599 ff3adf60 2004-04-14 devnull
600 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ENDHDR_2, uc);
601 ff3adf60 2004-04-14 devnull if (uc != 0x72) RETURN(BZ_DATA_ERROR);
602 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ENDHDR_3, uc);
603 ff3adf60 2004-04-14 devnull if (uc != 0x45) RETURN(BZ_DATA_ERROR);
604 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ENDHDR_4, uc);
605 ff3adf60 2004-04-14 devnull if (uc != 0x38) RETURN(BZ_DATA_ERROR);
606 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ENDHDR_5, uc);
607 ff3adf60 2004-04-14 devnull if (uc != 0x50) RETURN(BZ_DATA_ERROR);
608 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_ENDHDR_6, uc);
609 ff3adf60 2004-04-14 devnull if (uc != 0x90) RETURN(BZ_DATA_ERROR);
610 ff3adf60 2004-04-14 devnull
611 ff3adf60 2004-04-14 devnull s->storedCombinedCRC = 0;
612 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_CCRC_1, uc);
613 ff3adf60 2004-04-14 devnull s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
614 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_CCRC_2, uc);
615 ff3adf60 2004-04-14 devnull s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
616 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_CCRC_3, uc);
617 ff3adf60 2004-04-14 devnull s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
618 ff3adf60 2004-04-14 devnull GET_UCHAR(BZ_X_CCRC_4, uc);
619 ff3adf60 2004-04-14 devnull s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
620 ff3adf60 2004-04-14 devnull
621 ff3adf60 2004-04-14 devnull s->state = BZ_X_IDLE;
622 ff3adf60 2004-04-14 devnull RETURN(BZ_STREAM_END);
623 ff3adf60 2004-04-14 devnull
624 ff3adf60 2004-04-14 devnull default: AssertH ( False, 4001 );
625 ff3adf60 2004-04-14 devnull }
626 ff3adf60 2004-04-14 devnull
627 ff3adf60 2004-04-14 devnull AssertH ( False, 4002 );
628 ff3adf60 2004-04-14 devnull
629 ff3adf60 2004-04-14 devnull save_state_and_return:
630 ff3adf60 2004-04-14 devnull
631 ff3adf60 2004-04-14 devnull s->save_i = i;
632 ff3adf60 2004-04-14 devnull s->save_j = j;
633 ff3adf60 2004-04-14 devnull s->save_t = t;
634 ff3adf60 2004-04-14 devnull s->save_alphaSize = alphaSize;
635 ff3adf60 2004-04-14 devnull s->save_nGroups = nGroups;
636 ff3adf60 2004-04-14 devnull s->save_nSelectors = nSelectors;
637 ff3adf60 2004-04-14 devnull s->save_EOB = EOB;
638 ff3adf60 2004-04-14 devnull s->save_groupNo = groupNo;
639 ff3adf60 2004-04-14 devnull s->save_groupPos = groupPos;
640 ff3adf60 2004-04-14 devnull s->save_nextSym = nextSym;
641 ff3adf60 2004-04-14 devnull s->save_nblockMAX = nblockMAX;
642 ff3adf60 2004-04-14 devnull s->save_nblock = nblock;
643 ff3adf60 2004-04-14 devnull s->save_es = es;
644 ff3adf60 2004-04-14 devnull s->save_N = N;
645 ff3adf60 2004-04-14 devnull s->save_curr = curr;
646 ff3adf60 2004-04-14 devnull s->save_zt = zt;
647 ff3adf60 2004-04-14 devnull s->save_zn = zn;
648 ff3adf60 2004-04-14 devnull s->save_zvec = zvec;
649 ff3adf60 2004-04-14 devnull s->save_zj = zj;
650 ff3adf60 2004-04-14 devnull s->save_gSel = gSel;
651 ff3adf60 2004-04-14 devnull s->save_gMinlen = gMinlen;
652 ff3adf60 2004-04-14 devnull s->save_gLimit = gLimit;
653 ff3adf60 2004-04-14 devnull s->save_gBase = gBase;
654 ff3adf60 2004-04-14 devnull s->save_gPerm = gPerm;
655 ff3adf60 2004-04-14 devnull
656 ff3adf60 2004-04-14 devnull return retVal;
657 ff3adf60 2004-04-14 devnull }
658 ff3adf60 2004-04-14 devnull
659 ff3adf60 2004-04-14 devnull
660 ff3adf60 2004-04-14 devnull /*-------------------------------------------------------------*/
661 ff3adf60 2004-04-14 devnull /*--- end decompress.c ---*/
662 ff3adf60 2004-04-14 devnull /*-------------------------------------------------------------*/