Artifact 3b0fe0be3dd0a1e58f03069b7e674a76dd626e8b:
0000: 23 69 66 6e 64 65 66 20 41 46 58 5f 4c 5a 48 44 #ifndef AFX_LZHD
0010: 45 43 4f 44 45 52 32 5f 48 5f 5f 33 31 46 38 41 ECODER2_H__31F8A
0020: 41 30 34 5f 33 46 38 34 5f 31 31 44 34 5f 38 44 A04_3F84_11D4_8D
0030: 39 36 5f 38 41 42 35 41 36 34 36 32 33 33 37 5f 96_8AB5A6462337_
0040: 5f 49 4e 43 4c 55 44 45 44 5f 0d 0a 23 64 65 66 _INCLUDED_..#def
0050: 69 6e 65 20 41 46 58 5f 4c 5a 48 44 45 43 4f 44 ine AFX_LZHDECOD
0060: 45 52 32 5f 48 5f 5f 33 31 46 38 41 41 30 34 5f ER2_H__31F8AA04_
0070: 33 46 38 34 5f 31 31 44 34 5f 38 44 39 36 5f 38 3F84_11D4_8D96_8
0080: 41 42 35 41 36 34 36 32 33 33 37 5f 5f 49 4e 43 AB5A6462337__INC
0090: 4c 55 44 45 44 5f 0d 0a 0d 0a 23 64 65 66 69 6e LUDED_....#defin
00a0: 65 20 4d 41 58 4d 41 54 43 48 09 32 35 36 0d 0a e MAXMATCH.256..
00b0: 23 64 65 66 69 6e 65 20 54 48 52 45 53 48 4f 4c #define THRESHOL
00c0: 44 09 33 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 4e D.3....#define N
00d0: 54 20 20 20 20 20 20 28 31 36 2b 33 29 0d 0a 23 T (16+3)..#
00e0: 64 65 66 69 6e 65 20 54 42 49 54 20 09 35 0d 0a define TBIT .5..
00f0: 23 64 65 66 69 6e 65 20 43 42 49 54 09 39 0d 0a #define CBIT.9..
0100: 23 64 65 66 69 6e 65 20 4e 43 20 09 20 20 20 20 #define NC .
0110: 28 32 35 35 2b 4d 41 58 4d 41 54 43 48 2b 32 2d (255+MAXMATCH+2-
0120: 54 48 52 45 53 48 4f 4c 44 29 0d 0a 23 64 65 66 THRESHOLD)..#def
0130: 69 6e 65 20 4e 50 54 20 09 30 78 38 30 0d 0a 0d ine NPT .0x80...
0140: 0a 23 64 65 66 69 6e 65 20 4e 5f 43 48 41 52 20 .#define N_CHAR
0150: 20 20 20 20 20 28 32 35 36 2b 36 30 2d 54 48 52 (256+60-THR
0160: 45 53 48 4f 4c 44 2b 31 29 0d 0a 23 64 65 66 69 ESHOLD+1)..#defi
0170: 6e 65 20 54 52 45 45 53 49 5a 45 5f 43 20 20 28 ne TREESIZE_C (
0180: 4e 5f 43 48 41 52 2a 32 29 0d 0a 23 64 65 66 69 N_CHAR*2)..#defi
0190: 6e 65 20 54 52 45 45 53 49 5a 45 5f 50 20 20 28 ne TREESIZE_P (
01a0: 31 32 38 2a 32 29 0d 0a 23 64 65 66 69 6e 65 20 128*2)..#define
01b0: 54 52 45 45 53 49 5a 45 20 20 20 20 28 54 52 45 TREESIZE (TRE
01c0: 45 53 49 5a 45 5f 43 2b 54 52 45 45 53 49 5a 45 ESIZE_C+TREESIZE
01d0: 5f 50 29 0d 0a 23 64 65 66 69 6e 65 20 52 4f 4f _P)..#define ROO
01e0: 54 5f 43 20 20 20 20 20 20 30 0d 0a 23 64 65 66 T_C 0..#def
01f0: 69 6e 65 20 52 4f 4f 54 5f 50 20 20 20 20 20 20 ine ROOT_P
0200: 54 52 45 45 53 49 5a 45 5f 43 0d 0a 0d 0a 65 6e TREESIZE_C....en
0210: 75 6d 20 6c 7a 68 5f 6d 65 74 68 6f 64 7b 20 4c um lzh_method{ L
0220: 48 30 2c 4c 48 34 2c 4c 48 35 2c 4c 48 36 2c 4c H0,LH4,LH5,LH6,L
0230: 48 37 2c 55 4e 4b 4e 4f 57 4e 20 7d 3b 0d 0a 0d H7,UNKNOWN };...
0240: 0a 63 6c 61 73 73 20 43 4c 7a 68 44 65 63 6f 64 .class CLzhDecod
0250: 65 72 32 20 20 0d 0a 7b 0d 0a 70 75 62 6c 69 63 er2 ..{..public
0260: 3a 0d 0a 09 76 6f 69 64 20 44 65 63 6f 64 65 28 :...void Decode(
0270: 20 6c 7a 68 5f 6d 65 74 68 6f 64 20 6d 68 64 2c lzh_method mhd,
0280: 46 49 4c 45 2a 20 69 6e 66 69 6c 65 2c 44 57 4f FILE* infile,DWO
0290: 52 44 20 69 6e 73 69 7a 65 2c 0d 0a 09 09 09 09 RD insize,......
02a0: 09 09 09 09 46 49 4c 45 2a 20 6f 75 74 66 69 6c ....FILE* outfil
02b0: 65 2c 44 57 4f 52 44 20 6f 75 74 73 69 7a 65 20 e,DWORD outsize
02c0: 29 3b 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d 0a );....private:..
02d0: 09 76 6f 69 64 20 55 6e 73 74 6f 72 65 28 29 3b .void Unstore();
02e0: 0d 0a 09 57 4f 52 44 20 44 65 63 6f 64 65 5f 43 ...WORD Decode_C
02f0: 28 6c 7a 68 5f 6d 65 74 68 6f 64 20 6d 68 64 29 (lzh_method mhd)
0300: 0d 0a 09 7b 73 77 69 74 63 68 28 20 6d 68 64 20 ...{switch( mhd
0310: 29 7b 0d 0a 09 09 63 61 73 65 20 4c 48 34 3a 0d ){....case LH4:.
0320: 0a 09 09 63 61 73 65 20 4c 48 35 3a 0d 0a 09 09 ...case LH5:....
0330: 63 61 73 65 20 4c 48 36 3a 0d 0a 09 09 63 61 73 case LH6:....cas
0340: 65 20 4c 48 37 3a 72 65 74 75 72 6e 20 64 65 63 e LH7:return dec
0350: 6f 64 65 5f 63 5f 73 74 31 28 29 3b 0d 0a 09 7d ode_c_st1();...}
0360: 72 65 74 75 72 6e 20 30 3b 7d 3b 0d 0a 09 57 4f return 0;};...WO
0370: 52 44 20 44 65 63 6f 64 65 5f 50 28 6c 7a 68 5f RD Decode_P(lzh_
0380: 6d 65 74 68 6f 64 20 6d 68 64 29 0d 0a 09 7b 73 method mhd)...{s
0390: 77 69 74 63 68 28 20 6d 68 64 20 29 7b 0d 0a 09 witch( mhd ){...
03a0: 09 63 61 73 65 20 4c 48 34 3a 0d 0a 09 09 63 61 .case LH4:....ca
03b0: 73 65 20 4c 48 35 3a 0d 0a 09 09 63 61 73 65 20 se LH5:....case
03c0: 4c 48 36 3a 0d 0a 09 09 63 61 73 65 20 4c 48 37 LH6:....case LH7
03d0: 3a 72 65 74 75 72 6e 20 64 65 63 6f 64 65 5f 70 :return decode_p
03e0: 5f 73 74 31 28 29 3b 0d 0a 09 7d 72 65 74 75 72 _st1();...}retur
03f0: 6e 20 30 3b 7d 3b 0d 0a 0d 0a 70 72 69 76 61 74 n 0;};....privat
0400: 65 3a 0d 0a 09 2f 2f 20 91 53 94 ca 93 49 82 c9 e:...// .S...I..
0410: 0d 0a 09 46 49 4c 45 20 2a 69 6e 2c 2a 6f 75 74 ...FILE *in,*out
0420: 3b 0d 0a 09 44 57 4f 52 44 20 63 6d 70 73 69 7a ;...DWORD cmpsiz
0430: 65 2c 6f 72 69 73 69 7a 65 3b 0d 0a 0d 0a 09 44 e,orisize;.....D
0440: 57 4f 52 44 20 6c 6f 63 3b 0d 0a 0d 0a 09 2f 2f WORD loc;.....//
0450: 20 6c 68 34 2d 6c 68 37 0d 0a 09 76 6f 69 64 20 lh4-lh7...void
0460: 6d 61 6b 65 5f 74 61 62 6c 65 28 57 4f 52 44 20 make_table(WORD
0470: 6e 63 68 61 72 2c 42 59 54 45 2a 20 62 69 74 6c nchar,BYTE* bitl
0480: 65 6e 2c 57 4f 52 44 20 74 61 62 6c 65 62 69 74 en,WORD tablebit
0490: 73 2c 57 4f 52 44 2a 20 74 61 62 6c 65 29 3b 0d s,WORD* table);.
04a0: 0a 09 76 6f 69 64 20 72 65 61 64 5f 70 74 5f 6c ..void read_pt_l
04b0: 65 6e 28 73 68 6f 72 74 20 6e 6e 2c 73 68 6f 72 en(short nn,shor
04c0: 74 20 6e 62 69 74 2c 73 68 6f 72 74 20 69 5f 73 t nbit,short i_s
04d0: 70 65 63 69 61 6c 29 3b 0d 0a 09 76 6f 69 64 20 pecial);...void
04e0: 72 65 61 64 5f 63 5f 6c 65 6e 28 29 3b 0d 0a 09 read_c_len();...
04f0: 57 4f 52 44 20 64 65 63 6f 64 65 5f 63 5f 73 74 WORD decode_c_st
0500: 31 28 29 3b 0d 0a 09 57 4f 52 44 20 64 65 63 6f 1();...WORD deco
0510: 64 65 5f 70 5f 73 74 31 28 29 3b 0d 0a 0d 0a 09 de_p_st1();.....
0520: 57 4f 52 44 20 6c 65 66 74 5b 20 32 2a 4e 43 2d WORD left[ 2*NC-
0530: 31 20 5d 2c 20 72 69 67 68 74 5b 20 32 2a 4e 43 1 ], right[ 2*NC
0540: 2d 31 20 5d 3b 0d 0a 09 42 59 54 45 20 63 5f 6c -1 ];...BYTE c_l
0550: 65 6e 5b 4e 43 5d 2c 20 70 74 5f 6c 65 6e 5b 4e en[NC], pt_len[N
0560: 50 54 5d 3b 0d 0a 09 57 4f 52 44 20 63 5f 74 61 PT];...WORD c_ta
0570: 62 6c 65 5b 34 30 39 36 5d 2c 70 74 5f 74 61 62 ble[4096],pt_tab
0580: 6c 65 5b 32 35 36 5d 3b 0d 0a 0d 0a 09 57 4f 52 le[256];.....WOR
0590: 44 20 62 6c 6f 63 6b 73 69 7a 65 3b 0d 0a 09 69 D blocksize;...i
05a0: 6e 74 20 20 70 62 69 74 3b 0d 0a 09 69 6e 74 20 nt pbit;...int
05b0: 20 6e 70 3b 0d 0a 0d 0a 09 2f 2f 20 62 69 74 92 np;.....// bit.
05c0: 50 88 ca 82 cc 72 65 61 64 26 77 72 69 74 65 0d P....read&write.
05d0: 0a 09 76 6f 69 64 20 69 6e 69 74 5f 67 65 74 62 ..void init_getb
05e0: 69 74 73 28 29 3b 0d 0a 09 76 6f 69 64 20 66 69 its();...void fi
05f0: 6c 6c 62 75 66 28 42 59 54 45 20 6e 29 3b 0d 0a llbuf(BYTE n);..
0600: 09 57 4f 52 44 20 67 65 74 62 69 74 73 28 42 59 .WORD getbits(BY
0610: 54 45 20 6e 29 3b 0d 0a 09 57 4f 52 44 20 62 69 TE n);...WORD bi
0620: 74 62 75 66 3b 42 59 54 45 20 73 75 62 62 69 74 tbuf;BYTE subbit
0630: 62 75 66 2c 62 69 74 63 6f 75 6e 74 3b 0d 0a 7d buf,bitcount;..}
0640: 3b 0d 0a 0d 0a 23 65 6e 64 69 66 0d 0a ;....#endif..