gzip/deflatelua.lua

Thu, 27 May 2010 15:31:53 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 27 May 2010 15:31:53 +0100
changeset 65
41aeda62af16
parent 59
165b36273ce7
child 78
22977dbb746b
permissions
-rwxr-xr-x

gzip: Some changes to make embedding decompression code compatible with uglify

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
65
41aeda62af16 gzip: Some changes to make embedding decompression code compatible with uglify
Matthew Wild <mwild1@gmail.com>
parents: 59
diff changeset
439 return function (t)
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
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 --]]

mercurial