libmspack 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +5 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +4 -0
  6. data/README.md +75 -0
  7. data/Rakefile +22 -0
  8. data/UNLICENSE +24 -0
  9. data/ext/Rakefile +16 -0
  10. data/ext/i386-windows/libmspack.dll +0 -0
  11. data/ext/libmspack/AUTHORS +12 -0
  12. data/ext/libmspack/COPYING.LIB +504 -0
  13. data/ext/libmspack/ChangeLog +491 -0
  14. data/ext/libmspack/Makefile.am +100 -0
  15. data/ext/libmspack/NEWS +0 -0
  16. data/ext/libmspack/README +130 -0
  17. data/ext/libmspack/TODO +8 -0
  18. data/ext/libmspack/cleanup.sh +9 -0
  19. data/ext/libmspack/configure.ac +50 -0
  20. data/ext/libmspack/debian/changelog +6 -0
  21. data/ext/libmspack/debian/control +14 -0
  22. data/ext/libmspack/debian/rules +101 -0
  23. data/ext/libmspack/doc/Doxyfile.in +22 -0
  24. data/ext/libmspack/doc/Makefile.in +14 -0
  25. data/ext/libmspack/doc/szdd_kwaj_format.html +331 -0
  26. data/ext/libmspack/libmspack.pc.in +10 -0
  27. data/ext/libmspack/mspack/cab.h +127 -0
  28. data/ext/libmspack/mspack/cabc.c +24 -0
  29. data/ext/libmspack/mspack/cabd.c +1444 -0
  30. data/ext/libmspack/mspack/chm.h +122 -0
  31. data/ext/libmspack/mspack/chmc.c +24 -0
  32. data/ext/libmspack/mspack/chmd.c +1392 -0
  33. data/ext/libmspack/mspack/crc32.c +95 -0
  34. data/ext/libmspack/mspack/crc32.h +17 -0
  35. data/ext/libmspack/mspack/des.h +15 -0
  36. data/ext/libmspack/mspack/hlp.h +33 -0
  37. data/ext/libmspack/mspack/hlpc.c +24 -0
  38. data/ext/libmspack/mspack/hlpd.c +24 -0
  39. data/ext/libmspack/mspack/kwaj.h +118 -0
  40. data/ext/libmspack/mspack/kwajc.c +24 -0
  41. data/ext/libmspack/mspack/kwajd.c +561 -0
  42. data/ext/libmspack/mspack/lit.h +35 -0
  43. data/ext/libmspack/mspack/litc.c +24 -0
  44. data/ext/libmspack/mspack/litd.c +24 -0
  45. data/ext/libmspack/mspack/lzss.h +66 -0
  46. data/ext/libmspack/mspack/lzssd.c +93 -0
  47. data/ext/libmspack/mspack/lzx.h +221 -0
  48. data/ext/libmspack/mspack/lzxc.c +18 -0
  49. data/ext/libmspack/mspack/lzxd.c +895 -0
  50. data/ext/libmspack/mspack/mspack.def +28 -0
  51. data/ext/libmspack/mspack/mspack.h +2353 -0
  52. data/ext/libmspack/mspack/mszip.h +126 -0
  53. data/ext/libmspack/mspack/mszipc.c +18 -0
  54. data/ext/libmspack/mspack/mszipd.c +514 -0
  55. data/ext/libmspack/mspack/oab.h +60 -0
  56. data/ext/libmspack/mspack/oabc.c +24 -0
  57. data/ext/libmspack/mspack/oabd.c +408 -0
  58. data/ext/libmspack/mspack/qtm.h +128 -0
  59. data/ext/libmspack/mspack/qtmc.c +18 -0
  60. data/ext/libmspack/mspack/qtmd.c +489 -0
  61. data/ext/libmspack/mspack/readbits.h +207 -0
  62. data/ext/libmspack/mspack/readhuff.h +173 -0
  63. data/ext/libmspack/mspack/sha.h +15 -0
  64. data/ext/libmspack/mspack/system.c +239 -0
  65. data/ext/libmspack/mspack/system.h +124 -0
  66. data/ext/libmspack/mspack/szdd.h +39 -0
  67. data/ext/libmspack/mspack/szddc.c +24 -0
  68. data/ext/libmspack/mspack/szddd.c +247 -0
  69. data/ext/libmspack/rebuild.sh +8 -0
  70. data/ext/libmspack/test/cabd_c10 +19 -0
  71. data/ext/libmspack/test/cabd_compare +34 -0
  72. data/ext/libmspack/test/cabd_md5.c +161 -0
  73. data/ext/libmspack/test/cabd_memory.c +179 -0
  74. data/ext/libmspack/test/cabd_test.c +386 -0
  75. data/ext/libmspack/test/cabrip.c +81 -0
  76. data/ext/libmspack/test/chmd_compare +38 -0
  77. data/ext/libmspack/test/chmd_find.c +95 -0
  78. data/ext/libmspack/test/chmd_md5.c +67 -0
  79. data/ext/libmspack/test/chmd_order.c +144 -0
  80. data/ext/libmspack/test/chminfo.c +284 -0
  81. data/ext/libmspack/test/chmx.c +216 -0
  82. data/ext/libmspack/test/error.h +22 -0
  83. data/ext/libmspack/test/expand.c +79 -0
  84. data/ext/libmspack/test/md5.c +457 -0
  85. data/ext/libmspack/test/md5.h +165 -0
  86. data/ext/libmspack/test/md5_fh.h +123 -0
  87. data/ext/libmspack/test/msdecompile_md5 +24 -0
  88. data/ext/libmspack/test/msexpand_md5 +39 -0
  89. data/ext/libmspack/test/multifh.c +435 -0
  90. data/ext/libmspack/test/oabx.c +41 -0
  91. data/ext/libmspack/test/test_files/cabd/1.pl +84 -0
  92. data/ext/libmspack/test/test_files/cabd/2.pl +75 -0
  93. data/ext/libmspack/test/test_files/cabd/bad_folderindex.cab +0 -0
  94. data/ext/libmspack/test/test_files/cabd/bad_nofiles.cab +0 -0
  95. data/ext/libmspack/test/test_files/cabd/bad_nofolders.cab +0 -0
  96. data/ext/libmspack/test/test_files/cabd/bad_signature.cab +0 -0
  97. data/ext/libmspack/test/test_files/cabd/multi_basic_pt1.cab +0 -0
  98. data/ext/libmspack/test/test_files/cabd/multi_basic_pt2.cab +0 -0
  99. data/ext/libmspack/test/test_files/cabd/multi_basic_pt3.cab +0 -0
  100. data/ext/libmspack/test/test_files/cabd/multi_basic_pt4.cab +0 -0
  101. data/ext/libmspack/test/test_files/cabd/multi_basic_pt5.cab +0 -0
  102. data/ext/libmspack/test/test_files/cabd/normal_255c_filename.cab +0 -0
  103. data/ext/libmspack/test/test_files/cabd/normal_2files_1folder.cab +0 -0
  104. data/ext/libmspack/test/test_files/cabd/partial_nodata.cab +0 -0
  105. data/ext/libmspack/test/test_files/cabd/partial_nofiles.cab +0 -0
  106. data/ext/libmspack/test/test_files/cabd/partial_nofolder.cab +0 -0
  107. data/ext/libmspack/test/test_files/cabd/partial_shortextheader.cab +0 -0
  108. data/ext/libmspack/test/test_files/cabd/partial_shortfile1.cab +0 -0
  109. data/ext/libmspack/test/test_files/cabd/partial_shortfile2.cab +0 -0
  110. data/ext/libmspack/test/test_files/cabd/partial_shortfolder.cab +0 -0
  111. data/ext/libmspack/test/test_files/cabd/partial_shortheader.cab +0 -0
  112. data/ext/libmspack/test/test_files/cabd/partial_str_nofname.cab +0 -0
  113. data/ext/libmspack/test/test_files/cabd/partial_str_noninfo.cab +0 -0
  114. data/ext/libmspack/test/test_files/cabd/partial_str_nonname.cab +0 -0
  115. data/ext/libmspack/test/test_files/cabd/partial_str_nopinfo.cab +0 -0
  116. data/ext/libmspack/test/test_files/cabd/partial_str_nopname.cab +0 -0
  117. data/ext/libmspack/test/test_files/cabd/partial_str_shortfname.cab +0 -0
  118. data/ext/libmspack/test/test_files/cabd/partial_str_shortninfo.cab +0 -0
  119. data/ext/libmspack/test/test_files/cabd/partial_str_shortnname.cab +0 -0
  120. data/ext/libmspack/test/test_files/cabd/partial_str_shortpinfo.cab +0 -0
  121. data/ext/libmspack/test/test_files/cabd/partial_str_shortpname.cab +0 -0
  122. data/ext/libmspack/test/test_files/cabd/reserve_---.cab +0 -0
  123. data/ext/libmspack/test/test_files/cabd/reserve_--D.cab +0 -0
  124. data/ext/libmspack/test/test_files/cabd/reserve_-F-.cab +0 -0
  125. data/ext/libmspack/test/test_files/cabd/reserve_-FD.cab +0 -0
  126. data/ext/libmspack/test/test_files/cabd/reserve_H--.cab +0 -0
  127. data/ext/libmspack/test/test_files/cabd/reserve_H-D.cab +0 -0
  128. data/ext/libmspack/test/test_files/cabd/reserve_HF-.cab +0 -0
  129. data/ext/libmspack/test/test_files/cabd/reserve_HFD.cab +0 -0
  130. data/ext/libmspack/test/test_files/cabd/search_basic.cab +0 -0
  131. data/ext/libmspack/test/test_files/cabd/search_tricky1.cab +0 -0
  132. data/ext/libmspack/winbuild.sh +26 -0
  133. data/ext/x86_64-windows/libmspack.dll +0 -0
  134. data/lib/libmspack/constants.rb +9 -0
  135. data/lib/libmspack/exceptions.rb +12 -0
  136. data/lib/libmspack/mscab.rb +722 -0
  137. data/lib/libmspack/mschm.rb +301 -0
  138. data/lib/libmspack/mshlp.rb +15 -0
  139. data/lib/libmspack/mskwaj.rb +124 -0
  140. data/lib/libmspack/mslit.rb +18 -0
  141. data/lib/libmspack/msoab.rb +36 -0
  142. data/lib/libmspack/mspack.rb +208 -0
  143. data/lib/libmspack/msszdd.rb +81 -0
  144. data/lib/libmspack/system.rb +84 -0
  145. data/lib/libmspack/version.rb +4 -0
  146. data/lib/libmspack.rb +121 -0
  147. data/libmspack.gemspec +33 -0
  148. data/spec/libmspack_spec.rb +26 -0
  149. data/spec/spec_helper.rb +5 -0
  150. metadata +309 -0
