libclammspack/mspack/chm.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_CHM_H
 #define MSPACK_CHM_H 1
 
 #include <lzx.h>
 
 /* generic CHM definitions */
 
 #define chmhead_Signature   (0x0000)
 #define chmhead_Version     (0x0004)
 #define chmhead_HeaderLen   (0x0008)
 #define chmhead_Unknown1    (0x000C)
 #define chmhead_Timestamp   (0x0010)
 #define chmhead_LanguageID  (0x0014)
 #define chmhead_GUID1       (0x0018)
 #define chmhead_GUID2       (0x0028)
 #define chmhead_SIZEOF      (0x0038)
 
 #define chmhst_OffsetHS0    (0x0000)
 #define chmhst_LengthHS0    (0x0008)
 #define chmhst_OffsetHS1    (0x0010)
 #define chmhst_LengthHS1    (0x0018)
 #define chmhst_SIZEOF       (0x0020)
 #define chmhst3_OffsetCS0   (0x0020)
 #define chmhst3_SIZEOF      (0x0028)
 
 #define chmhs0_Unknown1     (0x0000)
 #define chmhs0_Unknown2     (0x0004)
 #define chmhs0_FileLen      (0x0008)
 #define chmhs0_Unknown3     (0x0010)
 #define chmhs0_Unknown4     (0x0014)
 #define chmhs0_SIZEOF       (0x0018)
 
 #define chmhs1_Signature    (0x0000)
 #define chmhs1_Version      (0x0004)
 #define chmhs1_HeaderLen    (0x0008)
 #define chmhs1_Unknown1     (0x000C)
 #define chmhs1_ChunkSize    (0x0010)
 #define chmhs1_Density      (0x0014)
 #define chmhs1_Depth        (0x0018)
 #define chmhs1_IndexRoot    (0x001C)
 #define chmhs1_FirstPMGL    (0x0020)
 #define chmhs1_LastPMGL     (0x0024)
 #define chmhs1_Unknown2     (0x0028)
 #define chmhs1_NumChunks    (0x002C)
 #define chmhs1_LanguageID   (0x0030)
 #define chmhs1_GUID         (0x0034)
 #define chmhs1_Unknown3     (0x0044)
 #define chmhs1_Unknown4     (0x0048)
 #define chmhs1_Unknown5     (0x004C)
 #define chmhs1_Unknown6     (0x0050)
 #define chmhs1_SIZEOF       (0x0054)
 
 #define pmgl_Signature      (0x0000)
 #define pmgl_QuickRefSize   (0x0004)
 #define pmgl_Unknown1       (0x0008)
 #define pmgl_PrevChunk      (0x000C)
 #define pmgl_NextChunk      (0x0010)
 #define pmgl_Entries        (0x0014)
 #define pmgl_headerSIZEOF   (0x0014)
 
 #define pmgi_Signature      (0x0000)
 #define pmgi_QuickRefSize   (0x0004)
 #define pmgi_Entries        (0x0008)
 #define pmgi_headerSIZEOF   (0x000C)
 
 #define lzxcd_Length        (0x0000)
 #define lzxcd_Signature     (0x0004)
 #define lzxcd_Version       (0x0008)
 #define lzxcd_ResetInterval (0x000C)
 #define lzxcd_WindowSize    (0x0010)
 #define lzxcd_CacheSize     (0x0014)
 #define lzxcd_Unknown1      (0x0018)
 #define lzxcd_SIZEOF        (0x001C)
 
 #define lzxrt_Unknown1      (0x0000)
 #define lzxrt_NumEntries    (0x0004)
 #define lzxrt_EntrySize     (0x0008)
 #define lzxrt_TableOffset   (0x000C)
 #define lzxrt_UncompLen     (0x0010)
 #define lzxrt_CompLen       (0x0018)
 #define lzxrt_FrameLen      (0x0020)
 #define lzxrt_Entries       (0x0028)
 #define lzxrt_headerSIZEOF  (0x0028)
 
 /* CHM compression definitions */
 
 struct mschm_compressor_p {
   struct mschm_compressor base;
   struct mspack_system *system;
   char *temp_file;
   int use_temp_file;
   int error;
 };
 
 /* CHM decompression definitions */
 struct mschmd_decompress_state {
   struct mschmd_header *chm;         /* CHM file being decompressed          */
   off_t offset;                      /* uncompressed offset within folder    */
   off_t inoffset;                    /* offset in input file                 */
   struct lzxd_stream *state;         /* LZX decompressor state               */
   struct mspack_system sys;          /* special I/O code for decompressor    */
   struct mspack_file *infh;          /* input file handle                    */
   struct mspack_file *outfh;         /* output file handle                   */
 };
 
 struct mschm_decompressor_p {
   struct mschm_decompressor base;
   struct mspack_system *system;
   struct mschmd_decompress_state *d;
   int error;
 };
 
 #endif