--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
95 lines
3.9 KiB
C
95 lines
3.9 KiB
C
/*
|
|
* explode.h -- header file for pkware data decompression library
|
|
* used by mpq-tools.
|
|
*
|
|
* Copyright (c) 2003-2008 Maik Broemme <[email protected]>
|
|
*
|
|
* This source was adepted from the C++ version of pklib.h included
|
|
* in stormlib. The C++ version belongs to the following authors:
|
|
*
|
|
* Ladislav Zezula <[email protected]>
|
|
*
|
|
* 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 compression constants and return values. */
|
|
#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
|
|
|
|
#ifdef _MSC_VER
|
|
#pragma pack(push,1)
|
|
#endif
|
|
|
|
/* compression structure. */
|
|
typedef struct {
|
|
uint32_t offs0000; /* 0000 - start. */
|
|
uint32_t cmp_type; /* 0004 - compression type (binary or ascii). */
|
|
uint32_t out_pos; /* 0008 - position in output buffer. */
|
|
uint32_t dsize_bits; /* 000C - dict size (4, 5, 6 for 0x400, 0x800, 0x1000). */
|
|
uint32_t dsize_mask; /* 0010 - dict size bitmask (0x0F, 0x1F, 0x3F for 0x400, 0x800, 0x1000). */
|
|
uint32_t bit_buf; /* 0014 - 16-bit buffer for processing input data. */
|
|
uint32_t extra_bits; /* 0018 - number of extra (above 8) bits in bit buffer. */
|
|
uint32_t in_pos; /* 001C - position in in_buf. */
|
|
uint32_t in_bytes; /* 0020 - number of bytes in input buffer. */
|
|
void *param; /* 0024 - custom parameter. */
|
|
uint32_t (*read_buf)(char *buf, uint32_t *size, void *param); /* 0028 offset.*/
|
|
void (*write_buf)(char *buf, uint32_t *size, void *param); /* 002C offset. */
|
|
uint8_t out_buf[0x2000]; /* 0030 - output circle buffer, starting position is 0x1000. */
|
|
uint8_t offs_2030[0x204]; /* 2030 - whats that? */
|
|
uint8_t in_buf[0x800]; /* 2234 - buffer for data to be decompressed. */
|
|
uint8_t pos1[0x100]; /* 2A34 - positions in buffers. */
|
|
uint8_t pos2[0x100]; /* 2B34 - positions in buffers. */
|
|
uint8_t offs_2c34[0x100]; /* 2C34 - buffer. */
|
|
uint8_t offs_2d34[0x100]; /* 2D34 - buffer. */
|
|
uint8_t offs_2e34[0x80]; /* 2EB4 - buffer. */
|
|
uint8_t offs_2eb4[0x100]; /* 2EB4 - buffer. */
|
|
uint8_t bits_asc[0x100]; /* 2FB4 - buffer. */
|
|
uint8_t dist_bits[0x40]; /* 30B4 - numbers of bytes to skip copied block length. */
|
|
uint8_t slen_bits[0x10]; /* 30F4 - numbers of bits for skip copied block length. */
|
|
uint8_t clen_bits[0x10]; /* 3104 - number of valid bits for copied block. */
|
|
uint16_t len_base[0x10]; /* 3114 - buffer. */
|
|
#ifdef _MSC_VER
|
|
} pkzip_cmp_s;
|
|
#pragma pack(pop)
|
|
#else
|
|
} __attribute__ ((packed)) pkzip_cmp_s;
|
|
#endif
|
|
|
|
/* data structure. */
|
|
typedef struct {
|
|
uint8_t *in_buf; /* pointer to input data buffer. */
|
|
uint32_t in_pos; /* current offset in input data buffer. */
|
|
int32_t in_bytes; /* number of bytes in the input buffer. */
|
|
uint8_t *out_buf; /* pointer to output data buffer. */
|
|
uint32_t out_pos; /* position in the output buffer. */
|
|
int32_t max_out; /* maximum number of bytes in the output buffer. */
|
|
} pkzip_data_s;
|
|
|
|
/* decompress the stream using pkzip compression. */
|
|
uint32_t libmpq__do_decompress_pkzip(
|
|
uint8_t *work_buf,
|
|
void *param
|
|
);
|
|
|
|
#endif /* _EXPLODE_H */
|