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