Thu, 27 May 2010 04:29:28 +0100
README: Add gzip
59
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 | -- dmlib.deflate |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 | -- deflate (and gunzip) implemented in Lua. |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 | -- |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 | -- Note: only supports decompression. |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 | -- Compression not implemented. |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 | -- |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 | -- References |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 | -- [1] DEFLATE Compressed Data Format Specification version 1.3 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 | -- http://tools.ietf.org/html/rfc1951 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 | -- [2] GZIP file format specification version 4.3 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 | -- http://tools.ietf.org/html/rfc1952 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 | -- [3] http://en.wikipedia.org/wiki/DEFLATE |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 | -- [4] pyflate, by Paul Sladen |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 | -- http://www.paul.sladen.org/projects/pyflate/ |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 | -- [5] Compress::Zlib::Perl - partial pure Perl implementation of |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 | -- Compress::Zlib |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 | -- http://search.cpan.org/~nwclark/Compress-Zlib-Perl/Perl.pm |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 | -- |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 | -- (c) 2008 David Manura. Licensed under the same terms as Lua (MIT). |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 | local assert, error, ipairs, pairs, tostring, type, setmetatable, io, math, table_sort, |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 | math_max, string_char, io_open, _G = |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 | assert, error, ipairs, pairs, tostring, type, setmetatable, io, math, table.sort, |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 | math.max, string.char, io.open, _G; |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 | local function memoize(f) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 | local mt = {}; |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 | local t = setmetatable({}, mt) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 | function mt:__index(k) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 | local v = f(k); t[k] = v |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 | return v |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 | return t |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 | local function runtime_error(s, level) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 | level = level or 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 | error({s}, level+1) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 | local function make_os(outbs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 | local os = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 | os.outbs = outbs |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 | os.wnd = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 | os.wnd_pos = 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 | return os |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 | local function output(os, byte) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 | -- debug('OUTPUT:', s) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 | local wnd_pos = os.wnd_pos |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 | os.outbs(byte) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 | os.wnd[wnd_pos] = byte |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 | os.wnd_pos = wnd_pos % 32768 + 1 -- 32K |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 | local function noeof(val) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 | return assert(val, 'unexpected end of file') |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 | local function hasbit(bits, bit) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 | return bits % (bit + bit) >= bit |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 | -- small optimization (lookup table for powers of 2) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 | local pow2 = memoize(function(n) return 2^n end) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 | --local tbits = memoize( |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 | -- function(bits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 | -- return memoize( function(bit) return getbit(bits, bit) end ) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 | -- end ) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 | -- weak metatable marking objects as bitstream type |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 | local is_bitstream = setmetatable({}, {__mode='k'}) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 | local function bytestream_from_string(s) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 | local i = 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 | local o = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 | function o:read() |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 | local by |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 | if i <= #s then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 | by = s:byte(i) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 | i = i + 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 | return by |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 | return o |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 | local left |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 | local function bitstream_from_bytestream(bys) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 | local buf_byte, buf_nbit, o = 0, 0, {}; |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 | function o:nbits_left_in_byte() |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 | return buf_nbit |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 | function o:read(nbits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 | nbits = nbits or 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 | while buf_nbit < nbits do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 | local byte = bys:read() |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 | if not byte then return end -- note: more calls also return nil |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 | buf_byte = buf_byte + pow2[buf_nbit] * byte |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 | buf_nbit = buf_nbit + 8 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 | local m = pow2[nbits] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 | local bits = buf_byte % m |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 | buf_byte = (buf_byte - bits) / m |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 | buf_nbit = buf_nbit - nbits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 | return bits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 | is_bitstream[o] = true |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 | return o |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 | local function get_bitstream(o) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 | return is_bitstream[o] and o or bitstream_from_bytestream(bytestream_from_string(o)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 | local function get_obytestream(o) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 | local bs |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 | if io.type(o) == 'file' then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 | bs = function(sbyte) o:write(string_char(sbyte)) end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 | elseif type(o) == 'function' then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 | bs = o |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 | return bs |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 | local function HuffmanTable(init, is_full) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 | local t = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 | if is_full then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 | for val,nbits in pairs(init) do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 | if nbits ~= 0 then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 | t[#t+1] = {val=val, nbits=nbits} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 | --debug('*',val,nbits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 | else |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 | for i=1,#init-2,2 do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 | local firstval, nbits, nextval = init[i], init[i+1], init[i+2] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 | --debug(val, nextval, nbits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 | if nbits ~= 0 then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 | for val=firstval,nextval-1 do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 | t[#t+1] = {val=val, nbits=nbits} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 | table_sort(t, function(a,b) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 | return a.nbits == b.nbits and a.val < b.val or a.nbits < b.nbits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 | end) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 | -- assign codes |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 | local code = 1 -- leading 1 marker |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 | local nbits = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 | for i,s in ipairs(t) do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 | if s.nbits ~= nbits then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 | code = code * pow2[s.nbits - nbits] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 | nbits = s.nbits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 | s.code = code |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 | --debug('huffman code:', i, s.nbits, s.val, code, bits_tostring(code)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 | code = code + 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 | local minbits = math.huge |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
180 | local look = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
181 | for i,s in ipairs(t) do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
182 | minbits = math.min(minbits, s.nbits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 | look[s.code] = s.val |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
184 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
185 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
186 | --for _,o in ipairs(t) do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
187 | -- debug(':', o.nbits, o.val) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
188 | --end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
189 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
190 | -- function t:lookup(bits) return look[bits] end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
191 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
192 | local function msb(bits, nbits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
193 | local res = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
194 | for i=1,nbits do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
195 | local b = bits % 2 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
196 | bits = (bits - b) / 2 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
197 | res = res * 2 + b |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
198 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
199 | return res |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
200 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
201 | local tfirstcode = memoize( |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
202 | function(bits) return pow2[minbits] + msb(bits, minbits) end) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
204 | function t:read(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
205 | local code, nbits = 1, 0 -- leading 1 marker |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 | while 1 do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
207 | if nbits == 0 then -- small optimization (optional) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 | code = tfirstcode[noeof(bs:read(minbits))] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 | nbits = nbits + minbits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 | else |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 | local b = noeof(bs:read()) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
212 | nbits = nbits + 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
213 | --debug('b',b) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
214 | code = code * 2 + b -- MSB first |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
216 | --debug('code?', code, bits_tostring(code)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
217 | local val = look[code] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
218 | if val then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
219 | --debug('FOUND', val) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
220 | return val |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 | return t |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
228 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
229 | local function parse_gzip_header(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
230 | -- local FLG_FTEXT = 2^0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
231 | local FLG_FHCRC = 2^1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
232 | local FLG_FEXTRA = 2^2 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 | local FLG_FNAME = 2^3 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
234 | local FLG_FCOMMENT = 2^4 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
235 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 | local id1 = bs:read(8) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 | local id2 = bs:read(8) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
238 | local cm = bs:read(8) -- compression method |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
239 | local flg = bs:read(8) -- FLaGs |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
240 | local mtime = bs:read(32) -- Modification TIME |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
241 | local xfl = bs:read(8) -- eXtra FLags |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
242 | local os = bs:read(8) -- Operating System |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
243 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
244 | if hasbit(flg, FLG_FEXTRA) then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
245 | local xlen = bs:read(16) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
246 | local extra = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
247 | for i=1,xlen do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
248 | extra = bs:read(8) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
249 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
250 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
251 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
252 | if hasbit(flg, FLG_FNAME) then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
253 | while bs:read(8) ~= 0 do end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
254 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
255 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 | if hasbit(flg, FLG_FCOMMENT) then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
257 | while bs:read(8) ~= 0 do end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
258 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
259 | if hasbit(flg, FLG_FHCRC) then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
260 | bs:read(16) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
261 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
262 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
263 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
265 | local function parse_huffmantables(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
266 | local hlit = bs:read(5) -- # of literal/length codes - 257 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 | local hdist = bs:read(5) -- # of distance codes - 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
268 | local hclen = noeof(bs:read(4)) -- # of code length codes - 4 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
269 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
270 | local ncodelen_codes = hclen + 4 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
271 | local codelen_init = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
272 | local codelen_vals = { |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
273 | 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
274 | for i=1,ncodelen_codes do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
275 | local nbits = bs:read(3) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
276 | local val = codelen_vals[i] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
277 | codelen_init[val] = nbits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
278 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
279 | local codelentable = HuffmanTable(codelen_init, true) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
280 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
281 | local function decode(ncodes) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
282 | local init = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
283 | local nbits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
284 | local val = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
285 | while val < ncodes do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
286 | local codelen = codelentable:read(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
287 | --FIX:check nil? |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
288 | local nrepeat |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
289 | if codelen <= 15 then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
290 | nrepeat = 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
291 | nbits = codelen |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
292 | --debug('w', nbits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
293 | elseif codelen == 16 then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
294 | nrepeat = 3 + noeof(bs:read(2)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
295 | -- nbits unchanged |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
296 | elseif codelen == 17 then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
297 | nrepeat = 3 + noeof(bs:read(3)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
298 | nbits = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
299 | elseif codelen == 18 then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
300 | nrepeat = 11 + noeof(bs:read(7)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 | nbits = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
302 | else |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
303 | error 'ASSERT' |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
305 | for i=1,nrepeat do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
306 | init[val] = nbits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
307 | val = val + 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
308 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
309 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
310 | local huffmantable = HuffmanTable(init, true) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
311 | return huffmantable |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
312 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
313 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
314 | local nlit_codes = hlit + 257 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
315 | local ndist_codes = hdist + 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
316 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
317 | local littable = decode(nlit_codes) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
318 | local disttable = decode(ndist_codes) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
319 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
320 | return littable, disttable |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
321 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
322 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
323 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
324 | local tdecode_len_base |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
325 | local tdecode_len_nextrabits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
326 | local tdecode_dist_base |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
327 | local tdecode_dist_nextrabits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
328 | local function parse_compressed_item(bs, os, littable, disttable) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
329 | local val = littable:read(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
330 | --debug(val, val < 256 and string_char(val)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
331 | if val < 256 then -- literal |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
332 | output(os, val) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
333 | elseif val == 256 then -- end of block |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
334 | return true |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
335 | else |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
336 | if not tdecode_len_base then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
337 | local t = {[257]=3} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
338 | local skip = 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
339 | for i=258,285,4 do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
340 | for j=i,i+3 do t[j] = t[j-1] + skip end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
341 | if i ~= 258 then skip = skip * 2 end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
342 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
343 | t[285] = 258 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
344 | tdecode_len_base = t |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
345 | --for i=257,285 do debug('T1',i,t[i]) end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
346 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
347 | if not tdecode_len_nextrabits then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
348 | local t = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
349 | for i=257,285 do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
350 | local j = math_max(i - 261, 0) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
351 | t[i] = (j - (j % 4)) / 4 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
352 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
353 | t[285] = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
354 | tdecode_len_nextrabits = t |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
355 | --for i=257,285 do debug('T2',i,t[i]) end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
356 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
357 | local len_base = tdecode_len_base[val] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
358 | local nextrabits = tdecode_len_nextrabits[val] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
359 | local extrabits = bs:read(nextrabits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
360 | local len = len_base + extrabits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
361 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
362 | if not tdecode_dist_base then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
363 | local t = {[0]=1} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
364 | local skip = 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
365 | for i=1,29,2 do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
366 | for j=i,i+1 do t[j] = t[j-1] + skip end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
367 | if i ~= 1 then skip = skip * 2 end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
368 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
369 | tdecode_dist_base = t |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
370 | --for i=0,29 do debug('T3',i,t[i]) end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
371 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
372 | if not tdecode_dist_nextrabits then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
373 | local t = {} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
374 | for i=0,29 do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
375 | local j = math_max(i - 2, 0) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
376 | t[i] = (j - (j % 2)) / 2 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
377 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
378 | tdecode_dist_nextrabits = t |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
379 | --for i=0,29 do debug('T4',i,t[i]) end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
380 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
381 | local dist_val = disttable:read(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
382 | local dist_base = tdecode_dist_base[dist_val] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
383 | local dist_nextrabits = tdecode_dist_nextrabits[dist_val] |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
384 | local dist_extrabits = bs:read(dist_nextrabits) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
385 | local dist = dist_base + dist_extrabits |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
386 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
387 | --debug('BACK', len, dist) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
388 | for i=1,len do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
389 | local pos = (os.wnd_pos - 1 - dist) % 32768 + 1 -- 32K |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
390 | output(os, assert(os.wnd[pos], 'invalid distance')) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
391 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
392 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
393 | return false |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
394 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
395 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
396 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
397 | local function parse_block(bs, os) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
398 | local bfinal = bs:read(1) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
399 | local btype = bs:read(2) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
400 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
401 | local BTYPE_NO_COMPRESSION = 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
402 | local BTYPE_FIXED_HUFFMAN = 1 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
403 | local BTYPE_DYNAMIC_HUFFMAN = 2 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
404 | local BTYPE_RESERVED = 3 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
405 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
406 | if btype == BTYPE_NO_COMPRESSION then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
407 | bs:read(bs:nbits_left_in_byte()) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
408 | local len = bs:read(16) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
409 | local nlen = noeof(bs:read(16)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
410 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
411 | for i=1,len do |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
412 | local by = noeof(bs:read(8)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
413 | output(os, by) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
414 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
415 | elseif btype == BTYPE_FIXED_HUFFMAN or btype == BTYPE_DYNAMIC_HUFFMAN then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
416 | local littable, disttable |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
417 | if btype == BTYPE_DYNAMIC_HUFFMAN then |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
418 | littable, disttable = parse_huffmantables(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
419 | else |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
420 | littable = HuffmanTable {0,8, 144,9, 256,7, 280,8, 288,nil} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
421 | disttable = HuffmanTable {0,5, 32,nil} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
422 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
423 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
424 | repeat until parse_compressed_item( |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
425 | bs, os, littable, disttable |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
426 | ); |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
427 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
428 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
429 | return bfinal ~= 0 |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
430 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
431 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
432 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
433 | local function deflate(t) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
434 | local bs, os = get_bitstream(t.input) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
435 | , make_os(get_obytestream(t.output)) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
436 | repeat until parse_block(bs, os) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
437 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
438 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
439 | function gunzip(t) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
440 | local bs = get_bitstream(t.input) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
441 | local outbs = get_obytestream(t.output) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
442 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
443 | parse_gzip_header(bs) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
444 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
445 | deflate{input=bs, output=outbs} |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
446 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
447 | bs:read(bs:nbits_left_in_byte()) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
448 | bs:read() |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
449 | end |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
450 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
451 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
452 | --[[ |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
453 | LICENSE |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
454 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
455 | Copyright (C) 2008, David Manura. |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
456 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
457 | Permission is hereby granted, free of charge, to any person obtaining a copy |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
458 | of this software and associated documentation files (the "Software"), to deal |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
459 | in the Software without restriction, including without limitation the rights |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
460 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
461 | copies of the Software, and to permit persons to whom the Software is |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
462 | furnished to do so, subject to the following conditions: |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
463 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
464 | The above copyright notice and this permission notice shall be included in |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
465 | all copies or substantial portions of the Software. |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
466 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
467 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
468 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
469 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
470 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
471 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
472 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
473 | THE SOFTWARE. |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
474 | |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
475 | (end license) |
165b36273ce7
gzip: Add support for gzipping output files, based on a very hacked compress.deflatelua by David Manura
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
476 | --]] |