5128eecc9f 2011-02-23 kinaba: #ifndef AFX_LZHDECODER2_H__31F8AA04_3F84_11D4_8D96_8AB5A6462337__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: #define AFX_LZHDECODER2_H__31F8AA04_3F84_11D4_8D96_8AB5A6462337__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #define MAXMATCH 256 5128eecc9f 2011-02-23 kinaba: #define THRESHOLD 3 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #define NT (16+3) 5128eecc9f 2011-02-23 kinaba: #define TBIT 5 5128eecc9f 2011-02-23 kinaba: #define CBIT 9 5128eecc9f 2011-02-23 kinaba: #define NC (255+MAXMATCH+2-THRESHOLD) 5128eecc9f 2011-02-23 kinaba: #define NPT 0x80 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #define N_CHAR (256+60-THRESHOLD+1) 5128eecc9f 2011-02-23 kinaba: #define TREESIZE_C (N_CHAR*2) 5128eecc9f 2011-02-23 kinaba: #define TREESIZE_P (128*2) 5128eecc9f 2011-02-23 kinaba: #define TREESIZE (TREESIZE_C+TREESIZE_P) 5128eecc9f 2011-02-23 kinaba: #define ROOT_C 0 5128eecc9f 2011-02-23 kinaba: #define ROOT_P TREESIZE_C 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: enum lzh_method{ LH0,LH4,LH5,LH6,LH7,UNKNOWN }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class CLzhDecoder2 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: void Decode( lzh_method mhd,FILE* infile,DWORD insize, 5128eecc9f 2011-02-23 kinaba: FILE* outfile,DWORD outsize ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: 5128eecc9f 2011-02-23 kinaba: void Unstore(); 5128eecc9f 2011-02-23 kinaba: WORD Decode_C(lzh_method mhd) 5128eecc9f 2011-02-23 kinaba: {switch( mhd ){ 5128eecc9f 2011-02-23 kinaba: case LH4: 5128eecc9f 2011-02-23 kinaba: case LH5: 5128eecc9f 2011-02-23 kinaba: case LH6: 5128eecc9f 2011-02-23 kinaba: case LH7:return decode_c_st1(); 5128eecc9f 2011-02-23 kinaba: }return 0;}; 5128eecc9f 2011-02-23 kinaba: WORD Decode_P(lzh_method mhd) 5128eecc9f 2011-02-23 kinaba: {switch( mhd ){ 5128eecc9f 2011-02-23 kinaba: case LH4: 5128eecc9f 2011-02-23 kinaba: case LH5: 5128eecc9f 2011-02-23 kinaba: case LH6: 5128eecc9f 2011-02-23 kinaba: case LH7:return decode_p_st1(); 5128eecc9f 2011-02-23 kinaba: }return 0;}; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: 5128eecc9f 2011-02-23 kinaba: // 全般的に 5128eecc9f 2011-02-23 kinaba: FILE *in,*out; 5128eecc9f 2011-02-23 kinaba: DWORD cmpsize,orisize; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: DWORD loc; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // lh4-lh7 5128eecc9f 2011-02-23 kinaba: void make_table(WORD nchar,BYTE* bitlen,WORD tablebits,WORD* table); 5128eecc9f 2011-02-23 kinaba: void read_pt_len(short nn,short nbit,short i_special); 5128eecc9f 2011-02-23 kinaba: void read_c_len(); 5128eecc9f 2011-02-23 kinaba: WORD decode_c_st1(); 5128eecc9f 2011-02-23 kinaba: WORD decode_p_st1(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: WORD left[ 2*NC-1 ], right[ 2*NC-1 ]; 5128eecc9f 2011-02-23 kinaba: BYTE c_len[NC], pt_len[NPT]; 5128eecc9f 2011-02-23 kinaba: WORD c_table[4096],pt_table[256]; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: WORD blocksize; 5128eecc9f 2011-02-23 kinaba: int pbit; 5128eecc9f 2011-02-23 kinaba: int np; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // bit単位のread&write 5128eecc9f 2011-02-23 kinaba: void init_getbits(); 5128eecc9f 2011-02-23 kinaba: void fillbuf(BYTE n); 5128eecc9f 2011-02-23 kinaba: WORD getbits(BYTE n); 5128eecc9f 2011-02-23 kinaba: WORD bitbuf;BYTE subbitbuf,bitcount; 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #endif