libmspack 0.10.1 → 0.10.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +37 -0
- data/.gitignore +2 -0
- data/ext/Rakefile +1 -1
- data/ext/x86_64-linux/libmspack.so +0 -0
- data/ext/x86_64-windows/mspack.dll +0 -0
- data/lib/libmspack/version.rb +1 -1
- data/lib/libmspack.rb +1 -1
- data/libmspack.gemspec +1 -1
- metadata +6 -348
- data/.travis.yml +0 -5
- data/ext/i386-windows/libmspack.dll +0 -0
- data/ext/libmspack/doc/Doxyfile +0 -9
- data/ext/libmspack/doc/Makefile +0 -8
- data/ext/libmspack/doc/html/annotated.html +0 -104
- data/ext/libmspack/doc/html/bc_s.png +0 -0
- data/ext/libmspack/doc/html/bdwn.png +0 -0
- data/ext/libmspack/doc/html/classes.html +0 -85
- data/ext/libmspack/doc/html/closed.png +0 -0
- data/ext/libmspack/doc/html/dir_f4d90282fe865f947a460986b93b960a.html +0 -83
- data/ext/libmspack/doc/html/doc.png +0 -0
- data/ext/libmspack/doc/html/doxygen.css +0 -1596
- data/ext/libmspack/doc/html/doxygen.png +0 -0
- data/ext/libmspack/doc/html/dynsections.js +0 -97
- data/ext/libmspack/doc/html/files.html +0 -78
- data/ext/libmspack/doc/html/folderclosed.png +0 -0
- data/ext/libmspack/doc/html/folderopen.png +0 -0
- data/ext/libmspack/doc/html/functions.html +0 -454
- data/ext/libmspack/doc/html/functions_vars.html +0 -454
- data/ext/libmspack/doc/html/globals.html +0 -406
- data/ext/libmspack/doc/html/globals_defs.html +0 -316
- data/ext/libmspack/doc/html/globals_func.html +0 -161
- data/ext/libmspack/doc/html/graph_legend.html +0 -102
- data/ext/libmspack/doc/html/graph_legend.md5 +0 -1
- data/ext/libmspack/doc/html/graph_legend.png +0 -0
- data/ext/libmspack/doc/html/index.html +0 -167
- data/ext/libmspack/doc/html/jquery.js +0 -87
- data/ext/libmspack/doc/html/menu.js +0 -26
- data/ext/libmspack/doc/html/menudata.js +0 -56
- data/ext/libmspack/doc/html/mspack_8h.html +0 -2664
- data/ext/libmspack/doc/html/mspack_8h__incl.map +0 -2
- data/ext/libmspack/doc/html/mspack_8h__incl.md5 +0 -1
- data/ext/libmspack/doc/html/mspack_8h__incl.png +0 -0
- data/ext/libmspack/doc/html/mspack_8h_source.html +0 -238
- data/ext/libmspack/doc/html/nav_f.png +0 -0
- data/ext/libmspack/doc/html/nav_g.png +0 -0
- data/ext/libmspack/doc/html/nav_h.png +0 -0
- data/ext/libmspack/doc/html/open.png +0 -0
- data/ext/libmspack/doc/html/search/all_0.html +0 -26
- data/ext/libmspack/doc/html/search/all_0.js +0 -6
- data/ext/libmspack/doc/html/search/all_1.html +0 -26
- data/ext/libmspack/doc/html/search/all_1.js +0 -5
- data/ext/libmspack/doc/html/search/all_10.html +0 -26
- data/ext/libmspack/doc/html/search/all_10.js +0 -8
- data/ext/libmspack/doc/html/search/all_11.html +0 -26
- data/ext/libmspack/doc/html/search/all_11.js +0 -4
- data/ext/libmspack/doc/html/search/all_12.html +0 -26
- data/ext/libmspack/doc/html/search/all_12.js +0 -4
- data/ext/libmspack/doc/html/search/all_13.html +0 -26
- data/ext/libmspack/doc/html/search/all_13.js +0 -4
- data/ext/libmspack/doc/html/search/all_2.html +0 -26
- data/ext/libmspack/doc/html/search/all_2.js +0 -14
- data/ext/libmspack/doc/html/search/all_3.html +0 -26
- data/ext/libmspack/doc/html/search/all_3.js +0 -13
- data/ext/libmspack/doc/html/search/all_4.html +0 -26
- data/ext/libmspack/doc/html/search/all_4.js +0 -6
- data/ext/libmspack/doc/html/search/all_5.html +0 -26
- data/ext/libmspack/doc/html/search/all_5.js +0 -13
- data/ext/libmspack/doc/html/search/all_6.html +0 -26
- data/ext/libmspack/doc/html/search/all_6.js +0 -4
- data/ext/libmspack/doc/html/search/all_7.html +0 -26
- data/ext/libmspack/doc/html/search/all_7.js +0 -5
- data/ext/libmspack/doc/html/search/all_8.html +0 -26
- data/ext/libmspack/doc/html/search/all_8.js +0 -5
- data/ext/libmspack/doc/html/search/all_9.html +0 -26
- data/ext/libmspack/doc/html/search/all_9.js +0 -7
- data/ext/libmspack/doc/html/search/all_a.html +0 -26
- data/ext/libmspack/doc/html/search/all_a.js +0 -144
- data/ext/libmspack/doc/html/search/all_b.html +0 -26
- data/ext/libmspack/doc/html/search/all_b.js +0 -10
- data/ext/libmspack/doc/html/search/all_c.html +0 -26
- data/ext/libmspack/doc/html/search/all_c.js +0 -5
- data/ext/libmspack/doc/html/search/all_d.html +0 -26
- data/ext/libmspack/doc/html/search/all_d.js +0 -7
- data/ext/libmspack/doc/html/search/all_e.html +0 -26
- data/ext/libmspack/doc/html/search/all_e.js +0 -5
- data/ext/libmspack/doc/html/search/all_f.html +0 -26
- data/ext/libmspack/doc/html/search/all_f.js +0 -15
- data/ext/libmspack/doc/html/search/classes_0.html +0 -26
- data/ext/libmspack/doc/html/search/classes_0.js +0 -30
- data/ext/libmspack/doc/html/search/close.png +0 -0
- data/ext/libmspack/doc/html/search/defines_0.html +0 -26
- data/ext/libmspack/doc/html/search/defines_0.js +0 -84
- data/ext/libmspack/doc/html/search/files_0.html +0 -26
- data/ext/libmspack/doc/html/search/files_0.js +0 -4
- data/ext/libmspack/doc/html/search/functions_0.html +0 -26
- data/ext/libmspack/doc/html/search/functions_0.js +0 -33
- data/ext/libmspack/doc/html/search/mag_sel.png +0 -0
- data/ext/libmspack/doc/html/search/nomatches.html +0 -12
- data/ext/libmspack/doc/html/search/search.css +0 -271
- data/ext/libmspack/doc/html/search/search.js +0 -791
- data/ext/libmspack/doc/html/search/search_l.png +0 -0
- data/ext/libmspack/doc/html/search/search_m.png +0 -0
- data/ext/libmspack/doc/html/search/search_r.png +0 -0
- data/ext/libmspack/doc/html/search/searchdata.js +0 -30
- data/ext/libmspack/doc/html/search/variables_0.html +0 -26
- data/ext/libmspack/doc/html/search/variables_0.js +0 -6
- data/ext/libmspack/doc/html/search/variables_1.html +0 -26
- data/ext/libmspack/doc/html/search/variables_1.js +0 -5
- data/ext/libmspack/doc/html/search/variables_10.html +0 -26
- data/ext/libmspack/doc/html/search/variables_10.js +0 -8
- data/ext/libmspack/doc/html/search/variables_11.html +0 -26
- data/ext/libmspack/doc/html/search/variables_11.js +0 -4
- data/ext/libmspack/doc/html/search/variables_12.html +0 -26
- data/ext/libmspack/doc/html/search/variables_12.js +0 -4
- data/ext/libmspack/doc/html/search/variables_13.html +0 -26
- data/ext/libmspack/doc/html/search/variables_13.js +0 -4
- data/ext/libmspack/doc/html/search/variables_2.html +0 -26
- data/ext/libmspack/doc/html/search/variables_2.js +0 -14
- data/ext/libmspack/doc/html/search/variables_3.html +0 -26
- data/ext/libmspack/doc/html/search/variables_3.js +0 -13
- data/ext/libmspack/doc/html/search/variables_4.html +0 -26
- data/ext/libmspack/doc/html/search/variables_4.js +0 -6
- data/ext/libmspack/doc/html/search/variables_5.html +0 -26
- data/ext/libmspack/doc/html/search/variables_5.js +0 -13
- data/ext/libmspack/doc/html/search/variables_6.html +0 -26
- data/ext/libmspack/doc/html/search/variables_6.js +0 -4
- data/ext/libmspack/doc/html/search/variables_7.html +0 -26
- data/ext/libmspack/doc/html/search/variables_7.js +0 -5
- data/ext/libmspack/doc/html/search/variables_8.html +0 -26
- data/ext/libmspack/doc/html/search/variables_8.js +0 -5
- data/ext/libmspack/doc/html/search/variables_9.html +0 -26
- data/ext/libmspack/doc/html/search/variables_9.js +0 -7
- data/ext/libmspack/doc/html/search/variables_a.html +0 -26
- data/ext/libmspack/doc/html/search/variables_a.js +0 -5
- data/ext/libmspack/doc/html/search/variables_b.html +0 -26
- data/ext/libmspack/doc/html/search/variables_b.js +0 -10
- data/ext/libmspack/doc/html/search/variables_c.html +0 -26
- data/ext/libmspack/doc/html/search/variables_c.js +0 -5
- data/ext/libmspack/doc/html/search/variables_d.html +0 -26
- data/ext/libmspack/doc/html/search/variables_d.js +0 -7
- data/ext/libmspack/doc/html/search/variables_e.html +0 -26
- data/ext/libmspack/doc/html/search/variables_e.js +0 -5
- data/ext/libmspack/doc/html/search/variables_f.html +0 -26
- data/ext/libmspack/doc/html/search/variables_f.js +0 -15
- data/ext/libmspack/doc/html/splitbar.png +0 -0
- data/ext/libmspack/doc/html/structmscab__compressor.html +0 -106
- data/ext/libmspack/doc/html/structmscab__decompressor.html +0 -361
- data/ext/libmspack/doc/html/structmscab__decompressor__coll__graph.map +0 -5
- data/ext/libmspack/doc/html/structmscab__decompressor__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmscab__decompressor__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmscabd__cabinet.html +0 -418
- data/ext/libmspack/doc/html/structmscabd__cabinet__coll__graph.map +0 -4
- data/ext/libmspack/doc/html/structmscabd__cabinet__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmscabd__cabinet__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmscabd__file.html +0 -337
- data/ext/libmspack/doc/html/structmscabd__file__coll__graph.map +0 -3
- data/ext/libmspack/doc/html/structmscabd__file__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmscabd__file__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmscabd__folder.html +0 -159
- data/ext/libmspack/doc/html/structmscabd__folder__coll__graph.map +0 -2
- data/ext/libmspack/doc/html/structmscabd__folder__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmscabd__folder__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmschm__compressor.html +0 -226
- data/ext/libmspack/doc/html/structmschm__decompressor.html +0 -299
- data/ext/libmspack/doc/html/structmschm__decompressor__coll__graph.map +0 -7
- data/ext/libmspack/doc/html/structmschm__decompressor__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmschm__decompressor__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmschmc__file.html +0 -169
- data/ext/libmspack/doc/html/structmschmd__file.html +0 -198
- data/ext/libmspack/doc/html/structmschmd__file__coll__graph.map +0 -6
- data/ext/libmspack/doc/html/structmschmd__file__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmschmd__file__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmschmd__header.html +0 -458
- data/ext/libmspack/doc/html/structmschmd__header__coll__graph.map +0 -6
- data/ext/libmspack/doc/html/structmschmd__header__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmschmd__header__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmschmd__sec__mscompressed.html +0 -198
- data/ext/libmspack/doc/html/structmschmd__sec__mscompressed__coll__graph.map +0 -6
- data/ext/libmspack/doc/html/structmschmd__sec__mscompressed__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmschmd__sec__mscompressed__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmschmd__sec__uncompressed.html +0 -140
- data/ext/libmspack/doc/html/structmschmd__sec__uncompressed__coll__graph.map +0 -6
- data/ext/libmspack/doc/html/structmschmd__sec__uncompressed__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmschmd__sec__uncompressed__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmschmd__section.html +0 -142
- data/ext/libmspack/doc/html/structmschmd__section__coll__graph.map +0 -6
- data/ext/libmspack/doc/html/structmschmd__section__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmschmd__section__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmshlp__compressor.html +0 -106
- data/ext/libmspack/doc/html/structmshlp__decompressor.html +0 -106
- data/ext/libmspack/doc/html/structmskwaj__compressor.html +0 -243
- data/ext/libmspack/doc/html/structmskwaj__decompressor.html +0 -245
- data/ext/libmspack/doc/html/structmskwaj__decompressor__coll__graph.map +0 -3
- data/ext/libmspack/doc/html/structmskwaj__decompressor__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmskwaj__decompressor__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmskwajd__header.html +0 -225
- data/ext/libmspack/doc/html/structmslit__compressor.html +0 -106
- data/ext/libmspack/doc/html/structmslit__decompressor.html +0 -106
- data/ext/libmspack/doc/html/structmsoab__compressor.html +0 -151
- data/ext/libmspack/doc/html/structmsoab__decompressor.html +0 -184
- data/ext/libmspack/doc/html/structmspack__file.html +0 -107
- data/ext/libmspack/doc/html/structmspack__system.html +0 -404
- data/ext/libmspack/doc/html/structmspack__system__coll__graph.map +0 -3
- data/ext/libmspack/doc/html/structmspack__system__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmspack__system__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmsszdd__compressor.html +0 -186
- data/ext/libmspack/doc/html/structmsszdd__decompressor.html +0 -246
- data/ext/libmspack/doc/html/structmsszdd__decompressor__coll__graph.map +0 -3
- data/ext/libmspack/doc/html/structmsszdd__decompressor__coll__graph.md5 +0 -1
- data/ext/libmspack/doc/html/structmsszdd__decompressor__coll__graph.png +0 -0
- data/ext/libmspack/doc/html/structmsszddd__header.html +0 -149
- data/ext/libmspack/doc/html/sync_off.png +0 -0
- data/ext/libmspack/doc/html/sync_on.png +0 -0
- data/ext/libmspack/doc/html/szdd_kwaj_format.html +0 -331
- data/ext/libmspack/doc/html/tab_a.png +0 -0
- data/ext/libmspack/doc/html/tab_b.png +0 -0
- data/ext/libmspack/doc/html/tab_h.png +0 -0
- data/ext/libmspack/doc/html/tab_s.png +0 -0
- data/ext/libmspack/doc/html/tabs.css +0 -1
- data/ext/libmspack/doc/szdd_kwaj_format.html +0 -331
- data/ext/libmspack/examples/cabd_memory.c +0 -179
- data/ext/libmspack/examples/cabrip.c +0 -85
- data/ext/libmspack/examples/chmextract.c +0 -121
- data/ext/libmspack/examples/msexpand.c +0 -48
- data/ext/libmspack/examples/multifh.c +0 -435
- data/ext/libmspack/examples/oabextract.c +0 -41
- data/ext/libmspack/test/cabd_md5.c +0 -161
- data/ext/libmspack/test/cabd_test.c +0 -468
- data/ext/libmspack/test/chmd_find.c +0 -95
- data/ext/libmspack/test/chmd_md5.c +0 -67
- data/ext/libmspack/test/chmd_order.c +0 -144
- data/ext/libmspack/test/chmd_test.c +0 -134
- data/ext/libmspack/test/chminfo.c +0 -285
- data/ext/libmspack/test/error.h +0 -22
- data/ext/libmspack/test/kwajd_test.c +0 -119
- data/ext/libmspack/test/md5.c +0 -450
- data/ext/libmspack/test/md5.h +0 -166
- data/ext/libmspack/test/md5_fh.h +0 -123
- data/ext/libmspack/test/test_files/cabd/1.pl +0 -84
- data/ext/libmspack/test/test_files/cabd/2.pl +0 -75
- data/ext/libmspack/test/test_files/cabd/bad_folderindex.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/bad_nofiles.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/bad_nofolders.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/bad_signature.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/cve-2010-2800-mszip-infinite-loop.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/cve-2014-9556-qtm-infinite-loop.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/cve-2014-9732-folders-segfault.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/cve-2015-4470-mszip-over-read.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/cve-2015-4471-lzx-under-read.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/filename-read-violation-1.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/filename-read-violation-2.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/filename-read-violation-3.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/filename-read-violation-4.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/lzx-main-tree-no-lengths.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/lzx-premature-matches.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/mszip_lzx_qtm.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/multi_basic_pt1.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/multi_basic_pt2.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/multi_basic_pt3.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/multi_basic_pt4.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/multi_basic_pt5.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/normal_255c_filename.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/normal_2files_1folder.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/normal_2files_2folders.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_nodata.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_nofiles.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_nofolder.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_shortextheader.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_shortfile1.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_shortfile2.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_shortfolder.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_shortheader.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_nofname.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_noninfo.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_nonname.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_nopinfo.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_nopname.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_shortfname.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_shortninfo.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_shortnname.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_shortpinfo.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/partial_str_shortpname.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/qtm-max-size-block.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_---.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_--D.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_-F-.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_-FD.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_H--.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_H-D.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_HF-.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/reserve_HFD.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/search_basic.cab +0 -0
- data/ext/libmspack/test/test_files/cabd/search_tricky1.cab +0 -0
- data/ext/libmspack/test/test_files/chmd/blank-filenames.chm +0 -0
- data/ext/libmspack/test/test_files/chmd/cve-2015-4467-reset-interval-zero.chm.xor +0 -0
- data/ext/libmspack/test/test_files/chmd/cve-2015-4468-namelen-bounds.chm +0 -0
- data/ext/libmspack/test/test_files/chmd/cve-2015-4469-namelen-bounds.chm +0 -0
- data/ext/libmspack/test/test_files/chmd/cve-2015-4472-namelen-bounds.chm +0 -0
- data/ext/libmspack/test/test_files/chmd/cve-2017-6419-lzx-negative-spaninfo.chm +0 -0
- data/ext/libmspack/test/test_files/chmd/short-system-filenames.chm +0 -0
- data/ext/libmspack/test/test_files/kwajd/f00.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f01.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f02.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f03.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f04.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f10.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f11.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f12.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f13.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f14.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f20.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f21.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f22.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f23.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f24.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f30.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f31.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f32.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f33.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f34.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f40.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f41.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f42.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f43.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f44.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f50.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f51.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f52.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f53.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f54.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f60.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f61.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f62.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f63.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f64.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f70.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f71.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f72.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f73.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f74.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f80.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f81.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f82.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f83.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f84.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f90.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f91.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f92.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f93.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/f94.kwj +0 -0
- data/ext/libmspack/test/test_files/kwajd/make.pl +0 -17
- data/ext/x86_64-linux/liblibmspack.so +0 -0
- data/ext/x86_64-windows/libmspack.dll +0 -0
- data/ext/x86_64-windows-msys/libmspack.dll +0 -0
@@ -1,331 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="eng">
|
5
|
-
<head>
|
6
|
-
<style type="text/css">
|
7
|
-
dt {
|
8
|
-
font-weight:bold;
|
9
|
-
}
|
10
|
-
pre {
|
11
|
-
background-color:#F9F9F9;
|
12
|
-
border:1px dashed #2F6FAB;
|
13
|
-
color:black;
|
14
|
-
padding:1em;
|
15
|
-
}
|
16
|
-
table.wikitable {
|
17
|
-
background:none repeat scroll 0 0 #F9F9F9;
|
18
|
-
border:1px solid #AAAAAA;
|
19
|
-
border-collapse:collapse;
|
20
|
-
margin:1em 1em 1em 0;
|
21
|
-
}
|
22
|
-
.wikitable th, .wikitable td {
|
23
|
-
border:1px solid #AAAAAA;
|
24
|
-
padding:0.2em;
|
25
|
-
}
|
26
|
-
.wikitable th {
|
27
|
-
background:none repeat scroll 0 0 #F2F2F2;
|
28
|
-
text-align:center;
|
29
|
-
}
|
30
|
-
.wikitable caption {
|
31
|
-
font-weight:bold;
|
32
|
-
}
|
33
|
-
.c.source-c .de1, .c.source-c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
|
34
|
-
.c.source-c {font-family:monospace;}
|
35
|
-
.c.source-c .imp {font-weight: bold; color: red;}
|
36
|
-
.c.source-c li, .c.source-c .li1 {font-weight: normal; vertical-align:top;}
|
37
|
-
.c.source-c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
|
38
|
-
.c.source-c .li2 {font-weight: bold; vertical-align:top;}
|
39
|
-
.c.source-c .kw1 {color: #b1b100;}
|
40
|
-
.c.source-c .kw2 {color: #000000; font-weight: bold;}
|
41
|
-
.c.source-c .kw3 {color: #000066;}
|
42
|
-
.c.source-c .kw4 {color: #993333;}
|
43
|
-
.c.source-c .co1 {color: #666666; font-style: italic;}
|
44
|
-
.c.source-c .co2 {color: #339933;}
|
45
|
-
.c.source-c .coMULTI {color: #808080; font-style: italic;}
|
46
|
-
.c.source-c .es0 {color: #000099; font-weight: bold;}
|
47
|
-
.c.source-c .es1 {color: #000099; font-weight: bold;}
|
48
|
-
.c.source-c .es2 {color: #660099; font-weight: bold;}
|
49
|
-
.c.source-c .es3 {color: #660099; font-weight: bold;}
|
50
|
-
.c.source-c .es4 {color: #660099; font-weight: bold;}
|
51
|
-
.c.source-c .es5 {color: #006699; font-weight: bold;}
|
52
|
-
.c.source-c .br0 {color: #009900;}
|
53
|
-
.c.source-c .sy0 {color: #339933;}
|
54
|
-
.c.source-c .st0 {color: #ff0000;}
|
55
|
-
.c.source-c .nu0 {color: #0000dd;}
|
56
|
-
.c.source-c .nu6 {color: #208080;}
|
57
|
-
.c.source-c .nu8 {color: #208080;}
|
58
|
-
.c.source-c .nu12 {color: #208080;}
|
59
|
-
.c.source-c .nu16 {color:#800080;}
|
60
|
-
.c.source-c .nu17 {color:#800080;}
|
61
|
-
.c.source-c .nu18 {color:#800080;}
|
62
|
-
.c.source-c .nu19 {color:#800080;}
|
63
|
-
.c.source-c .me1 {color: #202020;}
|
64
|
-
.c.source-c .me2 {color: #202020;}
|
65
|
-
.c.source-c .ln-xtra, .c.source-c li.ln-xtra, .c.source-c div.ln-xtra {background-color: #ffc;}
|
66
|
-
.c.source-c span.xtra { display:block; }
|
67
|
-
</style>
|
68
|
-
<meta name="author" content="Stuart Caie" />
|
69
|
-
<title>COMPRESS.EXE file formats: SZDD and KWAJ</title>
|
70
|
-
</head>
|
71
|
-
<body>
|
72
|
-
<h1>COMPRESS.EXE file formats: SZDD and KWAJ</h1>
|
73
|
-
|
74
|
-
<p>This document describes the <b>SZDD</b> and <b>KWAJ</b> file
|
75
|
-
formats which are implemented in the MS-DOS commands
|
76
|
-
<tt>COMPRESS.EXE</tt> and <tt>EXPAND.EXE</tt>.</p>
|
77
|
-
|
78
|
-
<p>Both formats compress a single file to another single file,
|
79
|
-
replacing the last character in the filename with an underscore or
|
80
|
-
dollar character, e.g. <tt>README.TXT</tt> becomes <tt>README.TX_</tt>
|
81
|
-
or <tt>README.TX$</tt>.</p>
|
82
|
-
|
83
|
-
<a name="SZDD_file_format"><h2>SZDD file format</h2></a>
|
84
|
-
|
85
|
-
<p>An SZDD file begins with this fixed header:</p>
|
86
|
-
|
87
|
-
<table class="wikitable">
|
88
|
-
<caption>SZDD header format</caption>
|
89
|
-
<tr><th>Offset</th><th>Length</th><th>Description</th></tr>
|
90
|
-
<tr><td>0x00</td><td>8</td><td>"SZDD" signature: 0x53,0x5A,0x44,0x44,0x88,0xF0,0x27,0x33</td></tr>
|
91
|
-
<tr><td>0x08</td><td>1</td><td>Compression mode: only "A" (0x41) is valid here</td></tr>
|
92
|
-
<tr><td>0x09</td><td>1</td><td>The character missing from the end of the filename (0=unknown)</td></tr>
|
93
|
-
<tr><td>0x0A</td><td>4</td><td>The integer length of the file when unpacked</td></tr>
|
94
|
-
</table>
|
95
|
-
|
96
|
-
<p>The header is immediately followed by the compressed data. The
|
97
|
-
following pseudocode explains how to unpack this data; it's a form of
|
98
|
-
the LZSS algorithm.</p>
|
99
|
-
|
100
|
-
<table class="wikitable">
|
101
|
-
<caption>SZDD decompression pseudocode</caption>
|
102
|
-
<tr><td>
|
103
|
-
<div dir="ltr" style="text-align: left;"><div class="c source-c" style="font-family:monospace;"><pre class="de1"><span class="kw4">char</span> window<span class="br0">[</span><span class="nu0">4096</span><span class="br0">]</span><span class="sy0">;</span>
|
104
|
-
<span class="kw4">int</span> pos <span class="sy0">=</span> <span class="nu0">4096</span> <span class="sy0">-</span> <span class="nu0">16</span><span class="sy0">;</span>
|
105
|
-
memset<span class="br0">(</span>window<span class="sy0">,</span> <span class="nu12">0x20</span><span class="sy0">,</span> <span class="nu0">4096</span><span class="br0">)</span><span class="sy0">;</span> <span class="coMULTI">/* window initially full of spaces */</span>
|
106
|
-
<span class="kw1">for</span> <span class="br0">(</span><span class="sy0">;;</span><span class="br0">)</span> <span class="br0">{</span>
|
107
|
-
<span class="kw4">int</span> control <span class="sy0">=</span> GETBYTE<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
|
108
|
-
<span class="kw1">if</span> <span class="br0">(</span>control <span class="sy0">==</span> EOF<span class="br0">)</span> <span class="kw2">break</span><span class="sy0">;</span> <span class="coMULTI">/* exit if no more to read */</span>
|
109
|
-
<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> cbit <span class="sy0">=</span> <span class="nu12">0x01</span><span class="sy0">;</span> cbit <span class="sy0">&</span> <span class="nu12">0xFF</span><span class="sy0">;</span> cbit <span class="sy0"><<=</span> <span class="nu0">1</span><span class="br0">)</span> <span class="br0">{</span>
|
110
|
-
<span class="kw1">if</span> <span class="br0">(</span>control <span class="sy0">&</span> cbit<span class="br0">)</span> <span class="br0">{</span>
|
111
|
-
<span class="coMULTI">/* literal */</span>
|
112
|
-
PUTBYTE<span class="br0">(</span>window<span class="br0">[</span>pos<span class="sy0">++</span><span class="br0">]</span> <span class="sy0">=</span> GETBYTE<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
|
113
|
-
<span class="br0">}</span>
|
114
|
-
<span class="kw1">else</span> <span class="br0">{</span>
|
115
|
-
<span class="coMULTI">/* match */</span>
|
116
|
-
<span class="kw4">int</span> matchpos <span class="sy0">=</span> GETBYTE<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
|
117
|
-
<span class="kw4">int</span> matchlen <span class="sy0">=</span> GETBYTE<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
|
118
|
-
matchpos <span class="sy0">|=</span> <span class="br0">(</span>matchlen <span class="sy0">&</span> <span class="nu12">0xF0</span><span class="br0">)</span> <span class="sy0"><<</span> <span class="nu0">4</span><span class="sy0">;</span>
|
119
|
-
matchlen <span class="sy0">=</span> <span class="br0">(</span>matchlen <span class="sy0">&</span> <span class="nu12">0x0F</span><span class="br0">)</span> <span class="sy0">+</span> <span class="nu0">3</span><span class="sy0">;</span>
|
120
|
-
<span class="kw1">while</span> <span class="br0">(</span>matchlen<span class="sy0">--</span><span class="br0">)</span> <span class="br0">{</span>
|
121
|
-
PUTBYTE<span class="br0">(</span>window<span class="br0">[</span>pos<span class="sy0">++</span><span class="br0">]</span> <span class="sy0">=</span> window<span class="br0">[</span>matchpos<span class="sy0">++</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span>
|
122
|
-
pos <span class="sy0">&=</span> <span class="nu0">4095</span><span class="sy0">;</span> matchpos <span class="sy0">&=</span> <span class="nu0">4095</span><span class="sy0">;</span>
|
123
|
-
<span class="br0">}</span>
|
124
|
-
<span class="br0">}</span>
|
125
|
-
<span class="br0">}</span>
|
126
|
-
<span class="br0">}</span></pre></div></div>
|
127
|
-
</td></tr></table>
|
128
|
-
|
129
|
-
<p>There is also a variant SZDD format seen in the installation
|
130
|
-
package for QBasic 4.5, so I call it the QBasic variant. It has a
|
131
|
-
different header and the <tt>pos</tt> variable in the pseudocode above
|
132
|
-
is set to <tt>4096-18</tt> instead of <tt>4096-16</tt>.</p>
|
133
|
-
|
134
|
-
<table class="wikitable">
|
135
|
-
<caption>QBasic SZDD variant header format</caption>
|
136
|
-
<tr><th>Offset</th><th>Length</th><th>Description</th></tr>
|
137
|
-
<tr><td>0x00</td><td>8</td><td>"SZ" signature: 0x53,0x5A,0x20,0x88,0xF0,0x27,0x33,0xD1</td></tr>
|
138
|
-
<tr><td>0x08</td><td>4</td><td>The integer length of the file when unpacked</td></tr></table>
|
139
|
-
|
140
|
-
<a name="KWAJ_file_format"><h2>KWAJ file format</h2></a>
|
141
|
-
|
142
|
-
<p>A KWAJ file begins with this fixed header:</p>
|
143
|
-
|
144
|
-
<table class="wikitable">
|
145
|
-
<caption>KWAJ header format</caption>
|
146
|
-
<tr><th>Offset</th><th>Length</th><th>Description</th></tr>
|
147
|
-
<tr><td>0x00</td><td>8</td><td>"KWAJ" signature: 0x4B,0x57,0x41,0x4A,0x88,0xF0,0x27,0xD1</td></tr>
|
148
|
-
<tr><td>0x08</td><td>2</td><td>compression method (0-4)</td></tr>
|
149
|
-
<tr><td>0x0A</td><td>2</td><td>file offset of compressed data</td></tr>
|
150
|
-
<tr><td>0x0C</td><td>2</td><td>header flags to mark header extensions</td></tr>
|
151
|
-
</table>
|
152
|
-
|
153
|
-
<a name="Compression_methods"><h3>Compression methods</h3></a>
|
154
|
-
|
155
|
-
<p>The "compression method" field indicates the type of data
|
156
|
-
compression used:</p>
|
157
|
-
|
158
|
-
<ol start="0">
|
159
|
-
<li>No compression</li>
|
160
|
-
<li>No compression, data is XORed with byte 0xFF</li>
|
161
|
-
<li>The same compression method as regular SZDD</li>
|
162
|
-
<li>LZ + Huffman "Jeff Johnson" compression</li>
|
163
|
-
<li>MS-ZIP</li>
|
164
|
-
</ol>
|
165
|
-
|
166
|
-
<a name="Header_extensions"><h3>Header extensions</h3></a>
|
167
|
-
|
168
|
-
<p>Header extensions immediately follow the header.</p>
|
169
|
-
|
170
|
-
<p>If you don't care about the header extensions, use the file offset
|
171
|
-
to skip to the compressed data.</p>
|
172
|
-
|
173
|
-
<p>The header extensions appear in this order:</p>
|
174
|
-
|
175
|
-
<dl>
|
176
|
-
<dt>When header flags bit 0 is set</dt><dd>4 bytes: decompressed length of file</dd>
|
177
|
-
<dt>When header flags bit 1 is set</dt><dd>2 bytes: unknown purpose</dd>
|
178
|
-
<dt>When header flags bit 2 is set</dt><dd>2 bytes: length of data, followed by that many bytes of (unknown purpose) data</dd>
|
179
|
-
<dt>When header flags bit 3 is set</dt><dd>1-9 bytes: null-terminated string with max length 8: file name</dd>
|
180
|
-
<dt>When header flags bit 4 is set</dt><dd>1-4 bytes: null-terminated string with max length 3: file extension</dd>
|
181
|
-
<dt>When header flags bit 5 is set</dt><dd>2 bytes: length of data, followed by that many bytes of (arbitrary text) data</dd>
|
182
|
-
</dl>
|
183
|
-
|
184
|
-
<a name="KWAJ_compression_method_3"><h3>KWAJ compression method 3</h3></a>
|
185
|
-
|
186
|
-
<p>Compression method 3 is unique to the KWAJ format. It's an
|
187
|
-
LZ+Huffman algorithm created by Jeff Johnson.</p>
|
188
|
-
|
189
|
-
<p>Bits are always read from MSB to LSB, one byte at a time.</p>
|
190
|
-
|
191
|
-
<p>There are three parts:</p>
|
192
|
-
|
193
|
-
<ol>
|
194
|
-
<li>The data starts off with 6 nybbles; 4 bits each. Each nybble is
|
195
|
-
between 0-3 and is the encoding type of the 5 huffman length lists to
|
196
|
-
follow. The 6th nybble is just padding.</li>
|
197
|
-
<li>Then follow 5 huffman code length lists.</li>
|
198
|
-
<li>Then follows the compressed data, which is a mix of huffman
|
199
|
-
symbols and raw bits.</li>
|
200
|
-
</ol>
|
201
|
-
|
202
|
-
<a name="Huffman_code_length_lists"><h4>Huffman code length lists</h4></a>
|
203
|
-
|
204
|
-
<p>KWAJ uses 5 huffman trees. They always have the same number of
|
205
|
-
symbols in them. They are, in order:</p>
|
206
|
-
|
207
|
-
<ol>
|
208
|
-
<li>16 symbol tree (0-15) to store match run lengths (MATCHLEN)</li>
|
209
|
-
<li>16 symbol tree (0-15) to store match run lengths immediately following a short literal run (MATCHLEN2)</li>
|
210
|
-
<li>32 symbol tree (0-31) to store literal run lengths (LITLEN)</li>
|
211
|
-
<li>64 symbol tree (0-63) to store the upper 6 bits of match distances (OFFSET)</li>
|
212
|
-
<li>256 symbol tree (0-255) to store literals (LITERAL)</li>
|
213
|
-
</ol>
|
214
|
-
|
215
|
-
<p>Canonical huffman codes are used, which means you simply need to
|
216
|
-
know how many symbols in each huffman tree (given above), and how long
|
217
|
-
each huffman symbol is</p>
|
218
|
-
|
219
|
-
<p>How the symbol lengths are encoded depends on the encoding type, as
|
220
|
-
given by the 6 nybbles at the start of the compressed data.</p>
|
221
|
-
|
222
|
-
<p>Symbol lengths are read in ascending order, and the number of
|
223
|
-
symbols to read is implied by which tree you're defining.</p>
|
224
|
-
|
225
|
-
<dl>
|
226
|
-
<dt>Huffman code length list, encoding type 0</dt>
|
227
|
-
<dd>All symbol have the same length, implied by the number of symbols in the tree:
|
228
|
-
<ul>
|
229
|
-
<li>16 symbols -> all symbols are length 4</li>
|
230
|
-
<li>32 symbols -> all symbols are length 5</li>
|
231
|
-
<li>64 symbols -> all symbols are length 6</li>
|
232
|
-
<li>256 symbols -> all symbols are length 8</li>
|
233
|
-
</ul>
|
234
|
-
</dd>
|
235
|
-
<dd>You don't need to read anything.</dd>
|
236
|
-
</dl>
|
237
|
-
|
238
|
-
<dl>
|
239
|
-
<dt>Huffman code length list, encoding type 1</dt>
|
240
|
-
<dd>A run-length encoding is used:
|
241
|
-
<ul>
|
242
|
-
<li>read 4 bits for the first symbol length (0-15)</li>
|
243
|
-
<li>LOOP:
|
244
|
-
<ul>
|
245
|
-
<li>read 1 bit == 0 if symbol length is the same as the previous, OTHERWISE:</li>
|
246
|
-
<li>read 1 bit == 0 if symbol length is previous + 1, OTHERWISE:</li>
|
247
|
-
<li>read 4 bits for symbol length (0-15)</li>
|
248
|
-
</ul>
|
249
|
-
</li>
|
250
|
-
</ul>
|
251
|
-
</dd>
|
252
|
-
</dl>
|
253
|
-
|
254
|
-
<dl>
|
255
|
-
<dt>Huffman code length list, encoding type 2</dt>
|
256
|
-
<dd>Another run-length encoding is used:
|
257
|
-
<ul>
|
258
|
-
<li>read 4 bits for the first symbol length (0-15)</li>
|
259
|
-
<li>LOOP:
|
260
|
-
<ul>
|
261
|
-
<li> read 2 bits as selector (0-3):
|
262
|
-
<ul>
|
263
|
-
<li> selector == 3: read 4 bits for symbol length, OTHERWISE:</li>
|
264
|
-
<li> symbol length is previous symbol + (selector-1), i.e. -1, 0 or +1</li>
|
265
|
-
</ul>
|
266
|
-
</li>
|
267
|
-
</ul>
|
268
|
-
</li>
|
269
|
-
</ul>
|
270
|
-
</dd>
|
271
|
-
</dl>
|
272
|
-
|
273
|
-
<dl>
|
274
|
-
<dt>Huffman code length list, encoding type 3</dt>
|
275
|
-
<dd>There is no compression. Read 4 bits per symbol (0-15).</dd>
|
276
|
-
</dl>
|
277
|
-
|
278
|
-
<a name="Compressed_data"><h4>Compressed data</h4></a>
|
279
|
-
|
280
|
-
<p>At this point, the compressed data begins.</p>
|
281
|
-
|
282
|
-
<p>We have a 4096 byte ring buffer, initially filled with byte 0x20
|
283
|
-
(ASCII space). Unlike the SZDD format, the starting position in the
|
284
|
-
buffer is irrelevant, as match positions are stored relative to the
|
285
|
-
current position in the window, not as absolute positions in the
|
286
|
-
window.</p>
|
287
|
-
|
288
|
-
<p>Pseudo-code:</p>
|
289
|
-
<pre>
|
290
|
-
ring buffer position = 4096-17
|
291
|
-
selected table = MATCHLEN
|
292
|
-
LOOP:
|
293
|
-
code = read huffman code using selected table (MATCHLEN or MATCHLEN2)
|
294
|
-
if EOF reached, exit loop
|
295
|
-
if code > 0, this is a match:
|
296
|
-
match length = code + 2
|
297
|
-
x = read huffman code using OFFSET table
|
298
|
-
y = read 6 bits
|
299
|
-
match offset = current ring buffer position - (x<<6 | y)
|
300
|
-
copy match as output and into the ring buffer
|
301
|
-
selected table = MATCHLEN
|
302
|
-
if code == 0, this is a run of literals:
|
303
|
-
x = read huffman code using LITLEN table
|
304
|
-
if x != 31, selected table = MATCHLEN2
|
305
|
-
read {x+1} literals using LITERAL huffman table, copy as output and into the ring buffer
|
306
|
-
</pre>
|
307
|
-
|
308
|
-
<a name="MSZIP"><h2>MS-ZIP</h2></a>
|
309
|
-
|
310
|
-
KWAJ type 4 compression is called MS-ZIP, because it is almost
|
311
|
-
identical to the MS-ZIP compression found in Microsoft Cabinet files.
|
312
|
-
|
313
|
-
Each 32768 bytes of data is compressed independently using Phil
|
314
|
-
Katz's DEFLATE algorithm. However, the history window is shared
|
315
|
-
between blocks, so they must be unpacked in order.
|
316
|
-
The format of each block is as follows:
|
317
|
-
|
318
|
-
<table class="wikitable">
|
319
|
-
<caption>KWAJ MS-ZIP block format</caption>
|
320
|
-
<tr><th>Offset</th><th>Length</th><th>Description</th></tr>
|
321
|
-
<tr><td>0</td><td>2</td><td>Compressed length of this block (n).
|
322
|
-
Stored in Intel byte order.
|
323
|
-
Doesn't include these two bytes.</td></tr>
|
324
|
-
<tr><td>2</td><td>2</td><td>"CK" in ASCII (0x43, 0x4B)</td></tr>
|
325
|
-
<tr><td>4</td><td>n-2</td><td>Data compressed in DEFLATE format</td></tr>
|
326
|
-
</table>
|
327
|
-
|
328
|
-
The final block will unpack to 1-32768 bytes. It will be followed by two
|
329
|
-
zero bytes.
|
330
|
-
|
331
|
-
</body></html>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:transparent}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
|