289acf3333
The build system used by rbutil is not very robust: all the files are eventually compiled to the same directory so we cannot have two files with the same name (system.c would conflicts with system.cpp) so rename one file to avoid this. Also change all include directives to local ones because we don't have to expose the entire mspack source to inclusion. Change-Id: I3fe0638d69fdc30566eb9425abfe33c807678b28 Reviewed-on: http://gerrit.rockbox.org/417 Reviewed-by: Dominik Riebeling <Dominik.Riebeling@gmail.com>
118 lines
3.4 KiB
C
118 lines
3.4 KiB
C
/* This file is part of libmspack.
|
|
* (C) 2003-2010 Stuart Caie.
|
|
*
|
|
* libmspack is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU Lesser General Public License (LGPL) version 2.1
|
|
*
|
|
* For further details, see the file COPYING.LIB distributed with libmspack
|
|
*/
|
|
|
|
#ifndef MSPACK_KWAJ_H
|
|
#define MSPACK_KWAJ_H 1
|
|
|
|
#include "lzss.h"
|
|
|
|
/* generic KWAJ definitions */
|
|
#define kwajh_Signature1 (0x00)
|
|
#define kwajh_Signature2 (0x04)
|
|
#define kwajh_CompMethod (0x08)
|
|
#define kwajh_DataOffset (0x0a)
|
|
#define kwajh_Flags (0x0c)
|
|
#define kwajh_SIZEOF (0x0e)
|
|
|
|
/* KWAJ compression definitions */
|
|
|
|
struct mskwaj_compressor_p {
|
|
struct mskwaj_compressor base;
|
|
struct mspack_system *system;
|
|
/* todo */
|
|
int param[2]; /* !!! MATCH THIS TO NUM OF PARAMS IN MSPACK.H !!! */
|
|
int error;
|
|
};
|
|
|
|
/* KWAJ decompression definitions */
|
|
|
|
struct mskwaj_decompressor_p {
|
|
struct mskwaj_decompressor base;
|
|
struct mspack_system *system;
|
|
int error;
|
|
};
|
|
|
|
struct mskwajd_header_p {
|
|
struct mskwajd_header base;
|
|
struct mspack_file *fh;
|
|
};
|
|
|
|
/* input buffer size during decompression - not worth parameterising IMHO */
|
|
#define KWAJ_INPUT_SIZE (2048)
|
|
|
|
/* huffman codes that are 9 bits or less are decoded immediately */
|
|
#define KWAJ_TABLEBITS (9)
|
|
|
|
/* number of codes in each huffman table */
|
|
#define KWAJ_MATCHLEN1_SYMS (16)
|
|
#define KWAJ_MATCHLEN2_SYMS (16)
|
|
#define KWAJ_LITLEN_SYMS (32)
|
|
#define KWAJ_OFFSET_SYMS (64)
|
|
#define KWAJ_LITERAL_SYMS (256)
|
|
|
|
/* define decoding table sizes */
|
|
#define KWAJ_TABLESIZE (1 << KWAJ_TABLEBITS)
|
|
#if KWAJ_TABLESIZE < (KWAJ_MATCHLEN1_SYMS * 2)
|
|
# define KWAJ_MATCHLEN1_TBLSIZE (KWAJ_MATCHLEN1_SYMS * 4)
|
|
#else
|
|
# define KWAJ_MATCHLEN1_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_MATCHLEN1_SYMS * 2))
|
|
#endif
|
|
#if KWAJ_TABLESIZE < (KWAJ_MATCHLEN2_SYMS * 2)
|
|
# define KWAJ_MATCHLEN2_TBLSIZE (KWAJ_MATCHLEN2_SYMS * 4)
|
|
#else
|
|
# define KWAJ_MATCHLEN2_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_MATCHLEN2_SYMS * 2))
|
|
#endif
|
|
#if KWAJ_TABLESIZE < (KWAJ_LITLEN_SYMS * 2)
|
|
# define KWAJ_LITLEN_TBLSIZE (KWAJ_LITLEN_SYMS * 4)
|
|
#else
|
|
# define KWAJ_LITLEN_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_LITLEN_SYMS * 2))
|
|
#endif
|
|
#if KWAJ_TABLESIZE < (KWAJ_OFFSET_SYMS * 2)
|
|
# define KWAJ_OFFSET_TBLSIZE (KWAJ_OFFSET_SYMS * 4)
|
|
#else
|
|
# define KWAJ_OFFSET_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_OFFSET_SYMS * 2))
|
|
#endif
|
|
#if KWAJ_TABLESIZE < (KWAJ_LITERAL_SYMS * 2)
|
|
# define KWAJ_LITERAL_TBLSIZE (KWAJ_LITERAL_SYMS * 4)
|
|
#else
|
|
# define KWAJ_LITERAL_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_LITERAL_SYMS * 2))
|
|
#endif
|
|
|
|
struct kwajd_stream {
|
|
/* I/O buffering */
|
|
struct mspack_system *sys;
|
|
struct mspack_file *input;
|
|
struct mspack_file *output;
|
|
unsigned char *i_ptr, *i_end;
|
|
unsigned int bit_buffer, bits_left;
|
|
int input_end;
|
|
|
|
/* huffman code lengths */
|
|
unsigned char MATCHLEN1_len [KWAJ_MATCHLEN1_SYMS];
|
|
unsigned char MATCHLEN2_len [KWAJ_MATCHLEN2_SYMS];
|
|
unsigned char LITLEN_len [KWAJ_LITLEN_SYMS];
|
|
unsigned char OFFSET_len [KWAJ_OFFSET_SYMS];
|
|
unsigned char LITERAL_len [KWAJ_LITERAL_SYMS];
|
|
|
|
/* huffman decoding tables */
|
|
unsigned short MATCHLEN1_table [KWAJ_MATCHLEN1_TBLSIZE];
|
|
unsigned short MATCHLEN2_table [KWAJ_MATCHLEN2_TBLSIZE];
|
|
unsigned short LITLEN_table [KWAJ_LITLEN_TBLSIZE];
|
|
unsigned short OFFSET_table [KWAJ_OFFSET_TBLSIZE];
|
|
unsigned short LITERAL_table [KWAJ_LITERAL_TBLSIZE];
|
|
|
|
/* input buffer */
|
|
unsigned char inbuf[KWAJ_INPUT_SIZE];
|
|
|
|
/* history window */
|
|
unsigned char window[LZSS_WINDOW_SIZE];
|
|
};
|
|
|
|
|
|
#endif
|