libclammspack/mspack/lzss.h
d3699d57
 /* 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,
cafa0bf3
                            struct mspack_file *input,
                            struct mspack_file *output,
                            int input_buffer_size,
                            int mode);
d3699d57
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif