Hex Artifact Content

Not logged in

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..