JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / JU / InfCodes.js
1 Clazz.declarePackage ("JU");\r
2 c$ = Clazz.decorateAsClass (function () {\r
3 this.mode = 0;\r
4 this.len = 0;\r
5 this.tree = null;\r
6 this.tree_index = 0;\r
7 this.need = 0;\r
8 this.lit = 0;\r
9 this.get = 0;\r
10 this.dist = 0;\r
11 this.lbits = 0;\r
12 this.dbits = 0;\r
13 this.ltree = null;\r
14 this.ltree_index = 0;\r
15 this.dtree = null;\r
16 this.dtree_index = 0;\r
17 this.z = null;\r
18 this.s = null;\r
19 Clazz.instantialize (this, arguments);\r
20 }, JU, "InfCodes");\r
21 Clazz.makeConstructor (c$, \r
22 function (z, s) {\r
23 this.z = z;\r
24 this.s = s;\r
25 }, "JU.ZStream,JU.InfBlocks");\r
26 Clazz.defineMethod (c$, "init", \r
27 function (bl, bd, tl, tl_index, td, td_index) {\r
28 this.mode = 0;\r
29 this.lbits = bl;\r
30 this.dbits = bd;\r
31 this.ltree = tl;\r
32 this.ltree_index = tl_index;\r
33 this.dtree = td;\r
34 this.dtree_index = td_index;\r
35 this.tree = null;\r
36 }, "~N,~N,~A,~N,~A,~N");\r
37 Clazz.defineMethod (c$, "proc", \r
38 function (r) {\r
39 var j;\r
40 var tindex;\r
41 var e;\r
42 var b = 0;\r
43 var k = 0;\r
44 var p = 0;\r
45 var n;\r
46 var q;\r
47 var m;\r
48 var f;\r
49 p = this.z.next_in_index;\r
50 n = this.z.avail_in;\r
51 b = this.s.bitb;\r
52 k = this.s.bitk;\r
53 q = this.s.write;\r
54 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;\r
55 while (true) {\r
56 switch (this.mode) {\r
57 case 0:\r
58 if (m >= 258 && n >= 10) {\r
59 this.s.bitb = b;\r
60 this.s.bitk = k;\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
64 this.s.write = q;\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
68 b = this.s.bitb;\r
69 k = this.s.bitk;\r
70 q = this.s.write;\r
71 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;\r
72 if (r != 0) {\r
73 this.mode = r == 1 ? 7 : 9;\r
74 break;\r
75 }}this.need = this.lbits;\r
76 this.tree = this.ltree;\r
77 this.tree_index = this.ltree_index;\r
78 this.mode = 1;\r
79 case 1:\r
80 j = this.need;\r
81 while (k < (j)) {\r
82 if (n != 0) r = 0;\r
83  else {\r
84 this.s.bitb = b;\r
85 this.s.bitk = k;\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
89 this.s.write = q;\r
90 return this.s.inflate_flush (r);\r
91 }n--;\r
92 b |= (this.z.next_in[p++] & 0xff) << k;\r
93 k += 8;\r
94 }\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
99 if (e == 0) {\r
100 this.lit = this.tree[tindex + 2];\r
101 this.mode = 6;\r
102 break;\r
103 }if ((e & 16) != 0) {\r
104 this.get = e & 15;\r
105 this.len = this.tree[tindex + 2];\r
106 this.mode = 2;\r
107 break;\r
108 }if ((e & 64) == 0) {\r
109 this.need = e;\r
110 this.tree_index = Clazz.doubleToInt (tindex / 3) + this.tree[tindex + 2];\r
111 break;\r
112 }if ((e & 32) != 0) {\r
113 this.mode = 7;\r
114 break;\r
115 }this.mode = 9;\r
116 this.z.msg = "invalid literal/length code";\r
117 r = -3;\r
118 this.s.bitb = b;\r
119 this.s.bitk = k;\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
123 this.s.write = q;\r
124 return this.s.inflate_flush (r);\r
125 case 2:\r
126 j = this.get;\r
127 while (k < (j)) {\r
128 if (n != 0) r = 0;\r
129  else {\r
130 this.s.bitb = b;\r
131 this.s.bitk = k;\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
135 this.s.write = q;\r
136 return this.s.inflate_flush (r);\r
137 }n--;\r
138 b |= (this.z.next_in[p++] & 0xff) << k;\r
139 k += 8;\r
140 }\r
141 this.len += (b & JU.InfCodes.inflate_mask[j]);\r
142 b >>= j;\r
143 k -= j;\r
144 this.need = this.dbits;\r
145 this.tree = this.dtree;\r
146 this.tree_index = this.dtree_index;\r
147 this.mode = 3;\r
148 case 3:\r
149 j = this.need;\r
150 while (k < (j)) {\r
151 if (n != 0) r = 0;\r
152  else {\r
153 this.s.bitb = b;\r
154 this.s.bitk = k;\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
158 this.s.write = q;\r
159 return this.s.inflate_flush (r);\r
160 }n--;\r
161 b |= (this.z.next_in[p++] & 0xff) << k;\r
162 k += 8;\r
163 }\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
169 this.get = e & 15;\r
170 this.dist = this.tree[tindex + 2];\r
171 this.mode = 4;\r
172 break;\r
173 }if ((e & 64) == 0) {\r
174 this.need = e;\r
175 this.tree_index = Clazz.doubleToInt (tindex / 3) + this.tree[tindex + 2];\r
176 break;\r
177 }this.mode = 9;\r
178 this.z.msg = "invalid distance code";\r
179 r = -3;\r
180 this.s.bitb = b;\r
181 this.s.bitk = k;\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
185 this.s.write = q;\r
186 return this.s.inflate_flush (r);\r
187 case 4:\r
188 j = this.get;\r
189 while (k < (j)) {\r
190 if (n != 0) r = 0;\r
191  else {\r
192 this.s.bitb = b;\r
193 this.s.bitk = k;\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
197 this.s.write = q;\r
198 return this.s.inflate_flush (r);\r
199 }n--;\r
200 b |= (this.z.next_in[p++] & 0xff) << k;\r
201 k += 8;\r
202 }\r
203 this.dist += (b & JU.InfCodes.inflate_mask[j]);\r
204 b >>= j;\r
205 k -= j;\r
206 this.mode = 5;\r
207 case 5:\r
208 f = q - this.dist;\r
209 while (f < 0) {\r
210 f += this.s.end;\r
211 }\r
212 while (this.len != 0) {\r
213 if (m == 0) {\r
214 if (q == this.s.end && this.s.read != 0) {\r
215 q = 0;\r
216 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;\r
217 }if (m == 0) {\r
218 this.s.write = q;\r
219 r = this.s.inflate_flush (r);\r
220 q = this.s.write;\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
223 q = 0;\r
224 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;\r
225 }if (m == 0) {\r
226 this.s.bitb = b;\r
227 this.s.bitk = k;\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
231 this.s.write = q;\r
232 return this.s.inflate_flush (r);\r
233 }}}this.s.window[q++] = this.s.window[f++];\r
234 m--;\r
235 if (f == this.s.end) f = 0;\r
236 this.len--;\r
237 }\r
238 this.mode = 0;\r
239 break;\r
240 case 6:\r
241 if (m == 0) {\r
242 if (q == this.s.end && this.s.read != 0) {\r
243 q = 0;\r
244 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;\r
245 }if (m == 0) {\r
246 this.s.write = q;\r
247 r = this.s.inflate_flush (r);\r
248 q = this.s.write;\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
251 q = 0;\r
252 m = q < this.s.read ? this.s.read - q - 1 : this.s.end - q;\r
253 }if (m == 0) {\r
254 this.s.bitb = b;\r
255 this.s.bitk = k;\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
259 this.s.write = q;\r
260 return this.s.inflate_flush (r);\r
261 }}}r = 0;\r
262 this.s.window[q++] = this.lit;\r
263 m--;\r
264 this.mode = 0;\r
265 break;\r
266 case 7:\r
267 if (k > 7) {\r
268 k -= 8;\r
269 n++;\r
270 p--;\r
271 }this.s.write = q;\r
272 r = this.s.inflate_flush (r);\r
273 q = this.s.write;\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
276 this.s.bitb = b;\r
277 this.s.bitk = k;\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
281 this.s.write = q;\r
282 return this.s.inflate_flush (r);\r
283 }this.mode = 8;\r
284 case 8:\r
285 r = 1;\r
286 this.s.bitb = b;\r
287 this.s.bitk = k;\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
291 this.s.write = q;\r
292 return this.s.inflate_flush (r);\r
293 case 9:\r
294 r = -3;\r
295 this.s.bitb = b;\r
296 this.s.bitk = k;\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
300 this.s.write = q;\r
301 return this.s.inflate_flush (r);\r
302 default:\r
303 r = -2;\r
304 this.s.bitb = b;\r
305 this.s.bitk = k;\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
309 this.s.write = q;\r
310 return this.s.inflate_flush (r);\r
311 }\r
312 }\r
313 }, "~N");\r
314 Clazz.defineMethod (c$, "free", \r
315 function (z) {\r
316 }, "JU.ZStream");\r
317 Clazz.defineMethod (c$, "inflate_fast", \r
318 function (bl, bd, tl, tl_index, td, td_index, s, z) {\r
319 var t;\r
320 var tp;\r
321 var tp_index;\r
322 var e;\r
323 var b;\r
324 var k;\r
325 var p;\r
326 var n;\r
327 var q;\r
328 var m;\r
329 var ml;\r
330 var md;\r
331 var c;\r
332 var d;\r
333 var r;\r
334 var tp_index_t_3;\r
335 p = z.next_in_index;\r
336 n = z.avail_in;\r
337 b = s.bitb;\r
338 k = s.bitk;\r
339 q = s.write;\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
343 do {\r
344 while (k < (20)) {\r
345 n--;\r
346 b |= (z.next_in[p++] & 0xff) << k;\r
347 k += 8;\r
348 }\r
349 t = b & ml;\r
350 tp = tl;\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
357 m--;\r
358 continue;\r
359 }do {\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
363 e &= 15;\r
364 c = tp[tp_index_t_3 + 2] + (b & JU.InfCodes.inflate_mask[e]);\r
365 b >>= e;\r
366 k -= e;\r
367 while (k < (15)) {\r
368 n--;\r
369 b |= (z.next_in[p++] & 0xff) << k;\r
370 k += 8;\r
371 }\r
372 t = b & md;\r
373 tp = td;\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
377 do {\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
381 e &= 15;\r
382 while (k < (e)) {\r
383 n--;\r
384 b |= (z.next_in[p++] & 0xff) << k;\r
385 k += 8;\r
386 }\r
387 d = tp[tp_index_t_3 + 2] + (b & JU.InfCodes.inflate_mask[e]);\r
388 b >>= (e);\r
389 k -= (e);\r
390 m -= c;\r
391 if (q >= d) {\r
392 r = q - d;\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
396 c -= 2;\r
397 } else {\r
398 System.arraycopy (s.window, r, s.window, q, 2);\r
399 q += 2;\r
400 r += 2;\r
401 c -= 2;\r
402 }} else {\r
403 r = q - d;\r
404 do {\r
405 r += s.end;\r
406 } while (r < 0);\r
407 e = s.end - r;\r
408 if (c > e) {\r
409 c -= e;\r
410 if (q - r > 0 && e > (q - r)) {\r
411 do {\r
412 s.window[q++] = s.window[r++];\r
413 } while (--e != 0);\r
414 } else {\r
415 System.arraycopy (s.window, r, s.window, q, e);\r
416 q += e;\r
417 r += e;\r
418 e = 0;\r
419 }r = 0;\r
420 }}if (q - r > 0 && c > (q - r)) {\r
421 do {\r
422 s.window[q++] = s.window[r++];\r
423 } while (--c != 0);\r
424 } else {\r
425 System.arraycopy (s.window, r, s.window, q, c);\r
426 q += c;\r
427 r += c;\r
428 c = 0;\r
429 }break;\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
435 } else {\r
436 z.msg = "invalid distance code";\r
437 c = z.avail_in - n;\r
438 c = (k >> 3) < c ? k >> 3 : c;\r
439 n += c;\r
440 p -= c;\r
441 k -= c << 3;\r
442 s.bitb = b;\r
443 s.bitk = k;\r
444 z.avail_in = n;\r
445 z.total_in += p - z.next_in_index;\r
446 z.next_in_index = p;\r
447 s.write = q;\r
448 return -3;\r
449 }} while (true);\r
450 break;\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
459 m--;\r
460 break;\r
461 }} else if ((e & 32) != 0) {\r
462 c = z.avail_in - n;\r
463 c = (k >> 3) < c ? k >> 3 : c;\r
464 n += c;\r
465 p -= c;\r
466 k -= c << 3;\r
467 s.bitb = b;\r
468 s.bitk = k;\r
469 z.avail_in = n;\r
470 z.total_in += p - z.next_in_index;\r
471 z.next_in_index = p;\r
472 s.write = q;\r
473 return 1;\r
474 } else {\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
478 n += c;\r
479 p -= c;\r
480 k -= c << 3;\r
481 s.bitb = b;\r
482 s.bitk = k;\r
483 z.avail_in = n;\r
484 z.total_in += p - z.next_in_index;\r
485 z.next_in_index = p;\r
486 s.write = q;\r
487 return -3;\r
488 }} while (true);\r
489 } while (m >= 258 && n >= 10);\r
490 c = z.avail_in - n;\r
491 c = (k >> 3) < c ? k >> 3 : c;\r
492 n += c;\r
493 p -= c;\r
494 k -= c << 3;\r
495 s.bitb = b;\r
496 s.bitk = k;\r
497 z.avail_in = n;\r
498 z.total_in += p - z.next_in_index;\r
499 z.next_in_index = p;\r
500 s.write = q;\r
501 return 0;\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
505 "Z_OK", 0,\r
506 "Z_STREAM_END", 1,\r
507 "Z_STREAM_ERROR", -2,\r
508 "Z_DATA_ERROR", -3,\r
509 "START", 0,\r
510 "LEN", 1,\r
511 "LENEXT", 2,\r
512 "DIST", 3,\r
513 "DISTEXT", 4,\r
514 "COPY", 5,\r
515 "LIT", 6,\r
516 "WASH", 7,\r
517 "END", 8,\r
518 "BADCODE", 9);\r