Hex Artifact Content

Not logged in

Artifact b09630e0fb2982da4dd8fc4027f6068aa42fe5a2:


0000: 23 69 66 6e 64 65 66 20 41 46 58 5f 4c 5a 48 54  #ifndef AFX_LZHT
0010: 4f 4f 4c 5f 48 5f 5f 33 31 46 38 41 41 30 31 5f  OOL_H__31F8AA01_
0020: 33 46 38 34 5f 31 31 44 34 5f 38 44 39 36 5f 38  3F84_11D4_8D96_8
0030: 41 42 35 41 36 34 36 32 33 33 37 5f 5f 49 4e 43  AB5A6462337__INC
0040: 4c 55 44 45 44 5f 0d 0a 23 64 65 66 69 6e 65 20  LUDED_..#define 
0050: 41 46 58 5f 4c 5a 48 54 4f 4f 4c 5f 48 5f 5f 33  AFX_LZHTOOL_H__3
0060: 31 46 38 41 41 30 31 5f 33 46 38 34 5f 31 31 44  1F8AA01_3F84_11D
0070: 34 5f 38 44 39 36 5f 38 41 42 35 41 36 34 36 32  4_8D96_8AB5A6462
0080: 33 33 37 5f 5f 49 4e 43 4c 55 44 45 44 5f 0d 0a  337__INCLUDED_..
0090: 0d 0a 2f 2f 20 4c 7a 68 20 41 72 63 68 69 76 65  ..// Lzh Archive
00a0: 20 45 78 74 72 61 63 74 69 6f 6e 20 2e 2e 2e 20   Extraction ... 
00b0: 28 20 58 61 63 52 65 74 74 20 23 33 39 20 53 75  ( XacRett #39 Su
00c0: 62 53 65 74 20 29 0d 0a 0d 0a 63 6c 61 73 73 20  bSet )....class 
00d0: 43 4c 7a 68 54 6f 6f 6c 0d 0a 7b 0d 0a 70 75 62  CLzhTool..{..pub
00e0: 6c 69 63 3a 0d 0a 09 2f 2f 2d 2d 20 8a 4f 8c fc  lic:...//-- .O..
00f0: 82 ab 83 43 83 93 83 5e 81 5b 83 74 83 46 83 43  ...C...^.[.t.F.C
0100: 83 58 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .X -------------
0110: 2d 0d 0a 09 62 6f 6f 6c 20 45 78 74 72 61 63 74  -...bool Extract
0120: 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 61 6e  ( const char* an
0130: 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ame, const char*
0140: 20 64 6c 6c 2c 20 6b 69 50 61 74 68 26 20 64 6c   dll, kiPath& dl
0150: 6c 5f 72 65 6c 5f 70 61 74 68 20 29 3b 0d 0a 0d  l_rel_path );...
0160: 0a 70 75 62 6c 69 63 3a 0d 0a 09 2f 2f 2d 2d 20  .public:...//-- 
0170: 43 52 43 20 8c 76 8e 5a 20 2d 2d 2d 2d 2d 2d 2d  CRC .v.Z -------
0180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0190: 2d 2d 2d 2d 0d 0a 09 73 74 61 74 69 63 20 62 6f  ----...static bo
01a0: 6f 6c 20 63 72 63 69 6e 69 74 3b 0d 0a 09 73 74  ol crcinit;...st
01b0: 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 73 68  atic unsigned sh
01c0: 6f 72 74 20 63 72 63 74 61 62 6c 65 5b 32 35 36  ort crctable[256
01d0: 5d 3b 0d 0a 09 73 74 61 74 69 63 20 76 6f 69 64  ];...static void
01e0: 20 69 6e 69 74 5f 63 72 63 5f 74 61 62 6c 65 28   init_crc_table(
01f0: 29 7b 0d 0a 09 09 69 66 28 20 21 63 72 63 69 6e  ){....if( !crcin
0200: 69 74 20 29 0d 0a 09 09 09 66 6f 72 28 20 75 6e  it ).....for( un
0210: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 3d 30  signed short i=0
0220: 2c 6a 2c 72 3b 20 69 21 3d 32 35 36 3b 20 69 2b  ,j,r; i!=256; i+
0230: 2b 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 72  + ).....{......r
0240: 20 3d 20 69 3b 0d 0a 09 09 09 09 66 6f 72 28 20   = i;......for( 
0250: 6a 3d 30 3b 20 6a 21 3d 38 3b 20 6a 2b 2b 20 29  j=0; j!=8; j++ )
0260: 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 69 66  ......{.......if
0270: 28 20 72 26 31 20 29 20 72 20 3d 20 28 28 72 3e  ( r&1 ) r = ((r>
0280: 3e 31 29 5e 30 78 41 30 30 31 29 3b 0d 0a 09 09  >1)^0xA001);....
0290: 09 09 09 65 6c 73 65 09 20 20 72 3e 3e 3d 31 3b  ...else.  r>>=1;
02a0: 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 63 72 63  ......}......crc
02b0: 74 61 62 6c 65 5b 69 5d 20 3d 20 72 3b 0d 0a 09  table[i] = r;...
02c0: 09 09 7d 7d 0d 0a 09 43 4c 7a 68 54 6f 6f 6c 28  ..}}...CLzhTool(
02d0: 29 20 7b 20 69 6e 69 74 5f 63 72 63 5f 74 61 62  ) { init_crc_tab
02e0: 6c 65 28 29 3b 20 7d 0d 0a 0d 0a 70 72 69 76 61  le(); }....priva
02f0: 74 65 3a 0d 0a 09 2f 2f 2d 2d 20 93 e0 95 94 8f  te:...//-- .....
0300: 88 97 9d 0d 0a 09 69 6e 74 20 46 69 6e 64 48 65  ......int FindHe
0310: 61 64 65 72 28 20 63 6f 6e 73 74 20 63 68 61 72  ader( const char
0320: 2a 20 66 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 42  * fname, const B
0330: 59 54 45 2a 20 68 64 72 2c 20 44 57 4f 52 44 20  YTE* hdr, DWORD 
0340: 73 69 7a 20 29 3b 0d 0a 09 62 6f 6f 6c 20 52 65  siz );...bool Re
0350: 61 64 48 65 61 64 65 72 28 20 75 6e 73 69 67 6e  adHeader( unsign
0360: 65 64 20 63 68 61 72 2a 20 62 75 66 20 29 3b 0d  ed char* buf );.
0370: 0a 0d 0a 09 57 4f 52 44 20 63 72 63 3b 0d 0a 09  ....WORD crc;...
0380: 42 59 54 45 20 73 75 6d 3b 0d 0a 09 76 6f 69 64  BYTE sum;...void
0390: 20 55 70 64 61 74 65 43 52 43 28 20 42 59 54 45   UpdateCRC( BYTE
03a0: 20 2a 70 2c 69 6e 74 20 6e 20 29 0d 0a 09 09 7b   *p,int n )....{
03b0: 77 68 69 6c 65 28 20 6e 2d 2d 20 29 63 72 63 20  while( n-- )crc 
03c0: 3d 20 63 72 63 74 61 62 6c 65 5b 28 63 72 63 5e  = crctable[(crc^
03d0: 28 2a 70 2b 2b 29 29 26 30 78 66 66 5d 20 5e 20  (*p++))&0xff] ^ 
03e0: 28 63 72 63 20 3e 3e 20 38 29 3b 7d 0d 0a 09 76  (crc >> 8);}...v
03f0: 6f 69 64 20 55 70 64 61 74 65 53 75 6d 28 20 42  oid UpdateSum( B
0400: 59 54 45 20 2a 70 2c 69 6e 74 20 6e 20 29 0d 0a  YTE *p,int n )..
0410: 09 09 7b 77 68 69 6c 65 28 20 6e 2d 2d 20 29 73  ..{while( n-- )s
0420: 75 6d 2b 3d 2a 28 70 2b 2b 29 3b 7d 0d 0a 09 69  um+=*(p++);}...i
0430: 6e 74 20 20 66 72 65 61 64 5f 63 72 63 28 20 42  nt  fread_crc( B
0440: 59 54 45 2a 20 70 2c 69 6e 74 20 6e 29 0d 0a 09  YTE* p,int n)...
0450: 09 7b 6e 3d 66 72 65 61 64 28 70 2c 31 2c 6e 2c  .{n=fread(p,1,n,
0460: 6c 7a 68 29 3b 69 66 28 6e 3d 3d 2d 31 29 6e 3d  lzh);if(n==-1)n=
0470: 30 3b 0d 0a 09 09 55 70 64 61 74 65 43 52 43 28  0;....UpdateCRC(
0480: 70 2c 6e 29 3b 55 70 64 61 74 65 53 75 6d 28 70  p,n);UpdateSum(p
0490: 2c 6e 29 3b 72 65 74 75 72 6e 20 6e 3b 7d 0d 0a  ,n);return n;}..
04a0: 0d 0a 09 46 49 4c 45 20 2a 6c 7a 68 2c 2a 6f 75  ...FILE *lzh,*ou
04b0: 74 3b 0d 0a 09 42 59 54 45 20 20 68 5f 4c 65 76  t;...BYTE  h_Lev
04c0: 65 6c 3b 09 09 09 09 09 2f 2f 20 83 77 83 62 83  el;.....// .w.b.
04d0: 5f 83 8c 83 78 83 8b 0d 0a 09 63 68 61 72 20 20  _...x.....char  
04e0: 68 5f 46 69 6c 65 4e 61 6d 65 5b 4d 41 58 5f 50  h_FileName[MAX_P
04f0: 41 54 48 2a 32 5d 3b 09 2f 2f 20 83 74 83 40 83  ATH*2];.// .t.@.
0500: 43 83 8b 96 bc 28 83 70 83 58 95 74 82 ab 29 0d  C....(.p.X.t..).
0510: 0a 09 63 68 61 72 20 20 68 5f 4d 65 74 68 6f 64  ..char  h_Method
0520: 5b 36 5d 3b 09 09 09 09 2f 2f 20 88 b3 8f 6b 96  [6];....// ...k.
0530: 40 20 22 2d 6c 68 35 2d 22 20 82 c8 82 c7 81 42  @ "-lh5-" .....B
0540: 0d 0a 09 44 57 4f 52 44 20 68 5f 43 6f 6d 70 53  ...DWORD h_CompS
0550: 69 7a 65 3b 09 09 09 09 2f 2f 20 88 b3 8f 6b 82  ize;....// ...k.
0560: b3 82 ea 82 bd 83 54 83 43 83 59 0d 0a 09 44 57  ......T.C.Y...DW
0570: 4f 52 44 20 68 5f 4f 72 69 67 53 69 7a 65 3b 09  ORD h_OrigSize;.
0580: 09 09 09 2f 2f 20 8c b3 82 cc 83 54 83 43 83 59  ...// .....T.C.Y
0590: 0d 0a 09 57 4f 52 44 20 20 68 5f 41 74 74 72 69  ...WORD  h_Attri
05a0: 62 3b 09 09 09 09 09 2f 2f 20 91 ae 90 ab 0d 0a  b;.....// ......
05b0: 09 44 57 4f 52 44 20 68 5f 55 70 64 61 74 65 3b  .DWORD h_Update;
05c0: 09 09 09 09 09 2f 2f 20 8d 58 90 56 93 fa 8e 9e  .....// .X.V....
05d0: 28 68 30 2c 68 31 3a 66 74 69 6d 65 20 20 68 32  (h0,h1:ftime  h2
05e0: 3a 74 69 6d 65 5f 74 29 0d 0a 7d 3b 0d 0a 0d 0a  :time_t)..};....
05f0: 23 65 6e 64 69 66 0d 0a                          #endif..