0000: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 ..#include "stda
0010: 66 78 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 fx.h"..#include
0020: 22 5a 69 70 54 6f 6f 6c 2e 68 22 0d 0a 23 69 6e "ZipTool.h"..#in
0030: 63 6c 75 64 65 20 22 7a 6c 69 62 2f 7a 6c 69 62 clude "zlib/zlib
0040: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 6b .h"..#include "k
0050: 69 75 74 69 6c 2e 68 22 0d 0a 23 69 6e 63 6c 75 iutil.h"..#inclu
0060: 64 65 20 22 6b 69 6c 69 62 2f 6b 69 6c 69 62 2e de "kilib/kilib.
0070: 68 22 0d 0a 0d 0a 62 6f 6f 6c 20 43 5a 69 70 54 h"....bool CZipT
0080: 6f 6f 6c 3a 3a 45 78 74 72 61 63 74 28 20 63 6f ool::Extract( co
0090: 6e 73 74 20 63 68 61 72 2a 20 61 6e 61 6d 65 2c nst char* aname,
00a0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 64 6c 6c const char* dll
00b0: 2c 20 6b 69 50 61 74 68 26 20 64 6c 6c 5f 72 65 , kiPath& dll_re
00c0: 6c 5f 70 61 74 68 20 29 0d 0a 7b 0d 0a 09 5a 69 l_path )..{...Zi
00d0: 70 4c 6f 63 61 6c 48 65 61 64 65 72 20 68 64 72 pLocalHeader hdr
00e0: 3b 0d 0a 0d 0a 09 69 66 28 20 21 28 7a 69 70 3d ;.....if( !(zip=
00f0: 66 6f 70 65 6e 28 61 6e 61 6d 65 2c 22 72 62 22 fopen(aname,"rb"
0100: 29 29 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 66 )) )....return f
0110: 61 6c 73 65 3b 0d 0a 0d 0a 09 77 68 69 6c 65 28 alse;.....while(
0120: 20 64 6f 48 65 61 64 65 72 28 20 26 68 64 72 20 doHeader( &hdr
0130: 29 20 29 0d 0a 09 7b 0d 0a 09 09 75 6e 73 69 67 ) )...{....unsig
0140: 6e 65 64 20 6c 6f 6e 67 20 70 6f 73 6e 65 78 74 ned long posnext
0150: 20 3d 20 66 74 65 6c 6c 28 20 7a 69 70 20 29 20 = ftell( zip )
0160: 2b 20 68 64 72 2e 63 73 7a 3b 0d 0a 09 09 63 68 + hdr.csz;....ch
0170: 61 72 2a 20 6e 61 6d 65 3b 0d 0a 0d 0a 09 09 69 ar* name;......i
0180: 66 28 20 6f 75 74 3d 66 6f 70 65 6e 28 20 6e 61 f( out=fopen( na
0190: 6d 65 3d 6b 69 75 74 69 6c 3a 3a 70 61 74 68 4d me=kiutil::pathM
01a0: 61 6b 65 28 68 64 72 2e 66 6e 6d 29 2c 22 77 62 ake(hdr.fnm),"wb
01b0: 22 29 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 ") )....{.....if
01c0: 28 20 30 3d 3d 73 74 72 63 6d 70 69 28 20 6b 69 ( 0==strcmpi( ki
01d0: 50 61 74 68 3a 3a 6e 61 6d 65 28 6e 61 6d 65 29 Path::name(name)
01e0: 2c 20 64 6c 6c 20 29 20 29 20 2f 2f 20 44 4c 4c , dll ) ) // DLL
01f0: 82 cc 88 ca 92 75 82 f0 8b 4c 89 af 0d 0a 09 09 .....u...L......
0200: 09 09 64 6c 6c 5f 72 65 6c 5f 70 61 74 68 20 3d ..dll_rel_path =
0210: 20 6e 61 6d 65 3b 0d 0a 0d 0a 09 09 09 2f 2f 20 name;.......//
0220: 93 57 8a 4a 81 49 0d 0a 09 09 09 73 77 69 74 63 .W.J.I.....switc
0230: 68 28 20 68 64 72 2e 6d 68 64 20 29 0d 0a 09 09 h( hdr.mhd )....
0240: 09 7b 0d 0a 09 09 09 63 61 73 65 20 53 74 6f 72 .{.....case Stor
0250: 65 64 3a 09 20 55 6e 73 74 6f 72 65 28 20 68 64 ed:. Unstore( hd
0260: 72 2e 75 73 7a 2c 20 68 64 72 2e 63 73 7a 20 29 r.usz, hdr.csz )
0270: 3b 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 ;.break;.....cas
0280: 65 20 44 65 66 6c 61 74 65 64 3a 09 20 49 6e 66 e Deflated:. Inf
0290: 6c 61 74 65 28 20 68 64 72 2e 75 73 7a 2c 20 68 late( hdr.usz, h
02a0: 64 72 2e 63 73 7a 20 29 3b 09 62 72 65 61 6b 3b dr.csz );.break;
02b0: 0d 0a 09 09 09 7d 0d 0a 0d 0a 09 09 09 2f 2f 20 .....}.......//
02c0: 8e 96 8c e3 8f 88 97 9d 0d 0a 09 09 09 66 63 6c .............fcl
02d0: 6f 73 65 28 20 6f 75 74 20 29 3b 0d 0a 0d 0a 09 ose( out );.....
02e0: 09 09 6b 69 75 74 69 6c 3a 3a 74 69 6d 65 53 65 ..kiutil::timeSe
02f0: 74 28 20 6e 61 6d 65 2c 0d 0a 09 09 09 09 28 57 t( name,......(W
0300: 4f 52 44 29 28 68 64 72 2e 64 61 74 29 2c 28 57 ORD)(hdr.dat),(W
0310: 4f 52 44 29 28 68 64 72 2e 74 69 6d 29 29 3b 0d ORD)(hdr.tim));.
0320: 0a 09 09 7d 0d 0a 0d 0a 09 09 66 73 65 65 6b 28 ...}......fseek(
0330: 20 7a 69 70 2c 20 70 6f 73 6e 65 78 74 2c 20 53 zip, posnext, S
0340: 45 45 4b 5f 53 45 54 20 29 3b 0d 0a 09 7d 0d 0a EEK_SET );...}..
0350: 0d 0a 09 66 63 6c 6f 73 65 28 20 7a 69 70 20 29 ...fclose( zip )
0360: 3b 0d 0a 09 72 65 74 75 72 6e 20 74 72 75 65 3b ;...return true;
0370: 0d 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 20 43 52 ..}....//---- CR
0380: 43 20 8a d6 8c 57 20 2d 2d 2d 2d 2d 2d 2d 2d 2d C ...W ---------
0390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a ------------....
03a0: 2f 2f 20 6d 61 6b 65 20 63 72 63 20 74 61 62 6c // make crc tabl
03b0: 65 0d 0a 2f 2f 73 74 61 74 69 63 20 76 6f 69 64 e..//static void
03c0: 20 7a 69 70 5f 6d 61 6b 65 5f 63 72 63 5f 74 61 zip_make_crc_ta
03d0: 62 6c 65 28 29 0d 0a 2f 2f 7b 0d 0a 2f 2f 09 66 ble()..//{..//.f
03e0: 6f 72 28 20 44 57 4f 52 44 20 63 2c 6e 3d 30 3b or( DWORD c,n=0;
03f0: 20 6e 21 3d 32 35 36 3b 20 6e 2b 2b 20 29 0d 0a n!=256; n++ )..
0400: 2f 2f 09 7b 0d 0a 2f 2f 09 09 63 20 3d 20 6e 3b //.{..//..c = n;
0410: 0d 0a 2f 2f 09 09 66 6f 72 28 20 44 57 4f 52 44 ..//..for( DWORD
0420: 20 6b 3d 38 3b 20 6b 3b 20 6b 2d 2d 20 29 0d 0a k=8; k; k-- )..
0430: 2f 2f 09 09 09 63 20 3d 20 28 63 26 31 29 20 3f //...c = (c&1) ?
0440: 20 28 28 30 78 65 64 62 38 38 33 32 30 4c 29 5e ((0xedb88320L)^
0450: 28 63 3e 3e 31 29 29 20 3a 20 28 63 3e 3e 31 29 (c>>1)) : (c>>1)
0460: 3b 0d 0a 2f 2f 09 09 63 72 63 5f 74 61 62 6c 65 ;..//..crc_table
0470: 5b 6e 5d 20 3d 20 63 3b 0d 0a 2f 2f 09 7d 0d 0a [n] = c;..//.}..
0480: 2f 2f 7d 0d 0a 0d 0a 2f 2f 20 74 68 65 20 72 65 //}....// the re
0490: 73 75 6c 74 0d 0a 73 74 61 74 69 63 20 44 57 4f sult..static DWO
04a0: 52 44 20 63 72 63 5f 74 61 62 6c 65 5b 32 35 36 RD crc_table[256
04b0: 5d 20 3d 20 7b 0d 0a 30 78 30 30 30 30 30 30 30 ] = {..0x0000000
04c0: 30 2c 20 30 78 37 37 30 37 33 30 39 36 2c 20 30 0, 0x77073096, 0
04d0: 78 65 65 30 65 36 31 32 63 2c 20 30 78 39 39 30 xee0e612c, 0x990
04e0: 39 35 31 62 61 2c 20 30 78 30 37 36 64 63 34 31 951ba, 0x076dc41
04f0: 39 2c 20 30 78 37 30 36 61 66 34 38 66 2c 20 30 9, 0x706af48f, 0
0500: 78 65 39 36 33 61 35 33 35 2c 20 30 78 39 65 36 xe963a535, 0x9e6
0510: 34 39 35 61 33 2c 0d 0a 30 78 30 65 64 62 38 38 495a3,..0x0edb88
0520: 33 32 2c 20 30 78 37 39 64 63 62 38 61 34 2c 20 32, 0x79dcb8a4,
0530: 30 78 65 30 64 35 65 39 31 65 2c 20 30 78 39 37 0xe0d5e91e, 0x97
0540: 64 32 64 39 38 38 2c 20 30 78 30 39 62 36 34 63 d2d988, 0x09b64c
0550: 32 62 2c 20 30 78 37 65 62 31 37 63 62 64 2c 20 2b, 0x7eb17cbd,
0560: 30 78 65 37 62 38 32 64 30 37 2c 20 30 78 39 30 0xe7b82d07, 0x90
0570: 62 66 31 64 39 31 2c 0d 0a 30 78 31 64 62 37 31 bf1d91,..0x1db71
0580: 30 36 34 2c 20 30 78 36 61 62 30 32 30 66 32 2c 064, 0x6ab020f2,
0590: 20 30 78 66 33 62 39 37 31 34 38 2c 20 30 78 38 0xf3b97148, 0x8
05a0: 34 62 65 34 31 64 65 2c 20 30 78 31 61 64 61 64 4be41de, 0x1adad
05b0: 34 37 64 2c 20 30 78 36 64 64 64 65 34 65 62 2c 47d, 0x6ddde4eb,
05c0: 20 30 78 66 34 64 34 62 35 35 31 2c 20 30 78 38 0xf4d4b551, 0x8
05d0: 33 64 33 38 35 63 37 2c 0d 0a 30 78 31 33 36 63 3d385c7,..0x136c
05e0: 39 38 35 36 2c 20 30 78 36 34 36 62 61 38 63 30 9856, 0x646ba8c0
05f0: 2c 20 30 78 66 64 36 32 66 39 37 61 2c 20 30 78 , 0xfd62f97a, 0x
0600: 38 61 36 35 63 39 65 63 2c 20 30 78 31 34 30 31 8a65c9ec, 0x1401
0610: 35 63 34 66 2c 20 30 78 36 33 30 36 36 63 64 39 5c4f, 0x63066cd9
0620: 2c 20 30 78 66 61 30 66 33 64 36 33 2c 20 30 78 , 0xfa0f3d63, 0x
0630: 38 64 30 38 30 64 66 35 2c 0d 0a 30 78 33 62 36 8d080df5,..0x3b6
0640: 65 32 30 63 38 2c 20 30 78 34 63 36 39 31 30 35 e20c8, 0x4c69105
0650: 65 2c 20 30 78 64 35 36 30 34 31 65 34 2c 20 30 e, 0xd56041e4, 0
0660: 78 61 32 36 37 37 31 37 32 2c 20 30 78 33 63 30 xa2677172, 0x3c0
0670: 33 65 34 64 31 2c 20 30 78 34 62 30 34 64 34 34 3e4d1, 0x4b04d44
0680: 37 2c 20 30 78 64 32 30 64 38 35 66 64 2c 20 30 7, 0xd20d85fd, 0
0690: 78 61 35 30 61 62 35 36 62 2c 0d 0a 30 78 33 35 xa50ab56b,..0x35
06a0: 62 35 61 38 66 61 2c 20 30 78 34 32 62 32 39 38 b5a8fa, 0x42b298
06b0: 36 63 2c 20 30 78 64 62 62 62 63 39 64 36 2c 20 6c, 0xdbbbc9d6,
06c0: 30 78 61 63 62 63 66 39 34 30 2c 20 30 78 33 32 0xacbcf940, 0x32
06d0: 64 38 36 63 65 33 2c 20 30 78 34 35 64 66 35 63 d86ce3, 0x45df5c
06e0: 37 35 2c 20 30 78 64 63 64 36 30 64 63 66 2c 20 75, 0xdcd60dcf,
06f0: 30 78 61 62 64 31 33 64 35 39 2c 0d 0a 30 78 32 0xabd13d59,..0x2
0700: 36 64 39 33 30 61 63 2c 20 30 78 35 31 64 65 30 6d930ac, 0x51de0
0710: 30 33 61 2c 20 30 78 63 38 64 37 35 31 38 30 2c 03a, 0xc8d75180,
0720: 20 30 78 62 66 64 30 36 31 31 36 2c 20 30 78 32 0xbfd06116, 0x2
0730: 31 62 34 66 34 62 35 2c 20 30 78 35 36 62 33 63 1b4f4b5, 0x56b3c
0740: 34 32 33 2c 20 30 78 63 66 62 61 39 35 39 39 2c 423, 0xcfba9599,
0750: 20 30 78 62 38 62 64 61 35 30 66 2c 0d 0a 30 78 0xb8bda50f,..0x
0760: 32 38 30 32 62 38 39 65 2c 20 30 78 35 66 30 35 2802b89e, 0x5f05
0770: 38 38 30 38 2c 20 30 78 63 36 30 63 64 39 62 32 8808, 0xc60cd9b2
0780: 2c 20 30 78 62 31 30 62 65 39 32 34 2c 20 30 78 , 0xb10be924, 0x
0790: 32 66 36 66 37 63 38 37 2c 20 30 78 35 38 36 38 2f6f7c87, 0x5868
07a0: 34 63 31 31 2c 20 30 78 63 31 36 31 31 64 61 62 4c11, 0xc1611dab
07b0: 2c 20 30 78 62 36 36 36 32 64 33 64 2c 0d 0a 30 , 0xb6662d3d,..0
07c0: 78 37 36 64 63 34 31 39 30 2c 20 30 78 30 31 64 x76dc4190, 0x01d
07d0: 62 37 31 30 36 2c 20 30 78 39 38 64 32 32 30 62 b7106, 0x98d220b
07e0: 63 2c 20 30 78 65 66 64 35 31 30 32 61 2c 20 30 c, 0xefd5102a, 0
07f0: 78 37 31 62 31 38 35 38 39 2c 20 30 78 30 36 62 x71b18589, 0x06b
0800: 36 62 35 31 66 2c 20 30 78 39 66 62 66 65 34 61 6b51f, 0x9fbfe4a
0810: 35 2c 20 30 78 65 38 62 38 64 34 33 33 2c 0d 0a 5, 0xe8b8d433,..
0820: 30 78 37 38 30 37 63 39 61 32 2c 20 30 78 30 66 0x7807c9a2, 0x0f
0830: 30 30 66 39 33 34 2c 20 30 78 39 36 30 39 61 38 00f934, 0x9609a8
0840: 38 65 2c 20 30 78 65 31 30 65 39 38 31 38 2c 20 8e, 0xe10e9818,
0850: 30 78 37 66 36 61 30 64 62 62 2c 20 30 78 30 38 0x7f6a0dbb, 0x08
0860: 36 64 33 64 32 64 2c 20 30 78 39 31 36 34 36 63 6d3d2d, 0x91646c
0870: 39 37 2c 20 30 78 65 36 36 33 35 63 30 31 2c 0d 97, 0xe6635c01,.
0880: 0a 30 78 36 62 36 62 35 31 66 34 2c 20 30 78 31 .0x6b6b51f4, 0x1
0890: 63 36 63 36 31 36 32 2c 20 30 78 38 35 36 35 33 c6c6162, 0x85653
08a0: 30 64 38 2c 20 30 78 66 32 36 32 30 30 34 65 2c 0d8, 0xf262004e,
08b0: 20 30 78 36 63 30 36 39 35 65 64 2c 20 30 78 31 0x6c0695ed, 0x1
08c0: 62 30 31 61 35 37 62 2c 20 30 78 38 32 30 38 66 b01a57b, 0x8208f
08d0: 34 63 31 2c 20 30 78 66 35 30 66 63 34 35 37 2c 4c1, 0xf50fc457,
08e0: 0d 0a 30 78 36 35 62 30 64 39 63 36 2c 20 30 78 ..0x65b0d9c6, 0x
08f0: 31 32 62 37 65 39 35 30 2c 20 30 78 38 62 62 65 12b7e950, 0x8bbe
0900: 62 38 65 61 2c 20 30 78 66 63 62 39 38 38 37 63 b8ea, 0xfcb9887c
0910: 2c 20 30 78 36 32 64 64 31 64 64 66 2c 20 30 78 , 0x62dd1ddf, 0x
0920: 31 35 64 61 32 64 34 39 2c 20 30 78 38 63 64 33 15da2d49, 0x8cd3
0930: 37 63 66 33 2c 20 30 78 66 62 64 34 34 63 36 35 7cf3, 0xfbd44c65
0940: 2c 0d 0a 30 78 34 64 62 32 36 31 35 38 2c 20 30 ,..0x4db26158, 0
0950: 78 33 61 62 35 35 31 63 65 2c 20 30 78 61 33 62 x3ab551ce, 0xa3b
0960: 63 30 30 37 34 2c 20 30 78 64 34 62 62 33 30 65 c0074, 0xd4bb30e
0970: 32 2c 20 30 78 34 61 64 66 61 35 34 31 2c 20 30 2, 0x4adfa541, 0
0980: 78 33 64 64 38 39 35 64 37 2c 20 30 78 61 34 64 x3dd895d7, 0xa4d
0990: 31 63 34 36 64 2c 20 30 78 64 33 64 36 66 34 66 1c46d, 0xd3d6f4f
09a0: 62 2c 0d 0a 30 78 34 33 36 39 65 39 36 61 2c 20 b,..0x4369e96a,
09b0: 30 78 33 34 36 65 64 39 66 63 2c 20 30 78 61 64 0x346ed9fc, 0xad
09c0: 36 37 38 38 34 36 2c 20 30 78 64 61 36 30 62 38 678846, 0xda60b8
09d0: 64 30 2c 20 30 78 34 34 30 34 32 64 37 33 2c 20 d0, 0x44042d73,
09e0: 30 78 33 33 30 33 31 64 65 35 2c 20 30 78 61 61 0x33031de5, 0xaa
09f0: 30 61 34 63 35 66 2c 20 30 78 64 64 30 64 37 63 0a4c5f, 0xdd0d7c
0a00: 63 39 2c 0d 0a 30 78 35 30 30 35 37 31 33 63 2c c9,..0x5005713c,
0a10: 20 30 78 32 37 30 32 34 31 61 61 2c 20 30 78 62 0x270241aa, 0xb
0a20: 65 30 62 31 30 31 30 2c 20 30 78 63 39 30 63 32 e0b1010, 0xc90c2
0a30: 30 38 36 2c 20 30 78 35 37 36 38 62 35 32 35 2c 086, 0x5768b525,
0a40: 20 30 78 32 30 36 66 38 35 62 33 2c 20 30 78 62 0x206f85b3, 0xb
0a50: 39 36 36 64 34 30 39 2c 20 30 78 63 65 36 31 65 966d409, 0xce61e
0a60: 34 39 66 2c 0d 0a 30 78 35 65 64 65 66 39 30 65 49f,..0x5edef90e
0a70: 2c 20 30 78 32 39 64 39 63 39 39 38 2c 20 30 78 , 0x29d9c998, 0x
0a80: 62 30 64 30 39 38 32 32 2c 20 30 78 63 37 64 37 b0d09822, 0xc7d7
0a90: 61 38 62 34 2c 20 30 78 35 39 62 33 33 64 31 37 a8b4, 0x59b33d17
0aa0: 2c 20 30 78 32 65 62 34 30 64 38 31 2c 20 30 78 , 0x2eb40d81, 0x
0ab0: 62 37 62 64 35 63 33 62 2c 20 30 78 63 30 62 61 b7bd5c3b, 0xc0ba
0ac0: 36 63 61 64 2c 0d 0a 30 78 65 64 62 38 38 33 32 6cad,..0xedb8832
0ad0: 30 2c 20 30 78 39 61 62 66 62 33 62 36 2c 20 30 0, 0x9abfb3b6, 0
0ae0: 78 30 33 62 36 65 32 30 63 2c 20 30 78 37 34 62 x03b6e20c, 0x74b
0af0: 31 64 32 39 61 2c 20 30 78 65 61 64 35 34 37 33 1d29a, 0xead5473
0b00: 39 2c 20 30 78 39 64 64 32 37 37 61 66 2c 20 30 9, 0x9dd277af, 0
0b10: 78 30 34 64 62 32 36 31 35 2c 20 30 78 37 33 64 x04db2615, 0x73d
0b20: 63 31 36 38 33 2c 0d 0a 30 78 65 33 36 33 30 62 c1683,..0xe3630b
0b30: 31 32 2c 20 30 78 39 34 36 34 33 62 38 34 2c 20 12, 0x94643b84,
0b40: 30 78 30 64 36 64 36 61 33 65 2c 20 30 78 37 61 0x0d6d6a3e, 0x7a
0b50: 36 61 35 61 61 38 2c 20 30 78 65 34 30 65 63 66 6a5aa8, 0xe40ecf
0b60: 30 62 2c 20 30 78 39 33 30 39 66 66 39 64 2c 20 0b, 0x9309ff9d,
0b70: 30 78 30 61 30 30 61 65 32 37 2c 20 30 78 37 64 0x0a00ae27, 0x7d
0b80: 30 37 39 65 62 31 2c 0d 0a 30 78 66 30 30 66 39 079eb1,..0xf00f9
0b90: 33 34 34 2c 20 30 78 38 37 30 38 61 33 64 32 2c 344, 0x8708a3d2,
0ba0: 20 30 78 31 65 30 31 66 32 36 38 2c 20 30 78 36 0x1e01f268, 0x6
0bb0: 39 30 36 63 32 66 65 2c 20 30 78 66 37 36 32 35 906c2fe, 0xf7625
0bc0: 37 35 64 2c 20 30 78 38 30 36 35 36 37 63 62 2c 75d, 0x806567cb,
0bd0: 20 30 78 31 39 36 63 33 36 37 31 2c 20 30 78 36 0x196c3671, 0x6
0be0: 65 36 62 30 36 65 37 2c 0d 0a 30 78 66 65 64 34 e6b06e7,..0xfed4
0bf0: 31 62 37 36 2c 20 30 78 38 39 64 33 32 62 65 30 1b76, 0x89d32be0
0c00: 2c 20 30 78 31 30 64 61 37 61 35 61 2c 20 30 78 , 0x10da7a5a, 0x
0c10: 36 37 64 64 34 61 63 63 2c 20 30 78 66 39 62 39 67dd4acc, 0xf9b9
0c20: 64 66 36 66 2c 20 30 78 38 65 62 65 65 66 66 39 df6f, 0x8ebeeff9
0c30: 2c 20 30 78 31 37 62 37 62 65 34 33 2c 20 30 78 , 0x17b7be43, 0x
0c40: 36 30 62 30 38 65 64 35 2c 0d 0a 30 78 64 36 64 60b08ed5,..0xd6d
0c50: 36 61 33 65 38 2c 20 30 78 61 31 64 31 39 33 37 6a3e8, 0xa1d1937
0c60: 65 2c 20 30 78 33 38 64 38 63 32 63 34 2c 20 30 e, 0x38d8c2c4, 0
0c70: 78 34 66 64 66 66 32 35 32 2c 20 30 78 64 31 62 x4fdff252, 0xd1b
0c80: 62 36 37 66 31 2c 20 30 78 61 36 62 63 35 37 36 b67f1, 0xa6bc576
0c90: 37 2c 20 30 78 33 66 62 35 30 36 64 64 2c 20 30 7, 0x3fb506dd, 0
0ca0: 78 34 38 62 32 33 36 34 62 2c 0d 0a 30 78 64 38 x48b2364b,..0xd8
0cb0: 30 64 32 62 64 61 2c 20 30 78 61 66 30 61 31 62 0d2bda, 0xaf0a1b
0cc0: 34 63 2c 20 30 78 33 36 30 33 34 61 66 36 2c 20 4c, 0x36034af6,
0cd0: 30 78 34 31 30 34 37 61 36 30 2c 20 30 78 64 66 0x41047a60, 0xdf
0ce0: 36 30 65 66 63 33 2c 20 30 78 61 38 36 37 64 66 60efc3, 0xa867df
0cf0: 35 35 2c 20 30 78 33 31 36 65 38 65 65 66 2c 20 55, 0x316e8eef,
0d00: 30 78 34 36 36 39 62 65 37 39 2c 0d 0a 30 78 63 0x4669be79,..0xc
0d10: 62 36 31 62 33 38 63 2c 20 30 78 62 63 36 36 38 b61b38c, 0xbc668
0d20: 33 31 61 2c 20 30 78 32 35 36 66 64 32 61 30 2c 31a, 0x256fd2a0,
0d30: 20 30 78 35 32 36 38 65 32 33 36 2c 20 30 78 63 0x5268e236, 0xc
0d40: 63 30 63 37 37 39 35 2c 20 30 78 62 62 30 62 34 c0c7795, 0xbb0b4
0d50: 37 30 33 2c 20 30 78 32 32 30 32 31 36 62 39 2c 703, 0x220216b9,
0d60: 20 30 78 35 35 30 35 32 36 32 66 2c 0d 0a 30 78 0x5505262f,..0x
0d70: 63 35 62 61 33 62 62 65 2c 20 30 78 62 32 62 64 c5ba3bbe, 0xb2bd
0d80: 30 62 32 38 2c 20 30 78 32 62 62 34 35 61 39 32 0b28, 0x2bb45a92
0d90: 2c 20 30 78 35 63 62 33 36 61 30 34 2c 20 30 78 , 0x5cb36a04, 0x
0da0: 63 32 64 37 66 66 61 37 2c 20 30 78 62 35 64 30 c2d7ffa7, 0xb5d0
0db0: 63 66 33 31 2c 20 30 78 32 63 64 39 39 65 38 62 cf31, 0x2cd99e8b
0dc0: 2c 20 30 78 35 62 64 65 61 65 31 64 2c 0d 0a 30 , 0x5bdeae1d,..0
0dd0: 78 39 62 36 34 63 32 62 30 2c 20 30 78 65 63 36 x9b64c2b0, 0xec6
0de0: 33 66 32 32 36 2c 20 30 78 37 35 36 61 61 33 39 3f226, 0x756aa39
0df0: 63 2c 20 30 78 30 32 36 64 39 33 30 61 2c 20 30 c, 0x026d930a, 0
0e00: 78 39 63 30 39 30 36 61 39 2c 20 30 78 65 62 30 x9c0906a9, 0xeb0
0e10: 65 33 36 33 66 2c 20 30 78 37 32 30 37 36 37 38 e363f, 0x7207678
0e20: 35 2c 20 30 78 30 35 30 30 35 37 31 33 2c 0d 0a 5, 0x05005713,..
0e30: 30 78 39 35 62 66 34 61 38 32 2c 20 30 78 65 32 0x95bf4a82, 0xe2
0e40: 62 38 37 61 31 34 2c 20 30 78 37 62 62 31 32 62 b87a14, 0x7bb12b
0e50: 61 65 2c 20 30 78 30 63 62 36 31 62 33 38 2c 20 ae, 0x0cb61b38,
0e60: 30 78 39 32 64 32 38 65 39 62 2c 20 30 78 65 35 0x92d28e9b, 0xe5
0e70: 64 35 62 65 30 64 2c 20 30 78 37 63 64 63 65 66 d5be0d, 0x7cdcef
0e80: 62 37 2c 20 30 78 30 62 64 62 64 66 32 31 2c 0d b7, 0x0bdbdf21,.
0e90: 0a 30 78 38 36 64 33 64 32 64 34 2c 20 30 78 66 .0x86d3d2d4, 0xf
0ea0: 31 64 34 65 32 34 32 2c 20 30 78 36 38 64 64 62 1d4e242, 0x68ddb
0eb0: 33 66 38 2c 20 30 78 31 66 64 61 38 33 36 65 2c 3f8, 0x1fda836e,
0ec0: 20 30 78 38 31 62 65 31 36 63 64 2c 20 30 78 66 0x81be16cd, 0xf
0ed0: 36 62 39 32 36 35 62 2c 20 30 78 36 66 62 30 37 6b9265b, 0x6fb07
0ee0: 37 65 31 2c 20 30 78 31 38 62 37 34 37 37 37 2c 7e1, 0x18b74777,
0ef0: 0d 0a 30 78 38 38 30 38 35 61 65 36 2c 20 30 78 ..0x88085ae6, 0x
0f00: 66 66 30 66 36 61 37 30 2c 20 30 78 36 36 30 36 ff0f6a70, 0x6606
0f10: 33 62 63 61 2c 20 30 78 31 31 30 31 30 62 35 63 3bca, 0x11010b5c
0f20: 2c 20 30 78 38 66 36 35 39 65 66 66 2c 20 30 78 , 0x8f659eff, 0x
0f30: 66 38 36 32 61 65 36 39 2c 20 30 78 36 31 36 62 f862ae69, 0x616b
0f40: 66 66 64 33 2c 20 30 78 31 36 36 63 63 66 34 35 ffd3, 0x166ccf45
0f50: 2c 0d 0a 30 78 61 30 30 61 65 32 37 38 2c 20 30 ,..0xa00ae278, 0
0f60: 78 64 37 30 64 64 32 65 65 2c 20 30 78 34 65 30 xd70dd2ee, 0x4e0
0f70: 34 38 33 35 34 2c 20 30 78 33 39 30 33 62 33 63 48354, 0x3903b3c
0f80: 32 2c 20 30 78 61 37 36 37 32 36 36 31 2c 20 30 2, 0xa7672661, 0
0f90: 78 64 30 36 30 31 36 66 37 2c 20 30 78 34 39 36 xd06016f7, 0x496
0fa0: 39 34 37 34 64 2c 20 30 78 33 65 36 65 37 37 64 9474d, 0x3e6e77d
0fb0: 62 2c 0d 0a 30 78 61 65 64 31 36 61 34 61 2c 20 b,..0xaed16a4a,
0fc0: 30 78 64 39 64 36 35 61 64 63 2c 20 30 78 34 30 0xd9d65adc, 0x40
0fd0: 64 66 30 62 36 36 2c 20 30 78 33 37 64 38 33 62 df0b66, 0x37d83b
0fe0: 66 30 2c 20 30 78 61 39 62 63 61 65 35 33 2c 20 f0, 0xa9bcae53,
0ff0: 30 78 64 65 62 62 39 65 63 35 2c 20 30 78 34 37 0xdebb9ec5, 0x47
1000: 62 32 63 66 37 66 2c 20 30 78 33 30 62 35 66 66 b2cf7f, 0x30b5ff
1010: 65 39 2c 0d 0a 30 78 62 64 62 64 66 32 31 63 2c e9,..0xbdbdf21c,
1020: 20 30 78 63 61 62 61 63 32 38 61 2c 20 30 78 35 0xcabac28a, 0x5
1030: 33 62 33 39 33 33 30 2c 20 30 78 32 34 62 34 61 3b39330, 0x24b4a
1040: 33 61 36 2c 20 30 78 62 61 64 30 33 36 30 35 2c 3a6, 0xbad03605,
1050: 20 30 78 63 64 64 37 30 36 39 33 2c 20 30 78 35 0xcdd70693, 0x5
1060: 34 64 65 35 37 32 39 2c 20 30 78 32 33 64 39 36 4de5729, 0x23d96
1070: 37 62 66 2c 0d 0a 30 78 62 33 36 36 37 61 32 65 7bf,..0xb3667a2e
1080: 2c 20 30 78 63 34 36 31 34 61 62 38 2c 20 30 78 , 0xc4614ab8, 0x
1090: 35 64 36 38 31 62 30 32 2c 20 30 78 32 61 36 66 5d681b02, 0x2a6f
10a0: 32 62 39 34 2c 20 30 78 62 34 30 62 62 65 33 37 2b94, 0xb40bbe37
10b0: 2c 20 30 78 63 33 30 63 38 65 61 31 2c 20 30 78 , 0xc30c8ea1, 0x
10c0: 35 61 30 35 64 66 31 62 2c 20 30 78 32 64 30 32 5a05df1b, 0x2d02
10d0: 65 66 38 64 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f 20 75 ef8d..};....// u
10e0: 70 64 61 74 65 20 63 72 63 0d 0a 23 64 65 66 69 pdate crc..#defi
10f0: 6e 65 20 63 61 6c 63 5f 63 72 63 28 63 2c 62 29 ne calc_crc(c,b)
1100: 20 28 63 72 63 5f 74 61 62 6c 65 5b 28 63 26 30 (crc_table[(c&0
1110: 78 66 66 29 5e 28 62 26 30 78 66 66 29 5d 5e 28 xff)^(b&0xff)]^(
1120: 28 63 29 3e 3e 38 29 29 0d 0a 0d 0a 44 57 4f 52 (c)>>8))....DWOR
1130: 44 20 43 5a 69 70 54 6f 6f 6c 3a 3a 63 72 63 33 D CZipTool::crc3
1140: 32 28 20 44 57 4f 52 44 20 63 72 63 2c 20 63 6f 2( DWORD crc, co
1150: 6e 73 74 20 42 59 54 45 2a 20 64 61 74 2c 20 69 nst BYTE* dat, i
1160: 6e 74 20 6c 65 6e 20 29 0d 0a 7b 0d 0a 09 63 72 nt len )..{...cr
1170: 63 20 5e 3d 20 30 78 66 66 66 66 66 66 66 66 4c c ^= 0xffffffffL
1180: 3b 0d 0a 09 77 68 69 6c 65 28 20 6c 65 6e 2d 2d ;...while( len--
1190: 20 29 0d 0a 09 09 63 72 63 20 3d 20 63 61 6c 63 )....crc = calc
11a0: 5f 63 72 63 28 20 63 72 63 2c 2a 64 61 74 2b 2b _crc( crc,*dat++
11b0: 20 29 3b 0d 0a 09 72 65 74 75 72 6e 20 28 63 72 );...return (cr
11c0: 63 5e 30 78 66 66 66 66 66 66 66 66 4c 29 3b 0d c^0xffffffffL);.
11d0: 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d 20 83 77 83 62 83 .}....//-- .w.b.
11e0: 5f 8f 88 97 9d 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d _.... ----------
11f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 62 6f 6f ---------....boo
1210: 6c 20 43 5a 69 70 54 6f 6f 6c 3a 3a 72 65 61 64 l CZipTool::read
1220: 5f 68 65 61 64 65 72 28 20 5a 69 70 4c 6f 63 61 _header( ZipLoca
1230: 6c 48 65 61 64 65 72 2a 20 68 64 72 20 29 0d 0a lHeader* hdr )..
1240: 7b 0d 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 {...unsigned cha
1250: 72 2a 20 62 75 66 20 3d 20 6e 65 77 20 75 6e 73 r* buf = new uns
1260: 69 67 6e 65 64 20 63 68 61 72 5b 36 35 35 33 36 igned char[65536
1270: 5d 3b 0d 0a 0d 0a 09 69 66 28 20 32 36 20 21 3d ];.....if( 26 !=
1280: 20 66 72 65 61 64 28 62 75 66 2c 31 2c 32 36 2c fread(buf,1,26,
1290: 7a 69 70 29 20 29 0d 0a 09 09 7b 20 64 65 6c 65 zip) )....{ dele
12a0: 74 65 20 5b 5d 20 62 75 66 3b 20 72 65 74 75 72 te [] buf; retur
12b0: 6e 20 66 61 6c 73 65 3b 20 7d 0d 0a 0d 0a 09 68 n false; }.....h
12c0: 64 72 2d 3e 76 65 72 20 3d 20 28 28 62 75 66 5b dr->ver = ((buf[
12d0: 20 30 5d 29 7c 28 62 75 66 5b 20 31 5d 3c 3c 38 0])|(buf[ 1]<<8
12e0: 29 29 3b 0d 0a 09 68 64 72 2d 3e 66 6c 67 20 3d ));...hdr->flg =
12f0: 20 28 28 62 75 66 5b 20 32 5d 29 7c 28 62 75 66 ((buf[ 2])|(buf
1300: 5b 20 33 5d 3c 3c 38 29 29 3b 0d 0a 09 68 64 72 [ 3]<<8));...hdr
1310: 2d 3e 6d 68 64 20 3d 20 28 28 62 75 66 5b 20 34 ->mhd = ((buf[ 4
1320: 5d 29 7c 28 62 75 66 5b 20 35 5d 3c 3c 38 29 29 ])|(buf[ 5]<<8))
1330: 3b 0d 0a 09 68 64 72 2d 3e 74 69 6d 20 3d 20 28 ;...hdr->tim = (
1340: 28 62 75 66 5b 20 36 5d 29 7c 28 62 75 66 5b 20 (buf[ 6])|(buf[
1350: 37 5d 3c 3c 38 29 29 3b 0d 0a 09 68 64 72 2d 3e 7]<<8));...hdr->
1360: 64 61 74 20 3d 20 28 28 62 75 66 5b 20 38 5d 29 dat = ((buf[ 8])
1370: 7c 28 62 75 66 5b 20 39 5d 3c 3c 38 29 29 3b 0d |(buf[ 9]<<8));.
1380: 0a 09 68 64 72 2d 3e 63 72 63 20 3d 20 28 28 62 ..hdr->crc = ((b
1390: 75 66 5b 31 30 5d 29 7c 28 62 75 66 5b 31 31 5d uf[10])|(buf[11]
13a0: 3c 3c 38 29 7c 28 62 75 66 5b 31 32 5d 3c 3c 31 <<8)|(buf[12]<<1
13b0: 36 29 7c 28 62 75 66 5b 31 33 5d 3c 3c 32 34 29 6)|(buf[13]<<24)
13c0: 29 3b 0d 0a 09 68 64 72 2d 3e 63 73 7a 20 3d 20 );...hdr->csz =
13d0: 28 28 62 75 66 5b 31 34 5d 29 7c 28 62 75 66 5b ((buf[14])|(buf[
13e0: 31 35 5d 3c 3c 38 29 7c 28 62 75 66 5b 31 36 5d 15]<<8)|(buf[16]
13f0: 3c 3c 31 36 29 7c 28 62 75 66 5b 31 37 5d 3c 3c <<16)|(buf[17]<<
1400: 32 34 29 29 3b 0d 0a 09 68 64 72 2d 3e 75 73 7a 24));...hdr->usz
1410: 20 3d 20 28 28 62 75 66 5b 31 38 5d 29 7c 28 62 = ((buf[18])|(b
1420: 75 66 5b 31 39 5d 3c 3c 38 29 7c 28 62 75 66 5b uf[19]<<8)|(buf[
1430: 32 30 5d 3c 3c 31 36 29 7c 28 62 75 66 5b 32 31 20]<<16)|(buf[21
1440: 5d 3c 3c 32 34 29 29 3b 0d 0a 09 68 64 72 2d 3e ]<<24));...hdr->
1450: 66 6e 6c 20 3d 20 28 28 62 75 66 5b 32 32 5d 29 fnl = ((buf[22])
1460: 7c 28 62 75 66 5b 32 33 5d 3c 3c 38 29 29 3b 0d |(buf[23]<<8));.
1470: 0a 09 68 64 72 2d 3e 65 78 6c 20 3d 20 28 28 62 ..hdr->exl = ((b
1480: 75 66 5b 32 34 5d 29 7c 28 62 75 66 5b 32 35 5d uf[24])|(buf[25]
1490: 3c 3c 38 29 29 3b 0d 0a 0d 0a 09 69 66 28 20 68 <<8));.....if( h
14a0: 64 72 2d 3e 66 6e 6c 21 3d 66 72 65 61 64 28 62 dr->fnl!=fread(b
14b0: 75 66 2c 31 2c 68 64 72 2d 3e 66 6e 6c 2c 7a 69 uf,1,hdr->fnl,zi
14c0: 70 29 20 29 0d 0a 09 09 7b 20 64 65 6c 65 74 65 p) )....{ delete
14d0: 20 5b 5d 20 62 75 66 3b 20 72 65 74 75 72 6e 20 [] buf; return
14e0: 66 61 6c 73 65 3b 20 7d 0d 0a 0d 0a 09 69 6e 74 false; }.....int
14f0: 20 6c 20 3d 20 28 68 64 72 2d 3e 66 6e 6c 3e 4d l = (hdr->fnl>M
1500: 41 58 5f 50 41 54 48 2d 31 29 3f 28 4d 41 58 5f AX_PATH-1)?(MAX_
1510: 50 41 54 48 2d 31 29 3a 28 68 64 72 2d 3e 66 6e PATH-1):(hdr->fn
1520: 6c 29 3b 0d 0a 09 6d 65 6d 63 70 79 28 20 68 64 l);...memcpy( hd
1530: 72 2d 3e 66 6e 6d 2c 20 62 75 66 2c 20 6c 20 29 r->fnm, buf, l )
1540: 3b 0d 0a 09 68 64 72 2d 3e 66 6e 6d 5b 6c 5d 3d ;...hdr->fnm[l]=
1550: 27 5c 30 27 3b 0d 0a 09 63 68 61 72 2a 20 70 70 '\0';...char* pp
1560: 3b 0d 0a 09 66 6f 72 28 20 70 70 3d 68 64 72 2d ;...for( pp=hdr-
1570: 3e 66 6e 6d 3b 20 2a 70 70 21 3d 30 3b 20 70 70 >fnm; *pp!=0; pp
1580: 2b 2b 20 29 3b 0d 0a 0d 0a 09 69 66 28 20 68 64 ++ );.....if( hd
1590: 72 2d 3e 6d 68 64 20 3e 20 44 65 66 6c 61 74 65 r->mhd > Deflate
15a0: 64 20 7c 7c 20 68 64 72 2d 3e 6d 68 64 3d 3d 54 d || hdr->mhd==T
15b0: 6f 6b 65 6e 69 7a 65 64 20 29 0d 0a 09 09 7b 20 okenized )....{
15c0: 64 65 6c 65 74 65 20 5b 5d 20 62 75 66 3b 20 72 delete [] buf; r
15d0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 20 7d 0d 0a eturn false; }..
15e0: 09 69 66 28 20 70 70 2d 68 64 72 2d 3e 66 6e 6d .if( pp-hdr->fnm
15f0: 20 21 3d 20 6c 20 29 0d 0a 09 09 7b 20 64 65 6c != l )....{ del
1600: 65 74 65 20 5b 5d 20 62 75 66 3b 20 72 65 74 75 ete [] buf; retu
1610: 72 6e 20 66 61 6c 73 65 3b 20 7d 0d 0a 09 69 66 rn false; }...if
1620: 28 20 68 64 72 2d 3e 65 78 6c 20 21 3d 20 66 72 ( hdr->exl != fr
1630: 65 61 64 28 62 75 66 2c 31 2c 68 64 72 2d 3e 65 ead(buf,1,hdr->e
1640: 78 6c 2c 7a 69 70 29 20 29 0d 0a 09 09 7b 20 64 xl,zip) )....{ d
1650: 65 6c 65 74 65 20 5b 5d 20 62 75 66 3b 20 72 65 elete [] buf; re
1660: 74 75 72 6e 20 66 61 6c 73 65 3b 20 7d 0d 0a 0d turn false; }...
1670: 0a 09 64 65 6c 65 74 65 20 5b 5d 20 62 75 66 3b ..delete [] buf;
1680: 0d 0a 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d ...return true;.
1690: 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 5a 69 70 54 .}....bool CZipT
16a0: 6f 6f 6c 3a 3a 64 6f 48 65 61 64 65 72 28 20 5a ool::doHeader( Z
16b0: 69 70 4c 6f 63 61 6c 48 65 61 64 65 72 2a 20 68 ipLocalHeader* h
16c0: 64 72 20 29 0d 0a 7b 0d 0a 09 69 6e 74 20 63 2c dr )..{...int c,
16d0: 20 73 74 61 67 65 3d 30 3b 0d 0a 09 77 68 69 6c stage=0;...whil
16e0: 65 28 20 45 4f 46 20 21 3d 20 28 63 3d 66 67 65 e( EOF != (c=fge
16f0: 74 63 28 7a 69 70 29 29 20 29 0d 0a 09 7b 0d 0a tc(zip)) )...{..
1700: 09 09 09 20 69 66 28 20 63 3d 3d 27 50 27 20 20 ... if( c=='P'
1710: 20 20 20 20 20 20 20 20 20 20 20 20 29 20 73 74 ) st
1720: 61 67 65 2b 2b 3b 0d 0a 09 09 65 6c 73 65 20 69 age++;....else i
1730: 66 28 20 63 3d 3d 27 4b 27 20 26 26 20 20 73 74 f( c=='K' && st
1740: 61 67 65 3d 3d 31 20 29 20 73 74 61 67 65 2b 2b age==1 ) stage++
1750: 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28 20 63 3d ;....else if( c=
1760: 3d 30 78 30 33 20 26 26 20 73 74 61 67 65 3d 3d =0x03 && stage==
1770: 32 20 29 20 73 74 61 67 65 2b 2b 3b 0d 0a 09 09 2 ) stage++;....
1780: 65 6c 73 65 20 69 66 28 20 63 3d 3d 30 78 30 34 else if( c==0x04
1790: 20 26 26 20 73 74 61 67 65 3d 3d 33 20 29 0d 0a && stage==3 )..
17a0: 09 09 7b 0d 0a 09 09 09 73 74 61 67 65 2b 2b 3b ..{.....stage++;
17b0: 0d 0a 09 09 09 69 6e 74 20 78 3d 66 74 65 6c 6c .....int x=ftell
17c0: 28 7a 69 70 29 3b 0d 0a 09 09 09 69 66 28 20 72 (zip);.....if( r
17d0: 65 61 64 5f 68 65 61 64 65 72 28 20 68 64 72 20 ead_header( hdr
17e0: 29 20 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 ) )......return
17f0: 74 72 75 65 3b 0d 0a 09 09 09 66 73 65 65 6b 28 true;.....fseek(
1800: 20 7a 69 70 2c 78 2c 53 45 45 4b 5f 53 45 54 20 zip,x,SEEK_SET
1810: 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 20 );....}....else
1820: 73 74 61 67 65 3d 30 3b 0d 0a 09 7d 0d 0a 0d 0a stage=0;...}....
1830: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a .return false;..
1840: 7d 0d 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f }....///////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1880: 2f 2f 2f 2f 2f 0d 0a 2f 2f 20 53 74 6f 72 65 20 /////..// Store
1890: 3a 20 96 b3 88 b3 8f 6b 8a 69 94 5b 0d 0a 2f 2f : .....k.i.[..//
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
18d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
18e0: 0d 0a 76 6f 69 64 20 43 5a 69 70 54 6f 6f 6c 3a ..void CZipTool:
18f0: 3a 55 6e 73 74 6f 72 65 28 20 44 57 4f 52 44 20 :Unstore( DWORD
1900: 75 73 7a 2c 20 44 57 4f 52 44 20 63 73 7a 20 29 usz, DWORD csz )
1910: 0d 0a 7b 0d 0a 09 75 6e 73 69 67 6e 65 64 20 63 ..{...unsigned c
1920: 68 61 72 2a 20 62 75 66 20 3d 20 6e 65 77 20 75 har* buf = new u
1930: 6e 73 69 67 6e 65 64 20 63 68 61 72 5b 36 35 35 nsigned char[655
1940: 33 36 5d 3b 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 36];..//--------
1950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2f 2f 0d 0a ------------//..
1990: 0d 0a 09 69 6e 74 20 68 6f 77 5f 6d 75 63 68 3b ...int how_much;
19a0: 0d 0a 09 77 68 69 6c 65 28 20 63 73 7a 20 29 0d ...while( csz ).
19b0: 0a 09 7b 0d 0a 09 09 68 6f 77 5f 6d 75 63 68 20 ..{....how_much
19c0: 3d 20 63 73 7a 20 3e 20 36 35 35 33 36 20 3f 20 = csz > 65536 ?
19d0: 36 35 35 33 36 20 3a 20 63 73 7a 3b 0d 0a 09 09 65536 : csz;....
19e0: 69 66 28 20 30 3e 3d 28 68 6f 77 5f 6d 75 63 68 if( 0>=(how_much
19f0: 3d 7a 69 70 72 65 61 64 28 20 62 75 66 2c 20 68 =zipread( buf, h
1a00: 6f 77 5f 6d 75 63 68 20 29 29 20 29 0d 0a 09 09 ow_much )) )....
1a10: 09 62 72 65 61 6b 3b 0d 0a 09 09 7a 69 70 77 72 .break;....zipwr
1a20: 69 74 65 28 20 62 75 66 2c 20 68 6f 77 5f 6d 75 ite( buf, how_mu
1a30: 63 68 20 29 3b 0d 0a 09 09 63 73 7a 20 2d 3d 20 ch );....csz -=
1a40: 68 6f 77 5f 6d 75 63 68 3b 0d 0a 09 7d 0d 0a 0d how_much;...}...
1a50: 0a 09 64 65 6c 65 74 65 20 5b 5d 20 62 75 66 3b ..delete [] buf;
1a60: 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f ..}..../////////
1a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 20 44 65 66 6c ///////..// Defl
1ab0: 61 74 65 20 81 46 20 6c 7a 73 73 2b 68 75 66 66 ate .F lzss+huff
1ac0: 6d 61 6e 81 42 8c bb 8d dd 82 cc 70 6b 7a 69 70 man.B......pkzip
1ad0: 82 cc 83 81 83 5c 83 62 83 68 0d 0a 2f 2f 2f 2f .....\.b.h..////
1ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
1b20: 73 74 61 74 69 63 20 76 6f 69 64 2a 20 6d 79 5f static void* my_
1b30: 7a 61 6c 6c 6f 63 28 76 6f 69 64 2a 20 70 72 6d zalloc(void* prm
1b40: 2c 55 49 4e 54 20 6e 75 6d 2c 55 49 4e 54 20 73 ,UINT num,UINT s
1b50: 69 7a 29 0d 0a 09 7b 72 65 74 75 72 6e 20 28 76 iz)...{return (v
1b60: 6f 69 64 2a 29 6e 65 77 20 63 68 61 72 5b 6e 75 oid*)new char[nu
1b70: 6d 2a 73 69 7a 5d 3b 7d 0d 0a 73 74 61 74 69 63 m*siz];}..static
1b80: 20 76 6f 69 64 20 6d 79 5f 7a 66 72 65 65 28 76 void my_zfree(v
1b90: 6f 69 64 2a 20 70 72 6d 2c 76 6f 69 64 2a 20 70 oid* prm,void* p
1ba0: 74 72 29 0d 0a 09 7b 64 65 6c 65 74 65 20 5b 5d tr)...{delete []
1bb0: 20 28 63 68 61 72 2a 29 70 74 72 3b 7d 0d 0a 76 (char*)ptr;}..v
1bc0: 6f 69 64 20 43 5a 69 70 54 6f 6f 6c 3a 3a 49 6e oid CZipTool::In
1bd0: 66 6c 61 74 65 28 20 44 57 4f 52 44 20 75 73 7a flate( DWORD usz
1be0: 2c 20 44 57 4f 52 44 20 63 73 7a 20 29 0d 0a 7b , DWORD csz )..{
1bf0: 0d 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 ...unsigned char
1c00: 2a 20 6f 75 74 62 75 66 20 3d 20 6e 65 77 20 75 * outbuf = new u
1c10: 6e 73 69 67 6e 65 64 20 63 68 61 72 5b 36 35 35 nsigned char[655
1c20: 33 36 5d 3b 0d 0a 09 75 6e 73 69 67 6e 65 64 20 36];...unsigned
1c30: 63 68 61 72 2a 20 20 69 6e 62 75 66 20 3d 20 6f char* inbuf = o
1c40: 75 74 62 75 66 20 2b 20 33 32 37 36 38 3b 0d 0a utbuf + 32768;..
1c50: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d //--------------
1c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1c90: 2d 2d 2d 2d 2d 2d 2f 2f 0d 0a 0d 0a 09 2f 2f 20 ------//.....//
1ca0: 7a 6c 69 62 8f 80 94 f5 0d 0a 09 7a 5f 73 74 72 zlib.......z_str
1cb0: 65 61 6d 5f 73 20 7a 73 3b 0d 0a 09 7a 73 2e 7a eam_s zs;...zs.z
1cc0: 61 6c 6c 6f 63 20 20 20 3d 20 6d 79 5f 7a 61 6c alloc = my_zal
1cd0: 6c 6f 63 3b 0d 0a 09 7a 73 2e 7a 66 72 65 65 20 loc;...zs.zfree
1ce0: 20 20 20 3d 20 6d 79 5f 7a 66 72 65 65 3b 0d 0a = my_zfree;..
1cf0: 0d 0a 09 2f 2f 20 8f 6f 97 cd 83 6f 83 62 83 74 ...// .o...o.b.t
1d00: 83 40 0d 0a 09 69 6e 74 20 6f 75 74 73 69 7a 20 .@...int outsiz
1d10: 3d 20 33 32 37 36 38 3b 0d 0a 09 7a 73 2e 6e 65 = 32768;...zs.ne
1d20: 78 74 5f 6f 75 74 20 3d 20 6f 75 74 62 75 66 3b xt_out = outbuf;
1d30: 0d 0a 09 7a 73 2e 61 76 61 69 6c 5f 6f 75 74 3d ...zs.avail_out=
1d40: 20 6f 75 74 73 69 7a 3b 0d 0a 0d 0a 09 2f 2f 20 outsiz;.....//
1d50: 93 fc 97 cd 83 6f 83 62 83 74 83 40 0d 0a 09 69 .....o.b.t.@...i
1d60: 6e 74 20 69 6e 73 69 7a 20 3d 20 7a 69 70 72 65 nt insiz = zipre
1d70: 61 64 28 20 69 6e 62 75 66 2c 0d 0a 09 09 33 32 ad( inbuf,....32
1d80: 37 36 38 20 3e 20 63 73 7a 20 3f 20 63 73 7a 20 768 > csz ? csz
1d90: 3a 20 33 32 37 36 38 20 29 3b 0d 0a 09 69 66 28 : 32768 );...if(
1da0: 20 69 6e 73 69 7a 3c 3d 30 20 29 0d 0a 09 09 72 insiz<=0 )....r
1db0: 65 74 75 72 6e 3b 0d 0a 09 63 73 7a 20 20 20 20 eturn;...csz
1dc0: 20 20 20 20 2d 3d 20 69 6e 73 69 7a 3b 0d 0a 09 -= insiz;...
1dd0: 7a 73 2e 6e 65 78 74 5f 69 6e 20 20 3d 20 69 6e zs.next_in = in
1de0: 62 75 66 3b 0d 0a 09 7a 73 2e 61 76 61 69 6c 5f buf;...zs.avail_
1df0: 69 6e 20 3d 20 69 6e 73 69 7a 3b 0d 0a 0d 0a 09 in = insiz;.....
1e00: 2f 2f 20 83 58 83 5e 81 5b 83 67 0d 0a 09 69 6e // .X.^.[.g...in
1e10: 66 6c 61 74 65 49 6e 69 74 32 28 20 26 7a 73 2c flateInit2( &zs,
1e20: 20 2d 31 35 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 8f -15 );.....// .
1e30: 91 8c c9 82 a9 82 e7 93 fc 97 cd 82 b5 8f 49 82 ..............I.
1e40: ed 82 e9 82 dc 82 c5 83 8b 81 5b 83 76 0d 0a 09 ..........[.v...
1e50: 69 6e 74 20 65 72 72 20 3d 20 5a 5f 4f 4b 3b 0d int err = Z_OK;.
1e60: 0a 09 77 68 69 6c 65 28 20 63 73 7a 20 29 0d 0a ..while( csz )..
1e70: 09 7b 0d 0a 09 09 77 68 69 6c 65 28 20 7a 73 2e .{....while( zs.
1e80: 61 76 61 69 6c 5f 6f 75 74 20 3e 20 30 20 29 0d avail_out > 0 ).
1e90: 0a 09 09 7b 0d 0a 09 09 09 65 72 72 20 3d 20 69 ...{.....err = i
1ea0: 6e 66 6c 61 74 65 28 20 26 7a 73 2c 5a 5f 50 41 nflate( &zs,Z_PA
1eb0: 52 54 49 41 4c 5f 46 4c 55 53 48 20 29 3b 0d 0a RTIAL_FLUSH );..
1ec0: 09 09 09 69 66 28 20 65 72 72 21 3d 5a 5f 53 54 ...if( err!=Z_ST
1ed0: 52 45 41 4d 5f 45 4e 44 20 26 26 20 65 72 72 21 REAM_END && err!
1ee0: 3d 5a 5f 4f 4b 20 29 0d 0a 09 09 09 09 63 73 7a =Z_OK )......csz
1ef0: 3d 30 3b 0d 0a 09 09 09 69 66 28 20 21 63 73 7a =0;.....if( !csz
1f00: 20 29 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a )......break;..
1f10: 0d 0a 09 09 09 69 66 28 20 7a 73 2e 61 76 61 69 .....if( zs.avai
1f20: 6c 5f 69 6e 3c 3d 30 20 29 0d 0a 09 09 09 7b 0d l_in<=0 ).....{.
1f30: 0a 09 09 09 09 69 6e 74 20 69 6e 73 69 7a 20 3d .....int insiz =
1f40: 20 7a 69 70 72 65 61 64 28 20 69 6e 62 75 66 2c zipread( inbuf,
1f50: 20 33 32 37 36 38 20 3e 20 63 73 7a 20 3f 0d 0a 32768 > csz ?..
1f60: 09 09 09 09 09 09 09 09 09 09 09 09 63 73 7a 20 ............csz
1f70: 3a 20 33 32 37 36 38 20 29 3b 0d 0a 09 09 09 09 : 32768 );......
1f80: 69 66 28 20 69 6e 73 69 7a 3c 3d 30 20 29 0d 0a if( insiz<=0 )..
1f90: 09 09 09 09 7b 0d 0a 09 09 09 09 09 65 72 72 20 ....{.......err
1fa0: 3d 20 5a 5f 53 54 52 45 41 4d 5f 45 4e 44 3b 0d = Z_STREAM_END;.
1fb0: 0a 09 09 09 09 09 63 73 7a 20 3d 20 30 3b 0d 0a ......csz = 0;..
1fc0: 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 .....break;.....
1fd0: 09 7d 0d 0a 0d 0a 09 09 09 09 63 73 7a 20 20 20 .}........csz
1fe0: 20 20 20 20 20 2d 3d 20 69 6e 73 69 7a 3b 0d 0a -= insiz;..
1ff0: 09 09 09 09 7a 73 2e 6e 65 78 74 5f 69 6e 20 20 ....zs.next_in
2000: 3d 20 69 6e 62 75 66 3b 0d 0a 09 09 09 09 7a 73 = inbuf;......zs
2010: 2e 61 76 61 69 6c 5f 69 6e 20 3d 20 69 6e 73 69 .avail_in = insi
2020: 7a 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d z;.....}....}...
2030: 0a 09 09 7a 69 70 77 72 69 74 65 28 20 6f 75 74 ...zipwrite( out
2040: 62 75 66 2c 20 6f 75 74 73 69 7a 2d 7a 73 2e 61 buf, outsiz-zs.a
2050: 76 61 69 6c 5f 6f 75 74 20 29 3b 0d 0a 09 09 7a vail_out );....z
2060: 73 2e 6e 65 78 74 5f 6f 75 74 20 20 3d 20 6f 75 s.next_out = ou
2070: 74 62 75 66 3b 0d 0a 09 09 7a 73 2e 61 76 61 69 tbuf;....zs.avai
2080: 6c 5f 6f 75 74 20 3d 20 6f 75 74 73 69 7a 3b 0d l_out = outsiz;.
2090: 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 8f 6f 97 cd 8e ..}.....// .o...
20a0: 63 82 b5 82 f0 96 b3 82 ad 82 b7 81 42 0d 0a 09 c...........B...
20b0: 77 68 69 6c 65 28 20 65 72 72 21 3d 5a 5f 53 54 while( err!=Z_ST
20c0: 52 45 41 4d 5f 45 4e 44 20 29 0d 0a 09 7b 0d 0a REAM_END )...{..
20d0: 09 09 65 72 72 20 3d 20 69 6e 66 6c 61 74 65 28 ..err = inflate(
20e0: 26 7a 73 2c 5a 5f 50 41 52 54 49 41 4c 5f 46 4c &zs,Z_PARTIAL_FL
20f0: 55 53 48 29 3b 0d 0a 09 09 69 66 28 20 65 72 72 USH);....if( err
2100: 21 3d 5a 5f 53 54 52 45 41 4d 5f 45 4e 44 20 26 !=Z_STREAM_END &
2110: 26 20 65 72 72 21 3d 5a 5f 4f 4b 20 29 0d 0a 09 & err!=Z_OK )...
2120: 09 09 62 72 65 61 6b 3b 0d 0a 0d 0a 09 09 7a 69 ..break;......zi
2130: 70 77 72 69 74 65 28 20 6f 75 74 62 75 66 2c 20 pwrite( outbuf,
2140: 6f 75 74 73 69 7a 2d 7a 73 2e 61 76 61 69 6c 5f outsiz-zs.avail_
2150: 6f 75 74 20 29 3b 0d 0a 09 09 7a 73 2e 6e 65 78 out );....zs.nex
2160: 74 5f 6f 75 74 20 20 3d 20 6f 75 74 62 75 66 3b t_out = outbuf;
2170: 0d 0a 09 09 7a 73 2e 61 76 61 69 6c 5f 6f 75 74 ....zs.avail_out
2180: 20 3d 20 6f 75 74 73 69 7a 3b 0d 0a 09 7d 0d 0a = outsiz;...}..
2190: 0d 0a 09 2f 2f 20 8f 49 97 b9 0d 0a 09 69 6e 66 ...// .I.....inf
21a0: 6c 61 74 65 45 6e 64 28 26 7a 73 29 3b 0d 0a 0d lateEnd(&zs);...
21b0: 0a 09 64 65 6c 65 74 65 20 5b 5d 20 6f 75 74 62 ..delete [] outb
21c0: 75 66 3b 0d 0a 7d 0d 0a uf;..}..