1 Clazz.declarePackage ("JU");
\r
2 c$ = Clazz.decorateAsClass (function () {
\r
14 this.ltree_index = 0;
\r
16 this.dtree_index = 0;
\r
19 Clazz.instantialize (this, arguments);
\r
21 Clazz.makeConstructor (c$,
\r
25 }, "JU.ZStream,JU.InfBlocks");
\r
26 Clazz.defineMethod (c$, "init",
\r
27 function (bl, bd, tl, tl_index, td, td_index) {
\r
32 this.ltree_index = tl_index;
\r
34 this.dtree_index = td_index;
\r
36 }, "~N,~N,~A,~N,~A,~N");
\r
37 Clazz.defineMethod (c$, "proc",
\r
49 p = this.z.next_in_index;
\r
50 n = this.z.avail_in;
\r
54 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
56 switch (this.mode) {
\r
58 if (m >= 258 && n >= 10) {
\r
61 this.z.avail_in = n;
\r
62 this.z.total_in += p - this.z.next_in_index;
\r
63 this.z.next_in_index = p;
\r
65 r = this.inflate_fast (this.lbits, this.dbits, this.ltree, this.ltree_index, this.dtree, this.dtree_index, this.s, this.z);
\r
66 p = this.z.next_in_index;
\r
67 n = this.z.avail_in;
\r
71 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
73 this.mode = r == 1 ? 7 : 9;
\r
75 }}this.need = this.lbits;
\r
76 this.tree = this.ltree;
\r
77 this.tree_index = this.ltree_index;
\r
86 this.z.avail_in = n;
\r
87 this.z.total_in += p - this.z.next_in_index;
\r
88 this.z.next_in_index = p;
\r
90 return this.s.inflate_flush (r);
\r
92 b |= (this.z.next_in[p++] & 0xff) << k;
\r
95 tindex = (this.tree_index + (b & JU.InfCodes.inflate_mask[j])) * 3;
\r
96 b >>>= (this.tree[tindex + 1]);
\r
97 k -= (this.tree[tindex + 1]);
\r
98 e = this.tree[tindex];
\r
100 this.lit = this.tree[tindex + 2];
\r
103 }if ((e & 16) != 0) {
\r
105 this.len = this.tree[tindex + 2];
\r
108 }if ((e & 64) == 0) {
\r
110 this.tree_index = Clazz.doubleToInt (tindex / 3) + this.tree[tindex + 2];
\r
112 }if ((e & 32) != 0) {
\r
116 this.z.msg = "invalid literal/length code";
\r
120 this.z.avail_in = n;
\r
121 this.z.total_in += p - this.z.next_in_index;
\r
122 this.z.next_in_index = p;
\r
124 return this.s.inflate_flush (r);
\r
132 this.z.avail_in = n;
\r
133 this.z.total_in += p - this.z.next_in_index;
\r
134 this.z.next_in_index = p;
\r
136 return this.s.inflate_flush (r);
\r
138 b |= (this.z.next_in[p++] & 0xff) << k;
\r
141 this.len += (b & JU.InfCodes.inflate_mask[j]);
\r
144 this.need = this.dbits;
\r
145 this.tree = this.dtree;
\r
146 this.tree_index = this.dtree_index;
\r
155 this.z.avail_in = n;
\r
156 this.z.total_in += p - this.z.next_in_index;
\r
157 this.z.next_in_index = p;
\r
159 return this.s.inflate_flush (r);
\r
161 b |= (this.z.next_in[p++] & 0xff) << k;
\r
164 tindex = (this.tree_index + (b & JU.InfCodes.inflate_mask[j])) * 3;
\r
165 b >>= this.tree[tindex + 1];
\r
166 k -= this.tree[tindex + 1];
\r
167 e = (this.tree[tindex]);
\r
168 if ((e & 16) != 0) {
\r
170 this.dist = this.tree[tindex + 2];
\r
173 }if ((e & 64) == 0) {
\r
175 this.tree_index = Clazz.doubleToInt (tindex / 3) + this.tree[tindex + 2];
\r
178 this.z.msg = "invalid distance code";
\r
182 this.z.avail_in = n;
\r
183 this.z.total_in += p - this.z.next_in_index;
\r
184 this.z.next_in_index = p;
\r
186 return this.s.inflate_flush (r);
\r
194 this.z.avail_in = n;
\r
195 this.z.total_in += p - this.z.next_in_index;
\r
196 this.z.next_in_index = p;
\r
198 return this.s.inflate_flush (r);
\r
200 b |= (this.z.next_in[p++] & 0xff) << k;
\r
203 this.dist += (b & JU.InfCodes.inflate_mask[j]);
\r
212 while (this.len != 0) {
\r
214 if (q == this.s.end && this.s.read != 0) {
\r
216 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
219 r = this.s.inflate_flush (r);
\r
221 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
222 if (q == this.s.end && this.s.read != 0) {
\r
224 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
228 this.z.avail_in = n;
\r
229 this.z.total_in += p - this.z.next_in_index;
\r
230 this.z.next_in_index = p;
\r
232 return this.s.inflate_flush (r);
\r
233 }}}this.s.window[q++] = this.s.window[f++];
\r
235 if (f == this.s.end) f = 0;
\r
242 if (q == this.s.end && this.s.read != 0) {
\r
244 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
247 r = this.s.inflate_flush (r);
\r
249 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
250 if (q == this.s.end && this.s.read != 0) {
\r
252 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
256 this.z.avail_in = n;
\r
257 this.z.total_in += p - this.z.next_in_index;
\r
258 this.z.next_in_index = p;
\r
260 return this.s.inflate_flush (r);
\r
262 this.s.window[q++] = this.lit;
\r
272 r = this.s.inflate_flush (r);
\r
274 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;
\r
275 if (this.s.read != this.s.write) {
\r
278 this.z.avail_in = n;
\r
279 this.z.total_in += p - this.z.next_in_index;
\r
280 this.z.next_in_index = p;
\r
282 return this.s.inflate_flush (r);
\r
288 this.z.avail_in = n;
\r
289 this.z.total_in += p - this.z.next_in_index;
\r
290 this.z.next_in_index = p;
\r
292 return this.s.inflate_flush (r);
\r
297 this.z.avail_in = n;
\r
298 this.z.total_in += p - this.z.next_in_index;
\r
299 this.z.next_in_index = p;
\r
301 return this.s.inflate_flush (r);
\r
306 this.z.avail_in = n;
\r
307 this.z.total_in += p - this.z.next_in_index;
\r
308 this.z.next_in_index = p;
\r
310 return this.s.inflate_flush (r);
\r
314 Clazz.defineMethod (c$, "free",
\r
317 Clazz.defineMethod (c$, "inflate_fast",
\r
318 function (bl, bd, tl, tl_index, td, td_index, s, z) {
\r
335 p = z.next_in_index;
\r
340 m = q < s.read ? s.read - q - 1 : s.end - q;
\r
341 ml = JU.InfCodes.inflate_mask[bl];
\r
342 md = JU.InfCodes.inflate_mask[bd];
\r
346 b |= (z.next_in[p++] & 0xff) << k;
\r
351 tp_index = tl_index;
\r
352 tp_index_t_3 = (tp_index + t) * 3;
\r
353 if ((e = tp[tp_index_t_3]) == 0) {
\r
354 b >>= (tp[tp_index_t_3 + 1]);
\r
355 k -= (tp[tp_index_t_3 + 1]);
\r
356 s.window[q++] = tp[tp_index_t_3 + 2];
\r
360 b >>= (tp[tp_index_t_3 + 1]);
\r
361 k -= (tp[tp_index_t_3 + 1]);
\r
362 if ((e & 16) != 0) {
\r
364 c = tp[tp_index_t_3 + 2] + (b & JU.InfCodes.inflate_mask[e]);
\r
369 b |= (z.next_in[p++] & 0xff) << k;
\r
374 tp_index = td_index;
\r
375 tp_index_t_3 = (tp_index + t) * 3;
\r
376 e = tp[tp_index_t_3];
\r
378 b >>= (tp[tp_index_t_3 + 1]);
\r
379 k -= (tp[tp_index_t_3 + 1]);
\r
380 if ((e & 16) != 0) {
\r
384 b |= (z.next_in[p++] & 0xff) << k;
\r
387 d = tp[tp_index_t_3 + 2] + (b & JU.InfCodes.inflate_mask[e]);
\r
393 if (q - r > 0 && 2 > (q - r)) {
\r
394 s.window[q++] = s.window[r++];
\r
395 s.window[q++] = s.window[r++];
\r
398 System.arraycopy (s.window, r, s.window, q, 2);
\r
410 if (q - r > 0 && e > (q - r)) {
\r
412 s.window[q++] = s.window[r++];
\r
413 } while (--e != 0);
\r
415 System.arraycopy (s.window, r, s.window, q, e);
\r
420 }}if (q - r > 0 && c > (q - r)) {
\r
422 s.window[q++] = s.window[r++];
\r
423 } while (--c != 0);
\r
425 System.arraycopy (s.window, r, s.window, q, c);
\r
430 } else if ((e & 64) == 0) {
\r
431 t += tp[tp_index_t_3 + 2];
\r
432 t += (b & JU.InfCodes.inflate_mask[e]);
\r
433 tp_index_t_3 = (tp_index + t) * 3;
\r
434 e = tp[tp_index_t_3];
\r
436 z.msg = "invalid distance code";
\r
437 c = z.avail_in - n;
\r
438 c = (k >> 3) < c ? k >> 3 : c;
\r
445 z.total_in += p - z.next_in_index;
\r
446 z.next_in_index = p;
\r
451 }if ((e & 64) == 0) {
\r
452 t += tp[tp_index_t_3 + 2];
\r
453 t += (b & JU.InfCodes.inflate_mask[e]);
\r
454 tp_index_t_3 = (tp_index + t) * 3;
\r
455 if ((e = tp[tp_index_t_3]) == 0) {
\r
456 b >>= (tp[tp_index_t_3 + 1]);
\r
457 k -= (tp[tp_index_t_3 + 1]);
\r
458 s.window[q++] = tp[tp_index_t_3 + 2];
\r
461 }} else if ((e & 32) != 0) {
\r
462 c = z.avail_in - n;
\r
463 c = (k >> 3) < c ? k >> 3 : c;
\r
470 z.total_in += p - z.next_in_index;
\r
471 z.next_in_index = p;
\r
475 z.msg = "invalid literal/length code";
\r
476 c = z.avail_in - n;
\r
477 c = (k >> 3) < c ? k >> 3 : c;
\r
484 z.total_in += p - z.next_in_index;
\r
485 z.next_in_index = p;
\r
489 } while (m >= 258 && n >= 10);
\r
490 c = z.avail_in - n;
\r
491 c = (k >> 3) < c ? k >> 3 : c;
\r
498 z.total_in += p - z.next_in_index;
\r
499 z.next_in_index = p;
\r
502 }, "~N,~N,~A,~N,~A,~N,JU.InfBlocks,JU.ZStream");
\r
503 Clazz.defineStatics (c$,
\r
504 "inflate_mask", Clazz.newIntArray (-1, [0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff]),
\r
507 "Z_STREAM_ERROR", -2,
\r
508 "Z_DATA_ERROR", -3,
\r