From 6a9357b13d7ea6bd7d77dbfc6587af9028caa401 Mon Sep 17 00:00:00 2001 From: click Date: Sat, 5 Jun 2010 23:00:30 +0200 Subject: [PATCH] Move contrib/libmpq into dep as an external dependency + remove extra libmpq-source found in map-extractor --HG-- branch : trunk rename : contrib/libmpq/AUTHORS => dep/libmpq/AUTHORS rename : contrib/libmpq/COPYING => dep/libmpq/COPYING rename : contrib/libmpq/FAQ => dep/libmpq/FAQ rename : contrib/libmpq/Makefile.am => dep/libmpq/Makefile.am rename : contrib/libmpq/NEWS => dep/libmpq/NEWS rename : contrib/libmpq/README => dep/libmpq/README rename : contrib/libmpq/THANKS => dep/libmpq/THANKS rename : contrib/libmpq/TODO => dep/libmpq/TODO rename : contrib/libmpq/autogen.sh => dep/libmpq/autogen.sh rename : contrib/libmpq/bindings/Makefile.am => dep/libmpq/bindings/Makefile.am rename : contrib/libmpq/bindings/d/Makefile.am => dep/libmpq/bindings/d/Makefile.am rename : contrib/libmpq/bindings/d/dsss.conf => dep/libmpq/bindings/d/dsss.conf rename : contrib/libmpq/bindings/d/mpq.d => dep/libmpq/bindings/d/mpq.d rename : contrib/libmpq/bindings/python/Makefile.am => dep/libmpq/bindings/python/Makefile.am rename : contrib/libmpq/bindings/python/mpq-info => dep/libmpq/bindings/python/mpq-info rename : contrib/libmpq/bindings/python/mpq.py => dep/libmpq/bindings/python/mpq.py rename : contrib/libmpq/configure.ac => dep/libmpq/configure.ac rename : contrib/libmpq/debian/changelog => dep/libmpq/debian/changelog rename : contrib/libmpq/debian/compat => dep/libmpq/debian/compat rename : contrib/libmpq/debian/control => dep/libmpq/debian/control rename : contrib/libmpq/debian/copyright => dep/libmpq/debian/copyright rename : contrib/libmpq/debian/libmpq-dev.dirs => dep/libmpq/debian/libmpq-dev.dirs rename : contrib/libmpq/debian/libmpq-dev.install => dep/libmpq/debian/libmpq-dev.install rename : contrib/libmpq/debian/libmpq0.dirs => dep/libmpq/debian/libmpq0.dirs rename : contrib/libmpq/debian/libmpq0.docs => dep/libmpq/debian/libmpq0.docs rename : contrib/libmpq/debian/libmpq0.install => dep/libmpq/debian/libmpq0.install rename : contrib/libmpq/debian/python-mpq.install => dep/libmpq/debian/python-mpq.install rename : contrib/libmpq/debian/rules => dep/libmpq/debian/rules rename : contrib/libmpq/doc/Makefile.am => dep/libmpq/doc/Makefile.am rename : contrib/libmpq/doc/man1/Makefile.am => dep/libmpq/doc/man1/Makefile.am rename : contrib/libmpq/doc/man1/libmpq-config.1 => dep/libmpq/doc/man1/libmpq-config.1 rename : contrib/libmpq/doc/man3/Makefile.am => dep/libmpq/doc/man3/Makefile.am rename : contrib/libmpq/doc/man3/libmpq.3 => dep/libmpq/doc/man3/libmpq.3 rename : contrib/libmpq/doc/man3/libmpq__archive_close.3 => dep/libmpq/doc/man3/libmpq__archive_close.3 rename : contrib/libmpq/doc/man3/libmpq__archive_files.3 => dep/libmpq/doc/man3/libmpq__archive_files.3 rename : contrib/libmpq/doc/man3/libmpq__archive_offset.3 => dep/libmpq/doc/man3/libmpq__archive_offset.3 rename : contrib/libmpq/doc/man3/libmpq__archive_open.3 => dep/libmpq/doc/man3/libmpq__archive_open.3 rename : contrib/libmpq/doc/man3/libmpq__archive_packed_size.3 => dep/libmpq/doc/man3/libmpq__archive_packed_size.3 rename : contrib/libmpq/doc/man3/libmpq__archive_unpacked_size.3 => dep/libmpq/doc/man3/libmpq__archive_unpacked_size.3 rename : contrib/libmpq/doc/man3/libmpq__archive_version.3 => dep/libmpq/doc/man3/libmpq__archive_version.3 rename : contrib/libmpq/doc/man3/libmpq__block_close_offset.3 => dep/libmpq/doc/man3/libmpq__block_close_offset.3 rename : contrib/libmpq/doc/man3/libmpq__block_open_offset.3 => dep/libmpq/doc/man3/libmpq__block_open_offset.3 rename : contrib/libmpq/doc/man3/libmpq__block_read.3 => dep/libmpq/doc/man3/libmpq__block_read.3 rename : contrib/libmpq/doc/man3/libmpq__block_unpacked_size.3 => dep/libmpq/doc/man3/libmpq__block_unpacked_size.3 rename : contrib/libmpq/doc/man3/libmpq__file_blocks.3 => dep/libmpq/doc/man3/libmpq__file_blocks.3 rename : contrib/libmpq/doc/man3/libmpq__file_compressed.3 => dep/libmpq/doc/man3/libmpq__file_compressed.3 rename : contrib/libmpq/doc/man3/libmpq__file_encrypted.3 => dep/libmpq/doc/man3/libmpq__file_encrypted.3 rename : contrib/libmpq/doc/man3/libmpq__file_imploded.3 => dep/libmpq/doc/man3/libmpq__file_imploded.3 rename : contrib/libmpq/doc/man3/libmpq__file_number.3 => dep/libmpq/doc/man3/libmpq__file_number.3 rename : contrib/libmpq/doc/man3/libmpq__file_offset.3 => dep/libmpq/doc/man3/libmpq__file_offset.3 rename : contrib/libmpq/doc/man3/libmpq__file_packed_size.3 => dep/libmpq/doc/man3/libmpq__file_packed_size.3 rename : contrib/libmpq/doc/man3/libmpq__file_read.3 => dep/libmpq/doc/man3/libmpq__file_read.3 rename : contrib/libmpq/doc/man3/libmpq__file_unpacked_size.3 => dep/libmpq/doc/man3/libmpq__file_unpacked_size.3 rename : contrib/libmpq/doc/man3/libmpq__version.3 => dep/libmpq/doc/man3/libmpq__version.3 rename : contrib/libmpq/libmpq-config.in => dep/libmpq/libmpq-config.in rename : contrib/libmpq/libmpq.pc.in => dep/libmpq/libmpq.pc.in rename : contrib/libmpq/libmpq/Makefile.am => dep/libmpq/libmpq/Makefile.am rename : contrib/libmpq/libmpq/common.c => dep/libmpq/libmpq/common.c rename : contrib/libmpq/libmpq/common.h => dep/libmpq/libmpq/common.h rename : contrib/libmpq/libmpq/crypt_buf.h => dep/libmpq/libmpq/crypt_buf.h rename : contrib/libmpq/libmpq/explode.c => dep/libmpq/libmpq/explode.c rename : contrib/libmpq/libmpq/explode.h => dep/libmpq/libmpq/explode.h rename : contrib/libmpq/libmpq/extract.c => dep/libmpq/libmpq/extract.c rename : contrib/libmpq/libmpq/extract.h => dep/libmpq/libmpq/extract.h rename : contrib/libmpq/libmpq/huffman.c => dep/libmpq/libmpq/huffman.c rename : contrib/libmpq/libmpq/huffman.h => dep/libmpq/libmpq/huffman.h rename : contrib/libmpq/libmpq/mpq-internal.h => dep/libmpq/libmpq/mpq-internal.h rename : contrib/libmpq/libmpq/mpq.c => dep/libmpq/libmpq/mpq.c rename : contrib/libmpq/libmpq/mpq.h => dep/libmpq/libmpq/mpq.h rename : contrib/libmpq/libmpq/wave.c => dep/libmpq/libmpq/wave.c rename : contrib/libmpq/libmpq/wave.h => dep/libmpq/libmpq/wave.h rename : contrib/libmpq/tools/Makefile.am => dep/libmpq/tools/Makefile.am rename : contrib/libmpq/tools/crypt_buf_gen.c => dep/libmpq/tools/crypt_buf_gen.c rename : contrib/libmpq/win/VS100/libmpq.vcxproj => dep/libmpq/win/VS100/libmpq.vcxproj rename : contrib/libmpq/win/config.h => dep/libmpq/win/config.h rename : contrib/libmpq/win/libmpq_VC90.sln => dep/libmpq/win/libmpq_VC90.sln rename : contrib/libmpq/win/stdint.h => dep/libmpq/win/stdint.h --- {contrib => dep}/libmpq/AUTHORS | 0 {contrib => dep}/libmpq/COPYING | 0 {contrib => dep}/libmpq/FAQ | 0 {contrib => dep}/libmpq/Makefile.am | 0 {contrib => dep}/libmpq/NEWS | 0 {contrib => dep}/libmpq/README | 0 {contrib => dep}/libmpq/THANKS | 0 {contrib => dep}/libmpq/TODO | 0 {contrib => dep}/libmpq/autogen.sh | 0 {contrib => dep}/libmpq/bindings/Makefile.am | 0 .../libmpq/bindings/d/Makefile.am | 0 {contrib => dep}/libmpq/bindings/d/dsss.conf | 0 {contrib => dep}/libmpq/bindings/d/mpq.d | 0 .../libmpq/bindings/python/Makefile.am | 0 .../libmpq/bindings/python/mpq-info | 0 .../libmpq/bindings/python/mpq.py | 0 {contrib => dep}/libmpq/configure.ac | 0 {contrib => dep}/libmpq/debian/changelog | 0 {contrib => dep}/libmpq/debian/compat | 0 {contrib => dep}/libmpq/debian/control | 0 {contrib => dep}/libmpq/debian/copyright | 0 .../libmpq/debian/libmpq-dev.dirs | 0 .../libmpq/debian/libmpq-dev.install | 0 {contrib => dep}/libmpq/debian/libmpq0.dirs | 0 {contrib => dep}/libmpq/debian/libmpq0.docs | 0 .../libmpq/debian/libmpq0.install | 0 .../libmpq/debian/python-mpq.install | 0 {contrib => dep}/libmpq/debian/rules | 0 {contrib => dep}/libmpq/doc/Makefile.am | 0 {contrib => dep}/libmpq/doc/man1/Makefile.am | 0 .../libmpq/doc/man1/libmpq-config.1 | 0 {contrib => dep}/libmpq/doc/man3/Makefile.am | 0 {contrib => dep}/libmpq/doc/man3/libmpq.3 | 0 .../libmpq/doc/man3/libmpq__archive_close.3 | 0 .../libmpq/doc/man3/libmpq__archive_files.3 | 0 .../libmpq/doc/man3/libmpq__archive_offset.3 | 0 .../libmpq/doc/man3/libmpq__archive_open.3 | 0 .../doc/man3/libmpq__archive_packed_size.3 | 0 .../doc/man3/libmpq__archive_unpacked_size.3 | 0 .../libmpq/doc/man3/libmpq__archive_version.3 | 0 .../doc/man3/libmpq__block_close_offset.3 | 0 .../doc/man3/libmpq__block_open_offset.3 | 0 .../libmpq/doc/man3/libmpq__block_read.3 | 0 .../doc/man3/libmpq__block_unpacked_size.3 | 0 .../libmpq/doc/man3/libmpq__file_blocks.3 | 0 .../libmpq/doc/man3/libmpq__file_compressed.3 | 0 .../libmpq/doc/man3/libmpq__file_encrypted.3 | 0 .../libmpq/doc/man3/libmpq__file_imploded.3 | 0 .../libmpq/doc/man3/libmpq__file_number.3 | 0 .../libmpq/doc/man3/libmpq__file_offset.3 | 0 .../doc/man3/libmpq__file_packed_size.3 | 0 .../libmpq/doc/man3/libmpq__file_read.3 | 0 .../doc/man3/libmpq__file_unpacked_size.3 | 0 .../libmpq/doc/man3/libmpq__version.3 | 0 {contrib => dep}/libmpq/libmpq-config.in | 0 {contrib => dep}/libmpq/libmpq.pc.in | 0 {contrib => dep}/libmpq/libmpq/Makefile.am | 0 {contrib => dep}/libmpq/libmpq/common.c | 0 {contrib => dep}/libmpq/libmpq/common.h | 0 {contrib => dep}/libmpq/libmpq/crypt_buf.h | 0 {contrib => dep}/libmpq/libmpq/explode.c | 0 {contrib => dep}/libmpq/libmpq/explode.h | 0 {contrib => dep}/libmpq/libmpq/extract.c | 0 {contrib => dep}/libmpq/libmpq/extract.h | 0 {contrib => dep}/libmpq/libmpq/huffman.c | 0 {contrib => dep}/libmpq/libmpq/huffman.h | 0 {contrib => dep}/libmpq/libmpq/mpq-internal.h | 0 {contrib => dep}/libmpq/libmpq/mpq.c | 0 {contrib => dep}/libmpq/libmpq/mpq.h | 0 {contrib => dep}/libmpq/libmpq/wave.c | 0 {contrib => dep}/libmpq/libmpq/wave.h | 0 {contrib => dep}/libmpq/tools/Makefile.am | 0 {contrib => dep}/libmpq/tools/crypt_buf_gen.c | 0 .../libmpq/win/VS100/libmpq.vcxproj | 0 {contrib => dep}/libmpq/win/config.h | 0 {contrib => dep}/libmpq/win/libmpq_VC90.sln | 0 {contrib => dep}/libmpq/win/stdint.h | 0 src/tools/map_extractor/ad | Bin 216203 -> 0 bytes src/tools/map_extractor/ad.exe | Bin 162816 -> 0 bytes src/tools/map_extractor/debug/zlib.lib | Bin 198300 -> 0 bytes src/tools/map_extractor/libmpq/CMakeLists.txt | 13 - src/tools/map_extractor/libmpq/common.cpp | 802 ----------- src/tools/map_extractor/libmpq/common.h | 73 - src/tools/map_extractor/libmpq/explode.cpp | 429 ------ src/tools/map_extractor/libmpq/explode.h | 87 -- src/tools/map_extractor/libmpq/extract.cpp | 263 ---- src/tools/map_extractor/libmpq/huffman.cpp | 834 ------------ src/tools/map_extractor/libmpq/huffman.h | 106 -- src/tools/map_extractor/libmpq/mpq.cpp | 627 --------- src/tools/map_extractor/libmpq/mpq.h | 229 ---- src/tools/map_extractor/libmpq/parser.cpp | 295 ---- src/tools/map_extractor/libmpq/wave.cpp | 186 --- src/tools/map_extractor/libmpq/wave.h | 38 - src/tools/map_extractor/libmpq/zconf.h | 324 ----- src/tools/map_extractor/libmpq/zlib.h | 1201 ----------------- src/tools/map_extractor/release/zlib.lib | Bin 212284 -> 0 bytes 96 files changed, 5507 deletions(-) rename {contrib => dep}/libmpq/AUTHORS (100%) rename {contrib => dep}/libmpq/COPYING (100%) rename {contrib => dep}/libmpq/FAQ (100%) rename {contrib => dep}/libmpq/Makefile.am (100%) rename {contrib => dep}/libmpq/NEWS (100%) rename {contrib => dep}/libmpq/README (100%) rename {contrib => dep}/libmpq/THANKS (100%) rename {contrib => dep}/libmpq/TODO (100%) rename {contrib => dep}/libmpq/autogen.sh (100%) rename {contrib => dep}/libmpq/bindings/Makefile.am (100%) rename {contrib => dep}/libmpq/bindings/d/Makefile.am (100%) rename {contrib => dep}/libmpq/bindings/d/dsss.conf (100%) rename {contrib => dep}/libmpq/bindings/d/mpq.d (100%) rename {contrib => dep}/libmpq/bindings/python/Makefile.am (100%) rename {contrib => dep}/libmpq/bindings/python/mpq-info (100%) rename {contrib => dep}/libmpq/bindings/python/mpq.py (100%) rename {contrib => dep}/libmpq/configure.ac (100%) rename {contrib => dep}/libmpq/debian/changelog (100%) rename {contrib => dep}/libmpq/debian/compat (100%) rename {contrib => dep}/libmpq/debian/control (100%) rename {contrib => dep}/libmpq/debian/copyright (100%) rename {contrib => dep}/libmpq/debian/libmpq-dev.dirs (100%) rename {contrib => dep}/libmpq/debian/libmpq-dev.install (100%) rename {contrib => dep}/libmpq/debian/libmpq0.dirs (100%) rename {contrib => dep}/libmpq/debian/libmpq0.docs (100%) rename {contrib => dep}/libmpq/debian/libmpq0.install (100%) rename {contrib => dep}/libmpq/debian/python-mpq.install (100%) rename {contrib => dep}/libmpq/debian/rules (100%) rename {contrib => dep}/libmpq/doc/Makefile.am (100%) rename {contrib => dep}/libmpq/doc/man1/Makefile.am (100%) rename {contrib => dep}/libmpq/doc/man1/libmpq-config.1 (100%) rename {contrib => dep}/libmpq/doc/man3/Makefile.am (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__archive_close.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__archive_files.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__archive_offset.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__archive_open.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__archive_packed_size.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__archive_unpacked_size.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__archive_version.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__block_close_offset.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__block_open_offset.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__block_read.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__block_unpacked_size.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_blocks.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_compressed.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_encrypted.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_imploded.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_number.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_offset.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_packed_size.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_read.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__file_unpacked_size.3 (100%) rename {contrib => dep}/libmpq/doc/man3/libmpq__version.3 (100%) rename {contrib => dep}/libmpq/libmpq-config.in (100%) rename {contrib => dep}/libmpq/libmpq.pc.in (100%) rename {contrib => dep}/libmpq/libmpq/Makefile.am (100%) rename {contrib => dep}/libmpq/libmpq/common.c (100%) rename {contrib => dep}/libmpq/libmpq/common.h (100%) rename {contrib => dep}/libmpq/libmpq/crypt_buf.h (100%) rename {contrib => dep}/libmpq/libmpq/explode.c (100%) rename {contrib => dep}/libmpq/libmpq/explode.h (100%) rename {contrib => dep}/libmpq/libmpq/extract.c (100%) rename {contrib => dep}/libmpq/libmpq/extract.h (100%) rename {contrib => dep}/libmpq/libmpq/huffman.c (100%) rename {contrib => dep}/libmpq/libmpq/huffman.h (100%) rename {contrib => dep}/libmpq/libmpq/mpq-internal.h (100%) rename {contrib => dep}/libmpq/libmpq/mpq.c (100%) rename {contrib => dep}/libmpq/libmpq/mpq.h (100%) rename {contrib => dep}/libmpq/libmpq/wave.c (100%) rename {contrib => dep}/libmpq/libmpq/wave.h (100%) rename {contrib => dep}/libmpq/tools/Makefile.am (100%) rename {contrib => dep}/libmpq/tools/crypt_buf_gen.c (100%) rename {contrib => dep}/libmpq/win/VS100/libmpq.vcxproj (100%) rename {contrib => dep}/libmpq/win/config.h (100%) rename {contrib => dep}/libmpq/win/libmpq_VC90.sln (100%) rename {contrib => dep}/libmpq/win/stdint.h (100%) delete mode 100644 src/tools/map_extractor/ad delete mode 100644 src/tools/map_extractor/ad.exe delete mode 100644 src/tools/map_extractor/debug/zlib.lib delete mode 100644 src/tools/map_extractor/libmpq/CMakeLists.txt delete mode 100644 src/tools/map_extractor/libmpq/common.cpp delete mode 100644 src/tools/map_extractor/libmpq/common.h delete mode 100644 src/tools/map_extractor/libmpq/explode.cpp delete mode 100644 src/tools/map_extractor/libmpq/explode.h delete mode 100644 src/tools/map_extractor/libmpq/extract.cpp delete mode 100644 src/tools/map_extractor/libmpq/huffman.cpp delete mode 100644 src/tools/map_extractor/libmpq/huffman.h delete mode 100644 src/tools/map_extractor/libmpq/mpq.cpp delete mode 100644 src/tools/map_extractor/libmpq/mpq.h delete mode 100644 src/tools/map_extractor/libmpq/parser.cpp delete mode 100644 src/tools/map_extractor/libmpq/wave.cpp delete mode 100644 src/tools/map_extractor/libmpq/wave.h delete mode 100644 src/tools/map_extractor/libmpq/zconf.h delete mode 100644 src/tools/map_extractor/libmpq/zlib.h delete mode 100644 src/tools/map_extractor/release/zlib.lib diff --git a/contrib/libmpq/AUTHORS b/dep/libmpq/AUTHORS similarity index 100% rename from contrib/libmpq/AUTHORS rename to dep/libmpq/AUTHORS diff --git a/contrib/libmpq/COPYING b/dep/libmpq/COPYING similarity index 100% rename from contrib/libmpq/COPYING rename to dep/libmpq/COPYING diff --git a/contrib/libmpq/FAQ b/dep/libmpq/FAQ similarity index 100% rename from contrib/libmpq/FAQ rename to dep/libmpq/FAQ diff --git a/contrib/libmpq/Makefile.am b/dep/libmpq/Makefile.am similarity index 100% rename from contrib/libmpq/Makefile.am rename to dep/libmpq/Makefile.am diff --git a/contrib/libmpq/NEWS b/dep/libmpq/NEWS similarity index 100% rename from contrib/libmpq/NEWS rename to dep/libmpq/NEWS diff --git a/contrib/libmpq/README b/dep/libmpq/README similarity index 100% rename from contrib/libmpq/README rename to dep/libmpq/README diff --git a/contrib/libmpq/THANKS b/dep/libmpq/THANKS similarity index 100% rename from contrib/libmpq/THANKS rename to dep/libmpq/THANKS diff --git a/contrib/libmpq/TODO b/dep/libmpq/TODO similarity index 100% rename from contrib/libmpq/TODO rename to dep/libmpq/TODO diff --git a/contrib/libmpq/autogen.sh b/dep/libmpq/autogen.sh similarity index 100% rename from contrib/libmpq/autogen.sh rename to dep/libmpq/autogen.sh diff --git a/contrib/libmpq/bindings/Makefile.am b/dep/libmpq/bindings/Makefile.am similarity index 100% rename from contrib/libmpq/bindings/Makefile.am rename to dep/libmpq/bindings/Makefile.am diff --git a/contrib/libmpq/bindings/d/Makefile.am b/dep/libmpq/bindings/d/Makefile.am similarity index 100% rename from contrib/libmpq/bindings/d/Makefile.am rename to dep/libmpq/bindings/d/Makefile.am diff --git a/contrib/libmpq/bindings/d/dsss.conf b/dep/libmpq/bindings/d/dsss.conf similarity index 100% rename from contrib/libmpq/bindings/d/dsss.conf rename to dep/libmpq/bindings/d/dsss.conf diff --git a/contrib/libmpq/bindings/d/mpq.d b/dep/libmpq/bindings/d/mpq.d similarity index 100% rename from contrib/libmpq/bindings/d/mpq.d rename to dep/libmpq/bindings/d/mpq.d diff --git a/contrib/libmpq/bindings/python/Makefile.am b/dep/libmpq/bindings/python/Makefile.am similarity index 100% rename from contrib/libmpq/bindings/python/Makefile.am rename to dep/libmpq/bindings/python/Makefile.am diff --git a/contrib/libmpq/bindings/python/mpq-info b/dep/libmpq/bindings/python/mpq-info similarity index 100% rename from contrib/libmpq/bindings/python/mpq-info rename to dep/libmpq/bindings/python/mpq-info diff --git a/contrib/libmpq/bindings/python/mpq.py b/dep/libmpq/bindings/python/mpq.py similarity index 100% rename from contrib/libmpq/bindings/python/mpq.py rename to dep/libmpq/bindings/python/mpq.py diff --git a/contrib/libmpq/configure.ac b/dep/libmpq/configure.ac similarity index 100% rename from contrib/libmpq/configure.ac rename to dep/libmpq/configure.ac diff --git a/contrib/libmpq/debian/changelog b/dep/libmpq/debian/changelog similarity index 100% rename from contrib/libmpq/debian/changelog rename to dep/libmpq/debian/changelog diff --git a/contrib/libmpq/debian/compat b/dep/libmpq/debian/compat similarity index 100% rename from contrib/libmpq/debian/compat rename to dep/libmpq/debian/compat diff --git a/contrib/libmpq/debian/control b/dep/libmpq/debian/control similarity index 100% rename from contrib/libmpq/debian/control rename to dep/libmpq/debian/control diff --git a/contrib/libmpq/debian/copyright b/dep/libmpq/debian/copyright similarity index 100% rename from contrib/libmpq/debian/copyright rename to dep/libmpq/debian/copyright diff --git a/contrib/libmpq/debian/libmpq-dev.dirs b/dep/libmpq/debian/libmpq-dev.dirs similarity index 100% rename from contrib/libmpq/debian/libmpq-dev.dirs rename to dep/libmpq/debian/libmpq-dev.dirs diff --git a/contrib/libmpq/debian/libmpq-dev.install b/dep/libmpq/debian/libmpq-dev.install similarity index 100% rename from contrib/libmpq/debian/libmpq-dev.install rename to dep/libmpq/debian/libmpq-dev.install diff --git a/contrib/libmpq/debian/libmpq0.dirs b/dep/libmpq/debian/libmpq0.dirs similarity index 100% rename from contrib/libmpq/debian/libmpq0.dirs rename to dep/libmpq/debian/libmpq0.dirs diff --git a/contrib/libmpq/debian/libmpq0.docs b/dep/libmpq/debian/libmpq0.docs similarity index 100% rename from contrib/libmpq/debian/libmpq0.docs rename to dep/libmpq/debian/libmpq0.docs diff --git a/contrib/libmpq/debian/libmpq0.install b/dep/libmpq/debian/libmpq0.install similarity index 100% rename from contrib/libmpq/debian/libmpq0.install rename to dep/libmpq/debian/libmpq0.install diff --git a/contrib/libmpq/debian/python-mpq.install b/dep/libmpq/debian/python-mpq.install similarity index 100% rename from contrib/libmpq/debian/python-mpq.install rename to dep/libmpq/debian/python-mpq.install diff --git a/contrib/libmpq/debian/rules b/dep/libmpq/debian/rules similarity index 100% rename from contrib/libmpq/debian/rules rename to dep/libmpq/debian/rules diff --git a/contrib/libmpq/doc/Makefile.am b/dep/libmpq/doc/Makefile.am similarity index 100% rename from contrib/libmpq/doc/Makefile.am rename to dep/libmpq/doc/Makefile.am diff --git a/contrib/libmpq/doc/man1/Makefile.am b/dep/libmpq/doc/man1/Makefile.am similarity index 100% rename from contrib/libmpq/doc/man1/Makefile.am rename to dep/libmpq/doc/man1/Makefile.am diff --git a/contrib/libmpq/doc/man1/libmpq-config.1 b/dep/libmpq/doc/man1/libmpq-config.1 similarity index 100% rename from contrib/libmpq/doc/man1/libmpq-config.1 rename to dep/libmpq/doc/man1/libmpq-config.1 diff --git a/contrib/libmpq/doc/man3/Makefile.am b/dep/libmpq/doc/man3/Makefile.am similarity index 100% rename from contrib/libmpq/doc/man3/Makefile.am rename to dep/libmpq/doc/man3/Makefile.am diff --git a/contrib/libmpq/doc/man3/libmpq.3 b/dep/libmpq/doc/man3/libmpq.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq.3 rename to dep/libmpq/doc/man3/libmpq.3 diff --git a/contrib/libmpq/doc/man3/libmpq__archive_close.3 b/dep/libmpq/doc/man3/libmpq__archive_close.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__archive_close.3 rename to dep/libmpq/doc/man3/libmpq__archive_close.3 diff --git a/contrib/libmpq/doc/man3/libmpq__archive_files.3 b/dep/libmpq/doc/man3/libmpq__archive_files.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__archive_files.3 rename to dep/libmpq/doc/man3/libmpq__archive_files.3 diff --git a/contrib/libmpq/doc/man3/libmpq__archive_offset.3 b/dep/libmpq/doc/man3/libmpq__archive_offset.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__archive_offset.3 rename to dep/libmpq/doc/man3/libmpq__archive_offset.3 diff --git a/contrib/libmpq/doc/man3/libmpq__archive_open.3 b/dep/libmpq/doc/man3/libmpq__archive_open.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__archive_open.3 rename to dep/libmpq/doc/man3/libmpq__archive_open.3 diff --git a/contrib/libmpq/doc/man3/libmpq__archive_packed_size.3 b/dep/libmpq/doc/man3/libmpq__archive_packed_size.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__archive_packed_size.3 rename to dep/libmpq/doc/man3/libmpq__archive_packed_size.3 diff --git a/contrib/libmpq/doc/man3/libmpq__archive_unpacked_size.3 b/dep/libmpq/doc/man3/libmpq__archive_unpacked_size.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__archive_unpacked_size.3 rename to dep/libmpq/doc/man3/libmpq__archive_unpacked_size.3 diff --git a/contrib/libmpq/doc/man3/libmpq__archive_version.3 b/dep/libmpq/doc/man3/libmpq__archive_version.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__archive_version.3 rename to dep/libmpq/doc/man3/libmpq__archive_version.3 diff --git a/contrib/libmpq/doc/man3/libmpq__block_close_offset.3 b/dep/libmpq/doc/man3/libmpq__block_close_offset.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__block_close_offset.3 rename to dep/libmpq/doc/man3/libmpq__block_close_offset.3 diff --git a/contrib/libmpq/doc/man3/libmpq__block_open_offset.3 b/dep/libmpq/doc/man3/libmpq__block_open_offset.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__block_open_offset.3 rename to dep/libmpq/doc/man3/libmpq__block_open_offset.3 diff --git a/contrib/libmpq/doc/man3/libmpq__block_read.3 b/dep/libmpq/doc/man3/libmpq__block_read.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__block_read.3 rename to dep/libmpq/doc/man3/libmpq__block_read.3 diff --git a/contrib/libmpq/doc/man3/libmpq__block_unpacked_size.3 b/dep/libmpq/doc/man3/libmpq__block_unpacked_size.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__block_unpacked_size.3 rename to dep/libmpq/doc/man3/libmpq__block_unpacked_size.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_blocks.3 b/dep/libmpq/doc/man3/libmpq__file_blocks.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_blocks.3 rename to dep/libmpq/doc/man3/libmpq__file_blocks.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_compressed.3 b/dep/libmpq/doc/man3/libmpq__file_compressed.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_compressed.3 rename to dep/libmpq/doc/man3/libmpq__file_compressed.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_encrypted.3 b/dep/libmpq/doc/man3/libmpq__file_encrypted.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_encrypted.3 rename to dep/libmpq/doc/man3/libmpq__file_encrypted.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_imploded.3 b/dep/libmpq/doc/man3/libmpq__file_imploded.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_imploded.3 rename to dep/libmpq/doc/man3/libmpq__file_imploded.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_number.3 b/dep/libmpq/doc/man3/libmpq__file_number.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_number.3 rename to dep/libmpq/doc/man3/libmpq__file_number.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_offset.3 b/dep/libmpq/doc/man3/libmpq__file_offset.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_offset.3 rename to dep/libmpq/doc/man3/libmpq__file_offset.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_packed_size.3 b/dep/libmpq/doc/man3/libmpq__file_packed_size.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_packed_size.3 rename to dep/libmpq/doc/man3/libmpq__file_packed_size.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_read.3 b/dep/libmpq/doc/man3/libmpq__file_read.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_read.3 rename to dep/libmpq/doc/man3/libmpq__file_read.3 diff --git a/contrib/libmpq/doc/man3/libmpq__file_unpacked_size.3 b/dep/libmpq/doc/man3/libmpq__file_unpacked_size.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__file_unpacked_size.3 rename to dep/libmpq/doc/man3/libmpq__file_unpacked_size.3 diff --git a/contrib/libmpq/doc/man3/libmpq__version.3 b/dep/libmpq/doc/man3/libmpq__version.3 similarity index 100% rename from contrib/libmpq/doc/man3/libmpq__version.3 rename to dep/libmpq/doc/man3/libmpq__version.3 diff --git a/contrib/libmpq/libmpq-config.in b/dep/libmpq/libmpq-config.in similarity index 100% rename from contrib/libmpq/libmpq-config.in rename to dep/libmpq/libmpq-config.in diff --git a/contrib/libmpq/libmpq.pc.in b/dep/libmpq/libmpq.pc.in similarity index 100% rename from contrib/libmpq/libmpq.pc.in rename to dep/libmpq/libmpq.pc.in diff --git a/contrib/libmpq/libmpq/Makefile.am b/dep/libmpq/libmpq/Makefile.am similarity index 100% rename from contrib/libmpq/libmpq/Makefile.am rename to dep/libmpq/libmpq/Makefile.am diff --git a/contrib/libmpq/libmpq/common.c b/dep/libmpq/libmpq/common.c similarity index 100% rename from contrib/libmpq/libmpq/common.c rename to dep/libmpq/libmpq/common.c diff --git a/contrib/libmpq/libmpq/common.h b/dep/libmpq/libmpq/common.h similarity index 100% rename from contrib/libmpq/libmpq/common.h rename to dep/libmpq/libmpq/common.h diff --git a/contrib/libmpq/libmpq/crypt_buf.h b/dep/libmpq/libmpq/crypt_buf.h similarity index 100% rename from contrib/libmpq/libmpq/crypt_buf.h rename to dep/libmpq/libmpq/crypt_buf.h diff --git a/contrib/libmpq/libmpq/explode.c b/dep/libmpq/libmpq/explode.c similarity index 100% rename from contrib/libmpq/libmpq/explode.c rename to dep/libmpq/libmpq/explode.c diff --git a/contrib/libmpq/libmpq/explode.h b/dep/libmpq/libmpq/explode.h similarity index 100% rename from contrib/libmpq/libmpq/explode.h rename to dep/libmpq/libmpq/explode.h diff --git a/contrib/libmpq/libmpq/extract.c b/dep/libmpq/libmpq/extract.c similarity index 100% rename from contrib/libmpq/libmpq/extract.c rename to dep/libmpq/libmpq/extract.c diff --git a/contrib/libmpq/libmpq/extract.h b/dep/libmpq/libmpq/extract.h similarity index 100% rename from contrib/libmpq/libmpq/extract.h rename to dep/libmpq/libmpq/extract.h diff --git a/contrib/libmpq/libmpq/huffman.c b/dep/libmpq/libmpq/huffman.c similarity index 100% rename from contrib/libmpq/libmpq/huffman.c rename to dep/libmpq/libmpq/huffman.c diff --git a/contrib/libmpq/libmpq/huffman.h b/dep/libmpq/libmpq/huffman.h similarity index 100% rename from contrib/libmpq/libmpq/huffman.h rename to dep/libmpq/libmpq/huffman.h diff --git a/contrib/libmpq/libmpq/mpq-internal.h b/dep/libmpq/libmpq/mpq-internal.h similarity index 100% rename from contrib/libmpq/libmpq/mpq-internal.h rename to dep/libmpq/libmpq/mpq-internal.h diff --git a/contrib/libmpq/libmpq/mpq.c b/dep/libmpq/libmpq/mpq.c similarity index 100% rename from contrib/libmpq/libmpq/mpq.c rename to dep/libmpq/libmpq/mpq.c diff --git a/contrib/libmpq/libmpq/mpq.h b/dep/libmpq/libmpq/mpq.h similarity index 100% rename from contrib/libmpq/libmpq/mpq.h rename to dep/libmpq/libmpq/mpq.h diff --git a/contrib/libmpq/libmpq/wave.c b/dep/libmpq/libmpq/wave.c similarity index 100% rename from contrib/libmpq/libmpq/wave.c rename to dep/libmpq/libmpq/wave.c diff --git a/contrib/libmpq/libmpq/wave.h b/dep/libmpq/libmpq/wave.h similarity index 100% rename from contrib/libmpq/libmpq/wave.h rename to dep/libmpq/libmpq/wave.h diff --git a/contrib/libmpq/tools/Makefile.am b/dep/libmpq/tools/Makefile.am similarity index 100% rename from contrib/libmpq/tools/Makefile.am rename to dep/libmpq/tools/Makefile.am diff --git a/contrib/libmpq/tools/crypt_buf_gen.c b/dep/libmpq/tools/crypt_buf_gen.c similarity index 100% rename from contrib/libmpq/tools/crypt_buf_gen.c rename to dep/libmpq/tools/crypt_buf_gen.c diff --git a/contrib/libmpq/win/VS100/libmpq.vcxproj b/dep/libmpq/win/VS100/libmpq.vcxproj similarity index 100% rename from contrib/libmpq/win/VS100/libmpq.vcxproj rename to dep/libmpq/win/VS100/libmpq.vcxproj diff --git a/contrib/libmpq/win/config.h b/dep/libmpq/win/config.h similarity index 100% rename from contrib/libmpq/win/config.h rename to dep/libmpq/win/config.h diff --git a/contrib/libmpq/win/libmpq_VC90.sln b/dep/libmpq/win/libmpq_VC90.sln similarity index 100% rename from contrib/libmpq/win/libmpq_VC90.sln rename to dep/libmpq/win/libmpq_VC90.sln diff --git a/contrib/libmpq/win/stdint.h b/dep/libmpq/win/stdint.h similarity index 100% rename from contrib/libmpq/win/stdint.h rename to dep/libmpq/win/stdint.h diff --git a/src/tools/map_extractor/ad b/src/tools/map_extractor/ad deleted file mode 100644 index 564eceaaa5fa043271e98f2af869bbf847c825d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216203 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

`rdC#%Cy;#LcdD~QWYdYaBoeV2z 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 Vk_?gnOhDI>F(Lned?Zl%{{t4v?T7#X diff --git a/src/tools/map_extractor/ad.exe b/src/tools/map_extractor/ad.exe deleted file mode 100644 index 608392aec433698bf15c4168163594dbdd3ac3d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162816 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%0DfR7 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%0A&C^pc|m# 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 diff --git a/src/tools/map_extractor/debug/zlib.lib b/src/tools/map_extractor/debug/zlib.lib deleted file mode 100644 index ffd7d9a2605520a50438f9f3e60012231ba9d377..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198300 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 -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -add_library (libmpq common.cpp explode.cpp extract.cpp huffman.cpp mpq.cpp parser.cpp wave.cpp ) -# link libmpq with zlib -target_link_libraries (libmpq z) diff --git a/src/tools/map_extractor/libmpq/common.cpp b/src/tools/map_extractor/libmpq/common.cpp deleted file mode 100644 index 49b1895cc6c..00000000000 --- a/src/tools/map_extractor/libmpq/common.cpp +++ /dev/null @@ -1,802 +0,0 @@ -/* - * common.c -- shared functions used by mpq-tools. - * - * Copyright (C) 2003 Maik Broemme - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id: common.c,v 1.12 2004/02/12 00:42:54 mbroemme Exp $ - */ -#define _CRT_SECURE_NO_DEPRECATE -//#include -#include -//#include -#include -#include -#include -#include "mpq.h" -#include "common.h" -#include - -/* - * This function decrypts a MPQ block. - */ -int libmpq_decrypt_block(mpq_archive *mpq_a, unsigned int *block, unsigned int length, unsigned int seed1) { - unsigned int seed2 = 0xEEEEEEEE; - unsigned int ch; - - /* Round to unsigned int's */ - length >>= 2; - while (length-- > 0) { - seed2 += mpq_a->buf[0x400 + (seed1 & 0xFF)]; - ch = *block ^ (seed1 + seed2); - seed1 = ((~seed1 << 0x15) + 0x11111111) | (seed1 >> 0x0B); - seed2 = ch + seed2 + (seed2 << 5) + 3; - *block++ = ch; - } - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function decrypts the hashtable for the - * file informations. - */ -int libmpq_decrypt_hashtable(mpq_archive *mpq_a, unsigned char *pbKey) { - unsigned int seed1 = 0x7FED7FED; - unsigned int seed2 = 0xEEEEEEEE; - unsigned int ch; /* One key character */ - unsigned int *pdwTable = (unsigned int *)(mpq_a->hashtable); - unsigned int length = mpq_a->header->hashtablesize * 4; - - /* Prepare seeds */ - while (*pbKey != 0) { - ch = toupper(*pbKey++); - seed1 = mpq_a->buf[0x300 + ch] ^ (seed1 + seed2); - seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3; - } - - /* Decrypt it */ - seed2 = 0xEEEEEEEE; - while (length-- > 0) { - seed2 += mpq_a->buf[0x400 + (seed1 & 0xFF)]; - ch = *pdwTable ^ (seed1 + seed2); - seed1 = ((~seed1 << 0x15) + 0x11111111) | (seed1 >> 0x0B); - seed2 = ch + seed2 + (seed2 << 5) + 3; - *pdwTable++ = ch; - } - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function decrypts the blocktable. - */ -int libmpq_decrypt_blocktable(mpq_archive *mpq_a, unsigned char *pbKey) { - unsigned int seed1 = 0x7FED7FED; - unsigned int seed2 = 0xEEEEEEEE; - unsigned int ch; /* One key character */ - unsigned int *pdwTable = (unsigned int *)(mpq_a->blocktable); - unsigned int length = mpq_a->header->blocktablesize * 4; - - /* Prepare seeds */ - while(*pbKey != 0) { - ch = toupper(*pbKey++); - seed1 = mpq_a->buf[0x300 + ch] ^ (seed1 + seed2); - seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3; - } - - /* Decrypt it */ - seed2 = 0xEEEEEEEE; - while(length-- > 0) { - seed2 += mpq_a->buf[0x400 + (seed1 & 0xFF)]; - ch = *pdwTable ^ (seed1 + seed2); - seed1 = ((~seed1 << 0x15) + 0x11111111) | (seed1 >> 0x0B); - seed2 = ch + seed2 + (seed2 << 5) + 3; - *pdwTable++ = ch; - } - return LIBMPQ_TOOLS_SUCCESS; -} - -int libmpq_read_listfile(mpq_archive *mpq_a, FILE *fp) { - int mpq_size; - int mpq_ht_size; - int mpq_bt_size; - int mpq_blocksize; - int mpq_files; - int mpq_csize; - int mpq_fsize; - int entries; - char listdb_version[10]; - char libmpq_version[10]; - int listdb_temp_version = 0; - int libmpq_temp_version = 0; - - /* first check header and version */ - if (libmpq_conf_get_value(fp, "LIBMPQ_VERSION", mpq_a->mpq_l->mpq_version, LIBMPQ_CONF_TYPE_CHAR, sizeof(mpq_a->mpq_l->mpq_version))) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } else { - - /* copy to temp buffer for removing . characters */ - sprintf(listdb_version, (char *)mpq_a->mpq_l->mpq_version); - - /* remove . characters from listfile version */ - libmpq_conf_delete_char(listdb_version, "."); - - /* get libmpq version */ - sprintf(libmpq_version, "%i%i%i",LIBMPQ_MAJOR_VERSION, LIBMPQ_MINOR_VERSION, LIBMPQ_PATCH_VERSION); - - /* convert to number */ - listdb_temp_version = atoi(listdb_version); - libmpq_temp_version = atoi(libmpq_version); - - /* check if installed libmpq version is valid for listfile version */ - if ((libmpq_temp_version < listdb_temp_version) || (libmpq_temp_version == 0) || (listdb_temp_version == 0)) { - return LIBMPQ_CONF_EFILE_VERSION; - } - } - - /* check listfile header, the following entries must be set */ - if (libmpq_conf_get_value(fp, "MPQ_SIZE", &mpq_size, LIBMPQ_CONF_TYPE_INT, 0)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_HASHTABLE_SIZE", &mpq_ht_size, LIBMPQ_CONF_TYPE_INT, 0)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_BLOCKTABLE_SIZE", &mpq_bt_size, LIBMPQ_CONF_TYPE_INT, 0)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_BLOCKSIZE", &mpq_blocksize, LIBMPQ_CONF_TYPE_INT, 0)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_FILES", &mpq_files, LIBMPQ_CONF_TYPE_INT, 0)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_COMPRESSED_SIZE", &mpq_csize, LIBMPQ_CONF_TYPE_INT, 0)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_UNCOMPRESSED_SIZE", &mpq_fsize, LIBMPQ_CONF_TYPE_INT, 0)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_NAME", mpq_a->mpq_l->mpq_name, LIBMPQ_CONF_TYPE_CHAR, PATH_MAX)) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - if (libmpq_conf_get_value(fp, "MPQ_TYPE", mpq_a->mpq_l->mpq_type, LIBMPQ_CONF_TYPE_CHAR, sizeof(mpq_a->mpq_l->mpq_type))) { - return LIBMPQ_CONF_EFILE_CORRUPT; - } - - /* these are optional parameters, if they are empty we set the struct members empty */ - libmpq_conf_get_value(fp, "MPQ_GAME", mpq_a->mpq_l->mpq_game, LIBMPQ_CONF_TYPE_CHAR, sizeof(mpq_a->mpq_l->mpq_game)); - libmpq_conf_get_value(fp, "MPQ_GAME_VERSION", mpq_a->mpq_l->mpq_game_version, LIBMPQ_CONF_TYPE_CHAR, sizeof(mpq_a->mpq_l->mpq_game_version)); - - /* check if we found a valid listfile for the given archive */ - if (mpq_a->header->hashtablesize == mpq_ht_size && mpq_a->header->blocktablesize == mpq_bt_size && mpq_a->blocksize == mpq_blocksize && libmpq_archive_info(mpq_a, LIBMPQ_MPQ_ARCHIVE_SIZE) == mpq_size && libmpq_archive_info(mpq_a, LIBMPQ_MPQ_NUMFILES) == mpq_files && libmpq_archive_info(mpq_a, LIBMPQ_MPQ_COMPRESSED_SIZE) == mpq_csize && libmpq_archive_info(mpq_a, LIBMPQ_MPQ_UNCOMPRESSED_SIZE) == mpq_fsize) { - - /* check if the filelist is correct */ - if (!libmpq_conf_get_array(fp, "FILE_NAMES", (char ***)&mpq_a->mpq_l->mpq_files, &entries)) { - - /* we have a corrupt filelist, so return */ - return LIBMPQ_CONF_EFILE_LIST_CORRUPT; - } else { - - /* now check if filelist entries matches number of files in the archive. */ - if (entries != libmpq_archive_info(mpq_a, LIBMPQ_MPQ_NUMFILES)) { - libmpq_free_listfile((char **)mpq_a->mpq_l->mpq_files); - mpq_a->mpq_l->mpq_files = NULL; - return LIBMPQ_CONF_EFILE_LIST_CORRUPT; - } - } - } - - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function frees up the space reserved by libmpq_get_listfile() - */ -int libmpq_free_listfile(char **filelist) { - int i = 0; - while (filelist[i]) { - free(filelist[i++]); - } - free(filelist); - - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function reads the directory and the subdirectories - * of the listfile database and adds a entry to the lisfile - * array. - */ -/*int libmpq_detect_listfile_rec(char path[PATH_MAX], char ***filelist, int *fl_count, int *fl_size) { - char nextpath[PATH_MAX]; - DIR *dp = opendir(path); - FILE *fp; - struct dirent *entry; - struct stat statbuf; - char buf[LIBMPQ_CONF_BUFSIZE]; - - if (dp == NULL) { - return LIBMPQ_CONF_EOPEN_DIR; - } else { - while ((entry = readdir(dp)) != NULL) { - if (strncmp(entry->d_name, ".", 1) == 0 || strncmp(entry->d_name, "..", 2) == 0) { - continue; - } - if (strnlen(path, PATH_MAX) + strnlen(entry->d_name, PATH_MAX) + 2 > sizeof nextpath) { - continue; - } - - snprintf(nextpath, PATH_MAX, "%s/%s", path, entry->d_name); - - // check if file extension matches listdb file extension - if (strncmp(&entry->d_name[strlen(entry->d_name) - strlen(LIBMPQ_CONF_EXT)], LIBMPQ_CONF_EXT, strlen(LIBMPQ_CONF_EXT)) == 0) { - - // check if it is really a listdb file - if ((fp = fopen(nextpath, "r")) != NULL ) { - while (fgets(buf, LIBMPQ_CONF_BUFSIZE, fp) != NULL) { - char *line; - - buf[strlen(buf) - 1] = '\0'; - - // skip whitespace - for (line = buf; isspace(*line); line++) { - continue; - } - - // skip empty line - if (line[0] == '\0') { - continue; - } - - // skip comments - if (line[0] == '#') { - continue; - } - - //search for listdb header; dirty but works :) - if (!strncasecmp(line, LIBMPQ_CONF_HEADER, strlen(LIBMPQ_CONF_HEADER))) { - - // set the next filelist entry to a copy of the file path - (*filelist)[(*fl_count)++] = strdup(nextpath); - - // increase the array size - if ((*fl_count) == (*fl_size)) { - (*filelist) = realloc((*filelist), ((*fl_size) + LIBMPQ_CONF_FL_INCREMENT) * sizeof(char *)); - (*fl_size) += LIBMPQ_CONF_FL_INCREMENT; - } - - // header found so we could stop reading the file. - break; - } - } - fclose(fp); - } - } - - if (stat(nextpath, &statbuf) < 0) { - continue; - } - - // if entry ia a subdirectory, read it - if (S_ISDIR(statbuf.st_mode)) { - libmpq_detect_listfile_rec(nextpath, filelist, fl_count, fl_size); - } - } - closedir(dp); - } - - return LIBMPQ_TOOLS_SUCCESS; -} -*/ - -/* - * This functions tries to get file decryption key. The trick comes from block - * positions which are stored at the begin of each compressed file. We know the - * file size, that means we know number of blocks that means we know the first - * int value in block position. And if we know encrypted and decrypted value, - * we can find the decryption key. - */ -int libmpq_detect_fileseed(mpq_archive *mpq_a, unsigned int *block, unsigned int decrypted) { - unsigned int saveseed1; - unsigned int temp = *block ^ decrypted; /* temp = seed1 + seed2 */ - int i = 0; - temp -= 0xEEEEEEEE; /* temp = seed1 + mpq_a->buf[0x400 + (seed1 & 0xFF)] */ - - for (i = 0; i < 0x100; i++) { /* Try all 255 possibilities */ - unsigned int seed1; - unsigned int seed2 = 0xEEEEEEEE; - unsigned int ch; - - /* Try the first unsigned int's (We exactly know the value) */ - seed1 = temp - mpq_a->buf[0x400 + i]; - seed2 += mpq_a->buf[0x400 + (seed1 & 0xFF)]; - ch = block[0] ^ (seed1 + seed2); - - if (ch != decrypted) { - continue; - } - - /* Add 1 because we are decrypting block positions */ - saveseed1 = seed1 + 1; - - /* - * If OK, continue and test the second value. We don't know exactly the value, - * but we know that the second one has lower 16 bits set to zero - * (no compressed block is larger than 0xFFFF bytes) - */ - seed1 = ((~seed1 << 0x15) + 0x11111111) | (seed1 >> 0x0B); - seed2 = ch + seed2 + (seed2 << 5) + 3; - seed2 += mpq_a->buf[0x400 + (seed1 & 0xFF)]; - ch = block[1] ^ (seed1 + seed2); - if ((ch & 0xFFFF0000) == 0) { - return saveseed1; - } - } - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function initialize the decryption buffer - */ -int libmpq_init_buffer(mpq_archive *mpq_a) { - unsigned int seed = 0x00100001; - unsigned int index1 = 0; - unsigned int index2 = 0; - int i; - - memset(mpq_a->buf, 0, sizeof(mpq_a->buf)); - - /* Initialize the decryption buffer. */ - for (index1 = 0; index1 < 0x100; index1++) { - for(index2 = index1, i = 0; i < 5; i++, index2 += 0x100) { - unsigned int temp1, temp2; - seed = (seed * 125 + 3) % 0x2AAAAB; - temp1 = (seed & 0xFFFF) << 0x10; - - seed = (seed * 125 + 3) % 0x2AAAAB; - temp2 = (seed & 0xFFFF); - - mpq_a->buf[index2] = (temp1 | temp2); - } - } - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This functions fills the mpq_hash structure with the - * hashtable found in the MPQ file. The hashtable will - * be decrypted for later use. - */ -int libmpq_read_hashtable(mpq_archive *mpq_a) { - unsigned int bytes = 0; - int rb = 0; - - /* - * Allocate memory. Note that the block table should be as large as the - * hash table. (for later file additions) - */ - mpq_a->hashtable = (mpq_hash *)malloc(sizeof(mpq_hash) * mpq_a->header->hashtablesize); - - if (!mpq_a->hashtable) { - return LIBMPQ_EALLOCMEM; - } - - /* Read the hash table into the buffer */ - bytes = mpq_a->header->hashtablesize * sizeof(mpq_hash); - - #ifdef WIN32 - _lseeki64(mpq_a->fd, mpq_a->header->hashtablepos, SEEK_SET); - #else - lseek64(mpq_a->fd, mpq_a->header->hashtablepos, SEEK_SET); - #endif - - rb = _read(mpq_a->fd, mpq_a->hashtable, bytes); - if (rb != bytes) { - return LIBMPQ_EFILE_CORRUPT; - } - - /* Decrypt hash table and check if it is correctly decrypted */ - mpq_hash *mpq_h_end = mpq_a->hashtable + mpq_a->header->hashtablesize; - mpq_hash *mpq_h = NULL; - - libmpq_decrypt_hashtable(mpq_a, (unsigned char *)"(hash table)"); - - /* Check hash table if is correctly decrypted */ - for (mpq_h = mpq_a->hashtable; mpq_h < mpq_h_end; mpq_h++) { - if (mpq_h->locale != 0xFFFFFFFF && (mpq_h->locale & 0xFFFF0000) != 0) { - return LIBMPQ_EFILE_FORMAT; - } - - /* Remember the highest block table entry */ - if (mpq_h->blockindex < LIBMPQ_HASH_ENTRY_DELETED && mpq_h->blockindex > 0) { - mpq_a->maxblockindex = mpq_h->blockindex; - } - } - - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This functions fills the mpq_block structure with the - * blocktable found in the MPQ file. The blocktable will - * be decrypted for later use. - * - * NOTICE: Some MPQs have decrypted block table, e.g. - * cracked Diablo versions. - */ -int libmpq_read_blocktable(mpq_archive *mpq_a) { - unsigned int bytes = 0; - int rb = 0; - - /* - * Allocate memory. Note that the block table should be as large as the - * hash table. (for later file additions) - */ - mpq_a->blocktable = (mpq_block *)malloc(sizeof(mpq_block) * mpq_a->header->hashtablesize); - mpq_a->blockbuf = (unsigned char *)malloc(mpq_a->blocksize); - - if (!mpq_a->blocktable || !mpq_a->blockbuf) { - return LIBMPQ_EALLOCMEM; - } - - /* Read the block table into the buffer */ - bytes = mpq_a->header->blocktablesize * sizeof(mpq_block); - memset(mpq_a->blocktable, 0, mpq_a->header->blocktablesize * sizeof(mpq_block)); - - #ifdef WIN32 - _lseeki64(mpq_a->fd, mpq_a->header->blocktablepos, SEEK_SET); - #else - lseek64(mpq_a->fd, mpq_a->header->blocktablepos, SEEK_SET); - #endif - - rb = _read(mpq_a->fd, mpq_a->blocktable, bytes); - if (rb != bytes) { - return LIBMPQ_EFILE_CORRUPT; - } - - /* - * Decrypt block table. Some MPQs don't have encrypted block table, - * e.g. cracked Diablo version. We have to check if block table is - * already decrypted - */ - mpq_block *mpq_b_end = mpq_a->blocktable + mpq_a->maxblockindex + 1; - mpq_block *mpq_b = NULL; - unsigned int archivesize = mpq_a->header->archivesize + mpq_a->mpqpos; - - if (mpq_a->header->offset != mpq_a->blocktable->filepos) { - libmpq_decrypt_blocktable(mpq_a, (unsigned char *)"(block table)"); - } - for (mpq_b = mpq_a->blocktable; mpq_b < mpq_b_end; mpq_b++) { - if (mpq_b->filepos > archivesize || mpq_b->csize > archivesize) { - if ((mpq_a->flags & LIBMPQ_FLAG_PROTECTED) == 0) { - return LIBMPQ_EFILE_FORMAT; - } - } - mpq_b->filepos += mpq_a->mpqpos; - } - - return LIBMPQ_TOOLS_SUCCESS; -} - -int libmpq_file_read_block(mpq_archive *mpq_a, mpq_file *mpq_f, unsigned int blockpos, char *buffer, unsigned int blockbytes) { - unsigned char *tempbuf = NULL; /* Buffer for reading compressed data from the file */ - unsigned int readpos; /* Reading position from the file */ - unsigned int toread = 0; /* Number of bytes to read */ - unsigned int blocknum; /* Block number (needed for decrypt) */ - unsigned int bytesread = 0; /* Total number of bytes read */ - unsigned int nblocks; /* Number of blocks to load */ - unsigned int i; - - /* Test parameters. Block position and block size must be block-aligned, block size nonzero */ - if ((blockpos & (mpq_a->blocksize - 1)) || blockbytes == 0) { - return 0; - } - - /* Check the end of file */ - if ((blockpos + blockbytes) > mpq_f->mpq_b->fsize) { - blockbytes = mpq_f->mpq_b->fsize - blockpos; - } - blocknum = blockpos / mpq_a->blocksize; - nblocks = blockbytes / mpq_a->blocksize; - if (blockbytes % mpq_a->blocksize) { - nblocks++; - } - - /* If file has variable block positions, we have to load them */ - if ((mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) && mpq_f->blockposloaded == FALSE) { - unsigned int nread; - - if (mpq_f->mpq_b->filepos != mpq_a->filepos) { - #ifdef WIN32 - _lseeki64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); - #else - lseek64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); - - #endif - } - - /* Read block positions from begin of file. */ - nread = (mpq_f->nblocks + 1) * sizeof(int); - nread = _read(mpq_a->fd, mpq_f->blockpos, nread); - - /* - * If the archive is protected some way, perform additional check - * Sometimes, the file appears not to be encrypted, but it is. - */ - /*if (mpq_f->blockpos[0] != nread) { - mpq_f->mpq_b->flags |= LIBMPQ_FILE_ENCRYPTED; - }*/ - - if ((mpq_f->mpq_b->flags & LIBMPQ_FILE_HAS_METADATA) == 0) { - if (mpq_f->blockpos[0] != nread) { - mpq_f->mpq_b->flags |= LIBMPQ_FILE_ENCRYPTED; - } - } - - /* Decrypt loaded block positions if necessary */ - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_ENCRYPTED) { - - /* If we don't know the file seed, try to find it. */ - if (mpq_f->seed == 0) { - mpq_f->seed = libmpq_detect_fileseed(mpq_a, mpq_f->blockpos, nread); - } - - /* If we don't know the file seed, sorry but we cannot extract the file. */ - if (mpq_f->seed == 0) { - return 0; - } - - /* Decrypt block positions */ - libmpq_decrypt_block(mpq_a, mpq_f->blockpos, nread, mpq_f->seed - 1); - - /* - * Check if the block positions are correctly decrypted - * I don't know why, but sometimes it will result invalid - * block positions on some files. - */ - if (mpq_f->blockpos[0] != nread) { - - /* Try once again to detect file seed and decrypt the blocks */ - - #ifdef WIN32 - _lseeki64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); - #else - lseek64(mpq_a->fd, mpq_f->mpq_b->filepos, SEEK_SET); - #endif - - nread = _read(mpq_a->fd, mpq_f->blockpos, (mpq_f->nblocks + 1) * sizeof(int)); - mpq_f->seed = libmpq_detect_fileseed(mpq_a, mpq_f->blockpos, nread); - libmpq_decrypt_block(mpq_a, mpq_f->blockpos, nread, mpq_f->seed - 1); - - /* Check if the block positions are correctly decrypted. */ - if (mpq_f->blockpos[0] != nread) { - return 0; - } - } - } - - /* Update mpq_f's variables */ - mpq_f->blockposloaded = TRUE; - mpq_a->filepos = mpq_f->mpq_b->filepos + nread; - } - - /* Get file position and number of bytes to read */ - readpos = blockpos; - toread = blockbytes; - - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) { - readpos = mpq_f->blockpos[blocknum]; - toread = mpq_f->blockpos[blocknum + nblocks] - readpos; - } - - readpos += mpq_f->mpq_b->filepos; - - /* Get work buffer for store read data */ - if ((tempbuf = (unsigned char *)malloc(toread)) == NULL) { - /* Hmmm... We should add a better error handling here :) */ - return 0; - } - - /* Set file pointer, if necessary. */ - if (mpq_a->filepos != readpos) { - - #ifdef WIN32 - mpq_a->filepos = _lseeki64(mpq_a->fd, readpos, SEEK_SET); - #else - mpq_a->filepos = lseek64(mpq_a->fd, readpos, SEEK_SET); - #endif - - } - - /* 15018F87 - Read all requested blocks. */ - bytesread = _read(mpq_a->fd, tempbuf, toread); - mpq_a->filepos = readpos + bytesread; - - /* Block processing part. */ - unsigned int blockstart = 0; /* Index of block start in work buffer. */ - unsigned int blocksize = min(blockbytes, mpq_a->blocksize); - unsigned int index = blocknum; /* Current block index. */ - bytesread = 0; /* Clear read byte counter */ - - /* Walk through all blocks. */ - for (i = 0; i < nblocks; i++, index++) { - int outlength = mpq_a->blocksize; - - /* Get current block length */ - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) { - blocksize = mpq_f->blockpos[index + 1] - mpq_f->blockpos[index]; - } - - /* If block is encrypted, we have to decrypt it. */ - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_ENCRYPTED) { - if (mpq_f->seed == 0) { - return 0; - } - libmpq_decrypt_block(mpq_a, (unsigned int *)&tempbuf[blockstart], blocksize, mpq_f->seed + index); - } - - /* - * If the block is really compressed, recompress it. - * WARNING: Some block may not be compressed, it can - * only be determined by comparing uncompressed and - * compressed size! - */ - if (blocksize < blockbytes) { - - /* Is the file compressed with PKWARE Data Compression Library? */ - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESS_PKWARE) { - libmpq_pkzip_decompress(buffer, &outlength, (char *)&tempbuf[blockstart], blocksize); - } - - /* - * Is it a file compressed by Blizzard's multiple compression ? - * Note that Storm.dll v 1.0.9 distributed with Warcraft III - * passes the full path name of the opened archive as the new - * last parameter. - */ - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESS_MULTI) { - libmpq_multi_decompress(buffer, &outlength, (char *)&tempbuf[blockstart], blocksize); - } - bytesread += outlength; - buffer += outlength; - } else { - memcpy(buffer, tempbuf, blocksize); - bytesread += blocksize; - buffer += blocksize; - } - blockstart += blocksize; - } - - /* Delete input buffer, if necessary. */ - free(tempbuf); - - return bytesread; -} - -int libmpq_file_read_file(mpq_archive *mpq_a, mpq_file *mpq_f, unsigned int filepos, char *buffer, unsigned int toread) { - unsigned int bytesread = 0; /* Number of bytes read from the file */ - unsigned int blockpos; /* Position in the file aligned to the whole blocks */ - unsigned int loaded = 0; - - /* File position is greater or equal to file size? */ - if (filepos >= mpq_f->mpq_b->fsize) { - return 0; - } - - /* If to few bytes in the file remaining, cut them */ - if ((mpq_f->mpq_b->fsize - filepos) < toread) { - toread = (mpq_f->mpq_b->fsize - filepos); - } - - /* Block position in the file */ - blockpos = filepos & ~(mpq_a->blocksize - 1); - - /* - * Load the first block, if noncomplete. It may be loaded in the cache buffer. - * We have to check if this block is loaded. If not, load it. - */ - if ((filepos % mpq_a->blocksize) != 0) { - /* Number of bytes remaining in the buffer */ - unsigned int tocopy; - unsigned int loaded = mpq_a->blocksize; - - /* Check if data are loaded in the cache */ - if (mpq_f->accessed == FALSE || blockpos != mpq_a->blockpos) { - - /* Load one MPQ block into archive buffer */ - loaded = libmpq_file_read_block(mpq_a, mpq_f, blockpos, (char *)mpq_a->blockbuf, mpq_a->blocksize); - if (loaded == 0) { - return 0; - } - - /* Save lastly accessed file and block position for later use */ - mpq_f->accessed = TRUE; - mpq_a->blockpos = blockpos; - mpq_a->bufpos = filepos % mpq_a->blocksize; - } - tocopy = loaded - mpq_a->bufpos; - if (tocopy > toread) { - tocopy = toread; - } - - /* Copy data from block buffer into target buffer */ - memcpy(buffer, mpq_a->blockbuf + mpq_a->bufpos, tocopy); - - /* Update pointers */ - toread -= tocopy; - bytesread += tocopy; - buffer += tocopy; - blockpos += mpq_a->blocksize; - mpq_a->bufpos += tocopy; - - /* If all, return. */ - if (toread == 0) { - return bytesread; - } - } - - /* Load the whole ("middle") blocks only if there are more or equal one block */ - if (toread > mpq_a->blocksize) { - unsigned int blockbytes = toread & ~(mpq_a->blocksize - 1); - loaded = libmpq_file_read_block(mpq_a, mpq_f, blockpos, buffer, blockbytes); - if (loaded == 0) { - return 0; - } - - /* Update pointers */ - toread -= loaded; - bytesread += loaded; - buffer += loaded; - blockpos += loaded; - - /* If all, return. */ - if (toread == 0) { - return bytesread; - } - } - - /* Load the terminating block */ - if (toread > 0) { - unsigned int tocopy = mpq_a->blocksize; - - /* Check if data are loaded in the cache */ - if (mpq_f->accessed == FALSE || blockpos != mpq_a->blockpos) { - - /* Load one MPQ block into archive buffer */ - tocopy = libmpq_file_read_block(mpq_a, mpq_f, blockpos, (char *)mpq_a->blockbuf, mpq_a->blocksize); - if (tocopy == 0) { - return 0; - } - - /* Save lastly accessed file and block position for later use */ - mpq_f->accessed = TRUE; - mpq_a->blockpos = blockpos; - } - mpq_a->bufpos = 0; - - /* Check number of bytes read */ - if (tocopy > toread) { - tocopy = toread; - } - - memcpy(buffer, mpq_a->blockbuf, tocopy); - bytesread += tocopy; - mpq_a->bufpos = tocopy; - } - - /* Return what we've read */ - return bytesread; -} - diff --git a/src/tools/map_extractor/libmpq/common.h b/src/tools/map_extractor/libmpq/common.h deleted file mode 100644 index 3212d014129..00000000000 --- a/src/tools/map_extractor/libmpq/common.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * common.h -- defines and structs used by the config files. - * - * Copyright (C) 2003 Maik Broemme - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id: common.h,v 1.4 2004/02/12 00:41:55 mbroemme Exp $ - */ - -#define LIBMPQ_CONF_FL_INCREMENT 512 /* i hope we did not need more :) */ -#define LIBMPQ_CONF_EXT ".conf" /* listdb file seems to be valid with this extension */ -#define LIBMPQ_CONF_HEADER "LIBMPQ_VERSION" /* listdb file must include this entry to be valid */ -#define LIBMPQ_CONF_BUFSIZE 4096 /* maximum number of bytes a line in the file could contain */ - -#define LIBMPQ_CONF_TYPE_CHAR 1 /* value in config file is from type char */ -#define LIBMPQ_CONF_TYPE_INT 2 /* value in config file is from type int */ - -#define LIBMPQ_CONF_EOPEN_DIR -1 /* error on open directory */ -#define LIBMPQ_CONF_EVALUE_NOT_FOUND -2 /* value for the option was not found */ - -#if defined( __GNUC__ ) - #include - #include - - #define _lseek lseek - #define _read read - #define _open open - #define _write write - #define _close close - #define _strdup strdup - - #ifndef O_BINARY - #define O_BINARY 0 - #endif -#else - #include -#endif - -#ifdef O_LARGEFILE - #define MPQ_FILE_OPEN_FLAGS (O_RDONLY | O_BINARY | O_LARGEFILE) -#else - #define MPQ_FILE_OPEN_FLAGS (O_RDONLY | O_BINARY) -#endif - -#ifndef min - #define min(a, b) ((a < b) ? a : b) -#endif - -int libmpq_init_buffer(mpq_archive *mpq_a); -int libmpq_read_hashtable(mpq_archive *mpq_a); -int libmpq_read_blocktable(mpq_archive *mpq_a); -int libmpq_file_read_file(mpq_archive *mpq_a, mpq_file *mpq_f, unsigned int filepos, char *buffer, unsigned int toread); -int libmpq_read_listfile(mpq_archive *mpq_a, FILE *fp); - -int libmpq_conf_get_value(FILE *fp, char *search_value, void *return_value, int type, int size); -char *libmpq_conf_delete_char(char *buf, char *chars); -int libmpq_conf_get_array(FILE *fp, char *search_value, char ***filelist, int *entries); -int libmpq_free_listfile(char **filelist); -int libmpq_read_listfile(mpq_archive *mpq_a, FILE *fp); - diff --git a/src/tools/map_extractor/libmpq/explode.cpp b/src/tools/map_extractor/libmpq/explode.cpp deleted file mode 100644 index c3885cbbddd..00000000000 --- a/src/tools/map_extractor/libmpq/explode.cpp +++ /dev/null @@ -1,429 +0,0 @@ -/* - * explode.c -- explode function of PKWARE data compression library. - * - * Copyright (C) 2003 Maik Broemme - * - * This source was adepted from the C++ version of pkware.cpp included - * in stormlib. The C++ version belongs to the following authors, - * - * Ladislav Zezula - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include - -#include "mpq.h" -#include "explode.h" - -/* Tables */ -static unsigned char pkzip_dist_bits[] = { - 0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 -}; - -static unsigned char pkzip_dist_code[] = { - 0x03, 0x0D, 0x05, 0x19, 0x09, 0x11, 0x01, 0x3E, 0x1E, 0x2E, 0x0E, 0x36, 0x16, 0x26, 0x06, 0x3A, - 0x1A, 0x2A, 0x0A, 0x32, 0x12, 0x22, 0x42, 0x02, 0x7C, 0x3C, 0x5C, 0x1C, 0x6C, 0x2C, 0x4C, 0x0C, - 0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08, - 0xF0, 0x70, 0xB0, 0x30, 0xD0, 0x50, 0x90, 0x10, 0xE0, 0x60, 0xA0, 0x20, 0xC0, 0x40, 0x80, 0x00 -}; - -static unsigned char pkzip_clen_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 -}; - -static unsigned short pkzip_len_base[] = { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x000A, 0x000E, 0x0016, 0x0026, 0x0046, 0x0086, 0x0106 -}; - -static unsigned char pkzip_slen_bits[] = { - 0x03, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07 -}; - -static unsigned char pkzip_len_code[] = { - 0x05, 0x03, 0x01, 0x06, 0x0A, 0x02, 0x0C, 0x14, 0x04, 0x18, 0x08, 0x30, 0x10, 0x20, 0x40, 0x00 -}; - -static unsigned char pkzip_bits_asc[] = { - 0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x07, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, - 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, - 0x04, 0x0A, 0x08, 0x0C, 0x0A, 0x0C, 0x0A, 0x08, 0x07, 0x07, 0x08, 0x09, 0x07, 0x06, 0x07, 0x08, - 0x07, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x08, 0x08, 0x0C, 0x0B, 0x07, 0x09, 0x0B, - 0x0C, 0x06, 0x07, 0x06, 0x06, 0x05, 0x07, 0x08, 0x08, 0x06, 0x0B, 0x09, 0x06, 0x07, 0x06, 0x06, - 0x07, 0x0B, 0x06, 0x06, 0x06, 0x07, 0x09, 0x08, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x09, 0x0C, 0x08, - 0x0C, 0x05, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x0B, 0x07, 0x05, 0x06, 0x05, 0x05, - 0x06, 0x0A, 0x05, 0x05, 0x05, 0x05, 0x08, 0x07, 0x08, 0x08, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C, - 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, - 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, - 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, - 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, - 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, - 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, - 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, - 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D -}; - -static unsigned short pkzip_code_asc[] = { - 0x0490, 0x0FE0, 0x07E0, 0x0BE0, 0x03E0, 0x0DE0, 0x05E0, 0x09E0, - 0x01E0, 0x00B8, 0x0062, 0x0EE0, 0x06E0, 0x0022, 0x0AE0, 0x02E0, - 0x0CE0, 0x04E0, 0x08E0, 0x00E0, 0x0F60, 0x0760, 0x0B60, 0x0360, - 0x0D60, 0x0560, 0x1240, 0x0960, 0x0160, 0x0E60, 0x0660, 0x0A60, - 0x000F, 0x0250, 0x0038, 0x0260, 0x0050, 0x0C60, 0x0390, 0x00D8, - 0x0042, 0x0002, 0x0058, 0x01B0, 0x007C, 0x0029, 0x003C, 0x0098, - 0x005C, 0x0009, 0x001C, 0x006C, 0x002C, 0x004C, 0x0018, 0x000C, - 0x0074, 0x00E8, 0x0068, 0x0460, 0x0090, 0x0034, 0x00B0, 0x0710, - 0x0860, 0x0031, 0x0054, 0x0011, 0x0021, 0x0017, 0x0014, 0x00A8, - 0x0028, 0x0001, 0x0310, 0x0130, 0x003E, 0x0064, 0x001E, 0x002E, - 0x0024, 0x0510, 0x000E, 0x0036, 0x0016, 0x0044, 0x0030, 0x00C8, - 0x01D0, 0x00D0, 0x0110, 0x0048, 0x0610, 0x0150, 0x0060, 0x0088, - 0x0FA0, 0x0007, 0x0026, 0x0006, 0x003A, 0x001B, 0x001A, 0x002A, - 0x000A, 0x000B, 0x0210, 0x0004, 0x0013, 0x0032, 0x0003, 0x001D, - 0x0012, 0x0190, 0x000D, 0x0015, 0x0005, 0x0019, 0x0008, 0x0078, - 0x00F0, 0x0070, 0x0290, 0x0410, 0x0010, 0x07A0, 0x0BA0, 0x03A0, - 0x0240, 0x1C40, 0x0C40, 0x1440, 0x0440, 0x1840, 0x0840, 0x1040, - 0x0040, 0x1F80, 0x0F80, 0x1780, 0x0780, 0x1B80, 0x0B80, 0x1380, - 0x0380, 0x1D80, 0x0D80, 0x1580, 0x0580, 0x1980, 0x0980, 0x1180, - 0x0180, 0x1E80, 0x0E80, 0x1680, 0x0680, 0x1A80, 0x0A80, 0x1280, - 0x0280, 0x1C80, 0x0C80, 0x1480, 0x0480, 0x1880, 0x0880, 0x1080, - 0x0080, 0x1F00, 0x0F00, 0x1700, 0x0700, 0x1B00, 0x0B00, 0x1300, - 0x0DA0, 0x05A0, 0x09A0, 0x01A0, 0x0EA0, 0x06A0, 0x0AA0, 0x02A0, - 0x0CA0, 0x04A0, 0x08A0, 0x00A0, 0x0F20, 0x0720, 0x0B20, 0x0320, - 0x0D20, 0x0520, 0x0920, 0x0120, 0x0E20, 0x0620, 0x0A20, 0x0220, - 0x0C20, 0x0420, 0x0820, 0x0020, 0x0FC0, 0x07C0, 0x0BC0, 0x03C0, - 0x0DC0, 0x05C0, 0x09C0, 0x01C0, 0x0EC0, 0x06C0, 0x0AC0, 0x02C0, - 0x0CC0, 0x04C0, 0x08C0, 0x00C0, 0x0F40, 0x0740, 0x0B40, 0x0340, - 0x0300, 0x0D40, 0x1D00, 0x0D00, 0x1500, 0x0540, 0x0500, 0x1900, - 0x0900, 0x0940, 0x1100, 0x0100, 0x1E00, 0x0E00, 0x0140, 0x1600, - 0x0600, 0x1A00, 0x0E40, 0x0640, 0x0A40, 0x0A00, 0x1200, 0x0200, - 0x1C00, 0x0C00, 0x1400, 0x0400, 0x1800, 0x0800, 0x1000, 0x0000 -}; - -/* Local variables */ -static char copyright[] = "PKWARE Data Compression Library for Win32\r\n" - "Copyright 1989-1995 PKWARE Inc. All Rights Reserved\r\n" - "Patent No. 5,051,745\r\n" - "PKWARE Data Compression Library Reg. U.S. Pat. and Tm. Off.\r\n" - "Version 1.11\r\n"; - -/* Local functions */ -static void libmpq_pkzip_gen_decode_tabs(long count, unsigned char *bits, unsigned char *code, unsigned char *buf2) { - long i; - - for (i = count-1; i >= 0; i--) { /* EBX - count */ - unsigned long idx1 = code[i]; - unsigned long idx2 = 1 << bits[i]; - do { - buf2[idx1] = (unsigned char)i; - idx1 += idx2; - } while (idx1 < 0x100); - } -} - -static void libmpq_pkzip_gen_asc_tabs(pkzip_data_cmp *mpq_pkzip) { - unsigned short *code_asc = &pkzip_code_asc[0xFF]; - unsigned long acc, add; - unsigned short count; - - for (count = 0x00FF; code_asc >= pkzip_code_asc; code_asc--, count--) { - unsigned char *bits_asc = mpq_pkzip->bits_asc + count; - unsigned char bits_tmp = *bits_asc; - - if (bits_tmp <= 8) { - add = (1 << bits_tmp); - acc = *code_asc; - do { - mpq_pkzip->offs_2c34[acc] = (unsigned char)count; - acc += add; - } while (acc < 0x100); - } else { - if ((acc = (*code_asc & 0xFF)) != 0) { - mpq_pkzip->offs_2c34[acc] = 0xFF; - if (*code_asc & 0x3F) { - bits_tmp -= 4; - *bits_asc = bits_tmp; - add = (1 << bits_tmp); - acc = *code_asc >> 4; - do { - mpq_pkzip->offs_2d34[acc] = (unsigned char)count; - acc += add; - } while (acc < 0x100); - } else { - bits_tmp -= 6; - *bits_asc = bits_tmp; - add = (1 << bits_tmp); - acc = *code_asc >> 6; - do { - mpq_pkzip->offs_2e34[acc] = (unsigned char)count; - acc += add; - } while (acc < 0x80); - } - } else { - bits_tmp -= 8; - *bits_asc = bits_tmp; - add = (1 << bits_tmp); - acc = *code_asc >> 8; - do { - mpq_pkzip->offs_2eb4[acc] = (unsigned char)count; - acc += add; - } while (acc < 0x100); - } - } - } -} - -/* - * Skips given number of bits in bit buffer. Result is stored in mpq_pkzip->bit_buf - * If no data in input buffer, returns true - */ -static int libmpq_pkzip_skip_bits(pkzip_data_cmp *mpq_pkzip, unsigned long bits) { - /* If number of bits required is less than number of (bits in the buffer) ? */ - if (bits <= mpq_pkzip->extra_bits) { - mpq_pkzip->extra_bits -= bits; - mpq_pkzip->bit_buf >>= bits; - return 0; - } - - /* Load input buffer if necessary */ - mpq_pkzip->bit_buf >>= mpq_pkzip->extra_bits; - if (mpq_pkzip->in_pos == mpq_pkzip->in_bytes) { - mpq_pkzip->in_pos = sizeof(mpq_pkzip->in_buf); - if ((mpq_pkzip->in_bytes = mpq_pkzip->read_buf((char *)mpq_pkzip->in_buf, &mpq_pkzip->in_pos, mpq_pkzip->param)) == 0) { - return 1; - } - mpq_pkzip->in_pos = 0; - } - - /* Update bit buffer */ - mpq_pkzip->bit_buf |= (mpq_pkzip->in_buf[mpq_pkzip->in_pos++] << 8); - mpq_pkzip->bit_buf >>= (bits - mpq_pkzip->extra_bits); - mpq_pkzip->extra_bits = (mpq_pkzip->extra_bits - bits) + 8; - return 0; -} - -/* - * Decompress the imploded data using coded literals. - * Returns: 0x000 - 0x0FF : One byte from compressed file. - * 0x100 - 0x305 : Copy previous block (0x100 = 1 byte) - * 0x306 : Out of buffer (?) - */ -static unsigned long libmpq_pkzip_explode_lit(pkzip_data_cmp *mpq_pkzip) { - unsigned long bits; /* Number of bits to skip */ - unsigned long value; /* Position in buffers */ - - /* Test the current bit in byte buffer. If is not set, simply return the next byte. */ - if (mpq_pkzip->bit_buf & 1) { - - /* Skip current bit in the buffer. */ - if (libmpq_pkzip_skip_bits(mpq_pkzip, 1)) { - return 0x306; - } - - /* The next bits are position in buffers. */ - value = mpq_pkzip->pos2[(mpq_pkzip->bit_buf & 0xFF)]; - - /* Get number of bits to skip */ - if (libmpq_pkzip_skip_bits(mpq_pkzip, mpq_pkzip->slen_bits[value])) { - return 0x306; - } - if ((bits = mpq_pkzip->clen_bits[value]) != 0) { - unsigned long val2 = mpq_pkzip->bit_buf & ((1 << bits) - 1); - if (libmpq_pkzip_skip_bits(mpq_pkzip, bits)) { - if ((value + val2) != 0x10E) { - return 0x306; - } - } - value = mpq_pkzip->len_base[value] + val2; - } - return value + 0x100; /* Return number of bytes to repeat */ - } - - /* Skip one bit */ - if (libmpq_pkzip_skip_bits(mpq_pkzip, 1)) { - return 0x306; - } - - /* If the binary compression type, read 8 bits and return them as one byte. */ - if (mpq_pkzip->cmp_type == LIBMPQ_PKZIP_CMP_BINARY) { - value = mpq_pkzip->bit_buf & 0xFF; - if (libmpq_pkzip_skip_bits(mpq_pkzip, 8)) { - return 0x306; - } - return value; - } - - /* When ASCII compression ... */ - if (mpq_pkzip->bit_buf & 0xFF) { - value = mpq_pkzip->offs_2c34[mpq_pkzip->bit_buf & 0xFF]; - if (value == 0xFF) { - if (mpq_pkzip->bit_buf & 0x3F) { - if (libmpq_pkzip_skip_bits(mpq_pkzip, 4)) { - return 0x306; - } - value = mpq_pkzip->offs_2d34[mpq_pkzip->bit_buf & 0xFF]; - } else { - if (libmpq_pkzip_skip_bits(mpq_pkzip, 6)) { - return 0x306; - } - value = mpq_pkzip->offs_2e34[mpq_pkzip->bit_buf & 0x7F]; - } - } - } else { - if (libmpq_pkzip_skip_bits(mpq_pkzip, 8)) { - return 0x306; - } - value = mpq_pkzip->offs_2eb4[mpq_pkzip->bit_buf & 0xFF]; - } - return libmpq_pkzip_skip_bits(mpq_pkzip, mpq_pkzip->bits_asc[value]) ? 0x306 : value; -} - -/* - * Retrieves the number of bytes to move back. - */ -static unsigned long libmpq_pkzip_explode_dist(pkzip_data_cmp *mpq_pkzip, unsigned long length) { - unsigned long pos = mpq_pkzip->pos1[(mpq_pkzip->bit_buf & 0xFF)]; - unsigned long skip = mpq_pkzip->dist_bits[pos]; /* Number of bits to skip */ - - /* Skip the appropriate number of bits */ - if (libmpq_pkzip_skip_bits(mpq_pkzip, skip) == 1) { - return 0; - } - if (length == 2) { - pos = (pos << 2) | (mpq_pkzip->bit_buf & 0x03); - if (libmpq_pkzip_skip_bits(mpq_pkzip, 2) == 1) { - return 0; - } - } else { - pos = (pos << mpq_pkzip->dsize_bits) | (mpq_pkzip->bit_buf & mpq_pkzip->dsize_mask); - - /* Skip the bits */ - if (libmpq_pkzip_skip_bits(mpq_pkzip, mpq_pkzip->dsize_bits) == 1) { - return 0; - } - } - return pos + 1; -} - -static unsigned long libmpq_pkzip_expand(pkzip_data_cmp *mpq_pkzip) { - unsigned int copy_bytes; /* Number of bytes to copy */ - unsigned long one_byte; /* One byte from compressed file */ - unsigned long result; - - mpq_pkzip->out_pos = 0x1000; /* Initialize output buffer position */ - - /* If end of data or error, terminate decompress */ - while ((result = one_byte = libmpq_pkzip_explode_lit(mpq_pkzip)) < 0x305) { - - /* If one byte is greater than 0x100, means "Repeat n - 0xFE bytes" */ - if (one_byte >= 0x100) { - unsigned char *source; /* ECX */ - unsigned char *target; /* EDX */ - unsigned long copy_length = one_byte - 0xFE; - unsigned long move_back; - - /* Get length of data to copy */ - if ((move_back = libmpq_pkzip_explode_dist(mpq_pkzip, copy_length)) == 0) { - result = 0x306; - break; - } - - /* Target and source pointer */ - target = &mpq_pkzip->out_buf[mpq_pkzip->out_pos]; - source = target - move_back; - mpq_pkzip->out_pos += copy_length; - while (copy_length-- > 0) { - *target++ = *source++; - } - } else { - mpq_pkzip->out_buf[mpq_pkzip->out_pos++] = (unsigned char)one_byte; - } - - /* - * If number of extracted bytes has reached 1/2 of output buffer, - * flush output buffer. - */ - if (mpq_pkzip->out_pos >= 0x2000) { - - /* Copy decompressed data into user buffer. */ - copy_bytes = 0x1000; - mpq_pkzip->write_buf((char *)&mpq_pkzip->out_buf[0x1000], ©_bytes, mpq_pkzip->param); - - /* If there are some data left, keep them alive */ - memcpy(mpq_pkzip->out_buf, &mpq_pkzip->out_buf[0x1000], mpq_pkzip->out_pos - 0x1000); - mpq_pkzip->out_pos -= 0x1000; - } - } - copy_bytes = mpq_pkzip->out_pos - 0x1000; - mpq_pkzip->write_buf((char *)&mpq_pkzip->out_buf[0x1000], ©_bytes, mpq_pkzip->param); - return result; -} - -/* - * Main exploding function. - */ -unsigned int libmpq_pkzip_explode( - unsigned int (*read_buf)(char *buf, unsigned int *size, void *param), - void (*write_buf)(char *buf, unsigned int *size, void *param), - char *work_buf, - void *param) { - - pkzip_data_cmp *mpq_pkzip = (pkzip_data_cmp *)work_buf; - - /* Set the whole work buffer to zeros */ - memset(mpq_pkzip, 0, sizeof(pkzip_data_cmp)); - - /* Initialize work struct and load compressed data */ - mpq_pkzip->read_buf = read_buf; - mpq_pkzip->write_buf = write_buf; - mpq_pkzip->param = param; - mpq_pkzip->in_pos = sizeof(mpq_pkzip->in_buf); - mpq_pkzip->in_bytes = mpq_pkzip->read_buf((char *)mpq_pkzip->in_buf, &mpq_pkzip->in_pos, mpq_pkzip->param); - if (mpq_pkzip->in_bytes <= 4) { - return LIBMPQ_PKZIP_CMP_BAD_DATA; - } - mpq_pkzip->cmp_type = mpq_pkzip->in_buf[0]; /* Get the compression type */ - mpq_pkzip->dsize_bits = mpq_pkzip->in_buf[1]; /* Get the dictionary size */ - mpq_pkzip->bit_buf = mpq_pkzip->in_buf[2]; /* Initialize 16-bit bit buffer */ - mpq_pkzip->extra_bits = 0; /* Extra (over 8) bits */ - mpq_pkzip->in_pos = 3; /* Position in input buffer */ - - /* Test for the valid dictionary size */ - if (4 > mpq_pkzip->dsize_bits || mpq_pkzip->dsize_bits > 6) { - return LIBMPQ_PKZIP_CMP_INV_DICTSIZE; - } - mpq_pkzip->dsize_mask = 0xFFFF >> (0x10 - mpq_pkzip->dsize_bits); /* Shifted by 'sar' instruction */ - if (mpq_pkzip->cmp_type != LIBMPQ_PKZIP_CMP_BINARY) { - if (mpq_pkzip->cmp_type != LIBMPQ_PKZIP_CMP_ASCII) { - return LIBMPQ_PKZIP_CMP_INV_MODE; - } - memcpy(mpq_pkzip->bits_asc, pkzip_bits_asc, sizeof(mpq_pkzip->bits_asc)); - libmpq_pkzip_gen_asc_tabs(mpq_pkzip); - } - memcpy(mpq_pkzip->slen_bits, pkzip_slen_bits, sizeof(mpq_pkzip->slen_bits)); - libmpq_pkzip_gen_decode_tabs(0x10, mpq_pkzip->slen_bits, pkzip_len_code, mpq_pkzip->pos2); - memcpy(mpq_pkzip->clen_bits, pkzip_clen_bits, sizeof(mpq_pkzip->clen_bits)); - memcpy(mpq_pkzip->len_base, pkzip_len_base, sizeof(mpq_pkzip->len_base)); - memcpy(mpq_pkzip->dist_bits, pkzip_dist_bits, sizeof(mpq_pkzip->dist_bits)); - libmpq_pkzip_gen_decode_tabs(0x40, mpq_pkzip->dist_bits, pkzip_dist_code, mpq_pkzip->pos1); - if (libmpq_pkzip_expand(mpq_pkzip) != 0x306) { - return LIBMPQ_PKZIP_CMP_NO_ERROR; - } - return LIBMPQ_PKZIP_CMP_ABORT; -} - diff --git a/src/tools/map_extractor/libmpq/explode.h b/src/tools/map_extractor/libmpq/explode.h deleted file mode 100644 index ca20e887d5b..00000000000 --- a/src/tools/map_extractor/libmpq/explode.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * explode.h -- header file for PKWARE data decompression library - * used by mpq-tools. - * - * Copyright (C) 2003 Maik Broemme - * - * This source was adepted from the C++ version of pklib.h included - * in stormlib. The C++ version belongs to the following authors, - * - * Ladislav Zezula - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _EXPLODE_H -#define _EXPLODE_H - -#define LIBMPQ_PKZIP_EXP_BUFFER_SIZE 12596 /* Size of decompress buffer */ -#define LIBMPQ_PKZIP_CMP_BINARY 0 /* Binary compression */ -#define LIBMPQ_PKZIP_CMP_ASCII 1 /* Ascii compression */ -#define LIBMPQ_PKZIP_CMP_NO_ERROR 0 -#define LIBMPQ_PKZIP_CMP_INV_DICTSIZE 1 -#define LIBMPQ_PKZIP_CMP_INV_MODE 2 -#define LIBMPQ_PKZIP_CMP_BAD_DATA 3 -#define LIBMPQ_PKZIP_CMP_ABORT 4 - -/* Compression structure (size: 12596 bytes on x86-32) */ -typedef struct { - unsigned long offs0000; /* 0000 */ - unsigned long cmp_type; /* 0004 - Compression type (LIBMPQ_PZIP_CMP_BINARY or LIBMPQ_PKZIP_CMP_ASCII) */ - unsigned long out_pos; /* 0008 - Position in output buffer */ - unsigned long dsize_bits; /* 000C - Dict size (4, 5, 6 for 0x400, 0x800, 0x1000) */ - unsigned long dsize_mask; /* 0010 - Dict size bitmask (0x0F, 0x1F, 0x3F for 0x400, 0x800, 0x1000) */ - unsigned long bit_buf; /* 0014 - 16-bit buffer for processing input data */ - unsigned long extra_bits; /* 0018 - Number of extra (above 8) bits in bit buffer */ - unsigned int in_pos; /* 001C - Position in in_buf */ - unsigned long in_bytes; /* 0020 - Number of bytes in input buffer */ - void *param; /* 0024 - Custom parameter */ - unsigned int (*read_buf)(char *buf, unsigned int *size, void *param); /* 0028 */ - void (*write_buf)(char *buf, unsigned int *size, void *param); /* 002C */ - unsigned char out_buf[0x2000]; /* 0030 - Output circle buffer. Starting position is 0x1000 */ - unsigned char offs_2030[0x204]; /* 2030 - ??? */ - unsigned char in_buf[0x800]; /* 2234 - Buffer for data to be decompressed */ - unsigned char pos1[0x100]; /* 2A34 - Positions in buffers */ - unsigned char pos2[0x100]; /* 2B34 - Positions in buffers */ - unsigned char offs_2c34[0x100]; /* 2C34 - Buffer for */ - unsigned char offs_2d34[0x100]; /* 2D34 - Buffer for */ - unsigned char offs_2e34[0x80]; /* 2EB4 - Buffer for */ - unsigned char offs_2eb4[0x100]; /* 2EB4 - Buffer for */ - unsigned char bits_asc[0x100]; /* 2FB4 - Buffer for */ - unsigned char dist_bits[0x40]; /* 30B4 - Numbers of bytes to skip copied block length */ - unsigned char slen_bits[0x10]; /* 30F4 - Numbers of bits for skip copied block length */ - unsigned char clen_bits[0x10]; /* 3104 - Number of valid bits for copied block */ - unsigned short len_base[0x10]; /* 3114 - Buffer for */ -} pkzip_data_cmp; -// __attribute__ ((packed)) pkzip_data_cmp; - -typedef struct { - char *in_buf; /* Pointer to input data buffer */ - unsigned int in_pos; /* Current offset in input data buffer */ - int in_bytes; /* Number of bytes in the input buffer */ - char *out_buf; /* Pointer to output data buffer */ - unsigned int out_pos; /* Position in the output buffer */ - int max_out; /* Maximum number of bytes in the output buffer */ -} pkzip_data; - -extern unsigned int libmpq_pkzip_explode( - unsigned int (*read_buf)(char *buf, unsigned int *size, void *param), - void (*write_buf)(char *buf, unsigned int *size, void *param), - char *work_buf, - void *param -); - -#endif /* _EXPLODE_H */ - diff --git a/src/tools/map_extractor/libmpq/extract.cpp b/src/tools/map_extractor/libmpq/extract.cpp deleted file mode 100644 index c0db1930375..00000000000 --- a/src/tools/map_extractor/libmpq/extract.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* - * extract.c -- global extracting function for all known file compressions - * in a MPQ archive. - * - * Copyright (C) 2003 Maik Broemme - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#define HAVE_LIBZ -#ifdef HAVE_LIBZ -#include -#endif - -#include "mpq.h" -#include "explode.h" -#include "huffman.h" - -#include "wave.h" - -/* - * Support functions for PKWARE data compression library. - * - * Function loads data from the input buffer. Used by mpq_pkzip - * "implode" and "explode" function as user-defined callback. - * Returns number of bytes loaded. - * - * char * buf - Pointer to a buffer where to store loaded data - * unsigned int * size - Max. number of bytes to read - * void * param - Custom pointer, parameter of implode/explode - */ -static unsigned int libmpq_pkzip_read_input_data(char *buf, unsigned int *size, void *param) { - pkzip_data *info = (pkzip_data *)param; - unsigned int max_avail = (info->in_bytes - info->in_pos); - unsigned int to_read = *size; - - /* Check the case when not enough data available */ - if (to_read > max_avail) { - to_read = max_avail; - } - - /* Load data and increment offsets */ - memcpy(buf, info->in_buf + info->in_pos, to_read); - info->in_pos += to_read; - - return to_read; -} - -/* - * Support functions for PKWARE data compression library. - * - * Function for store output data. Used by mpq_pkzip "implode" and - * "explode" as user-defined callback. - * - * char * buf - Pointer to data to be written - * unsigned int * size - Number of bytes to write - * void * param - Custom pointer, parameter of implode/explode - */ -static void libmpq_pkzip_write_output_data(char *buf, unsigned int *size, void *param) { - pkzip_data *info = (pkzip_data *)param; - unsigned int max_write = (info->max_out - info->out_pos); - unsigned int to_write = *size; - - /* Check the case when not enough space in the output buffer */ - if (to_write > max_write) { - to_write = max_write; - } - - /* Write output data and increments offsets */ - memcpy(info->out_buf + info->out_pos, buf, to_write); - info->out_pos += to_write; -} - -int libmpq_pkzip_decompress(char *out_buf, int *out_length, char *in_buf, int in_length) { - pkzip_data info; /* Data information */ - char *work_buf = (char *)malloc(LIBMPQ_PKZIP_EXP_BUFFER_SIZE); /* mpq_pkzip work buffer */ - - /* Fill data information structure */ - info.in_buf = in_buf; - info.in_pos = 0; - info.in_bytes = in_length; - info.out_buf = out_buf; - info.out_pos = 0; - info.max_out = *out_length; - - /* Do the decompression */ - libmpq_pkzip_explode(libmpq_pkzip_read_input_data, libmpq_pkzip_write_output_data, work_buf, &info); - *out_length = info.out_pos; - free(work_buf); - return 0; -} - -int libmpq_wave_decompress_mono(char *out_buf, int *out_length, char *in_buf, int in_length) { - *out_length = libmpq_wave_decompress((unsigned char *)out_buf, *out_length, (unsigned char *)in_buf, in_length, 1); - return 1; -} - -int libmpq_wave_decompress_stereo(char *out_buf, int *out_length, char *in_buf, int in_length) { - *out_length = libmpq_wave_decompress((unsigned char *)out_buf, *out_length, (unsigned char *)in_buf, in_length, 2); - return 1; -} - -int libmpq_zlib_decompress(char *out_buf, int *out_length, char *in_buf, int in_length) { -#ifdef HAVE_LIBZ - z_stream z; /* Stream information for zlib */ - int result; - - /* Fill the stream structure for zlib */ - z.next_in = (Bytef *)in_buf; - z.avail_in = (uInt)in_length; - z.total_in = in_length; - z.next_out = (Bytef *)out_buf; - z.avail_out = *out_length; - z.total_out = 0; - z.zalloc = NULL; - z.zfree = NULL; - - /* Initialize the decompression structure. Storm.dll uses zlib version 1.1.3 */ - if ((result = inflateInit(&z)) == 0) { - - /* Call zlib to decompress the data */ - result = inflate(&z, Z_FINISH); - *out_length = z.total_out; - inflateEnd(&z); - } - return result; -#else - memset(out_buf, '0', *out_length); - return 0; -#endif -} - -/* - * Huffmann decompression routine. The in_length parameter is not used, but needs - * to be specified due to compatibility reasons. - * - * 1500F5F0 - */ -int libmpq_huff_decompress(char *out_buf, int *out_length, char *in_buf, int in_length) { - struct huffman_tree *ht = (huffman_tree *)malloc(sizeof(struct huffman_tree)); - struct huffman_input_stream *is = (huffman_input_stream *)malloc(sizeof(struct huffman_input_stream)); - struct huffman_tree_item *hi = (huffman_tree_item *)malloc(sizeof(struct huffman_tree_item)); - memset(ht, 0, sizeof(struct huffman_tree)); - memset(is, 0, sizeof(struct huffman_input_stream)); - memset(hi, 0, sizeof(struct huffman_tree_item)); - - /* Initialize input stream */ - is->bit_buf = *(unsigned long *)in_buf; - in_buf += sizeof(unsigned long); - is->in_buf = (unsigned char *)in_buf; - is->bits = 32; - - /* Initialize the Huffmann tree for decompression */ - libmpq_huff_init_tree(ht, hi, LIBMPQ_HUFF_DECOMPRESS); - - *out_length = libmpq_huff_do_decompress(ht, is, (unsigned char *)out_buf, *out_length); - - free(hi); - free(is); - free(ht); - return 0; -} - -int libmpq_multi_decompress(char *out_buf, int *pout_length, char *in_buf, int in_length) { - char *temp_buf = NULL; /* Temporary storage for decompressed data */ - char *work_buf = NULL; /* Where to store decompressed data */ - int out_length = *pout_length; /* For storage number of output bytes */ - unsigned fDecompressions1; /* Decompressions applied to the block */ - unsigned fDecompressions2; /* Just another copy of decompressions applied to the block */ - int count = 0; /* Counter for every use */ - int entries = (sizeof(dcmp_table) / sizeof(decompress_table)); - int i; - - /* If the input length is the same as output, do nothing. */ - if (in_length == out_length) { - if (in_buf == out_buf) { - return 1; - } - memcpy(out_buf, in_buf, in_length); - return 1; - } - - /* Get applied compression types and decrement data length */ - fDecompressions1 = fDecompressions2 = (unsigned char)*in_buf++; - in_length--; - - /* Search decompression table type and get all types of compression */ - for (i = 0; i < entries; i++) { - /* We have to apply this decompression? */ - if (fDecompressions1 & dcmp_table[i].mask) { - count++; - } - - /* Clear this flag from temporary variable. */ - fDecompressions2 &= ~dcmp_table[i].mask; - } - - /* - * Check if there is some method unhandled - * (E.g. compressed by future versions) - */ - if (fDecompressions2 != 0) { - printf("Unknown Compression\n"); - return 0; - } - - /* If there is more than only one compression, we have to allocate extra buffer */ - if (count >= 2) { - temp_buf = (char *)malloc(out_length); - } - - /* Apply all decompressions */ - for (i = 0, count = 0; i < entries; i++) { - - /* If not used this kind of compression, skip the loop */ - if (fDecompressions1 & dcmp_table[i].mask) { - - /* If odd case, use target buffer for output, otherwise use allocated tempbuf */ - work_buf = (count++ & 1) ? temp_buf : out_buf; - out_length = *pout_length; - - /* Decompress buffer using corresponding function */ - dcmp_table[i].decompress(work_buf, &out_length, in_buf, in_length); - - /* Move output length to src length for next compression */ - in_length = out_length; - in_buf = work_buf; - } - } - - /* If output buffer is not the same like target buffer, we have to copy data */ - if (work_buf != out_buf) { - memcpy(out_buf, in_buf, out_length); - } - *pout_length = out_length; - - /* Delete temporary buffer, if necessary */ - if (temp_buf != NULL) { - free(temp_buf); - } - return 1; -} - diff --git a/src/tools/map_extractor/libmpq/huffman.cpp b/src/tools/map_extractor/libmpq/huffman.cpp deleted file mode 100644 index ff796d065fb..00000000000 --- a/src/tools/map_extractor/libmpq/huffman.cpp +++ /dev/null @@ -1,834 +0,0 @@ -/* - * huffman.c -- functions do decompress files in MPQ files which - * uses a modified huffman version. - * - * Copyright (C) 2003 Maik Broemme - * - * Differences between C++ and C version: - * - * - Removed the object oriented stuff. - * - Replaced the goto things with some better C code. - * - * This source was adepted from the C++ version of huffman.cpp included - * in stormlib. The C++ version belongs to the following authors, - * - * Ladislav Zezula - * ShadowFlare - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ -#include -#include - -#include "mpq.h" -#include "huffman.h" - -unsigned char table1502A630[] = { - - /* Data for compression type 0x00 */ - 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, - - /* Data for compression type 0x01 */ - 0x54, 0x16, 0x16, 0x0D, 0x0C, 0x08, 0x06, 0x05, 0x06, 0x05, 0x06, 0x03, 0x04, 0x04, 0x03, 0x05, - 0x0E, 0x0B, 0x14, 0x13, 0x13, 0x09, 0x0B, 0x06, 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x02, 0x02, - 0x0D, 0x07, 0x09, 0x06, 0x06, 0x04, 0x03, 0x02, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, - 0x09, 0x06, 0x04, 0x04, 0x04, 0x04, 0x03, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, - 0x08, 0x03, 0x04, 0x07, 0x09, 0x05, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, - 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, - 0x06, 0x0A, 0x08, 0x08, 0x06, 0x07, 0x04, 0x03, 0x04, 0x04, 0x02, 0x02, 0x04, 0x02, 0x03, 0x03, - 0x04, 0x03, 0x07, 0x07, 0x09, 0x06, 0x04, 0x03, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x0A, 0x02, 0x02, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x06, 0x03, 0x05, 0x02, 0x03, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x04, 0x07, 0x09, 0x08, 0x0C, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, - 0x04, 0x01, 0x02, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, - 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x06, 0x4B, - 0x00, 0x00, - - /* Data for compression type 0x02 */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x27, 0x00, 0x00, 0x23, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x06, 0x0E, 0x10, 0x04, - 0x06, 0x08, 0x05, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02, 0x01, 0x01, - 0x01, 0x04, 0x02, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x04, 0x01, 0x01, 0x02, 0x03, 0x03, 0x02, - 0x03, 0x01, 0x03, 0x06, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01, 0x01, - 0x01, 0x29, 0x07, 0x16, 0x12, 0x40, 0x0A, 0x0A, 0x11, 0x25, 0x01, 0x03, 0x17, 0x10, 0x26, 0x2A, - 0x10, 0x01, 0x23, 0x23, 0x2F, 0x10, 0x06, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - - /* Data for compression type 0x03 */ - 0xFF, 0x0B, 0x07, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x06, 0x02, 0x02, 0x01, 0x04, 0x02, 0x01, 0x03, - 0x09, 0x01, 0x01, 0x01, 0x03, 0x04, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, - 0x05, 0x01, 0x01, 0x01, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x0A, 0x04, 0x02, 0x01, 0x06, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, - 0x05, 0x02, 0x03, 0x04, 0x03, 0x03, 0x03, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x03, 0x03, - 0x01, 0x03, 0x01, 0x01, 0x02, 0x05, 0x01, 0x01, 0x04, 0x03, 0x05, 0x01, 0x03, 0x01, 0x03, 0x03, - 0x02, 0x01, 0x04, 0x03, 0x0A, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x01, 0x0A, 0x02, 0x05, 0x01, 0x01, 0x02, 0x07, 0x02, 0x17, 0x01, 0x05, 0x01, 0x01, - 0x0E, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x06, 0x02, 0x01, 0x04, 0x05, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x11, - 0x00, 0x00, - - /* Data for compression type 0x04 */ - 0xFF, 0xFB, 0x98, 0x9A, 0x84, 0x85, 0x63, 0x64, 0x3E, 0x3E, 0x22, 0x22, 0x13, 0x13, 0x18, 0x17, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - - /* Data for compression type 0x05 */ - 0xFF, 0xF1, 0x9D, 0x9E, 0x9A, 0x9B, 0x9A, 0x97, 0x93, 0x93, 0x8C, 0x8E, 0x86, 0x88, 0x80, 0x82, - 0x7C, 0x7C, 0x72, 0x73, 0x69, 0x6B, 0x5F, 0x60, 0x55, 0x56, 0x4A, 0x4B, 0x40, 0x41, 0x37, 0x37, - 0x2F, 0x2F, 0x27, 0x27, 0x21, 0x21, 0x1B, 0x1C, 0x17, 0x17, 0x13, 0x13, 0x10, 0x10, 0x0D, 0x0D, - 0x0B, 0x0B, 0x09, 0x09, 0x08, 0x08, 0x07, 0x07, 0x06, 0x05, 0x05, 0x04, 0x04, 0x04, 0x19, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - - /* Data for compression type 0x06 */ - 0xC3, 0xCB, 0xF5, 0x41, 0xFF, 0x7B, 0xF7, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xBF, 0xCC, 0xF2, 0x40, 0xFD, 0x7C, 0xF7, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7A, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - - /* Data for compression type 0x07 */ - 0xC3, 0xD9, 0xEF, 0x3D, 0xF9, 0x7C, 0xE9, 0x1E, 0xFD, 0xAB, 0xF1, 0x2C, 0xFC, 0x5B, 0xFE, 0x17, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xBD, 0xD9, 0xEC, 0x3D, 0xF5, 0x7D, 0xE8, 0x1D, 0xFB, 0xAE, 0xF0, 0x2C, 0xFB, 0x5C, 0xFF, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - - /* Data for compression type 0x08 */ - 0xBA, 0xC5, 0xDA, 0x33, 0xE3, 0x6D, 0xD8, 0x18, 0xE5, 0x94, 0xDA, 0x23, 0xDF, 0x4A, 0xD1, 0x10, - 0xEE, 0xAF, 0xE4, 0x2C, 0xEA, 0x5A, 0xDE, 0x15, 0xF4, 0x87, 0xE9, 0x21, 0xF6, 0x43, 0xFC, 0x12, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xB0, 0xC7, 0xD8, 0x33, 0xE3, 0x6B, 0xD6, 0x18, 0xE7, 0x95, 0xD8, 0x23, 0xDB, 0x49, 0xD0, 0x11, - 0xE9, 0xB2, 0xE2, 0x2B, 0xE8, 0x5C, 0xDD, 0x15, 0xF1, 0x87, 0xE7, 0x20, 0xF7, 0x44, 0xFF, 0x13, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5F, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00 -}; - -/* Gets previous Huffman tree item (?) */ -struct huffman_tree_item *libmpq_huff_get_prev_item(struct huffman_tree_item *hi, long value) { - if (PTR_INT(hi->prev) < 0) { - return PTR_NOT(hi->prev); - } - if (value < 0) { - value = hi - hi->next->prev; - } - return hi->prev + value; -} - -/* 1500BC90 */ -static void libmpq_huff_remove_item(struct huffman_tree_item *hi) { - struct huffman_tree_item *temp; /* EDX */ - - if (hi->next != NULL) { - temp = hi->prev; - if (PTR_INT(temp) <= 0) { - temp = PTR_NOT(temp); - } else { - temp += (hi - hi->next->prev); - } - temp->next = hi->next; - hi->next->prev = hi->prev; - hi->next = hi->prev = NULL; - } -} - -static void libmpq_huff_insert_item(struct huffman_tree_item **p_item, struct huffman_tree_item *item, unsigned long where, struct huffman_tree_item *item2) { - struct huffman_tree_item *next = item->next; /* EDI - next to the first item */ - struct huffman_tree_item *prev = item->prev; /* ESI - prev to the first item */ - struct huffman_tree_item *prev2; /* Pointer to previous item */ - long next2; /* Pointer to the next item */ - - /* The same code like in mpq_huff_remove_item(); */ - if (next != 0) { /* If the first item already has next one */ - if (PTR_INT(prev) < 0) { - prev = PTR_NOT(prev); - } else { - prev += (item - next->prev); - } - - /* - * 150083C1 - * Remove the item from the tree - */ - prev->next = next; - next->prev = prev; - - /* Invalidate 'prev' and 'next' pointer */ - item->next = 0; - item->prev = 0; - } - - if (item2 == NULL) { /* EDX - If the second item is not entered, */ - item2 = PTR_PTR(&p_item[1]); /* take the first tree item */ - } - - switch (where) { - case SWITCH_ITEMS: /* Switch the two items */ - item->next = item2->next; /* item2->next (Pointer to pointer to first) */ - item->prev = item2->next->prev; - item2->next->prev = item; - item2->next = item; /* Set the first item */ - return; - case INSERT_ITEM: /* Insert as the last item */ - item->next = item2; /* Set next item (or pointer to pointer to first item) */ - item->prev = item2->prev; /* Set prev item (or last item in the tree) */ - next2 = PTR_INT(p_item[0]); /* Usually NULL */ - prev2 = item2->prev; /* Prev item to the second (or last tree item) */ - if (PTR_INT(prev2) < 0) { - prev2 = PTR_NOT(prev); - prev2->next = item; - item2->prev = item; /* Next after last item */ - return; - } - if (next2 < 0) { - next2 = item2 - item2->next->prev; - } - prev2 += next2; - prev2->next = item; - item2->prev = item; /* Set the next/last item */ - return; - default: - return; - } -} - -/* Builds Huffman tree. Called with the first 8 bits loaded from input stream. */ -static void libmpq_huff_build_tree(struct huffman_tree *ht, unsigned int cmp_type) { - unsigned long max_byte; /* [ESP+10] - The greatest character found in table */ - unsigned char *byte_array; /* [ESP+1C] - Pointer to unsigned char in table1502A630 */ - unsigned long i; /* egcs in linux doesn't like multiple for loops without an explicit i */ - unsigned int found; /* Thats needed to replace the goto stuff from original source :) */ - struct huffman_tree_item **p_item; /* [ESP+14] - Pointer to Huffman tree item pointer array */ - struct huffman_tree_item *child1; - - /* Loop while pointer has a negative value. */ - while (PTR_INT(ht->last) > 0) { /* ESI - Last entry */ - struct huffman_tree_item *temp; /* EAX */ - - if (ht->last->next != NULL) { /* ESI->next */ - libmpq_huff_remove_item(ht->last); - } - ht->item3058 = PTR_PTR(&ht->item3054);/* [EDI+4] */ - ht->last->prev = ht->item3058; /* EAX */ - temp = libmpq_huff_get_prev_item(PTR_PTR(&ht->item3054), PTR_INT(&ht->item3050)); - temp->next = ht->last; - ht->item3054 = ht->last; - } - - /* Clear all pointers in huffman tree item array. */ - memset(ht->items306C, 0, sizeof(ht->items306C)); - - max_byte = 0; /* Greatest character found init to zero. */ - p_item = (struct huffman_tree_item **)&ht->items306C; /* Pointer to current entry in huffman tree item pointer array */ - - /* Ensure we have low 8 bits only */ - cmp_type &= 0xFF; - byte_array = table1502A630 + cmp_type * 258; /* EDI also */ - - for (i = 0; i < 0x100; i++, p_item++) { - struct huffman_tree_item *item = ht->item3058; /* Item to be created */ - struct huffman_tree_item *p_item3 = ht->item3058; - unsigned char one_byte = byte_array[i]; - - /* Skip all the bytes which are zero. */ - if (byte_array[i] == 0) { - continue; - } - - /* If not valid pointer, take the first available item in the array. */ - if (PTR_INT(item) <= 0) { - item = &ht->items0008[ht->items++]; - } - - /* Insert this item as the top of the tree. */ - libmpq_huff_insert_item(&ht->item305C, item, SWITCH_ITEMS, NULL); - - item->parent = NULL; /* Invalidate child and parent */ - item->child = NULL; - *p_item = item; /* Store pointer into pointer array */ - - item->dcmp_byte = i; /* Store counter */ - item->byte_value = one_byte; /* Store byte value */ - if (one_byte >= max_byte) { - max_byte = one_byte; - continue; - } - - /* Find the first item which has byte value greater than current one byte */ - found = 0; - if (PTR_INT((p_item3 = ht->last)) > 0) {/* EDI - Pointer to the last item */ - - /* 15006AF7 */ - if (p_item3 != NULL) { - do { /* 15006AFB */ - if (p_item3->byte_value >= one_byte) { - found = 1; - break; - } - p_item3 = p_item3->prev; - } while (PTR_INT(p_item3) > 0); - } - } - - if (found == 0) { - p_item3 = NULL; - } - - /* 15006B09 */ - if (item->next != NULL) { - libmpq_huff_remove_item(item); - } - - /* 15006B15 */ - if (p_item3 == NULL) { - p_item3 = PTR_PTR(&ht->first); - } - - /* 15006B1F */ - item->next = p_item3->next; - item->prev = p_item3->next->prev; - p_item3->next->prev = item; - p_item3->next = item; - } - - /* 15006B4A */ - for (; i < 0x102; i++) { - struct huffman_tree_item **p_item2 = &ht->items306C[i]; /* EDI */ - - /* 15006B59 */ - struct huffman_tree_item *item2 = ht->item3058; /* ESI */ - if (PTR_INT(item2) <= 0) { - item2 = &ht->items0008[ht->items++]; - } - libmpq_huff_insert_item(&ht->item305C, item2, INSERT_ITEM, NULL); - - /* 15006B89 */ - item2->dcmp_byte = i; - item2->byte_value = 1; - item2->parent = NULL; - item2->child = NULL; - *p_item2++ = item2; - } - - /* 15006BAA */ - if (PTR_INT((child1 = ht->last)) > 0) { /* EDI - last item (first child to item */ - struct huffman_tree_item *child2; /* EBP */ - struct huffman_tree_item *item; /* ESI */ - - /* 15006BB8 */ - while (PTR_INT((child2 = child1->prev)) > 0) { - if (PTR_INT((item = ht->item3058)) <= 0) { - item = &ht->items0008[ht->items++]; - } - /* 15006BE3 */ - libmpq_huff_insert_item(&ht->item305C, item, SWITCH_ITEMS, NULL); - - /* 15006BF3 */ - item->parent = NULL; - item->child = NULL; - - /* - * EDX = child2->byte_value + child1->byte_value; - * EAX = child1->byte_value; - * ECX = max_byte; The greatest character (0xFF usually) - */ - item->byte_value = child1->byte_value + child2->byte_value; /* 0x02 */ - item->child = child1; /* Prev item in the */ - child1->parent = item; - child2->parent = item; - - /* EAX = item->byte_value; */ - if (item->byte_value >= max_byte) { - max_byte = item->byte_value; - } else { - struct huffman_tree_item *p_item2 = child2->prev; /* EDI */ - found = 0; - if (PTR_INT(p_item2) > 0) { - - /* 15006C2D */ - do { - if (p_item2->byte_value >= item->byte_value) { - found = 1; - break; - } - p_item2 = p_item2->prev; - } while (PTR_INT(p_item2) > 0); - } - if (found == 0) { - p_item2 = NULL; - } - if (item->next != 0) { - struct huffman_tree_item *temp4 = libmpq_huff_get_prev_item(item, -1); - temp4->next = item->next; /* The first item changed */ - item->next->prev = item->prev; /* First->prev changed to negative value */ - item->next = NULL; - item->prev = NULL; - } - - /* 15006C62 */ - if (p_item2 == NULL) { - p_item2 = PTR_PTR(&ht->first); - } - item->next = p_item2->next; /* Set item with 0x100 byte value */ - item->prev = p_item2->next->prev; /* Set item with 0x17 byte value */ - p_item2->next->prev = item; /* Changed prev of item with */ - p_item2->next = item; - } - - /* 15006C7B */ - if (PTR_INT((child1 = child2->prev)) <= 0) { - break; - } - } - } - - /* 15006C88 */ - ht->offs0004 = 1; -} - -/* Gets the whole byte from the input stream. */ -static unsigned long libmpq_huff_get_8bits(struct huffman_input_stream *is) { - unsigned long one_byte; - - if (is->bits <= 8) { - is->bit_buf |= *(unsigned short *)is->in_buf << is->bits; - is->in_buf += sizeof(unsigned short); - is->bits += 16; - } - - one_byte = (is->bit_buf & 0xFF); - is->bit_buf >>= 8; - is->bits -= 8; - - return one_byte; -} - -/* Gets 7 bits from the stream. */ -static unsigned long libmpq_huff_get_7bits(struct huffman_input_stream *is) { - if (is->bits <= 7) { - is->bit_buf |= *(unsigned short *)is->in_buf << is->bits; - is->in_buf += sizeof(unsigned short); - is->bits += 16; - } - - /* Get 7 bits from input stream. */ - return (is->bit_buf & 0x7F); -} - -/* Gets one bit from input stream. */ -unsigned long libmpq_huff_get_bit(struct huffman_input_stream *is) { - unsigned long bit = (is->bit_buf & 1); - - is->bit_buf >>= 1; - if (--is->bits == 0) { - is->bit_buf = *(unsigned long *)is->in_buf; - is->in_buf += sizeof(unsigned long); - is->bits = 32; - } - return bit; -} - -static struct huffman_tree_item *libmpq_huff_call1500E740(struct huffman_tree *ht, unsigned int value) { - struct huffman_tree_item *p_item1 = ht->item3058; /* EDX */ - struct huffman_tree_item *p_item2; /* EAX */ - struct huffman_tree_item *p_next; - struct huffman_tree_item *p_prev; - struct huffman_tree_item **pp_item; - - if (PTR_INT(p_item1) <= 0 || (p_item2 = p_item1) == NULL) { - if((p_item2 = &ht->items0008[ht->items++]) != NULL) { - p_item1 = p_item2; - } else { - p_item1 = ht->first; - } - } else { - p_item1 = p_item2; - } - - p_next = p_item1->next; - if (p_next != NULL) { - p_prev = p_item1->prev; - if (PTR_INT(p_prev) <= 0) { - p_prev = PTR_NOT(p_prev); - } else { - p_prev += (p_item1 - p_item1->next->prev); - } - - p_prev->next = p_next; - p_next->prev = p_prev; - p_item1->next = NULL; - p_item1->prev = NULL; - } - pp_item = &ht->first; /* ESI */ - if (value > 1) { - - /* ECX = ht->first->next; */ - p_item1->next = *pp_item; - p_item1->prev = (*pp_item)->prev; - - (*pp_item)->prev = p_item2; - *pp_item = p_item1; - - p_item2->parent = NULL; - p_item2->child = NULL; - } else { - p_item1->next = (struct huffman_tree_item *)pp_item; - p_item1->prev = pp_item[1]; - /* EDI = ht->item305C; */ - p_prev = pp_item[1]; /* ECX */ - if (p_prev <= 0) { - p_prev = PTR_NOT(p_prev); - p_prev->next = p_item1; - p_prev->prev = p_item2; - - p_item2->parent = NULL; - p_item2->child = NULL; - } else { - if (PTR_INT(ht->item305C) < 0) { - p_prev += (struct huffman_tree_item *)pp_item - (*pp_item)->prev; - } else { - p_prev += PTR_INT(ht->item305C); - } - - p_prev->next = p_item1; - pp_item[1] = p_item2; - p_item2->parent = NULL; - p_item2->child = NULL; - } - } - return p_item2; -} - -static void libmpq_huff_call1500E820(struct huffman_tree *ht, struct huffman_tree_item *p_item) { - struct huffman_tree_item *p_item1; /* EDI */ - struct huffman_tree_item *p_item2 = NULL; /* EAX */ - struct huffman_tree_item *p_item3; /* EDX */ - struct huffman_tree_item *p_prev; /* EBX */ - - for (; p_item != NULL; p_item = p_item->parent) { - p_item->byte_value++; - - for (p_item1 = p_item; ; p_item1 = p_prev) { - p_prev = p_item1->prev; - if (PTR_INT(p_prev) <= 0) { - p_prev = NULL; - break; - } - if (p_prev->byte_value >= p_item->byte_value) { - break; - } - } - - if (p_item1 == p_item) { - continue; - } - - if (p_item1->next != NULL) { - p_item2 = libmpq_huff_get_prev_item(p_item1, -1); - p_item2->next = p_item1->next; - p_item1->next->prev = p_item1->prev; - p_item1->next = NULL; - p_item1->prev = NULL; - } - p_item2 = p_item->next; - p_item1->next = p_item2; - p_item1->prev = p_item2->prev; - p_item2->prev = p_item1; - p_item->next = p_item1; - if ((p_item2 = p_item1) != NULL) { - p_item2 = libmpq_huff_get_prev_item(p_item, -1); - p_item2->next = p_item->next; - p_item->next->prev = p_item->prev; - p_item->next = NULL; - p_item->prev = NULL; - } - - if (p_prev == NULL) { - p_prev = PTR_PTR(&ht->first); - } - p_item2 = p_prev->next; - p_item->next = p_item2; - p_item->prev = p_item2->prev; - p_item2->prev = p_item; - p_prev->next = p_item; - - p_item3 = p_item1->parent->child; - p_item2 = p_item->parent; - if (p_item2->child == p_item) { - p_item2->child = p_item1; - } - - if (p_item3 == p_item1) { - p_item1->parent->child = p_item; - } - - p_item2 = p_item->parent; - p_item->parent = p_item1->parent; - p_item1->parent = p_item2; - ht->offs0004++; - } -} - -int libmpq_huff_do_decompress(struct huffman_tree *ht, struct huffman_input_stream *is, unsigned char *out_buf, unsigned int out_length) { - unsigned int n8bits; /* 8 bits loaded from input stream */ - unsigned int n7bits; /* 7 bits loaded from input stream */ - unsigned int found; /* Thats needed to replace the goto stuff from original source :) */ - unsigned int dcmp_byte = 0; - unsigned long bit_count; - struct huffman_decompress *qd; - unsigned int has_qd; /* Can we use quick decompression? */ - struct huffman_tree_item *p_item1; - struct huffman_tree_item *p_item2; - unsigned char *out_pos = out_buf; - - /* Test the output length. Must not be non zero. */ - if (out_length == 0) { - return 0; - } - - /* Get the compression type from the input stream. */ - n8bits = libmpq_huff_get_8bits(is); - - /* Build the Huffman tree */ - libmpq_huff_build_tree(ht, n8bits); - ht->cmp0 = (n8bits == 0) ? TRUE : FALSE; - - for(;;) { - n7bits = libmpq_huff_get_7bits(is); /* Get 7 bits from input stream */ - - /* - * Try to use quick decompression. Check huffman_decompress array for corresponding item. - * If found, use the result byte instead. - */ - qd = &ht->qd3474[n7bits]; - - /* If there is a quick-pass possible (ebx) */ - has_qd = (qd->offs00 >= ht->offs0004) ? TRUE : FALSE; - - /* If we can use quick decompress, use it. */ - if (has_qd) { - found = 0; - if (qd->bits > 7) { - is->bit_buf >>= 7; - is->bits -= 7; - p_item1 = qd->p_item; - found = 1; - } - if (found == 0) { - is->bit_buf >>= qd->bits; - is->bits -= qd->bits; - dcmp_byte = qd->dcmp_byte; - } - } else { - found = 1; - p_item1 = ht->first->next->prev; - if (PTR_INT(p_item1) <= 0) { - p_item1 = NULL; - } - } - - if (found == 1) { - bit_count = 0; - p_item2 = NULL; - do { - p_item1 = p_item1->child; /* Move down by one level */ - if (libmpq_huff_get_bit(is)) { /* If current bit is set, move to previous */ - p_item1 = p_item1->prev; - } - if (++bit_count == 7) { /* If we are at 7th bit, save current huffman tree item. */ - p_item2 = p_item1; - } - } while (p_item1->child != NULL); /* Walk until tree has no deeper level */ - - if (has_qd == FALSE) { - if (bit_count > 7) { - qd->offs00 = ht->offs0004; - qd->bits = bit_count; - qd->p_item = p_item2; - } else { - unsigned long index = n7bits & (0xFFFFFFFF >> (32 - bit_count)); - unsigned long add = (1 << bit_count); - - for (qd = &ht->qd3474[index]; index <= 0x7F; index += add, qd += add) { - qd->offs00 = ht->offs0004; - qd->bits = bit_count; - qd->dcmp_byte = p_item1->dcmp_byte; - } - } - } - dcmp_byte = p_item1->dcmp_byte; - } - - if (dcmp_byte == 0x101) { /* Huffman tree needs to be modified */ - n8bits = libmpq_huff_get_8bits(is); - p_item1 = (ht->last <= 0) ? NULL : ht->last; - - p_item2 = libmpq_huff_call1500E740(ht, 1); - p_item2->parent = p_item1; - p_item2->dcmp_byte = p_item1->dcmp_byte; - p_item2->byte_value = p_item1->byte_value; - ht->items306C[p_item2->dcmp_byte] = p_item2; - - p_item2 = libmpq_huff_call1500E740(ht, 1); - p_item2->parent = p_item1; - p_item2->dcmp_byte = n8bits; - p_item2->byte_value = 0; - ht->items306C[p_item2->dcmp_byte] = p_item2; - - p_item1->child = p_item2; - libmpq_huff_call1500E820(ht, p_item2); - if (ht->cmp0 == 0) { - libmpq_huff_call1500E820(ht, ht->items306C[n8bits]); - } - dcmp_byte = n8bits; - } - - if (dcmp_byte == 0x100) { - break; - } - - *out_pos++ = (unsigned char)dcmp_byte; - if (--out_length == 0) { - break; - } - if (ht->cmp0) { - libmpq_huff_call1500E820(ht, ht->items306C[dcmp_byte]); - } - } - return (out_pos - out_buf); -} - -int libmpq_huff_init_tree(struct huffman_tree *ht, struct huffman_tree_item *hi, unsigned int cmp) { - int count; - - /* Clear links for all the items in the tree */ - for (hi = ht->items0008, count = 0x203; count != 0; hi++, count--) { - hi->next = hi->prev = NULL; - } - - ht->item3050 = NULL; - ht->item3054 = PTR_PTR(&ht->item3054); - ht->item3058 = PTR_NOT(ht->item3054); - - ht->item305C = NULL; - ht->first = PTR_PTR(&ht->first); - ht->last = PTR_NOT(ht->first); - - ht->offs0004 = 1; - ht->items = 0; - - /* Clear all huffman_decompress items. Do this only if preparing for decompression */ - if (cmp == LIBMPQ_HUFF_DECOMPRESS) { - for (count = 0; count < sizeof(ht->qd3474) / sizeof(struct huffman_decompress); count++) { - ht->qd3474[count].offs00 = 0; - } - } - - return 0; -} - diff --git a/src/tools/map_extractor/libmpq/huffman.h b/src/tools/map_extractor/libmpq/huffman.h deleted file mode 100644 index 9519c293074..00000000000 --- a/src/tools/map_extractor/libmpq/huffman.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * huffman.h -- structures used for huffman compression. - * - * Copyright (C) 2003 Maik Broemme - * - * This source was adepted from the C++ version of huffman.h included - * in stormlib. The C++ version belongs to the following authors, - * - * Ladislav Zezula - * ShadowFlare - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _HUFFMAN_H -#define _HUFFMAN_H - -#define PTR_NOT(ptr) (struct huffman_tree_item *)(~(unsigned long)(ptr)) -#define PTR_PTR(ptr) ((struct huffman_tree_item *)(ptr)) -#define PTR_INT(ptr) (long)(ptr) - -#define INSERT_ITEM 1 -#define SWITCH_ITEMS 2 /* Switch the item1 and item2 */ - -/* - * Input stream for Huffmann decompression - */ -struct huffman_input_stream { - unsigned char *in_buf; /* 00 - Input data */ - unsigned long bit_buf; /* 04 - Input bit buffer */ - unsigned int bits; /* 08 - Number of bits remaining in 'byte' */ -}; - -/* - * Huffmann tree item. - */ -struct huffman_tree_item { - struct huffman_tree_item *next; /* 00 - Pointer to next huffman_tree_item */ - struct huffman_tree_item *prev; /* 04 - Pointer to prev huffman_tree_item (< 0 if none) */ - unsigned long dcmp_byte; /* 08 - Index of this item in item pointer array, decompressed byte value */ - unsigned long byte_value; /* 0C - Some byte value */ - struct huffman_tree_item *parent; /* 10 - Pointer to parent huffman_tree_item (NULL if none) */ - struct huffman_tree_item *child; /* 14 - Pointer to child huffman_tree_item */ -}; - -/* - * Structure used for quick decompress. The 'bits' contains - * number of bits and dcmp_byte contains result decompressed byte - * value. After each walk through Huffman tree are filled all entries - * which are multiplies of number of bits loaded from input stream. - * These entries contain number of bits and result value. At the next - * 7 bits is tested this structure first. If corresponding entry found, - * decompression routine will not walk through Huffman tree and - * directly stores output byte to output stream. - */ -struct huffman_decompress { - unsigned long offs00; /* 00 - 1 if resolved */ - unsigned long bits; /* 04 - Bit count */ - union { - unsigned long dcmp_byte; /* 08 - Byte value for decompress (if bitCount <= 7) */ - struct huffman_tree_item *p_item; /* 08 - THTreeItem (if number of bits is greater than 7 */ - }; -}; - -/* - * Structure for Huffman tree. - */ -struct huffman_tree { - unsigned long cmp0; /* 0000 - 1 if compression type 0 */ - unsigned long offs0004; /* 0004 - Some flag */ - - struct huffman_tree_item items0008[0x203]; /* 0008 - huffman tree items */ - - /* Sometimes used as huffman tree item */ - struct huffman_tree_item *item3050; /* 3050 - Always NULL (?) */ - struct huffman_tree_item *item3054; /* 3054 - Pointer to huffman_tree_item */ - struct huffman_tree_item *item3058; /* 3058 - Pointer to huffman_tree_item (< 0 if invalid) */ - - /* Sometimes used as huffman tree item */ - struct huffman_tree_item *item305C; /* 305C - Usually NULL */ - struct huffman_tree_item *first; /* 3060 - Pointer to top (first) Huffman tree item */ - struct huffman_tree_item *last; /* 3064 - Pointer to bottom (last) Huffman tree item (< 0 if invalid) */ - unsigned long items; /* 3068 - Number of used huffman tree items */ - - struct huffman_tree_item *items306C[0x102]; /* 306C - huffman_tree_item pointer array */ - struct huffman_decompress qd3474[0x80]; /* 3474 - Array for quick decompression */ - - //unsigned char table1502A630[]; /* Some table to make struct size flexible */ -}; - -int libmpq_huff_init_tree(struct huffman_tree *ht, struct huffman_tree_item *hi, unsigned int cmp); -int libmpq_huff_do_decompress(struct huffman_tree *ht, struct huffman_input_stream *is, unsigned char *out_buf, unsigned int out_length); -#endif /* _HUFFMAN_H */ - diff --git a/src/tools/map_extractor/libmpq/mpq.cpp b/src/tools/map_extractor/libmpq/mpq.cpp deleted file mode 100644 index a59d3dff2f1..00000000000 --- a/src/tools/map_extractor/libmpq/mpq.cpp +++ /dev/null @@ -1,627 +0,0 @@ -/* - * mpq.c -- functions for developers using libmpq. - * - * Copyright (C) 2003 Maik Broemme - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id: mpq.c,v 1.6 2004/02/12 00:49:00 mbroemme Exp $ - */ -#define _CRT_SECURE_NO_DEPRECATE - -#include -#include -//#include -//#include -#include -#include -#include -#include "mpq.h" -#include "common.h" - -/* - * This function returns version information. - * format: MAJOR.MINOR.PATCH - */ -char *libmpq_version() { - static char version[10]; - sprintf(version, "%i.%i.%i", LIBMPQ_MAJOR_VERSION, LIBMPQ_MINOR_VERSION, LIBMPQ_PATCH_VERSION); - return version; -} - -/* - * This function reads a file and verify if it is a legit MPQ archive - * or not. Then it fills the mpq_header structure and reads the hash - * table. - */ -int libmpq_archive_open(mpq_archive *mpq_a, unsigned char *mpq_filename) { - int fd = 0; - int rb = 0; - int ncnt = FALSE; - struct stat fileinfo; - - /* allocate memory */ - mpq_a->mpq_l = (mpq_list *)malloc(sizeof(mpq_list)); - memset(mpq_a->mpq_l, 0, sizeof(mpq_list)); - mpq_a->header = (mpq_header *)malloc(sizeof(mpq_header)); - memset(mpq_a->header, 0, sizeof(mpq_header)); - - /* Check if file exists and is readable */ - fd = _open((char *)mpq_filename, MPQ_FILE_OPEN_FLAGS); - if (fd == LIBMPQ_EFILE) { - return LIBMPQ_EFILE; - } - - /* fill the structures with informations */ - strcpy((char *)mpq_a->filename, (char *)mpq_filename); - libmpq_init_buffer(mpq_a); - mpq_a->fd = fd; - mpq_a->header->id = 0; - mpq_a->maxblockindex = 0; - mpq_a->mpq_l->mpq_files = NULL; - - mpq_a->mpqpos = 0; //k - - while (!ncnt) { - mpq_a->header->id = 0; - #ifdef WIN32 - _lseeki64(mpq_a->fd, mpq_a->mpqpos, SEEK_SET); - #else - lseek64(mpq_a->fd, mpq_a->mpqpos, SEEK_SET); - #endif - rb = _read(mpq_a->fd, mpq_a->header, sizeof(mpq_header)); - - /* if different number of bytes read, break the loop */ - if (rb != sizeof(mpq_header)) { - return LIBMPQ_EFILE_FORMAT; - } - - /* special offset for protected MPQs */ - if (mpq_a->header->offset == LIBMPQ_HEADER_W3M) { - mpq_a->flags |= LIBMPQ_FLAG_PROTECTED; - mpq_a->header->offset = sizeof(mpq_header); - } - - /* if valid signature has been found, break the loop */ - if (mpq_a->header->id == LIBMPQ_ID_MPQ) { - ncnt = true; - } - /*if (mpq_a->header->id == LIBMPQ_ID_MPQ && - mpq_a->header->offset == sizeof(mpq_header) && - mpq_a->header->hashtablepos < mpq_a->header->archivesize && - mpq_a->header->blocktablepos < mpq_a->header->archivesize) { - ncnt = TRUE; - }*/ - - /* move to the next possible offset */ - if (!ncnt) { - mpq_a->mpqpos += 0x200; - } - } - - /* get the right positions of the hash table and the block table. */ - mpq_a->blocksize = (0x200 << mpq_a->header->blocksize); - fstat(mpq_a->fd, &fileinfo); - - /* Normal MPQs must have position of */ - /*if (mpq_a->header->hashtablepos + mpq_a->mpqpos < fileinfo.st_size && - mpq_a->header->blocktablepos + mpq_a->mpqpos < fileinfo.st_size) { - mpq_a->header->hashtablepos += mpq_a->mpqpos; - mpq_a->header->blocktablepos += mpq_a->mpqpos; - } else { - return LIBMPQ_EFILE_FORMAT; - }*/ - - /* Try to read and decrypt the hashtable */ - if (libmpq_read_hashtable(mpq_a) != 0) { - return LIBMPQ_EHASHTABLE; - } - - /* Try to read and decrypt the blocktable */ - if (libmpq_read_blocktable(mpq_a) != 0) { - return LIBMPQ_EBLOCKTABLE; - } - - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function closes the file descriptor opened by - * mpq_open_archive(); and frees the decryption buffer. - */ -int libmpq_archive_close(mpq_archive *mpq_a) { - memset(mpq_a->buf, 0, sizeof(mpq_a->buf)); - - /* free the allocated memory. */ - free(mpq_a->header); - free(mpq_a->mpq_l); - - /* Check if file descriptor is valid. */ - if ((_close(mpq_a->fd)) == LIBMPQ_EFILE) { - return LIBMPQ_EFILE; - } - - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function returns the value for the given infotype. - * If an error occurs something < 0 is returned. - */ -int libmpq_archive_info(mpq_archive *mpq_a, unsigned int infotype) { - unsigned int filecount = 0; - unsigned int fsize = 0; - unsigned int csize = 0; - mpq_block *mpq_b_end = mpq_a->blocktable + mpq_a->header->blocktablesize; - mpq_block *mpq_b = NULL; - - switch (infotype) { - case LIBMPQ_MPQ_ARCHIVE_SIZE: - return mpq_a->header->archivesize; - case LIBMPQ_MPQ_HASHTABLE_SIZE: - return mpq_a->header->hashtablesize; - case LIBMPQ_MPQ_BLOCKTABLE_SIZE: - return mpq_a->header->blocktablesize; - case LIBMPQ_MPQ_BLOCKSIZE: - return mpq_a->blocksize; - case LIBMPQ_MPQ_NUMFILES: - for (mpq_b = mpq_a->blocktable; mpq_b < mpq_b_end; mpq_b++) { - filecount++; - } - return filecount; - case LIBMPQ_MPQ_COMPRESSED_SIZE: - for (mpq_b = mpq_a->blocktable; mpq_b < mpq_b_end; mpq_b++) { - csize += mpq_b->csize; - } - return csize; - case LIBMPQ_MPQ_UNCOMPRESSED_SIZE: - for (mpq_b = mpq_a->blocktable; mpq_b < mpq_b_end; mpq_b++) { - fsize += mpq_b->fsize; - } - return fsize; - default: - return LIBMPQ_TOOLS_SUCCESS; - } -} - -/* - * This function returns some useful file information. - */ -int libmpq_file_info(mpq_archive *mpq_a, unsigned int infotype, const unsigned int number) { - int blockindex = number; //-1; - int i = 0; - mpq_block *mpq_b = NULL; - mpq_hash *mpq_h = NULL; - - /* check if given number is not out of range */ - if (number < 1 || number > mpq_a->header->blocktablesize) { - return LIBMPQ_EINV_RANGE; - } - - /* search for correct hashtable */ - /*for (i = 0; i < mpq_a->header->hashtablesize; i++) { - if ((number - 1) == (mpq_a->hashtable[i]).blockindex) { - blockindex = (mpq_a->hashtable[i]).blockindex; - mpq_h = &(mpq_a->hashtable[i]); - break; - } - }*/ - - /* check if file was found */ - /*if (blockindex == -1 || blockindex > mpq_a->header->blocktablesize) { - return LIBMPQ_EFILE_NOT_FOUND; - }*/ - - /* check if sizes are correct */ - mpq_b = mpq_a->blocktable + blockindex; - if (mpq_b->filepos > (mpq_a->header->archivesize + mpq_a->mpqpos) || mpq_b->csize > mpq_a->header->archivesize) { - return LIBMPQ_EFILE_CORRUPT; - } - - /* check if file exists */ - if ((mpq_b->flags & LIBMPQ_FILE_EXISTS) == 0) { - return LIBMPQ_EFILE_NOT_FOUND; - } - - switch (infotype) { - case LIBMPQ_FILE_COMPRESSED_SIZE: - return mpq_b->csize; - case LIBMPQ_FILE_UNCOMPRESSED_SIZE: - return mpq_b->fsize; - case LIBMPQ_FILE_COMPRESSION_TYPE: - if (mpq_b->flags & LIBMPQ_FILE_COMPRESS_PKWARE) { - return LIBMPQ_FILE_COMPRESS_PKWARE; - } - if (mpq_b->flags & LIBMPQ_FILE_COMPRESS_MULTI) { - return LIBMPQ_FILE_COMPRESS_MULTI; - } - default: - return LIBMPQ_TOOLS_SUCCESS; - } -} - -/* - * This function searches the listfile for the filename. - * On success it returns the filename, otherwiese a name - * like file000001.xxx and if number is out of range it - * returns NULL. - */ -char *libmpq_file_name(mpq_archive *mpq_a, const int number) { - static char tempfile[PATH_MAX]; - - /* check if we are in the range of available files. */ - if (number > libmpq_archive_info(mpq_a, LIBMPQ_MPQ_NUMFILES) || number < 1) { - return NULL; - } - - /* this is safe because we built a fallback filelist, if something was wrong. */ - sprintf(tempfile, (char *)mpq_a->mpq_l->mpq_files[number - 1], number); - - return tempfile; -} - -/* - * This function returns the number to the given - * filename. - */ -int libmpq_file_number(mpq_archive *mpq_a, const char *name) { - int i; - char tempfile[PATH_MAX]; - - for (i = 0; mpq_a->mpq_l->mpq_files[i]; i++) { - sprintf(tempfile, (char *)mpq_a->mpq_l->mpq_files[i], i + 1); - if (strncmp(tempfile, name, strlen(name)) == 0) { - - /* if file found return the number */ - return i + 1; - } - } - - /* if no matching entry found return LIBMPQ_EFILE_NOT_FOUND */ - return LIBMPQ_EFILE_NOT_FOUND; -} - -/* - * This function verifies if a given file (by number - * or name) is in the opened mpq archive. On success - * it returns 0, otherwise LIBMPQ_EFILE_NOT_FOUND. - */ -int libmpq_file_check(mpq_archive *mpq_a, void *file, int type) { - int found = 0; - int i; - char tempfile[PATH_MAX]; - - switch (type) { - case LIBMPQ_FILE_TYPE_INT: - - /* check if we are in the range of available files. */ - if (*(int *)file > libmpq_archive_info(mpq_a, LIBMPQ_MPQ_NUMFILES) || *(int *)file < 1) { - return LIBMPQ_EFILE_NOT_FOUND; - } else { - return LIBMPQ_TOOLS_SUCCESS; - } - case LIBMPQ_FILE_TYPE_CHAR: - for (i = 0; mpq_a->mpq_l->mpq_files[i]; i++) { - sprintf(tempfile, (char *)mpq_a->mpq_l->mpq_files[i], i); - if (strncmp(tempfile, (char *)file, strlen((char *)file)) == 0) { - - /* if file found break */ - found = 1; - break; - } - } - - /* if a file was found return 0 */ - if (found == 1) { - return LIBMPQ_TOOLS_SUCCESS; - } else { - return LIBMPQ_EFILE_NOT_FOUND; - } - default: - return LIBMPQ_TOOLS_SUCCESS; - } -} - -/* - * This function extracts a file from a MPQ archive - * by the given number. - */ -int libmpq_file_extract(mpq_archive *mpq_a, const int number, const char *filename) { - int blockindex = number; //-1; - int fd = 0; - int i = 0; - char buffer[0x1000]; - //char tempfile[PATH_MAX]; - unsigned int transferred = 1; - mpq_file *mpq_f = NULL; - mpq_block *mpq_b = NULL; - mpq_hash *mpq_h = NULL; - -/* if (number < 1 || number > mpq_a->header->blocktablesize) { - return LIBMPQ_EINV_RANGE; - }*/ -/* - sprintf(tempfile, libmpq_file_name(mpq_a, number)); -*/ - /* check if mpq_f->filename could be written here. */ - fd = _open(filename, O_RDWR|O_CREAT|O_TRUNC, 0644); - if (fd == LIBMPQ_EFILE) { - return LIBMPQ_EFILE; - } - - /* search for correct hashtable */ - /*for (i = 0; i < mpq_a->header->hashtablesize; i++) { - if ((number - 1) == (mpq_a->hashtable[i]).blockindex) { - blockindex = (mpq_a->hashtable[i]).blockindex; - mpq_h = &(mpq_a->hashtable[i]); - break; - } - }*/ - - /* check if file was found */ - if (blockindex == -1 || blockindex > mpq_a->header->blocktablesize) { - return LIBMPQ_EFILE_NOT_FOUND; - } - - /* check if sizes are correct */ - mpq_b = mpq_a->blocktable + blockindex; - if (mpq_b->filepos > (mpq_a->header->archivesize + mpq_a->mpqpos) || mpq_b->csize > mpq_a->header->archivesize) { - return LIBMPQ_EFILE_CORRUPT; - } - - /* check if file exists */ - if ((mpq_b->flags & LIBMPQ_FILE_EXISTS) == 0) { - return LIBMPQ_EFILE_NOT_FOUND; - } - - /* allocate memory for file structure */ - mpq_f = (mpq_file *)malloc(sizeof(mpq_file)); - if (!mpq_f) { - return LIBMPQ_EALLOCMEM; - } - - /* initialize file structure */ - memset(mpq_f, 0, sizeof(mpq_file)); - mpq_f->fd = fd; - mpq_f->mpq_b = mpq_b; - mpq_f->nblocks = (mpq_f->mpq_b->fsize + mpq_a->blocksize - 1) / mpq_a->blocksize; - mpq_f->mpq_h = mpq_h; - mpq_f->accessed = FALSE; - mpq_f->blockposloaded = FALSE; - sprintf((char *)mpq_f->filename, filename); - - /* allocate buffers for decompression. */ - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) { - - /* - * Allocate buffer for block positions. At the begin of file are stored - * unsigned ints holding positions of each block relative from begin of - * file in the archive. - */ - if ((mpq_f->blockpos = (unsigned int *)malloc(sizeof(int) * mpq_f->nblocks + 1)) == NULL) { - return LIBMPQ_EALLOCMEM; - } - } - - while (transferred > 0) { - transferred = libmpq_file_read_file(mpq_a, mpq_f, mpq_f->filepos, buffer, sizeof(buffer)); - if (transferred == 0) { - break; - } else { - mpq_f->accessed = TRUE; - mpq_f->filepos += transferred; - } - - transferred = _write(mpq_f->fd, buffer, transferred); - if (transferred == 0) { - break; - } - } - - _close(fd); - - /* freeing the file structure */ - free(mpq_f); - return LIBMPQ_TOOLS_SUCCESS; -} - -/* - * This function tries to get the filenames for the hashes. It uses - * an internal listfile database and gets the correct listfile from - * some specific archive informations. - */ - -int libmpq_listfile_open(mpq_archive *mpq_a, char file[PATH_MAX]) { - FILE *fp; - //char **filelist; - int i = 0; - //int fl_count; - //int fl_size; - int fl_count_fb; - int fl_size_fb; - int result = LIBMPQ_TOOLS_SUCCESS; - struct stat statbuf; - - /* get file status */ - if (stat(file, &statbuf) < 0) { - result = LIBMPQ_CONF_EFILE_NOT_FOUND; - } - - /* check if file is a filename or directory */ - /*if (S_ISDIR(statbuf.st_mode)) { - - // allocate memory for the file list - filelist = (char **)malloc(LIBMPQ_CONF_FL_INCREMENT * sizeof(char *)); - fl_count = 0; - fl_size = LIBMPQ_CONF_FL_INCREMENT; - - // check if it is a valid listfile - if (libmpq_detect_listfile_rec(file, &filelist, &fl_count, &fl_size)) { - filelist == NULL; - } - - filelist[fl_count] = NULL; - - // return if no listfile was found - if (filelist == NULL) { - result = LIBMPQ_CONF_EFILE_NOT_FOUND; - } - - for (i = 0; filelist[i]; i++) { - if ((fp = fopen(filelist[i], "r")) != NULL ) { - result = libmpq_read_listfile(mpq_a, fp); - fclose(fp); - } - } - - // freeing the listfile struct - libmpq_free_listfile(filelist); - }*/ - - /* if file is a regular file use it */ - //if (S_ISREG(statbuf.st_mode)) { - - /* if specific listfile was forced. */ - if ((fp = fopen(file, "r")) != NULL ) { - result = libmpq_read_listfile(mpq_a, fp); - fclose(fp); - } else { - result = LIBMPQ_CONF_EFILE_OPEN; - } - //} - - /* if error occured we need to create a fallback filelist. */ - if (mpq_a->mpq_l->mpq_files == NULL) { - - /* allocate memory for the file list */ - mpq_a->mpq_l->mpq_files = (unsigned char **)malloc(LIBMPQ_CONF_FL_INCREMENT * sizeof(char *)); - fl_count_fb = 0; - fl_size_fb = LIBMPQ_CONF_FL_INCREMENT; - - for (i = 0; i < libmpq_archive_info(mpq_a, LIBMPQ_MPQ_NUMFILES); i++) { - - /* set the next filelist entry to a copy of the file */ - mpq_a->mpq_l->mpq_files[fl_count_fb++] = (unsigned char *)_strdup("file%06lu.xxx"); - - /* increase the array size */ - if (fl_count_fb == fl_size_fb) { - mpq_a->mpq_l->mpq_files = (unsigned char **)realloc(mpq_a->mpq_l->mpq_files, (fl_size_fb + LIBMPQ_CONF_FL_INCREMENT) * sizeof(char *)); - fl_size_fb += LIBMPQ_CONF_FL_INCREMENT; - } - } - mpq_a->mpq_l->mpq_files[fl_count_fb] = NULL; - - /* if no error occurs and no listfile was assigned, we think there was no matching listfile. */ - if (result == 0) { - result = LIBMPQ_CONF_EFILE_NOT_FOUND; - } - } - - return result; -} - -/* - * This function frees the allocated memory for the listfile. - */ -int libmpq_listfile_close(mpq_archive *mpq_a) { - int i = 0; - - /* safety check if we really have a filelist. */ - if (mpq_a->mpq_l->mpq_files != NULL) { - /* freeing the filelist */ - while (mpq_a->mpq_l->mpq_files[i]) { - free(mpq_a->mpq_l->mpq_files[i++]); - } - free(mpq_a->mpq_l->mpq_files); - } - return 0; -} - -int libmpq_file_getdata(mpq_archive *mpq_a, mpq_hash mpq_h, const int number, unsigned char *dest) { - int blockindex = number; //-1; - int i = 0; - mpq_file *mpq_f = NULL; - mpq_block *mpq_b = NULL; - int success = 0; - - /*if (number < 1 || number > mpq_a->header->blocktablesize) { - return LIBMPQ_EINV_RANGE; - }*/ - - /* search for correct hashtable */ - /*for (i = 0; i < mpq_a->header->hashtablesize; i++) { - if ((number - 1) == (mpq_a->hashtable[i]).blockindex) { - blockindex = (mpq_a->hashtable[i]).blockindex; - mpq_h = &(mpq_a->hashtable[i]); - break; - } - }*/ - - /* check if file was found */ - if (blockindex == -1 || blockindex > mpq_a->header->blocktablesize) { - return LIBMPQ_EFILE_NOT_FOUND; - } - - /* check if sizes are correct */ - mpq_b = mpq_a->blocktable + blockindex; - if (mpq_b->filepos > (mpq_a->header->archivesize + mpq_a->mpqpos) || mpq_b->csize > mpq_a->header->archivesize) { - return LIBMPQ_EFILE_CORRUPT; - } - - /* check if file exists */ - if ((mpq_b->flags & LIBMPQ_FILE_EXISTS) == 0) { - return LIBMPQ_EFILE_NOT_FOUND; - } - - /* allocate memory for file structure */ - mpq_f = (mpq_file*)malloc(sizeof(mpq_file)); - if (!mpq_f) { - return LIBMPQ_EALLOCMEM; - } - - /* initialize file structure */ - memset(mpq_f, 0, sizeof(mpq_file)); - mpq_f->mpq_b = mpq_b; - mpq_f->nblocks = (mpq_f->mpq_b->fsize + mpq_a->blocksize - 1) / mpq_a->blocksize; - mpq_f->mpq_h = &mpq_h; - mpq_f->accessed = FALSE; - mpq_f->blockposloaded = FALSE; - - /* allocate buffers for decompression. */ - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) { - - /* - * Allocate buffer for block positions. At the begin of file are stored - * unsigned ints holding positions of each block relative from begin of - * file in the archive. - */ - if ((mpq_f->blockpos = (unsigned int*)malloc(sizeof(int) * (mpq_f->nblocks + 1))) == NULL) { - return LIBMPQ_EALLOCMEM; - } - } - - if(libmpq_file_read_file(mpq_a, mpq_f, 0, (char*)dest, mpq_b->fsize) == mpq_b->fsize) - success = 1; - - if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) { - // Free buffer for block positions - - free(mpq_f->blockpos); - } - /* freeing the file structure */ - free(mpq_f); - return success?LIBMPQ_TOOLS_SUCCESS:LIBMPQ_EFILE_CORRUPT; -} - diff --git a/src/tools/map_extractor/libmpq/mpq.h b/src/tools/map_extractor/libmpq/mpq.h deleted file mode 100644 index 1ed19d5bc3f..00000000000 --- a/src/tools/map_extractor/libmpq/mpq.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * mpq.h -- some default types and defines. - * - * Copyright (C) 2003 Maik Broemme - * - * This source was adepted from the C++ version of StormLib.h and - * StormPort.h included in stormlib. The C++ version belongs to - * the following authors, - * - * Ladislav Zezula - * Marko Friedemann - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id: mpq.h,v 1.8 2004/02/12 00:45:50 mbroemme Exp $ - */ - -#ifndef _MPQ_H -#define _MPQ_H - -#include - -#ifndef PATH_MAX - #define PATH_MAX 260 -#endif - -#if defined(__APPLE_CC__) - #define lseek64 lseek -#endif - -#define LIBMPQ_MAJOR_VERSION 0 /* Major version number... maybe sometimes we reach version 1 :) */ -#define LIBMPQ_MINOR_VERSION 3 /* Minor version number - increased only for small changes */ -#define LIBMPQ_PATCH_VERSION 0 /* Patchlevel - changed on bugfixes etc... */ - -#define LIBMPQ_TOOLS_SUCCESS 0 /* return value for all functions which success */ -#define LIBMPQ_TOOLS_BUFSIZE 0x500 /* buffer size for the decryption engine */ - -#define LIBMPQ_EFILE -1 /* error on file operation */ -#define LIBMPQ_EFILE_FORMAT -2 /* bad file format */ -#define LIBMPQ_EFILE_CORRUPT -3 /* file corrupt */ -#define LIBMPQ_EFILE_NOT_FOUND -4 /* file in archive not found */ -#define LIBMPQ_EFILE_READ -5 /* Read error in archive */ -#define LIBMPQ_EALLOCMEM -6 /* maybe not enough memory? :) */ -#define LIBMPQ_EFREEMEM -7 /* can not free memory */ -#define LIBMPQ_EINV_RANGE -8 /* Given filenumber is out of range */ -#define LIBMPQ_EHASHTABLE -9 /* error in reading hashtable */ -#define LIBMPQ_EBLOCKTABLE -10 /* error in reading blocktable */ - -#define LIBMPQ_ID_MPQ 0x1A51504D /* MPQ archive header ID ('MPQ\x1A') */ -#define LIBMPQ_HEADER_W3M 0x6D9E4B86 /* special value used by W3M Map Protector */ -#define LIBMPQ_FLAG_PROTECTED 0x00000002 /* Set on protected MPQs (like W3M maps) */ -#define LIBMPQ_HASH_ENTRY_DELETED 0xFFFFFFFE /* Block index for deleted hash entry */ - -#define LIBMPQ_FILE_COMPRESS_PKWARE 0x00000100 /* Compression made by PKWARE Data Compression Library */ -#define LIBMPQ_FILE_COMPRESS_MULTI 0x00000200 /* Multiple compressions */ -#define LIBMPQ_FILE_COMPRESSED 0x0000FF00 /* File is compressed */ -#define LIBMPQ_FILE_EXISTS 0x80000000 /* Set if file exists, reset when the file was deleted */ -#define LIBMPQ_FILE_ENCRYPTED 0x00010000 /* Indicates whether file is encrypted */ -#define LIBMPQ_FILE_HAS_METADATA 0x04000000 - -#define LIBMPQ_FILE_COMPRESSED_SIZE 1 /* MPQ compressed filesize of given file */ -#define LIBMPQ_FILE_UNCOMPRESSED_SIZE 2 /* MPQ uncompressed filesize of given file */ -#define LIBMPQ_FILE_COMPRESSION_TYPE 3 /* MPQ compression type of given file */ -#define LIBMPQ_FILE_TYPE_INT 4 /* file is given by number */ -#define LIBMPQ_FILE_TYPE_CHAR 5 /* file is given by name */ - -#define LIBMPQ_MPQ_ARCHIVE_SIZE 1 /* MPQ archive size */ -#define LIBMPQ_MPQ_HASHTABLE_SIZE 2 /* MPQ archive hashtable size */ -#define LIBMPQ_MPQ_BLOCKTABLE_SIZE 3 /* MPQ archive blocktable size */ -#define LIBMPQ_MPQ_BLOCKSIZE 4 /* MPQ archive blocksize */ -#define LIBMPQ_MPQ_NUMFILES 5 /* Number of files in the MPQ archive */ -#define LIBMPQ_MPQ_COMPRESSED_SIZE 6 /* Compressed archive size */ -#define LIBMPQ_MPQ_UNCOMPRESSED_SIZE 7 /* Uncompressed archive size */ - -#define LIBMPQ_HUFF_DECOMPRESS 0 /* Defines that we want to decompress using huffman trees. */ - -#define LIBMPQ_CONF_EFILE_OPEN -1 /* error if a specific listfile was forced and could not be opened. */ -#define LIBMPQ_CONF_EFILE_CORRUPT -2 /* listfile seems to be corrupt */ -#define LIBMPQ_CONF_EFILE_LIST_CORRUPT -3 /* listfile seems correct, but filelist is broken */ -#define LIBMPQ_CONF_EFILE_NOT_FOUND -4 /* error if no matching listfile found */ -#define LIBMPQ_CONF_EFILE_VERSION -5 /* libmpq version does not match required listfile version */ - -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE 1 -#endif - -/* -#ifndef min -#define min(a, b) ((a < b) ? a : b) -#endif -*/ - -typedef unsigned int mpq_buffer[LIBMPQ_TOOLS_BUFSIZE]; -typedef int (*DECOMPRESS)(char *, int *, char *, int); -typedef struct { - unsigned long mask; /* Decompression bit */ - DECOMPRESS decompress; /* Decompression function */ -} decompress_table; - -/* MPQ file header */ -typedef struct { - unsigned int id; /* The 0x1A51504D ('MPQ\x1A') signature */ - unsigned int offset; /* Offset of the first file (Relative to MPQ start) */ - unsigned int archivesize; /* Size of MPQ archive */ - unsigned short offsetsc; /* 0000 for SC and BW */ - unsigned short blocksize; /* Size of file block is (0x200 << blockSize) */ - unsigned int hashtablepos; /* File position of hashTable */ - unsigned int blocktablepos; /* File position of blockTable. Each entry has 16 bytes */ - unsigned int hashtablesize; /* Number of entries in hash table */ - unsigned int blocktablesize; /* Number of entries in the block table */ -} mpq_header; -//} __attribute__ ((packed)) mpq_header; - - -/* Hash entry. All files in the archive are searched by their hashes. */ -typedef struct { - unsigned int name1; /* The first two unsigned ints */ - unsigned int name2; /* are the encrypted file name */ - unsigned int locale; /* Locale information. */ - unsigned int blockindex; /* Index to file description block */ -} mpq_hash; - -/* File description block contains informations about the file */ -typedef struct { - unsigned int filepos; /* Block file starting position in the archive */ - unsigned int csize; /* Compressed file size */ - unsigned int fsize; /* Uncompressed file size */ - unsigned int flags; /* Flags */ -} mpq_block; - -/* File handle structure used since Diablo 1.00 (0x38 bytes) */ -typedef struct { - unsigned char filename[PATH_MAX]; /* filename of the actual file in the archive */ - int fd; /* File handle */ - unsigned int seed; /* Seed used for file decrypt */ - unsigned int filepos; /* Current file position */ - unsigned int offset; - unsigned int nblocks; /* Number of blocks in the file (incl. the last noncomplete one) */ - unsigned int *blockpos; /* Position of each file block (only for compressed files) */ - int blockposloaded; /* TRUE if block positions loaded */ - unsigned int offset2; /* (Number of bytes somewhere ?) */ - mpq_hash *mpq_h; /* Hash table entry */ - mpq_block *mpq_b; /* File block pointer */ - - /* Non-Storm.dll members */ - - unsigned int accessed; /* Was something from the file already read? */ -} mpq_file; - -/* List handle structure */ -typedef struct { - unsigned char mpq_version[10]; /* libmpq version required by the listfile */ - unsigned char mpq_name[PATH_MAX]; /* mpq archive name without full path */ - unsigned char mpq_type[20]; /* mpq archive type */ - unsigned char mpq_game[40]; /* blizzard title the file matches */ - unsigned char mpq_game_version[10]; /* game version */ - unsigned char **mpq_files; /* filelist */ -} mpq_list; - -/* Archive handle structure used since Diablo 1.00 */ -typedef struct { - unsigned char filename[PATH_MAX]; /* Opened archive file name */ - int fd; /* File handle */ - unsigned int blockpos; /* Position of loaded block in the file */ - unsigned int blocksize; /* Size of file block */ - unsigned char *blockbuf; /* Buffer (cache) for file block */ - unsigned int bufpos; /* Position in block buffer */ - unsigned int mpqpos; /* MPQ archive position in the file */ - unsigned int filepos; /* Current file pointer */ - unsigned int openfiles; /* Number of open files + 1 */ - mpq_buffer buf; /* MPQ buffer */ - mpq_header *header; /* MPQ file header */ - mpq_hash *hashtable; /* Hash table */ - mpq_block *blocktable; /* Block table */ - - /* Non-Storm.dll members */ - - mpq_list *mpq_l; /* Handle to file list from database */ - - unsigned int flags; /* See LIBMPQ_TOOLS_FLAG_XXXXX */ - unsigned int maxblockindex; /* The highest block table entry */ -} mpq_archive; - -extern char *libmpq_version(); -extern int libmpq_archive_open(mpq_archive *mpq_a, unsigned char *mpq_filename); -extern int libmpq_archive_close(mpq_archive *mpq_a); -extern int libmpq_archive_info(mpq_archive *mpq_a, unsigned int infotype); -//extern int libmpq_file_extract(mpq_archive *mpq_a, const int number); -extern int libmpq_file_info(mpq_archive *mpq_a, unsigned int infotype, const unsigned int number); -extern char *libmpq_file_name(mpq_archive *mpq_a, const int number); -extern int libmpq_file_number(mpq_archive *mpq_a, const char *name); -extern int libmpq_file_check(mpq_archive *mpq_a, void *file, int type); -extern int libmpq_listfile_open(mpq_archive *mpq_a, char file[PATH_MAX]); -extern int libmpq_listfile_close(mpq_archive *mpq_a); - -extern int libmpq_pkzip_decompress(char *out_buf, int *out_length, char *in_buf, int in_length); -extern int libmpq_zlib_decompress(char *out_buf, int *out_length, char *in_buf, int in_length); -extern int libmpq_huff_decompress(char *out_buf, int *out_length, char *in_buf, int in_length); -extern int libmpq_wave_decompress_stereo(char *out_buf, int *out_length, char *in_buf, int in_length); -extern int libmpq_wave_decompress_mono(char *out_buf, int *out_length, char *in_buf, int in_length); -extern int libmpq_multi_decompress(char *out_buf, int *pout_length, char *in_buf, int in_length); - -static decompress_table dcmp_table[] = { - {0x08, libmpq_pkzip_decompress}, /* Decompression with Pkware Data Compression Library */ - {0x02, libmpq_zlib_decompress}, /* Decompression with the "zlib" library */ - {0x01, libmpq_huff_decompress}, /* Huffmann decompression */ - {0x80, libmpq_wave_decompress_stereo}, /* WAVE decompression for stereo waves */ - {0x40, libmpq_wave_decompress_mono} /* WAVE decompression for mono waves */ -}; - -int libmpq_file_extract(mpq_archive *mpq_a, const int number, const char *filename); -int libmpq_file_getdata(mpq_archive *mpq_a, mpq_hash mpq_h, const int number, unsigned char *dest); -#endif /* _MPQ_H */ - diff --git a/src/tools/map_extractor/libmpq/parser.cpp b/src/tools/map_extractor/libmpq/parser.cpp deleted file mode 100644 index 4b01067ec08..00000000000 --- a/src/tools/map_extractor/libmpq/parser.cpp +++ /dev/null @@ -1,295 +0,0 @@ -/* - * parser.c -- functions used to parse list or config file. - * - * Copyright (C) 2003 Maik Broemme - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id: parser.c,v 1.5 2004/02/12 00:47:53 mbroemme Exp $ - */ -#define _CRT_SECURE_NO_DEPRECATE - -#include -#include -#include -#include "mpq.h" -#include "common.h" -#include - -/* - * This function deletes the specified characters, but leaves - * escape sequences unaffected. This means that " would be - * deleted but \" would not. - */ -char *libmpq_conf_delete_char(char *buf, char *chars) { - static char *temp; - char ch; - - temp = buf; - - /* strip out special chars like " */ - while (temp = strpbrk(temp, chars)) { - ch = temp[0]; - memmove(&temp[0], &temp[1], strlen(temp)); - if (ch == '\\') { - temp++; - } - } - - return buf; -} - -/* - * This function parses a line for the value to the given option. It - * return 1 on success and the byte array or 0 and null. - */ -int libmpq_conf_parse_line(char *line, char *search_value, char *return_value, int size) { - int level = 0; - int found = 0; - int i = 0; - int pos = 0; - - /* search value */ - while (*(++line)) { - - /* check for spaces */ - if (!isspace(*line) && level == 1) { - - /* we found our value so break */ - found = 1; - break; - } - - /* check for '=' so the value follows as next parameter */ - if (*line == '=' && level == 0) { - level = 1; - } - } - - /* now search for comment in this line */ - for (i = 0; i < int(strlen(line)); i++) { - if (line[i] == '#') { - pos = i - 1; - break; - } - } - - /* now set end of byte array behind value, but only if comment was found */ - if (pos != 0) { - for (i = pos; i >= 0; i--) { - if (line[i] != ' ' && line[i] != '\t') { - line[i + 1] = '\0'; - break; - } - } - } - - /* now check if line has trailing spaces */ - for (i = strlen(line); i >= 0; i--) { - if (line[i] != ' ' && line[i] != '\t') { - line[i + 1] = '\0'; - break; - } - } - - /* now check if value is quoted with "" and if there is a char behind. */ - for (i = strlen(line); i >= 0; i--) { - if (line[i] == '"') { - line[i + 1] = '\0'; - break; - } - } - - /* return the values */ - strncpy(return_value, line, size); - return found; -} - -/* - * This function returns the value for a given option in the - * listdb or config file. On success it returns 1, otherwise 0. - */ -int libmpq_conf_get_value(FILE *fp, char *search_value, void *return_value, int type, int size) { - char buf[LIBMPQ_CONF_BUFSIZE]; - int found = 0; - int result = LIBMPQ_TOOLS_SUCCESS; - - while (fgets(buf, LIBMPQ_CONF_BUFSIZE, fp) != NULL) { - char *line; - - buf[strlen(buf) - 1] = '\0'; - - /* skip whitespace */ - for (line = buf; isspace(*line); line++) { - continue; - } - - /* skip empty line */ - if (line[0] == '\0') { - continue; - } - - /* skip comments */ - if (line[0] == '#') { - continue; - } - - /* process the line */ - //if (!strncasecmp(line, search_value, strlen(search_value))) { - if (!strcmp(line, search_value)) { - found = libmpq_conf_parse_line(line, search_value, line, LIBMPQ_CONF_BUFSIZE); - if (found == 1) { - libmpq_conf_delete_char(line, "\"\\"); - - switch (type) { - case LIBMPQ_CONF_TYPE_INT: - - /* if it is no valid number it is safe to return 0 */ - *(int *)return_value = atoi(line); - break; - default: - strncpy((char *)return_value, line, size); - break; - } - - /* value found, so rewind stream */ - break; - } - } - } - - /* if value was not found */ - if (found == 0) { - switch (type) { - case LIBMPQ_CONF_TYPE_INT: - *(int *)return_value = 0; - result = LIBMPQ_CONF_EVALUE_NOT_FOUND; - break; - default: - strncpy((char *)return_value, "", size); - result = LIBMPQ_CONF_EVALUE_NOT_FOUND; - break; - } - } - fseek(fp, 0L, SEEK_SET); - - return result; -} - -/* - * This function returns a pointer to a byte array, with all values - * found in the config file. As second value it returns th number of - * entries in the byte array. On success it returns 1, otherwise 0. - */ -int libmpq_conf_get_array(FILE *fp, char *search_value, char ***filelist, int *entries) { - char buf[LIBMPQ_CONF_BUFSIZE]; - char temp[LIBMPQ_CONF_BUFSIZE]; - int level = 0; - int array_start = 0; - int array_end = 0; - int fl_count; - int fl_size; - int found = 0; - int i = 0; - - *entries = 0; - - /* allocate memory for the file list */ - (*filelist) = (char **)malloc(LIBMPQ_CONF_FL_INCREMENT * sizeof(char *)); - fl_count = 0; - fl_size = LIBMPQ_CONF_FL_INCREMENT; - - while (fgets(buf, LIBMPQ_CONF_BUFSIZE, fp) != NULL) { - char *line; - - buf[strlen(buf) - 1] = '\0'; - - /* skip whitespace */ - for (line = buf; isspace(*line); line++) { - continue; - } - - /* skip empty line */ - if (line[0] == '\0') { - continue; - } - - /* skip comments */ - if (line[0] == '#') { - continue; - } - - /* check for array end ) */ - if (*line == ')') { - array_end = 1; - break; - } - - /* process entries between () */ - if (array_start == 1 && array_end == 0) { - - /* add dummy option to use with libmpq_conf_parse_line() */ - strncpy(temp, "MPQ_BUFFER = ", LIBMPQ_CONF_BUFSIZE); - strncat(temp, line, LIBMPQ_CONF_BUFSIZE); - found = libmpq_conf_parse_line(temp, "MPQ_BUFFER", temp, LIBMPQ_CONF_BUFSIZE); - - if (found == 1) { - libmpq_conf_delete_char(temp, "\"\\"); - - /* set the next filelist entry to a copy of the file */ - (*filelist)[fl_count++] = _strdup(temp); - - /* increase the array size */ - if (fl_count == fl_size) { - (*filelist) = (char **)realloc((*filelist), (fl_size + LIBMPQ_CONF_FL_INCREMENT) * sizeof(char *)); - fl_size += LIBMPQ_CONF_FL_INCREMENT; - } - - /* increase number of entries */ - (*entries)++; - } - } - - /* process the line and search array start */ - //if (!strncasecmp(line, search_value, strlen(search_value))) { - if (!strcmp(line, search_value)) { - - /* search value */ - while (*(++line)) { - - /* check for array start ( */ - if (*line == '(' && level == 1) { - - /* we found our value so break */ - array_start = 1; - break; - } - - /* check for '=' so the value follows as next parameter */ - if (*line == '=' && level == 0) { - level = 1; - } - } - } - } - - /* we got all files, so rewind stream */ - fseek(fp, 0L, SEEK_SET); - - (*filelist)[fl_count] = NULL; - - return found; -} - diff --git a/src/tools/map_extractor/libmpq/wave.cpp b/src/tools/map_extractor/libmpq/wave.cpp deleted file mode 100644 index 7f16eb2fad1..00000000000 --- a/src/tools/map_extractor/libmpq/wave.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* - * wave.c -- this file contains decompression methods used by Storm.dll - * to decompress wave files. - * - * Copyright (C) 2003 Maik Broemme - * - * This source was adepted from the C++ version of wave.cpp included - * in stormlib. The C++ version belongs to the following authors, - * - * Ladislav Zezula - * Tom Amigo - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include "wave.h" - -/* Tables necessary dor decompression */ -static unsigned long wave_table_1503f120[] = { - 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000004, 0xFFFFFFFF, 0x00000002, 0xFFFFFFFF, 0x00000006, - 0xFFFFFFFF, 0x00000001, 0xFFFFFFFF, 0x00000005, 0xFFFFFFFF, 0x00000003, 0xFFFFFFFF, 0x00000007, - 0xFFFFFFFF, 0x00000001, 0xFFFFFFFF, 0x00000005, 0xFFFFFFFF, 0x00000003, 0xFFFFFFFF, 0x00000007, - 0xFFFFFFFF, 0x00000002, 0xFFFFFFFF, 0x00000004, 0xFFFFFFFF, 0x00000006, 0xFFFFFFFF, 0x00000008 -}; - -static unsigned long wave_table_1503f1a0[] = { - 0x00000007, 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, - 0x00000010, 0x00000011, 0x00000013, 0x00000015, 0x00000017, 0x00000019, 0x0000001C, 0x0000001F, - 0x00000022, 0x00000025, 0x00000029, 0x0000002D, 0x00000032, 0x00000037, 0x0000003C, 0x00000042, - 0x00000049, 0x00000050, 0x00000058, 0x00000061, 0x0000006B, 0x00000076, 0x00000082, 0x0000008F, - 0x0000009D, 0x000000AD, 0x000000BE, 0x000000D1, 0x000000E6, 0x000000FD, 0x00000117, 0x00000133, - 0x00000151, 0x00000173, 0x00000198, 0x000001C1, 0x000001EE, 0x00000220, 0x00000256, 0x00000292, - 0x000002D4, 0x0000031C, 0x0000036C, 0x000003C3, 0x00000424, 0x0000048E, 0x00000502, 0x00000583, - 0x00000610, 0x000006AB, 0x00000756, 0x00000812, 0x000008E0, 0x000009C3, 0x00000ABD, 0x00000BD0, - 0x00000CFF, 0x00000E4C, 0x00000FBA, 0x0000114C, 0x00001307, 0x000014EE, 0x00001706, 0x00001954, - 0x00001BDC, 0x00001EA5, 0x000021B6, 0x00002515, 0x000028CA, 0x00002CDF, 0x0000315B, 0x0000364B, - 0x00003BB9, 0x000041B2, 0x00004844, 0x00004F7E, 0x00005771, 0x0000602F, 0x000069CE, 0x00007462, - 0x00007FFF -}; - -/* - * Decompress a wave file, mono or stereo - * - * Offset: 1500F230 - */ -int libmpq_wave_decompress(unsigned char *out_buf, int out_length, unsigned char *in_buf, int in_length, int channels) { - byte_and_short out; - byte_and_short in; - unsigned char *in_end = in_buf + in_length; /* End on input buffer */ - unsigned long index; - long nr_array1[2]; - long nr_array2[2]; - int count = 0; - - out.pb = out_buf; - in.pb = in_buf; - nr_array1[0] = 0x2C; - nr_array1[1] = 0x2C; - in.pw++; - - /* 15007AD7 */ - for (count = 0; count < channels; count++) { - long temp; - temp = *(short *)in.pw++; - nr_array2[count] = temp; - if (out_length < 2) { - return out.pb - out_buf; - } - *out.pw++ = (unsigned short)temp; - out_length -= 2; - } - index = channels - 1; - while (in.pb < in_end) { - unsigned char one_byte = *in.pb++; - if (channels == 2) { - index = (index == 0) ? 1 : 0; - } - - /* - * Get one byte from input buffer - * 15007B25 - */ - if (one_byte & 0x80) { - /* 15007B32 */ - switch(one_byte & 0x7F) { - case 0: /* 15007B8E */ - if (nr_array1[index] != 0) { - nr_array1[index]--; - } - if (out_length < 2) { - break; - } - *out.pw++ = (unsigned short)nr_array2[index]; - out_length -= 2; - continue; - case 1: /* 15007B72 */ - nr_array1[index] += 8; /* EBX also */ - if (nr_array1[index] > 0x58) { - nr_array1[index] = 0x58; - } - if (channels == 2) { - index = (index == 0) ? 1 : 0; - } - continue; - case 2: - continue; - default: - nr_array1[index] -= 8; - if (nr_array1[index] < 0) { - nr_array1[index] = 0; - } - if (channels != 2) { - continue; - } - index = (index == 0) ? 1 : 0; - continue; - } - } else { - unsigned long temp1 = wave_table_1503f1a0[nr_array1[index]]; /* EDI */ - unsigned long temp2 = temp1 >> in_buf[1]; /* ESI */ - long temp3 = nr_array2[index]; /* ECX */ - if (one_byte & 0x01) { /* EBX = one_byte */ - temp2 += (temp1 >> 0); - } - if (one_byte & 0x02) { - temp2 += (temp1 >> 1); - } - if (one_byte & 0x04) { - temp2 += (temp1 >> 2); - } - if (one_byte & 0x08) { - temp2 += (temp1 >> 3); - } - if (one_byte & 0x10) { - temp2 += (temp1 >> 4); - } - if (one_byte & 0x20) { - temp2 += (temp1 >> 5); - } - if(one_byte & 0x40) { - temp3 -= temp2; - if (temp3 <= (long)0xFFFF8000) { - temp3 = (long)0xFFFF8000; - } - } else { - temp3 += temp2; - if (temp3 >= 0x7FFF) { - temp3 = 0x7FFF; - } - } - nr_array2[index] = temp3; - if (out_length < 2) { - break; - } - - temp2 = nr_array1[index]; - one_byte &= 0x1F; - *out.pw++ = (unsigned short)temp3; - out_length -= 2; - temp2 += wave_table_1503f120[one_byte]; - nr_array1[index] = temp2; - - if (nr_array1[index] < 0) { - nr_array1[index] = 0; - } else { - if (nr_array1[index] > 0x58) { - nr_array1[index] = 0x58; - } - } - } - } - return (out.pb - out_buf); -} - diff --git a/src/tools/map_extractor/libmpq/wave.h b/src/tools/map_extractor/libmpq/wave.h deleted file mode 100644 index 253c6a4f901..00000000000 --- a/src/tools/map_extractor/libmpq/wave.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * wave.h -- header file for WAVe unplode functions used by mpq-tools. - * - * Copyright (C) 2003 Maik Broemme - * - * This source was adepted from the C++ version of wave.h included - * in stormlib. The C++ version belongs to the following authors, - * - * Ladislav Zezula - * Tom Amigo - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _WAVE_H -#define _WAVE_H - -typedef union { - unsigned short *pw; - unsigned char *pb; -} byte_and_short; - -int libmpq_wave_decompress(unsigned char *out_buf, int out_length, unsigned char *in_buf, int in_length, int channels); - -#endif /* _WAVE_H */ - diff --git a/src/tools/map_extractor/libmpq/zconf.h b/src/tools/map_extractor/libmpq/zconf.h deleted file mode 100644 index e0468a22ecc..00000000000 --- a/src/tools/map_extractor/libmpq/zconf.h +++ /dev/null @@ -1,324 +0,0 @@ -/* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2003 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* @(#) $Id$ */ - -#ifndef ZCONF_H -#define ZCONF_H - -/* - * If you *really* need a unique prefix for all types and library functions, - * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. - */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ -# define deflate z_deflate -# define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd -# define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset -# define deflatePrime z_deflatePrime -# define deflateParams z_deflateParams -# define deflateBound z_deflateBound -# define inflateInit2_ z_inflateInit2_ -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateSyncPoint z_inflateSyncPoint -# define inflateCopy z_inflateCopy -# define inflateReset z_inflateReset -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound -# define uncompress z_uncompress -# define adler32 z_adler32 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table - -# define Byte z_Byte -# define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf -# define uIntf z_uIntf -# define uLongf z_uLongf -# define voidpf z_voidpf -# define voidp z_voidp -#endif - -#if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS -#endif -#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) -# define OS2 -#endif -#if defined(_WINDOWS) && !defined(WINDOWS) -# define WINDOWS -#endif -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) -# define WIN32 -#endif -#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) -# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) -# ifndef SYS16BIT -# define SYS16BIT -# endif -# endif -#endif - -/* - * Compile with -DMAXSEG_64K if the alloc function cannot allocate more - * than 64k bytes at a time (needed on systems with 16-bit int). - */ -#ifdef SYS16BIT -# define MAXSEG_64K -#endif -#ifdef MSDOS -# define UNALIGNED_OK -#endif - -#ifdef __STDC_VERSION__ -# ifndef STDC -# define STDC -# endif -# if __STDC_VERSION__ >= 199901L -# ifndef STDC99 -# define STDC99 -# endif -# endif -#endif -#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) -# define STDC -#endif -#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) -# define STDC -#endif -#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) -# define STDC -#endif -#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) -# define STDC -#endif - -#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ -# define STDC -#endif - -#ifndef STDC -# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ -# define const /* note: need a more gentle solution here */ -# endif -#endif - -/* Some Mac compilers merge all .h files incorrectly: */ -#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) -# define NO_DUMMY_DECL -#endif - -/* Maximum value for memLevel in deflateInit2 */ -#ifndef MAX_MEM_LEVEL -# ifdef MAXSEG_64K -# define MAX_MEM_LEVEL 8 -# else -# define MAX_MEM_LEVEL 9 -# endif -#endif - -/* Maximum value for windowBits in deflateInit2 and inflateInit2. - * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files - * created by gzip. (Files created by minigzip can still be extracted by - * gzip.) - */ -#ifndef MAX_WBITS -# define MAX_WBITS 15 /* 32K LZ77 window */ -#endif - -/* The memory requirements for deflate are (in bytes): - (1 << (windowBits+2)) + (1 << (memLevel+9)) - that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) - plus a few kilobytes for small objects. For example, if you want to reduce - the default memory requirements from 256K to 128K, compile with - make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" - Of course this will generally degrade compression (there's no free lunch). - - The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes - for small objects. -*/ - - /* Type declarations */ - -#ifndef OF /* function prototypes */ -# ifdef STDC -# define OF(args) args -# else -# define OF(args) () -# endif -#endif - -/* The following definitions for FAR are needed only for MSDOS mixed - * model programming (small or medium model with some far allocations). - * This was tested only with MSC; for other MSDOS compilers you may have - * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, - * just define FAR to be empty. - */ -#ifdef SYS16BIT -# if defined(M_I86SM) || defined(M_I86MM) - /* MSC small or medium model */ -# define SMALL_MEDIUM -# ifdef _MSC_VER -# define FAR _far -# else -# define FAR far -# endif -# endif -# if (defined(__SMALL__) || defined(__MEDIUM__)) - /* Turbo C small or medium model */ -# define SMALL_MEDIUM -# ifdef __BORLANDC__ -# define FAR _far -# else -# define FAR far -# endif -# endif -#endif - -#if defined(WINDOWS) || defined(WIN32) - /* If building or using zlib as a DLL, define ZLIB_DLL. - * This is not mandatory, but it offers a little performance increase. - */ -# ifdef ZLIB_DLL -# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) -# ifdef ZLIB_INTERNAL -# define ZEXTERN extern __declspec(dllexport) -# else -# define ZEXTERN extern __declspec(dllimport) -# endif -# endif -# endif /* ZLIB_DLL */ - /* If building or using zlib with the WINAPI/WINAPIV calling convention, - * define ZLIB_WINAPI. - * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. - */ -# ifdef ZLIB_WINAPI -# ifdef FAR -# undef FAR -# endif -# include - /* No need for _export, use ZLIB.DEF instead. */ - /* For complete Windows compatibility, use WINAPI, not __stdcall. */ -# define ZEXPORT WINAPI -# ifdef WIN32 -# define ZEXPORTVA WINAPIV -# else -# define ZEXPORTVA FAR CDECL -# endif -# endif -#endif - -#if defined (__BEOS__) -# ifdef ZLIB_DLL -# ifdef ZLIB_INTERNAL -# define ZEXPORT __declspec(dllexport) -# define ZEXPORTVA __declspec(dllexport) -# else -# define ZEXPORT __declspec(dllimport) -# define ZEXPORTVA __declspec(dllimport) -# endif -# endif -#endif - -#ifndef ZEXTERN -# define ZEXTERN extern -#endif -#ifndef ZEXPORT -# define ZEXPORT -#endif -#ifndef ZEXPORTVA -# define ZEXPORTVA -#endif - -#ifndef FAR -# define FAR -#endif - -#if !defined(__MACTYPES__) -typedef unsigned char Byte; /* 8 bits */ -#endif -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ - -#ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ -# define Bytef Byte FAR -#else - typedef Byte FAR Bytef; -#endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; -typedef uLong FAR uLongf; - -#ifdef STDC - typedef void const *voidpc; - typedef void FAR *voidpf; - typedef void *voidp; -#else - typedef Byte const *voidpc; - typedef Byte FAR *voidpf; - typedef Byte *voidp; -#endif - -#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ -# include /* for off_t */ -# include /* for SEEK_* and off_t */ -# ifdef VMS -# include /* for off_t */ -# endif -# define z_off_t off_t -#endif -#ifndef SEEK_SET -# define SEEK_SET 0 /* Seek from beginning of file. */ -# define SEEK_CUR 1 /* Seek from current position. */ -# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ -#endif -#ifndef z_off_t -# define z_off_t long -#endif - -#if defined(__OS400__) -#define NO_vsnprintf -#endif - -#if defined(__MVS__) -# define NO_vsnprintf -# ifdef FAR -# undef FAR -# endif -#endif - -/* MVS linker does not support external names larger than 8 bytes */ -#if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(deflateBound,"DEBND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(compressBound,"CMBND") -# pragma map(inflate_table,"INTABL") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_copyright,"INCOPY") -#endif - -#endif /* ZCONF_H */ - diff --git a/src/tools/map_extractor/libmpq/zlib.h b/src/tools/map_extractor/libmpq/zlib.h deleted file mode 100644 index 2c786c36d89..00000000000 --- a/src/tools/map_extractor/libmpq/zlib.h +++ /dev/null @@ -1,1201 +0,0 @@ -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.1, November 17th, 2003 - - Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). -*/ - -#ifndef ZLIB_H -#define ZLIB_H - -#include "zconf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ZLIB_VERSION "1.2.1" -#define ZLIB_VERNUM 0x1210 - -/* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. - - The compressed data format used by the in-memory functions is the zlib - format, which is a zlib wrapper documented in RFC 1950, wrapped around a - deflate stream, which is itself documented in RFC 1951. - - The library also supports reading and writing files in gzip (.gz) format - with an interface similar to that of stdio using the functions that start - with "gz". The gzip format is different from the zlib format. gzip is a - gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - - The zlib format was designed to be compact and fast for use in memory - and on communications channels. The gzip format was designed for single- - file compression on file systems, has a larger header than zlib to maintain - directory information, and uses a different, slower check method than zlib. - - This library does not provide any functions to write gzip files in memory. - However such functions could be easily written using zlib's deflate function, - the documentation in the gzip RFC, and the examples in gzio.c. - - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. -*/ - -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); - -struct internal_state; - -typedef struct z_stream_s { - Bytef *next_in; /* next input byte */ - uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ - - Bytef *next_out; /* next output byte should be put there */ - uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ - - char *msg; /* last error message, NULL if no error */ - struct internal_state FAR *state; /* not visible by applications */ - - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - voidpf opaque; /* private data object passed to zalloc and zfree */ - - int data_type; /* best guess about the data type: ascii or binary */ - uLong adler; /* adler32 value of the uncompressed data */ - uLong reserved; /* reserved for future use */ -} z_stream; - -typedef z_stream FAR *z_streamp; - -/* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the - opaque value. - - zalloc must return Z_NULL if there is not enough memory for the object. - If zlib is used in a multi-threaded application, zalloc and zfree must be - thread safe. - - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). -*/ - - /* constants */ - -#define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ -#define Z_SYNC_FLUSH 2 -#define Z_FULL_FLUSH 3 -#define Z_FINISH 4 -#define Z_BLOCK 5 -/* Allowed flush values; see deflate() and inflate() below for details */ - -#define Z_OK 0 -#define Z_STREAM_END 1 -#define Z_NEED_DICT 2 -#define Z_ERRNO (-1) -#define Z_STREAM_ERROR (-2) -#define Z_DATA_ERROR (-3) -#define Z_MEM_ERROR (-4) -#define Z_BUF_ERROR (-5) -#define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. - */ - -#define Z_NO_COMPRESSION 0 -#define Z_BEST_SPEED 1 -#define Z_BEST_COMPRESSION 9 -#define Z_DEFAULT_COMPRESSION (-1) -/* compression levels */ - -#define Z_FILTERED 1 -#define Z_HUFFMAN_ONLY 2 -#define Z_RLE 3 -#define Z_DEFAULT_STRATEGY 0 -/* compression strategy; see deflateInit2() below for details */ - -#define Z_BINARY 0 -#define Z_ASCII 1 -#define Z_UNKNOWN 2 -/* Possible values of the data_type field (though see inflate()) */ - -#define Z_DEFLATED 8 -/* The deflate compression method (the only one supported in this version) */ - -#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ - -#define zlib_version zlibVersion() -/* for compatibility with versions < 1.0.2 */ - - /* basic functions */ - -ZEXTERN const char * ZEXPORT zlibVersion OF((void)); -/* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. - */ - -/* -ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. - - The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). - - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, - Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). -*/ - - -ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); -/* - deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. deflate performs one or both of the - following actions: - - - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in and avail_in are updated and - processing will resume at this point for the next call of deflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. - Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. - - If the parameter flush is set to Z_SYNC_FLUSH, all pending output is - flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. - - If flush is set to Z_FULL_FLUSH, all output is flushed as with - Z_SYNC_FLUSH, and the compression state is reset so that decompression can - restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade - the compression. - - If deflate returns with avail_out == 0, this function must be called again - with the same value of the flush parameter and more output space (updated - avail_out), until the flush is complete (deflate returns with non-zero - avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. - - If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - the value returned by deflateBound (see below). If deflate does not return - Z_STREAM_END, then it must be called again as described above. - - deflate() sets strm->adler to the adler32 checksum of all input read - so far (that is, total_in bytes). - - deflate() may update data_type if it can make a good guess about - the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. - - deflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if all input has been - consumed and all output has been produced (only when flush is set to - Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not - fatal, and deflate() can be called again with more input and more output - space to continue compressing. -*/ - - -ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the - stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be - deallocated). -*/ - - -/* -ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); - - Initializes the internal stream state for decompression. The fields - next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the - compression method from the zlib header and allocates all data structures - accordingly; otherwise the allocation will be deferred to the first call of - inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to - use default allocation functions. - - inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) -*/ - - -ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); -/* - inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce - some output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. inflate performs one or both of the - following actions: - - - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, - Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much - output as possible to the output buffer. Z_BLOCK requests that inflate() stop - if and when it get to the next deflate block boundary. When decoding the zlib - or gzip format, this will cause inflate() to return immediately after the - header and before the first block. When doing a raw inflate, inflate() will - go ahead and process the first block, and will return when it gets to the end - of that block, or when it runs out of data. - - The Z_BLOCK option assists in appending to or combining deflate streams. - Also to assist in this, on return inflate() will set strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 - if inflate() is currently decoding the last block in the deflate stream, - plus 128 if inflate() returned immediately after decoding an end-of-block - code or decoding the complete header up to just before the first byte of the - deflate stream. The end-of-block will not be indicated until all of the - uncompressed data from that block has been written to strm->next_out. The - number of unused bits may in general be greater than seven, except when - bit 7 of data_type is set, in which case the number of unused bits will be - less than eight. - - inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster approach - may be used for the single inflate() call. - - In this implementation, inflate() always flushes as much output as - possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation - is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK is used. - - If a preset dictionary is needed after this call (see inflateSetDictionary - below), inflate sets strm-adler to the adler32 checksum of the dictionary - chosen by the compressor and returns Z_NEED_DICT; otherwise it sets - strm->adler to the adler32 checksum of all output produced so far (that is, - total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 - checksum is equal to that saved by the compressor and returns Z_STREAM_END - only if the checksum is correct. - - inflate() will decompress and check either zlib-wrapped or gzip-wrapped - deflate data. The header type is detected automatically. Any information - contained in the gzip header is not retained, so applications that need that - information should instead use raw inflate, see inflateInit2() below, or - inflateBack() and perform their own processing of the gzip header and - trailer. - - inflate() returns Z_OK if some progress has been made (more input processed - or more output produced), Z_STREAM_END if the end of the compressed data has - been reached and all uncompressed output has been produced, Z_NEED_DICT if a - preset dictionary is needed at this point, Z_DATA_ERROR if the input data was - corrupted (input stream not conforming to the zlib format or incorrect check - value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, - Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and - inflate() can be called again with more input and more output space to - continue decompressing. If Z_DATA_ERROR is returned, the application may then - call inflateSync() to look for a good compression block if a partial recovery - of the data is desired. -*/ - - -ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). -*/ - - /* Advanced functions */ - -/* - The following functions are needed only in some special applications. -*/ - -/* -ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); - - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. - - The method parameter is the compression method. It must be Z_DEFLATED in - this version of the library. - - The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if - deflateInit is used instead. - - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits - determines the window size. deflate() will then generate raw deflate data - with no zlib header or trailer, and will not compute an adler32 check value. - - windowBits can also be greater than 15 for optional gzip encoding. Add - 16 to windowBits to write a simple gzip header and trailer around the - compressed data instead of a zlib wrapper. The gzip header will have no - file name, no extra data, no comment, no modification time (set to zero), - no header crc, and the operating system will be set to 255 (unknown). - - The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. - - The strategy parameter is used to tune the compression algorithm. Use the - value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman - coding and less string matching; it is somewhat intermediate between - Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as - Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy - parameter only affects the compression ratio but not the correctness of the - compressed output even if it is not set appropriately. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). - - The dictionary should consist of strings (byte sequences) that are likely - to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a - dictionary is most useful when the data to be compressed is short and can be - predicted with good accuracy; the data can then be compressed better than - with the default empty dictionary. - - Depending on the size of the compression data structures selected by - deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. - - Upon return of this function, strm->adler is set to the adler32 value - of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value - applies to the whole dictionary even if only a subset of the dictionary is - actually used by the compressor.) If a raw deflate was requested, then the - adler32 value is not computed and strm->adler is not set. - - deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not - perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when several compression strategies will be - tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed - by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. - - deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); -/* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. - - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, - int level, - int strategy)); -/* - Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in deflateInit2. This can be - used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. -*/ - -ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, - uLong sourceLen)); -/* - deflateBound() returns an upper bound on the compressed size after - deflation of sourceLen bytes. It must be called after deflateInit() - or deflateInit2(). This would be used to allocate an output buffer - for deflation in a single pass, and so would be called before deflate(). -*/ - -ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, - int bits, - int value)); -/* - deflatePrime() inserts bits in the deflate output stream. The intent - is that this function is used to start off the deflate output with the - bits leftover from a previous deflate stream when appending to it. As such, - this function can only be used for raw deflate, and must be used before the - first deflate() call after a deflateInit2() or deflateReset(). bits must be - less than or equal to 16, and that many of the least significant bits of - value will be inserted in the output. - - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -/* -ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); - - This is another version of inflateInit with an extra parameter. The - fields next_in, avail_in, zalloc, zfree and opaque must be initialized - before by the caller. - - The windowBits parameter is the base two logarithm of the maximum window - size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. windowBits must be greater than or equal to the windowBits value - provided to deflateInit2() while compressing, or it must be equal to 15 if - deflateInit2() was not used. If a compressed stream with a larger window - size is given as input, inflate() will return with the error code - Z_DATA_ERROR instead of trying to allocate a larger window. - - windowBits can also be -8..-15 for raw inflate. In this case, -windowBits - determines the window size. inflate() will then process raw deflate data, - not looking for a zlib or gzip header, not generating a check value, and not - looking for any check values for comparison at the end of the stream. This - is for use with other formats that use the deflate compressed data format - such as zip. Those formats provide their own check values. If a custom - format is developed using the raw deflate format for compressed data, it is - recommended that a check value such as an adler32 or a crc32 be applied to - the uncompressed data as is done in the zlib, gzip, and zip formats. For - most applications, the zlib format should be used as is. Note that comments - above on the use in deflateInit2() applies to the magnitude of windowBits. - - windowBits can also be greater than 15 for optional gzip decoding. Add - 32 to windowBits to enable zlib and gzip decoding with automatic header - detection, or add 16 to decode only the gzip format (the zlib format will - return a Z_DATA_ERROR). - - inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative - memLevel). msg is set to null if there is no error message. inflateInit2 - does not perform any decompression apart from reading the zlib header if - present: this will be done by inflate(). (So next_in and avail_in may be - modified, but next_out and avail_out are unchanged.) -*/ - -ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate - if this call returned Z_NEED_DICT. The dictionary chosen by the compressor - can be determined from the adler32 value returned by this call of - inflate. The compressor and decompressor must use exactly the same - dictionary (see deflateSetDictionary). - - inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not - perform any decompression: this will be done by subsequent calls of - inflate(). -*/ - -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); -/* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. - - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. -*/ - -ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when randomly accessing a large stream. The - first pass through the stream can periodically record the inflate state, - allowing restarting inflate at those points when randomly accessing the - stream. - - inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); -/* - This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. - - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -/* -ZEXTERN int ZEXPORT inflateBackInit OF((z_stream FAR *strm, int windowBits, - unsigned char FAR *window)); - - Initialize the internal stream state for decompression using inflateBack() - calls. The fields zalloc, zfree and opaque in strm must be initialized - before the call. If zalloc and zfree are Z_NULL, then the default library- - derived memory allocation routines are used. windowBits is the base two - logarithm of the window size, in the range 8..15. window is a caller - supplied buffer of that size. Except for special applications where it is - assured that deflate was used with small window sizes, windowBits must be 15 - and a 32K byte window must be supplied to be able to decompress general - deflate streams. - - See inflateBack() for the usage of these routines. - - inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not - be allocated, or Z_VERSION_ERROR if the version of the library does not - match the version of the header file. -*/ - -typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); -typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); - -ZEXTERN int ZEXPORT inflateBack OF((z_stream FAR *strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); -/* - inflateBack() does a raw inflate with a single call using a call-back - interface for input and output. This is more efficient than inflate() for - file i/o applications in that it avoids copying between the output and the - sliding window by simply making the window itself the output buffer. This - function trusts the application to not change the output buffer passed by - the output function, at least until inflateBack() returns. - - inflateBackInit() must be called first to allocate the internal state - and to initialize the state with the user-provided window buffer. - inflateBack() may then be used multiple times to inflate a complete, raw - deflate stream with each call. inflateBackEnd() is then called to free - the allocated state. - - A raw deflate stream is one with no zlib or gzip header or trailer. - This routine would normally be used in a utility that reads zip or gzip - files and writes out uncompressed files. The utility would decode the - header and process the trailer on its own, hence this routine expects - only the raw deflate stream to decompress. This is different from the - normal behavior of inflate(), which expects either a zlib or gzip header and - trailer around the deflate stream. - - inflateBack() uses two subroutines supplied by the caller that are then - called by inflateBack() for input and output. inflateBack() calls those - routines until it reads a complete deflate stream and writes out all of the - uncompressed data, or until it encounters an error. The function's - parameters and return types are defined above in the in_func and out_func - typedefs. inflateBack() will call in(in_desc, &buf) which should return the - number of bytes of provided input, and a pointer to that input in buf. If - there is no input available, in() must return zero--buf is ignored in that - case--and inflateBack() will return a buffer error. inflateBack() will call - out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() - should return zero on success, or non-zero on failure. If out() returns - non-zero, inflateBack() will return with an error. Neither in() nor out() - are permitted to change the contents of the window provided to - inflateBackInit(), which is also the buffer that out() uses to write from. - The length written by out() will be at most the window size. Any non-zero - amount of input may be provided by in(). - - For convenience, inflateBack() can be provided input on the first call by - setting strm->next_in and strm->avail_in. If that input is exhausted, then - in() will be called. Therefore strm->next_in must be initialized before - calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called - immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in - must also be initialized, and then if strm->avail_in is not zero, input will - initially be taken from strm->next_in[0 .. strm->avail_in - 1]. - - The in_desc and out_desc parameters of inflateBack() is passed as the - first parameter of in() and out() respectively when they are called. These - descriptors can be optionally used to pass any information that the caller- - supplied in() and out() functions need to do their job. - - On return, inflateBack() will set strm->next_in and strm->avail_in to - pass back any unused input that was provided by the last in() call. The - return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR - if in() or out() returned an error, Z_DATA_ERROR if there was a format - error in the deflate stream (in which case strm->msg is set to indicate the - nature of the error), or Z_STREAM_ERROR if the stream was not properly - initialized. In the case of Z_BUF_ERROR, an input or output error can be - distinguished using strm->next_in which will be Z_NULL only if in() returned - an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to - out() returning non-zero. (in() will always be called before out(), so - strm->next_in is assured to be defined if out() returns non-zero.) Note - that inflateBack() cannot return Z_OK. -*/ - -ZEXTERN int ZEXPORT inflateBackEnd OF((z_stream FAR *strm)); -/* - All memory allocated by inflateBackInit() is freed. - - inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream - state was inconsistent. -*/ - -ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); -/* Return flags indicating compile-time options. - - Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: - 1.0: size of uInt - 3.2: size of uLong - 5.4: size of voidpf (pointer) - 7.6: size of z_off_t - - Compiler, assembler, and debug options: - 8: DEBUG - 9: ASMV or ASMINF -- use ASM code - 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention - 11: 0 (reserved) - - One-time table building (smaller code, but not thread-safe if true): - 12: BUILDFIXED -- build static block decoding tables when needed - 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed - 14,15: 0 (reserved) - - Library content (indicates missing functionality): - 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking - deflate code when not needed) - 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect - and decode gzip streams (to avoid linking crc code) - 18-19: 0 (reserved) - - Operation variations (changes in library functionality): - 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate - 21: FASTEST -- deflate algorithm with only one, lowest compression level - 22,23: 0 (reserved) - - The sprintf variant used by gzprintf (zero is best): - 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format - 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! - 26: 0 = returns value, 1 = void -- 1 means inferred string length returned - - Remainder: - 27-31: 0 (reserved) - */ - - - /* utility functions */ - -/* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. -*/ - -ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least the value returned - by compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. - compress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer. -*/ - -ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level)); -/* - Compresses the source buffer into the destination buffer. The level - parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the - destination buffer, which must be at least the value returned by - compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - - compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_BUF_ERROR if there was not enough room in the output buffer, - Z_STREAM_ERROR if the level parameter is invalid. -*/ - -ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); -/* - compressBound() returns an upper bound on the compressed size after - compress() or compress2() on sourceLen bytes. It would be used before - a compress() or compress2() call to allocate the destination buffer. -*/ - -ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. -*/ - - -typedef voidp gzFile; - -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); -/* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h", or 'R' for run-length encoding - as in "wb1R". (See the description of deflateInit2 for more information - about the strategy parameter.) - - gzopen can be used to read a file which is not in gzip format; in this - case gzread will directly read from the file without decompression. - - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ - -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); -/* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. -*/ - -ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); -/* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. - gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not - opened for writing. -*/ - -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); -/* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ - -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); -/* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). -*/ - -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); -/* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). The number of - uncompressed bytes written is limited to 4095. The caller should assure that - this limit is not exceeded. If it is exceeded, then gzprintf() will return - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() - because the secure snprintf() or vsnprintf() functions were not available. -*/ - -ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); -/* - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. -*/ - -ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); -/* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. -*/ - -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); -/* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. -*/ - -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); -/* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. -*/ - -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); -/* - Push one character back onto the stream to be read again later. - Only one character of push-back is allowed. gzungetc() returns the - character pushed, or -1 on failure. gzungetc() will fail if a - character has been pushed but not read yet, or if c is -1. The pushed - character will be discarded if the stream is repositioned with gzseek() - or gzrewind(). -*/ - -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); -/* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. -*/ - -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); -/* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); - the value SEEK_END is not supported. - If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are - supported; gzseek then compresses a sequence of zeroes up to the new - starting position. - - gzseek returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error, in - particular if the file is opened for writing and the new starting position - would be before the current position. -*/ - -ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); -/* - Rewinds the given file. This function is supported only for reading. - - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) -*/ - -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); -/* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. - - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) -*/ - -ZEXTERN int ZEXPORT gzeof OF((gzFile file)); -/* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. -*/ - -ZEXTERN int ZEXPORT gzclose OF((gzFile file)); -/* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). -*/ - -ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); -/* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ - -ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); -/* - Clears the error and end-of-file flags for file. This is analogous to the - clearerr() function in stdio. This is useful for continuing to read a gzip - file that is being written concurrently. -*/ - - /* checksum functions */ - -/* - These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. -*/ - -ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); - -/* - Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: - - uLong adler = adler32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - adler = adler32(adler, buffer, length); - } - if (adler != original_adler) error(); -*/ - -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); -/* - Update a running crc with the bytes buf[0..len-1] and return the updated - crc. If buf is NULL, this function returns the required initial value - for the crc. Pre- and post-conditioning (one's complement) is performed - within this function so it shouldn't be done by the application. - Usage example: - - uLong crc = crc32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - crc = crc32(crc, buffer, length); - } - if (crc != original_crc) error(); -*/ - - - /* various hacks, don't look :) */ - -/* deflateInit and inflateInit are macros to allow checking the zlib version - * and the compiler's view of z_stream: - */ -ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateBackInit_ OF((z_stream FAR *strm, int windowBits, - unsigned char FAR *window, - const char *version, - int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) -#define inflateBackInit(strm, windowBits, window) \ - inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, sizeof(z_stream)) - - -#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; /* hack for buggy compilers */ -#endif - -ZEXTERN const char * ZEXPORT zError OF((int err)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); -ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); - -#ifdef __cplusplus -} -#endif - -#endif /* ZLIB_H */ - diff --git a/src/tools/map_extractor/release/zlib.lib b/src/tools/map_extractor/release/zlib.lib deleted file mode 100644 index 42dded3ce230ee994ea3d0f46fc89617aee5d058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212284 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 z 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

s{L@v$sw^ZV!-Y9Gw(#QOzI_kXI=IPoPR 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