@@ -0,0 +1,301 @@
1
+ module LibMsPack
2
+ module MsChm
3
+ module Constants
4
+
5
+ MSCHMC_ENDLIST = 0
6
+ MSCHMC_UNCOMP = 1
7
+ MSCHMC_MSCOMP = 2
8
+
9
+ MSCHMC_PARAM_TIMESTAMP = 0
10
+ MSCHMC_PARAM_LANGUAGE = 1
11
+ MSCHMC_PARAM_LZXWINDOW = 2
12
+ MSCHMC_PARAM_DENSITY = 3
13
+ MSCHMC_PARAM_INDEX = 4
14
+
15
+ end
16
+
17
+ class MsChmcFile < FFI::Struct
18
+ layout({
19
+ :section => :int,
20
+ :filename => :string,
21
+ :chm_filename => :string,
22
+ :length => :off_t
23
+ })
24
+
25
+ def section
26
+ self[:section]
27
+ end
28
+
29
+ def filename
30
+ self[:filename]
31
+ end
32
+
33
+ def chm_filename
34
+ self[:chm_filename]
35
+ end
36
+
37
+ def length
38
+ self[:length]
39
+ end
40
+ end
41
+
42
+ class MsChmdHeader < FFI::Struct
43
+ end
44
+
45
+ class MsChmdSection < FFI::Struct
46
+ layout({
47
+ :chm => MsChmdHeader.ptr,
48
+ :id => :uint
49
+ })
50
+
51
+ def chm
52
+ return nil if self[:chm].pointer.address.zero?
53
+ self[:chm]
54
+ end
55
+
56
+ def id
57
+ self[:id]
58
+ end
59
+ end
60
+
61
+ class MsChmdFile < FFI::Struct
62
+ layout({
63
+ :next => MsChmdFile.ptr,
64
+ :section => MsChmdSection.ptr,
65
+ :offset => :off_t,
66
+ :length => :off_t,
67
+ :filename => :string
68
+ })
69
+
70
+ def next
71
+ return nil if self[:next].pointer.address.zero?
72
+ self[:next]
73
+ end
74
+
75
+ def section
76
+ return nil if self[:section].pointer.address.zero?
77
+ self[:section]
78
+ end
79
+
80
+ def offset
81
+ self[:offset]
82
+ end
83
+
84
+ def length
85
+ self[:length]
86
+ end
87
+
88
+ def filename
89
+ self[:filename]
90
+ end
91
+ end
92
+
93
+ class MsChmdSecUncompressed < FFI::Struct
94
+ layout({
95
+ :base => MsChmdSection,
96
+ :offset => :off_t
97
+ })
98
+
99
+ def base
100
+ self[:base]
101
+ end
102
+
103
+ def offset
104
+ self[:offset]
105
+ end
106
+ end
107
+
108
+ class MsChmdSecMscompressed < FFI::Struct
109
+ layout({
110
+ :base => MsChmdSection,
111
+ :content => MsChmdFile.ptr,
112
+ :control => MsChmdFile.ptr,
113
+ :rtable => MsChmdFile.ptr,
114
+ :spaninfo => MsChmdFile.ptr
115
+ })
116
+
117
+ def base
118
+ self[:base]
119
+ end
120
+
121
+ def content
122
+ return nil if self[:content].pointer.address.zero?
123
+ self[:content]
124
+ end
125
+
126
+ def control
127
+ return nil if self[:control].pointer.address.zero?
128
+ self[:control]
129
+ end
130
+
131
+ def rtable
132
+ return nil if self[:rtable].pointer.address.zero?
133
+ self[:rtable]
134
+ end
135
+
136
+ def spaninfo
137
+ return nil if self[:spaninfo].pointer.address.zero?
138
+ self[:spaninfo]
139
+ end
140
+ end
141
+
142
+ class MsChmdHeader < FFI::Struct
143
+ layout({
144
+ :version => :uint,
145
+ :timestamp => :uint,
146
+ :language => :uint,
147
+ :filename => :string,
148
+ :length => :off_t,
149
+ :files => MsChmdFile.ptr,
150
+ :sysfiles => MsChmdFile.ptr,
151
+ :sec0 => MsChmdSecUncompressed,
152
+ :sec1 => MsChmdSecMscompressed,
153
+ :dir_offset => :off_t,
154
+ :num_chunks => :uint,
155
+ :chunk_size => :uint,
156
+ :density => :uint,
157
+ :depth => :uint,
158
+ :index_root => :uint,
159
+ :first_pmgl => :uint,
160
+ :last_pmgl => :uint,
161
+ :chunk_cache => :pointer
162
+ })
163
+
164
+ def version
165
+ self[:version]
166
+ end
167
+
168
+ def timestamp
169
+ self[:timestamp]
170
+ end
171
+
172
+ def language
173
+ self[:language]
174
+ end
175
+
176
+ def filename
177
+ self[:filename]
178
+ end
179
+
180
+ def length
181
+ self[:length]
182
+ end
183
+
184
+ def files
185
+ return nil if self[:files].pointer.address.zero?
186
+ self[:files]
187
+ end
188
+
189
+ def sysfiles
190
+ return nil if self[:sysfiles].pointer.address.zero?
191
+ self[:sysfiles]
192
+ end
193
+
194
+ def sec0
195
+ self[:sec0]
196
+ end
197
+
198
+ def sec1
199
+ self[:sec1]
200
+ end
201
+
202
+ def dir_offset
203
+ self[:dir_offset]
204
+ end
205
+
206
+ def num_chunks
207
+ self[:num_chunks]
208
+ end
209
+
210
+ def chunk_size
211
+ self[:chunk_size]
212
+ end
213
+
214
+ def density
215
+ self[:density]
216
+ end
217
+
218
+ def depth
219
+ self[:depth]
220
+ end
221
+
222
+ def index_root
223
+ self[:index_root]
224
+ end
225
+
226
+ def first_pmgl
227
+ self[:first_pmgl]
228
+ end
229
+
230
+ def last_pmgl
231
+ self[:last_pmgl]
232
+ end
233
+
234
+ def chunk_cache
235
+ return nil if self[:chunk_cache].pointer.address.zero?
236
+ self[:chunk_cache]
237
+ end
238
+ end
239
+
240
+ class MsChmCompressor < FFI::Struct
241
+ layout({
242
+ :generate => callback([ MsChmCompressor.ptr, MsChmcFile.ptr, :string ], :int),
243
+ :use_temporary_file => callback([ MsChmCompressor.ptr, :int, :string ], :int),
244
+ :set_param => callback([ MsChmCompressor.ptr, :int, :uint ], :int),
245
+ :last_error => callback([ MsChmCompressor.ptr ], :int)
246
+ })
247
+
248
+ def generate(compressor, fileList, outputFile)
249
+ self[:generate].call(compressor, fileList, outputFile)
250
+ end
251
+
252
+ def use_temporary_file(compressor, useTempFile, tempFile)
253
+ self[:use_temporary_file].call(compressor, useTempFile, tempFile)
254
+ end
255
+
256
+ def set_param(compressor, param, value)
257
+ self[:set_param].call(compressor, param, value)
258
+ end
259
+
260
+ def last_error(compressor)
261
+ self[:last_error].call(compressor)
262
+ end
263
+ end
264
+
265
+ class MsChmDecompressor < FFI::Struct
266
+ layout({
267
+ :open => callback([ MsChmDecompressor.ptr, :string ], MsChmdHeader.ptr),
268
+ :close => callback([ MsChmDecompressor.ptr, MsChmdHeader.ptr ], :void),
269
+ :extract => callback([ MsChmDecompressor.ptr, MsChmdFile.ptr, :string ], :int),
270
+ :last_error => callback([ MsChmDecompressor.ptr ], :int),
271
+ :fast_open => callback([ MsChmDecompressor.ptr, :string ], MsChmdHeader.ptr),
272
+ :fast_find => callback([ MsChmDecompressor.ptr, MsChmdHeader.ptr, :string, MsChmdFile.ptr, :int ], :int)
273
+ })
274
+
275
+ def open(decompressor, filename)
276
+ self[:open].call(decompressor, filename)
277
+ end
278
+
279
+ def close(decompressor, chm)
280
+ self[:close].call(decompressor, chm)
281
+ end
282
+
283
+ def extract(decompressor, file, filename)
284
+ self[:extract].call(decompressor, file, filename)
285
+ end
286
+
287
+ def last_error(decompressor)
288
+ self[:last_error].call(decompressor)
289
+ end
290
+
291
+ def fast_open(decompressor, filename)
292
+ self[:fast_open].call(decompressor, filename)
293
+ end
294
+
295
+ def fast_find(decompressor, chm, filename, file, size)
296
+ self[:fast_find].call(decompressor, chm, filename, file, size)
297
+ end
298
+ end
299
+
300
+ end
301
+ end
@@ -0,0 +1,15 @@
1
+ module LibMsPack
2
+ module MsHlp
3
+ class MsHlpCompressor < FFI::Struct
4
+ layout({
5
+ :dummy => :int
6
+ })
7
+ end
8
+
9
+ class MsHlpDecompressor < FFI::Struct
10
+ layout({
11
+ :dummy => :int
12
+ })
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,124 @@
1
+ module LibMsPack
2
+ module MsKwaj
3
+ module Constants
4
+
5
+ MSKWAJC_PARAM_COMP_TYPE = 0
6
+ MSKWAJC_PARAM_INCLUDE_LENGTH = 1
7
+
8
+ MSKWAJ_COMP_NONE = 0
9
+ MSKWAJ_COMP_XOR = 1
10
+ MSKWAJ_COMP_SZDD = 2
11
+ MSKWAJ_COMP_LZH = 3
12
+ MSKWAJ_COMP_MSZIP = 4
13
+
14
+ MSKWAJ_HDR_HASLENGTH = 0x01
15
+ MSKWAJ_HDR_HASUNKNOWN1 = 0x02
16
+ MSKWAJ_HDR_HASUNKNOWN2 = 0x04
17
+ MSKWAJ_HDR_HASFILENAME = 0x08
18
+ MSKWAJ_HDR_HASFILEEXT = 0x10
19
+ MSKWAJ_HDR_HASEXTRATEXT = 0x20
20
+
21
+ end
22
+
23
+ class MsKwajdHeader < FFI::Struct
24
+ layout({
25
+ :comp_type => :ushort,
26
+ :data_offset => :off_t,
27
+ :headers => :int,
28
+ :length => :off_t,
29
+ :filename => :string,
30
+ :extra => :pointer,
31
+ :extra_length => :ushort
32
+ })
33
+
34
+ def comp_type
35
+ self[:comp_type]
36
+ end
37
+
38
+ def data_offset
39
+ self[:data_offset]
40
+ end
41
+
42
+ def headers
43
+ self[:headers]
44
+ end
45
+
46
+ def length
47
+ self[:length]
48
+ end
49
+
50
+ def filename
51
+ self[:filename]
52
+ end
53
+
54
+ def extra
55
+ self[:extra]
56
+ end
57
+
58
+ def extra_length
59
+ self[:extra_length]
60
+ end
61
+ end
62
+
63
+ class MsKwajCompressor < FFI::Struct
64
+ layout({
65
+ :compress => callback([ :pointer, :string, :string, :off_t ], :int),
66
+ :set_param => callback([ :pointer, :int, :uint ], :int),
67
+ :set_filename => callback([ :pointer, :string ], :int),
68
+ :set_extra_data => callback([ :pointer, :pointer, :uint ], :int),
69
+ :last_error => callback([ :pointer ], :int)
70
+ })
71
+
72
+ def compress
73
+ self[:compress]
74
+ end
75
+
76
+ def set_param
77
+ self[:set_param]
78
+ end
79
+
80
+ def set_filename
81
+ self[:set_filename]
82
+ end
83
+
84
+ def set_extra_data
85
+ self[:set_extra_data]
86
+ end
87
+
88
+ def last_error
89
+ self[:last_error]
90
+ end
91
+ end
92
+
93
+ class MsKwajDecompressor < FFI::Struct
94
+ layout({
95
+ :open => callback([ :pointer, :string ], :pointer),
96
+ :close => callback([ :pointer, :pointer ], :void),
97
+ :extract => callback([ :pointer, :pointer, :string ], :int),
98
+ :decompress => callback([ :pointer, :string, :string ], :int),
99
+ :last_error => callback([ :pointer ], :int)
100
+ })
101
+
102
+ def open
103
+ self[:open]
104
+ end
105
+
106
+ def close
107
+ self[:close]
108
+ end
109
+
110
+ def extract
111
+ self[:extract]
112
+ end
113
+
114
+ def decompress
115
+ self[:decompress]
116
+ end
117
+
118
+ def last_error
119
+ self[:last_error]
120
+ end
121
+ end
122
+
123
+ end
124
+ end
@@ -0,0 +1,18 @@
1
+ module LibMsPack
2
+ module MsLit
3
+ module Constants
4
+ end
5
+
6
+ class MsLitCompressor < FFI::Struct
7
+ layout({
8
+ :dummy => :int
9
+ })
10
+ end
11
+
12
+ class MsLitDecompressor < FFI::Struct
13
+ layout({
14
+ :dummy => :int
15
+ })
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ module LibMsPack
2
+ module MsOab
3
+ class MsoabCompressor < FFI::Struct
4
+ layout({
5
+ :compress => callback([ :pointer, :string, :string ], :int),
6
+ :compress_incremental => callback([ :pointer, :string, :string, :string ], :int)
7
+ })
8
+
9
+ def compress
10
+ self[:compress]
11
+ end
12
+
13
+ def compress_incremental
14
+ self[:compress_incremental]
15
+ end
16
+
17
+ end
18
+
19
+ class MsoabDecompressor < FFI::Struct
20
+ layout({
21
+ :decompress => callback([ :pointer, :string, :string ], :int),
22
+ :decompress_incremental => callback([ :pointer, :string, :string, :string ], :int)
23
+ })
24
+
25
+ def decompress
26
+ self[:decompress]
27
+ end
28
+
29
+ def decompress_incremental
30
+ self[:decompress_incremental]
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,208 @@
1
+ module LibMsPack
2
+ module MsPack
3
+ module Constants
4
+ # Pass to #Version to get the overall library version.
5
+ MSPACK_VER_LIBRARY = 0
6
+ # Pass to #Version to get the MsPackSystem version.
7
+ MSPACK_VER_SYSTEM = 1
8
+ # Pass to #Version to get the MsCabDecompressor version.
9
+ MSPACK_VER_MSCABD = 2
10
+ # Pass to #Version to get the MsCabCompressor version.
11
+ MSPACK_VER_MSCABC = 3
12
+ # Pass to #Version to get the MsChmDecompressor version.
13
+ MSPACK_VER_MSCHMD = 4
14
+ # Pass to #Version to get the MsChmCompressor version.
15
+ MSPACK_VER_MSCHMC = 5
16
+ # Pass to #Version to get the MsLitDecompressor version.
17
+ MSPACK_VER_MSLITD = 6
18
+ # Pass to #Version to get the MsLitCompressor version.
19
+ MSPACK_VER_MSLITC = 7
20
+ # Pass to #Version to get the MsHlpDecompressor version.
21
+ MSPACK_VER_MSHLPD = 8
22
+ # Pass to #Version to get the MsHlpCompressor version.
23
+ MSPACK_VER_MSHLPC = 9
24
+ # Pass to #Version to get the MsSzddDecompressor version.
25
+ MSPACK_VER_MSSZDDD = 10
26
+ # Pass to #Version to get the MsSzddCompressor version.
27
+ MSPACK_VER_MSSZDDC = 11
28
+ # Pass to #Version to get the MsKwajDecompressor version.
29
+ MSPACK_VER_MSKWAJD = 12
30
+ # Pass to #Version to get the MsKwajCompressor version.
31
+ MSPACK_VER_MSKWAJC = 13
32
+ # Pass to #Version to get the MsOabDecompressor version.
33
+ MSPACK_VER_MSOABD = 14
34
+ # Pass to #Version to get the MsOabCompressor version.
35
+ MSPACK_VER_MSOABC = 15
36
+
37
+ # MsPackSystem#open mode: open existing file for reading
38
+ MSPACK_SYS_OPEN_READ = 0
39
+ # MsPackSystem#open mode: open new file for writing
40
+ MSPACK_SYS_OPEN_WRITE = 1
41
+ # MsPackSystem#open mode: open existing file for writing
42
+ MSPACK_SYS_OPEN_UPDATE = 2
43
+ # MsPackSystem#open mode: open existing file for writing
44
+ MSPACK_SYS_OPEN_APPEND = 3
45
+
46
+ # MsPackSystem#seek mode: seek relative to start of file
47
+ MSPACK_SYS_SEEK_START = 0
48
+ # MsPackSystem#seek mode: seek relative to current offset
49
+ MSPACK_SYS_SEEK_CUR = 1
50
+ # MsPackSystem#seek mode: seek relative to end of file
51
+ MSPACK_SYS_SEEK_END = 2
52
+
53
+ # Error code: no error.
54
+ MSPACK_ERR_OK = 0
55
+ # Error code: bad arguments to method.
56
+ MSPACK_ERR_ARGS = 1
57
+ # Error code: error opening file.
58
+ MSPACK_ERR_OPEN = 2
59
+ # Error code: error reading file.
60
+ MSPACK_ERR_READ = 3
61
+ # Error code: error writing file.
62
+ MSPACK_ERR_WRITE = 4
63
+ # Error code: seek error.
64
+ MSPACK_ERR_SEEK = 5
65
+ # Error code: out of memory.
66
+ MSPACK_ERR_NOMEMORY = 6
67
+ # Error code: bad "magic id" in file.
68
+ MSPACK_ERR_SIGNATURE = 7
69
+ # Error code: bad or corrupt file format.
70
+ MSPACK_ERR_DATAFORMAT = 8
71
+ # Error code: bad checksum or CRC.
72
+ MSPACK_ERR_CHECKSUM = 9
73
+ # Error code: error during compression.
74
+ MSPACK_ERR_CRUNCH = 10
75
+ # Error code: error during decompression.
76
+ MSPACK_ERR_DECRUNCH = 11
77
+ end
78
+
79
+ # A structure which represents an open file handle.
80
+ #
81
+ # The contents of this structure are determined by the implementation of the MsPackSystem#open method.
82
+ class MsPackFile < FFI::Struct
83
+ layout({
84
+ :file => :int,
85
+ :name => :string
86
+ })
87
+
88
+ def file=(file)
89
+ self[:file] = file
90
+ end
91
+
92
+ def file
93
+ self[:file]
94
+ end
95
+
96
+ def name
97
+ self[:name]
98
+ end
99
+ end
100
+
101
+ # A structure which abstracts file I/O and memory management.
102
+ #
103
+ # The library always uses the MsPackSystem structure for interaction with the file system and to allocate, free and copy all memory. It also uses it to send literal messages to the library user.
104
+ #
105
+ # When the library is compiled normally, passing nil to a compressor or decompressor constructor will result in a default MsPackSystem being used, where all methods are implemented with the standard C library. However, all constructors support being given a custom created MsPackSystem structure, with the library user's own methods. This allows for more abstract interaction, such as reading and writing files directly to memory, or from a network socket or pipe.
106
+ #
107
+ # Implementors of an MsPackSystem structure should read all documentation entries for every structure member, and write methods which conform to those standards.
108
+ class MsPackSystem < FFI::Struct
109
+
110
+ layout({
111
+ :open => callback([ MsPackSystem.ptr, :string, :int ], MsPackFile.ptr),
112
+ :close => callback([ MsPackFile.ptr ], :void),
113
+ :read => callback([ MsPackFile.ptr, :buffer_inout, :int ], :int),
114
+ :write => callback([ MsPackFile.ptr, :buffer_inout, :int ], :int),
115
+ :seek => callback([ MsPackFile.ptr, :off_t, :int ], :int),
116
+ :tell => callback([ MsPackFile.ptr ], :off_t),
117
+ :message => callback([ MsPackFile.ptr, :string, :varargs ], :void),
118
+ :alloc => callback([ MsPackFile.ptr, :size_t ], :pointer),
119
+ :free => callback([ :pointer ], :void),
120
+ :copy => callback([:buffer_in, :buffer_out, :size_t ], :void),
121
+ :null_ptr => :pointer
122
+ })
123
+
124
+ def open=(cb)
125
+ self[:open] = cb
126
+ end
127
+
128
+ def open
129
+ self[:open]
130
+ end
131
+
132
+ def close=(cb)
133
+ self[:close] = cb
134
+ end
135
+
136
+ def close
137
+ self[:close]
138
+ end
139
+
140
+ def read=(cb)
141
+ self[:read] = cb
142
+ end
143
+
144
+ def read
145
+ self[:read]
146
+ end
147
+
148
+ def write=(cb)
149
+ self[:write] = cb
150
+ end
151
+
152
+ def write
153
+ self[:write]
154
+ end
155
+
156
+ def seek=(cb)
157
+ self[:seek] = cb
158
+ end
159
+
160
+ def seek
161
+ self[:seek]
162
+ end
163
+
164
+ def tell=(cb)
165
+ self[:tell] = cb
166
+ end
167
+
168
+ def tell
169
+ self[:tell]
170
+ end
171
+
172
+ def message=(cb)
173
+ self[:message] = cb
174
+ end
175
+
176
+ def message
177
+ self[:message]
178
+ end
179
+
180
+ def alloc=(cb)
181
+ self[:alloc] = cb
182
+ end
183
+
184
+ def alloc
185
+ self[:alloc]
186
+ end
187
+
188
+ def free=(cb)
189
+ self[:free] = cb
190
+ end
191
+
192
+ def free
193
+ self[:free]
194
+ end
195
+
196
+ def copy=(cb)
197
+ self[:copy] = cb
198
+ end
199
+
200
+ def copy
201
+ self[:copy]
202
+ end
203
+
204
+ end
205
+
206
+ RubyPackSystem = MsPackSystem.new
207
+ end
208
+ end