rockbox/rbutil/rbutilqt/mspack/lzss.h

67 lines
2.2 KiB
C
Raw Normal View History

/* This file is part of libmspack.
* (C) 2003-2004 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_LZSS_H
#define MSPACK_LZSS_H 1
#ifdef __cplusplus
extern "C" {
#endif
/* LZSS compression / decompression definitions */
#define LZSS_WINDOW_SIZE (4096)
#define LZSS_WINDOW_FILL (0x20)
#define LZSS_MODE_EXPAND (0)
#define LZSS_MODE_MSHELP (1)
#define LZSS_MODE_QBASIC (2)
/**
* Decompresses an LZSS stream.
*
* Input bytes will be read in as necessary using the system->read()
* function with the input file handle given. This will continue until
* system->read() returns 0 bytes, or an error. Errors will be passed
* out of the function as MSPACK_ERR_READ errors. Input streams should
* convey an "end of input stream" by refusing to supply all the bytes
* that LZSS asks for when they reach the end of the stream, rather
* than return an error code.
*
* Output bytes will be passed to the system->write() function, using
* the output file handle given. More than one call may be made to
* system->write().
*
* As EXPAND.EXE (SZDD/KWAJ), Microsoft Help and QBasic have slightly
* different encodings for the control byte and matches, a "mode"
* parameter is allowed, to choose the encoding.
*
* @param system an mspack_system structure used to read from
* the input stream and write to the output
* stream, also to allocate and free memory.
* @param input an input stream with the LZSS data.
* @param output an output stream to write the decoded data to.
* @param input_buffer_size the number of bytes to use as an input
* bitstream buffer.
* @param mode one of #LZSS_MODE_EXPAND, #LZSS_MODE_MSHELP or
* #LZSS_MODE_QBASIC
* @return an error code, or MSPACK_ERR_OK if successful
*/
extern int lzss_decompress(struct mspack_system *system,
struct mspack_file *input,
struct mspack_file *output,
int input_buffer_size,
int mode);
#ifdef __cplusplus
}
#endif
#endif