Artifact 4c58bb3061c0a99d990a27dce2a5906146af6fe1:
- File
src/bga_melter.d
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
The problem was __gshared. Replacing it with TLS fixed the issue. Remaining problem is that "hack.d"'s CloseHandle hack is not working anymore.
(user: kinaba) [annotate]
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
0000: ef bb bf 69 6d 70 6f 72 74 20 77 69 6e 33 32 2e ...import win32. 0010: 77 69 6e 64 6f 77 73 3b 0a 69 6d 70 6f 72 74 20 windows;.import 0020: 73 74 64 2e 63 2e 73 74 64 69 6f 3b 0a 69 6d 70 std.c.stdio;.imp 0030: 6f 72 74 20 73 74 64 2e 66 69 6c 65 3b 0a 69 6d ort std.file;.im 0040: 70 6f 72 74 20 73 74 64 2e 73 74 72 69 6e 67 3b port std.string; 0050: 0a 69 6d 70 6f 72 74 20 65 74 63 2e 63 2e 7a 6c .import etc.c.zl 0060: 69 62 3b 0a 69 6d 70 6f 72 74 20 6c 69 62 62 7a ib;.import libbz 0070: 32 2e 62 7a 6c 69 62 3b 0a 69 6d 70 6f 72 74 20 2.bzlib;.import 0080: 75 74 69 6c 3b 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d util;..//------- 0090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 00a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 00c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 42 67 61 ---------.// Bga 00d0: e6 9b b8 e5 ba ab e3 81 ae e3 83 95 e3 82 a1 e3 ................ 00e0: 82 a4 e3 83 ab e3 83 98 e3 83 83 e3 83 80 e5 bd ................ 00f0: a2 e5 bc 8f 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d .....//--------- 0100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0130: 2d 2d 2d 2d 2d 2d 2d 0a 0a 61 6c 69 67 6e 28 31 -------..align(1 0140: 29 20 73 74 72 75 63 74 20 42 67 61 48 65 61 64 ) struct BgaHead 0150: 65 72 0a 7b 0a 09 20 69 6e 74 20 20 20 63 68 65 er.{.. int che 0160: 63 6b 73 75 6d 3b 20 20 20 20 20 20 20 20 2f 2f cksum; // 0170: 20 74 79 70 65 ef bd 9e 66 6e 61 6d 65 20 e3 81 type...fname .. 0180: ae 73 69 67 6e 65 64 20 63 68 61 72 e3 81 a7 e3 .signed char.... 0190: 81 ae e5 92 8c 0a 09 63 68 61 72 20 20 20 6d 65 .......char me 01a0: 74 68 6f 64 5b 34 5d 3b 20 20 20 20 20 20 20 2f thod[4]; / 01b0: 2f 20 22 47 5a 49 50 22 20 e3 81 be e3 81 9f e3 / "GZIP" ....... 01c0: 81 af 20 22 42 5a 32 5c 30 22 0a 09 75 69 6e 74 .. "BZ2\0"..uint 01d0: 20 20 20 63 6f 6d 70 72 65 73 73 65 64 5f 73 69 compressed_si 01e0: 7a 65 3b 20 2f 2f 20 e5 9c a7 e7 b8 ae e5 be 8c ze; // ......... 01f0: e3 81 ae e3 83 87 e3 83 bc e3 82 bf e3 82 b5 e3 ................ 0200: 82 a4 e3 82 ba 28 20 e3 83 98 e3 83 83 e3 83 80 .....( ......... 0210: e3 81 af e5 90 ab e3 81 be e3 81 aa e3 81 84 20 ............... 0220: 29 0a 09 75 69 6e 74 20 20 20 6f 72 69 67 69 6e )..uint origin 0230: 61 6c 5f 73 69 7a 65 3b 20 20 20 2f 2f 20 e5 85 al_size; // .. 0240: 83 e3 81 ae e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab ................ 0250: e3 82 b5 e3 82 a4 e3 82 ba 0a 09 75 73 68 6f 72 ...........ushor 0260: 74 20 64 61 74 65 3b 20 20 20 20 20 20 20 20 20 t date; 0270: 20 20 20 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 e3 // .......... 0280: 83 ab e3 81 ae e6 9b b4 e6 96 b0 e6 97 a5 e4 bb ................ 0290: 98 28 20 44 4f 53 e5 bd a2 e5 bc 8f 20 29 0a 09 .( DOS...... ).. 02a0: 75 73 68 6f 72 74 20 74 69 6d 65 3b 20 20 20 20 ushort time; 02b0: 20 20 20 20 20 20 20 20 2f 2f 20 e3 83 95 e3 82 // ..... 02c0: a1 e3 82 a4 e3 83 ab e3 81 ae e6 9b b4 e6 96 b0 ................ 02d0: e6 99 82 e5 88 bb 28 20 44 4f 53 e5 bd a2 e5 bc ......( DOS..... 02e0: 8f 20 29 0a 09 75 62 79 74 65 20 20 61 74 74 72 . )..ubyte attr 02f0: 69 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2f 20 ib; // 0300: e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 ae e5 ................ 0310: b1 9e e6 80 a7 0a 09 20 20 20 20 20 20 20 20 20 ....... 0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f / 0330: 2f 20 28 20 31 3a 52 4f 20 32 3a 48 69 64 20 34 / ( 1:RO 2:Hid 4 0340: 3a 53 79 73 20 38 3a 56 6f 6c 20 31 36 3a 44 69 :Sys 8:Vol 16:Di 0350: 72 20 33 32 3a 41 72 63 20 29 0a 09 75 62 79 74 r 32:Arc )..ubyt 0360: 65 20 20 68 65 61 64 65 72 5f 74 79 70 65 3b 20 e header_type; 0370: 20 20 20 20 2f 2f 20 e3 83 98 e3 83 83 e3 83 80 // ......... 0380: e3 81 ae e7 a8 ae e9 a1 9e 28 20 e7 8f be e5 9c .........( ..... 0390: a8 e3 81 af e5 b8 b8 e3 81 ab 20 30 20 29 0a 09 .......... 0 ).. 03a0: 75 73 68 6f 72 74 20 61 72 63 5f 74 79 70 65 3b ushort arc_type; 03b0: 20 20 20 20 20 20 20 20 2f 2f 20 e3 82 a2 e3 83 // ..... 03c0: bc e3 82 ab e3 82 a4 e3 83 96 e3 82 bf e3 82 a4 ................ 03d0: e3 83 97 0a 09 20 20 20 20 20 20 20 20 20 20 20 ..... 03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 // 03f0: 30 3a 28 65 78 74 3d 3d e2 86 93 3f e9 9d 9e e5 0:(ext==...?.... 0400: 9c a7 e7 b8 ae 3a e5 9c a7 e7 b8 ae 29 20 31 3a .....:......) 1: 0410: e5 9c a7 e7 b8 ae 20 32 3a e9 9d 9e e5 9c a7 e7 ...... 2:....... 0420: b8 ae 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 .... 0430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 09 2e //.. 0440: 41 52 43 2c 20 2e 41 52 4a 2c 20 2e 42 5a 32 2c ARC, .ARJ, .BZ2, 0450: 20 2e 42 5a 41 2c 20 2e 43 41 42 2c 20 2e 47 5a .BZA, .CAB, .GZ 0460: 2c 20 2e 47 5a 41 2c 20 2e 4c 5a 48 2c 0a 09 20 , .GZA, .LZH,.. 0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0480: 20 20 20 20 20 20 20 2f 2f 09 2e 4c 5a 53 2c 20 //..LZS, 0490: 2e 50 41 4b 2c 20 2e 52 41 52 2c 20 2e 54 41 5a .PAK, .RAR, .TAZ 04a0: 2c 20 2e 54 42 5a 2c 20 2e 54 47 5a 2c 20 2e 5a , .TBZ, .TGZ, .Z 04b0: 2c 20 2e 5a 49 50 2c 20 2e 5a 4f 4f 0a 09 75 73 , .ZIP, .ZOO..us 04c0: 68 6f 72 74 20 64 69 72 5f 6e 61 6d 65 5f 6c 65 hort dir_name_le 04d0: 6e 3b 20 20 20 20 2f 2f 20 e3 83 87 e3 82 a3 e3 n; // ....... 04e0: 83 ac e3 82 af e3 83 88 e3 83 aa e5 90 8d e3 81 ................ 04f0: ae e9 95 b7 e3 81 95 0a 09 75 73 68 6f 72 74 20 .........ushort 0500: 66 69 6c 65 5f 6e 61 6d 65 5f 6c 65 6e 3b 20 20 file_name_len; 0510: 20 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab // ............ 0520: e5 90 8d e3 81 ae e9 95 b7 e3 81 95 0a 09 73 74 ..............st 0530: 72 69 6e 67 20 66 6e 61 6d 65 3b 20 20 20 20 20 ring fname; 0540: 20 20 20 20 20 20 2f 2f 20 64 69 72 5f 6e 61 6d // dir_nam 0550: 65 5f 6c 65 6e 20 2b 20 66 69 6c 65 5f 6e 61 6d e_len + file_nam 0560: 65 5f 6c 65 6e 20 28 20 6e 6f 20 27 5c 30 27 20 e_len ( no '\0' 0570: 29 0a 7d 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d ).}..//--------- 0580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 05a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 05b0: 2d 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 e3 82 a8 e3 83 -------.// ..... 05c0: a9 e3 83 bc e7 99 ba e7 94 9f e6 99 82 e3 81 ab ................ 05d0: e6 8a 95 e3 81 92 e3 82 8b e4 be 8b e5 a4 96 0a ................ 05e0: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d //-------------- 05f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0620: 2d 2d 0a 0a 63 6c 61 73 73 20 42 67 61 4d 65 6c --..class BgaMel 0630: 74 65 72 45 72 72 6f 72 20 3a 20 45 72 72 6f 72 terError : Error 0640: 0a 7b 0a 09 69 6e 74 20 65 72 72 63 6f 64 65 3b .{..int errcode; 0650: 0a 09 74 68 69 73 28 20 69 6e 74 20 65 20 29 20 ..this( int e ) 0660: 7b 20 73 75 70 65 72 28 22 42 67 61 4d 65 6c 74 { super("BgaMelt 0670: 65 72 45 72 72 6f 72 22 29 3b 20 65 72 72 63 6f erError"); errco 0680: 64 65 3d 65 3b 20 7d 0a 7d 0a 0a 65 6e 75 6d 0a de=e; }.}..enum. 0690: 7b 0a 09 45 52 52 4f 52 5f 46 49 4c 45 5f 4f 50 {..ERROR_FILE_OP 06a0: 45 4e 3d 30 78 38 30 30 44 2c 2f 2f 20 20 20 20 EN=0x800D,// 06b0: 20 20 20 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ........... 06c0: ab e3 82 92 e9 96 8b e3 81 91 e3 81 be e3 81 9b ................ 06d0: e3 82 93 e3 81 a7 e3 81 97 e3 81 9f e3 80 82 0a ................ 06e0: 09 45 52 52 4f 52 5f 4d 41 4b 45 44 49 52 45 43 .ERROR_MAKEDIREC 06f0: 54 4f 52 59 3d 30 78 38 30 31 32 2c 2f 2f 20 20 TORY=0x8012,// 0700: 20 20 20 e3 83 87 e3 82 a3 e3 83 ac e3 82 af e3 ............. 0710: 83 88 e3 83 aa e3 81 8c e4 bd 9c e6 88 90 e3 81 ................ 0720: a7 e3 81 8d e3 81 be e3 81 9b e3 82 93 e3 80 82 ................ 0730: 0a 09 45 52 52 4f 52 5f 43 41 4e 4e 4f 54 5f 57 ..ERROR_CANNOT_W 0740: 52 49 54 45 3d 30 78 38 30 31 33 2c 2f 2f 20 20 RITE=0x8013,// 0750: 20 20 20 20 e6 9b b8 e3 81 8d e8 be bc e3 81 bf ............ 0760: e3 82 a8 e3 83 a9 e3 83 bc e3 81 8c e7 94 9f e3 ................ 0770: 81 98 e3 81 be e3 81 97 e3 81 9f e3 80 82 0a 09 ................ 0780: 45 52 52 4f 52 5f 48 45 41 44 45 52 5f 43 52 43 ERROR_HEADER_CRC 0790: 3d 30 78 38 30 31 36 2c 2f 2f 20 20 20 20 20 20 =0x8016,// 07a0: 20 20 e6 9b b8 e5 ba ab e3 81 ae e3 83 98 e3 83 .............. 07b0: 83 e3 83 80 e3 81 ae e3 83 81 e3 82 a7 e3 83 83 ................ 07c0: e3 82 af e3 82 b5 e3 83 a0 e3 81 8c e5 90 88 e3 ................ 07d0: 81 a3 e3 81 a6 e3 81 84 e3 81 be e3 81 9b e3 82 ................ 07e0: 93 e3 80 82 0a 09 45 52 52 4f 52 5f 41 52 43 5f ......ERROR_ARC_ 07f0: 46 49 4c 45 5f 4f 50 45 4e 3d 30 78 38 30 31 38 FILE_OPEN=0x8018 0800: 2c 2f 2f 20 20 20 20 20 e6 9b b8 e5 ba ab e3 82 ,// ........ 0810: 92 e9 96 8b e3 81 8f e4 ba 8b e3 81 8c e5 87 ba ................ 0820: e6 9d a5 e3 81 be e3 81 9b e3 82 93 e3 80 82 0a ................ 0830: 09 45 52 52 4f 52 5f 4e 4f 54 5f 41 52 43 5f 46 .ERROR_NOT_ARC_F 0840: 49 4c 45 3d 30 78 38 30 31 39 2c 2f 2f 20 20 20 ILE=0x8019,// 0850: 20 20 20 e6 9b b8 e5 ba ab e3 81 ae e3 83 95 e3 ............. 0860: 82 a1 e3 82 a4 e3 83 ab e5 90 8d e3 81 8c e6 8c ................ 0870: 87 e5 ae 9a e3 81 95 e3 82 8c e3 81 a6 e3 81 84 ................ 0880: e3 81 be e3 81 9b e3 82 93 e3 80 82 0a 09 45 52 ..............ER 0890: 52 4f 52 5f 43 41 4e 4e 4f 54 5f 52 45 41 44 3d ROR_CANNOT_READ= 08a0: 30 78 38 30 31 41 2c 2f 2f 20 20 20 20 20 20 20 0x801A,// 08b0: e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 ae e8 ................ 08c0: aa ad e3 81 bf e8 be bc e3 81 bf e6 99 82 e3 81 ................ 08d0: ab e3 82 a8 e3 83 a9 e3 83 bc e3 81 8c e7 94 9f ................ 08e0: e3 81 98 e3 81 be e3 81 97 e3 81 9f e3 80 82 0a ................ 08f0: 09 45 52 52 4f 52 5f 46 49 4c 45 5f 53 54 59 4c .ERROR_FILE_STYL 0900: 45 3d 30 78 38 30 31 42 2c 2f 2f 20 20 20 20 20 E=0x801B,// 0910: 20 20 20 e6 8c 87 e5 ae 9a e3 81 95 e3 82 8c e3 ............. 0920: 81 9f e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 ................ 0930: af e6 9c 89 e5 8a b9 e3 81 aa e6 9b b8 e5 ba ab ................ 0940: e3 81 a7 e3 81 af e3 81 82 e3 82 8a e3 81 be e3 ................ 0950: 81 9b e3 82 93 e3 80 82 0a 09 45 52 52 4f 52 5f ..........ERROR_ 0960: 43 4f 4d 4d 41 4e 44 5f 4e 41 4d 45 3d 30 78 38 COMMAND_NAME=0x8 0970: 30 31 43 2c 2f 2f 20 20 20 20 20 20 e3 82 b3 e3 01C,// .... 0980: 83 9e e3 83 b3 e3 83 89 e6 8c 87 e5 ae 9a e3 81 ................ 0990: 8c e9 96 93 e9 81 95 e3 81 a3 e3 81 a6 e3 81 84 ................ 09a0: e3 81 be e3 81 99 e3 80 82 0a 09 45 52 52 4f 52 ...........ERROR 09b0: 5f 4d 4f 52 45 5f 48 45 41 50 5f 4d 45 4d 4f 52 _MORE_HEAP_MEMOR 09c0: 59 3d 30 78 38 30 31 44 2c 2f 2f 20 20 e4 bd 9c Y=0x801D,// ... 09d0: e6 a5 ad e7 94 a8 e3 81 ae e3 81 9f e3 82 81 e3 ................ 09e0: 81 ae e3 83 92 e3 83 bc e3 83 97 e3 83 a1 e3 83 ................ 09f0: a2 e3 83 aa e3 81 8c e4 b8 8d e8 b6 b3 e3 81 97 ................ 0a00: e3 81 a6 e3 81 84 e3 81 be e3 81 99 e3 80 82 0a ................ 0a10: 09 45 52 52 4f 52 5f 41 4c 52 45 41 44 59 5f 52 .ERROR_ALREADY_R 0a20: 55 4e 4e 49 4e 47 3d 30 78 38 30 31 46 2c 2f 2f UNNING=0x801F,// 0a30: 20 20 20 e6 97 a2 e3 81 ab 20 42 47 41 33 32 2e ...... BGA32. 0a40: 44 4c 4c 20 e3 81 8c e5 8b 95 e4 bd 9c e4 b8 ad DLL ............ 0a50: e3 81 a7 e3 81 99 e3 80 82 0a 09 45 52 52 4f 52 ...........ERROR 0a60: 5f 55 53 45 52 5f 43 41 4e 43 45 4c 3d 30 78 38 _USER_CANCEL=0x8 0a70: 30 32 30 2c 2f 2f 20 20 20 20 20 20 20 e3 83 a6 020,// ... 0a80: e3 83 bc e3 82 b6 e3 83 bc e3 81 ab e3 82 88 e3 ................ 0a90: 81 a3 e3 81 a6 e5 87 a6 e7 90 86 e3 82 92 e4 b8 ................ 0aa0: ad e6 96 ad e3 81 95 e3 82 8c e3 81 be e3 81 97 ................ 0ab0: e3 81 9f e3 80 82 0a 09 45 52 52 4f 52 5f 54 4d ........ERROR_TM 0ac0: 50 5f 4f 50 45 4e 3d 30 78 38 30 32 35 2c 2f 2f P_OPEN=0x8025,// 0ad0: 20 20 20 20 20 20 20 20 20 20 e4 bd 9c e6 a5 ad ...... 0ae0: e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 8c e4 ................ 0af0: bd 9c e6 88 90 e3 81 a7 e3 81 8d e3 81 be e3 81 ................ 0b00: 9b e3 82 93 e3 80 82 0a 09 45 52 52 4f 52 5f 41 .........ERROR_A 0b10: 52 43 5f 52 45 41 44 5f 4f 4e 4c 59 3d 30 78 38 RC_READ_ONLY=0x8 0b20: 30 32 37 2c 2f 2f 20 20 20 20 20 e6 9b b8 e3 81 027,// ..... 0b30: 8d e8 be bc e3 81 bf e5 b0 82 e7 94 a8 e5 b1 9e ................ 0b40: e6 80 a7 e3 81 ae e6 9b b8 e5 ba ab e3 81 ab e5 ................ 0b50: af be e3 81 99 e3 82 8b e6 93 8d e4 bd 9c e3 81 ................ 0b60: af e3 81 a7 e3 81 8d e3 81 be e3 81 9b e3 82 93 ................ 0b70: e3 80 82 0a 09 45 52 52 4f 52 5f 4e 4f 54 5f 46 .....ERROR_NOT_F 0b80: 49 4e 44 5f 41 52 43 5f 46 49 4c 45 3d 30 78 38 IND_ARC_FILE=0x8 0b90: 30 32 39 2c 2f 2f 20 e6 8c 87 e5 ae 9a e3 81 95 029,// ......... 0ba0: e3 82 8c e3 81 9f e3 83 87 e3 82 a3 e3 83 ac e3 ................ 0bb0: 82 af e3 83 88 e3 83 aa e3 81 ab e3 81 af e6 9b ................ 0bc0: b8 e5 ba ab e3 81 8c e3 81 82 e3 82 8a e3 81 be ................ 0bd0: e3 81 9b e3 82 93 e3 81 a7 e3 81 97 e3 81 9f e3 ................ 0be0: 80 82 0a 09 45 52 52 4f 52 5f 52 45 53 50 4f 4e ....ERROR_RESPON 0bf0: 53 45 5f 52 45 41 44 3d 30 78 38 30 32 41 2c 2f SE_READ=0x802A,/ 0c00: 2f 20 20 20 20 20 e3 83 ac e3 82 b9 e3 83 9d e3 / .......... 0c10: 83 b3 e3 82 b9 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ................ 0c20: ab e3 81 ae e8 aa ad e3 81 bf e8 be bc e3 81 bf ................ 0c30: e6 99 82 e3 81 ab e3 82 a8 e3 83 a9 e3 83 bc e3 ................ 0c40: 81 8c e7 94 9f e3 81 98 e3 81 be e3 81 97 e3 81 ................ 0c50: 9f e3 80 82 0a 09 45 52 52 4f 52 5f 54 4d 50 5f ......ERROR_TMP_ 0c60: 43 4f 50 59 3d 30 78 38 30 32 43 2c 2f 2f 20 20 COPY=0x802C,// 0c70: 20 20 20 20 20 20 20 20 e4 bd 9c e6 a5 ad e3 83 ........ 0c80: 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 ae e6 9b b8 ................ 0c90: e5 ba ab e3 81 b8 e3 81 ae e6 9b b8 e3 81 8d e6 ................ 0ca0: 88 bb e3 81 97 e3 81 8c e3 81 a7 e3 81 8d e3 81 ................ 0cb0: be e3 81 9b e3 82 93 e3 81 a7 e3 81 97 e3 81 9f ................ 0cc0: e3 80 82 0a 09 45 52 52 4f 52 5f 4e 4f 54 5f 46 .....ERROR_NOT_F 0cd0: 49 4e 44 5f 46 49 4c 45 3d 30 78 38 30 33 31 2c IND_FILE=0x8031, 0ce0: 2f 2f 20 20 20 20 20 e3 83 95 e3 82 a1 e3 82 a4 // ......... 0cf0: e3 83 ab e3 81 8c e8 a6 8b e3 81 a4 e3 81 8b e3 ................ 0d00: 82 8a e3 81 be e3 81 9b e3 82 93 e3 80 82 0a 09 ................ 0d10: 45 52 52 4f 52 5f 47 45 54 5f 41 54 54 52 49 42 ERROR_GET_ATTRIB 0d20: 55 54 45 53 3d 30 78 38 30 33 34 2c 2f 2f 20 20 UTES=0x8034,// 0d30: 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e5 b1 .............. 0d40: 9e e6 80 a7 e3 81 8c e5 8f 96 e5 be 97 e3 81 a7 ................ 0d50: e3 81 8d e3 81 be e3 81 9b e3 82 93 e3 80 82 0a ................ 0d60: 09 45 52 52 4f 52 5f 47 45 54 5f 49 4e 46 4f 52 .ERROR_GET_INFOR 0d70: 4d 41 54 49 4f 4e 3d 30 78 38 30 33 36 2c 2f 2f MATION=0x8036,// 0d80: 20 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e6 ............. 0d90: 83 85 e5 a0 b1 e3 81 8c e5 8f 96 e5 be 97 e3 81 ................ 0da0: a7 e3 81 8d e3 81 be e3 81 9b e3 82 93 e3 80 82 ................ 0db0: 0a 7d 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .}..//---------- 0dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0df0: 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 e3 82 b3 e3 83 bc ------.// ...... 0e00: e3 83 ab e3 83 90 e3 83 83 e3 82 af e9 96 a2 e6 ................ 0e10: 95 b0 e3 81 ae e8 bf 94 e7 ad 94 e7 94 a8 e5 9e ................ 0e20: 8b 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..//------------ 0e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0e60: 2d 2d 2d 2d 0a 0a 65 6e 75 6d 20 42 67 61 41 6e ----..enum BgaAn 0e70: 73 77 65 72 0a 7b 0a 09 4d 65 6c 74 49 74 2c 20 swer.{..MeltIt, 0e80: 53 6b 69 70 49 74 2c 20 41 62 6f 72 74 0a 7d 0a SkipIt, Abort.}. 0e90: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .//------------- 0ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0ed0: 2d 2d 2d 0a 2f 2f 20 46 69 6c 65 70 0a 2f 2f 20 ---.// Filep.// 0ee0: 20 20 44 e8 a8 80 e8 aa 9e e3 82 89 e3 81 97 e3 D............. 0ef0: 81 8b e3 82 89 e3 81 ac e3 81 ae e3 81 a7 e3 81 ................ 0f00: 99 e3 81 8c 7a 6c 69 62 e3 82 84 6c 69 62 62 7a ....zlib...libbz 0f10: 32 e3 81 a8 e7 b0 a1 e5 8d 98 e3 81 ab e9 80 a3 2............... 0f20: e6 90 ba e3 81 99 e3 82 8b 0a 2f 2f 20 20 20 e9 ..........// . 0f30: 83 bd e5 90 88 e4 b8 8a 73 74 64 2e 63 2e 73 74 ........std.c.st 0f40: 64 69 6f 2e 46 49 4c 45 2a e3 81 a7 e3 83 95 e3 dio.FILE*....... 0f50: 82 a1 e3 82 a4 e3 83 ab e3 82 92 e8 aa ad e3 81 ................ 0f60: bf e6 9b b8 e3 81 8d e3 81 97 e3 81 be e3 81 99 ................ 0f70: e3 80 82 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ....//---------- 0f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 0fb0: 2d 2d 2d 2d 2d 2d 0a 0a 65 78 74 65 72 6e 28 43 ------..extern(C 0fc0: 29 0a 7b 0a 09 2f 2f 20 73 74 64 69 6f 2e 68 0a ).{..// stdio.h. 0fd0: 20 20 20 20 69 6e 74 20 66 69 6c 65 6e 6f 28 20 int fileno( 0fe0: 46 49 4c 45 20 2a 66 70 20 29 20 7b 20 72 65 74 FILE *fp ) { ret 0ff0: 75 72 6e 20 66 70 2e 5f 66 69 6c 65 3b 20 7d 0a urn fp._file; }. 1000: 09 2f 2f 20 69 6f 2e 68 0a 09 69 6e 74 20 6c 73 .// io.h..int ls 1010: 65 65 6b 28 20 69 6e 74 20 66 64 2c 20 69 6e 74 eek( int fd, int 1020: 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64 offset, int mod 1030: 65 20 29 3b 0a 09 69 6e 74 20 64 75 70 28 20 69 e );..int dup( i 1040: 6e 74 20 66 64 20 29 3b 20 0a 09 69 6e 74 20 63 nt fd ); ..int c 1050: 6c 6f 73 65 28 20 69 6e 74 20 66 64 20 29 3b 0a lose( int fd );. 1060: 7d 0a 0a 63 6c 61 73 73 20 46 69 6c 65 70 0a 7b }..class Filep.{ 1070: 0a 09 70 72 69 76 61 74 65 20 46 49 4c 45 2a 20 ..private FILE* 1080: 66 70 3b 0a 09 70 72 69 76 61 74 65 20 74 68 69 fp;..private thi 1090: 73 28 20 46 49 4c 45 2a 20 70 20 29 20 7b 20 66 s( FILE* p ) { f 10a0: 70 20 3d 20 70 3b 20 7d 0a 0a 09 73 74 61 74 69 p = p; }...stati 10b0: 63 20 46 69 6c 65 70 20 6f 70 65 6e 28 20 73 74 c Filep open( st 10c0: 72 69 6e 67 20 66 69 6c 65 6e 61 6d 65 2c 20 62 ring filename, b 10d0: 6f 6f 6c 20 72 65 61 64 20 29 0a 09 7b 0a 09 09 ool read )..{... 10e0: 46 49 4c 45 2a 20 66 70 20 3d 20 66 6f 70 65 6e FILE* fp = fopen 10f0: 28 66 69 6c 65 6e 61 6d 65 2e 74 6f 53 74 72 69 (filename.toStri 1100: 6e 67 7a 28 29 2c 20 72 65 61 64 3f 22 72 62 22 ngz(), read?"rb" 1110: 3a 22 77 62 22 29 3b 0a 09 09 72 65 74 75 72 6e :"wb");...return 1120: 20 28 66 70 20 3f 20 6e 65 77 20 46 69 6c 65 70 (fp ? new Filep 1130: 28 66 70 29 20 3a 20 6e 75 6c 6c 29 3b 0a 09 7d (fp) : null);..} 1140: 0a 0a 09 69 6e 74 20 64 75 70 5f 68 61 6e 28 29 ...int dup_han() 1150: 0a 09 7b 0a 09 09 69 6e 74 20 66 64 20 3d 20 64 ..{...int fd = d 1160: 75 70 28 20 66 69 6c 65 6e 6f 28 66 70 29 20 29 up( fileno(fp) ) 1170: 3b 0a 09 09 6c 73 65 65 6b 28 20 66 64 2c 20 63 ;...lseek( fd, c 1180: 75 72 28 29 2c 20 30 20 29 3b 0a 09 09 72 65 74 ur(), 0 );...ret 1190: 75 72 6e 20 66 64 3b 0a 09 7d 0a 0a 09 76 6f 69 urn fd;..}...voi 11a0: 64 5b 5d 20 72 65 61 64 28 20 69 6e 74 20 73 69 d[] read( int si 11b0: 7a 20 29 0a 09 7b 0a 09 09 63 68 61 72 5b 5d 20 z )..{...char[] 11c0: 62 75 66 3b 20 62 75 66 2e 6c 65 6e 67 74 68 20 buf; buf.length 11d0: 3d 20 73 69 7a 3b 0a 09 09 69 6e 74 20 72 73 69 = siz;...int rsi 11e0: 7a 20 3d 20 66 72 65 61 64 28 20 62 75 66 2e 70 z = fread( buf.p 11f0: 74 72 2c 20 31 2c 20 73 69 7a 2c 20 66 70 20 29 tr, 1, siz, fp ) 1200: 3b 0a 09 09 69 66 28 20 72 73 69 7a 20 3c 20 30 ;...if( rsiz < 0 1210: 20 29 0a 09 09 09 74 68 72 6f 77 20 6e 65 77 20 )....throw new 1220: 42 67 61 4d 65 6c 74 65 72 45 72 72 6f 72 28 45 BgaMelterError(E 1230: 52 52 4f 52 5f 46 49 4c 45 5f 4f 50 45 4e 29 3b RROR_FILE_OPEN); 1240: 0a 09 09 62 75 66 2e 6c 65 6e 67 74 68 20 3d 20 ...buf.length = 1250: 72 73 69 7a 3b 0a 09 09 72 65 74 75 72 6e 20 62 rsiz;...return b 1260: 75 66 3b 0a 09 7d 0a 0a 09 76 6f 69 64 20 77 72 uf;..}...void wr 1270: 69 74 65 28 20 76 6f 69 64 5b 5d 20 62 75 66 20 ite( void[] buf 1280: 29 0a 09 7b 0a 09 09 77 68 69 6c 65 28 20 62 75 )..{...while( bu 1290: 66 2e 6c 65 6e 67 74 68 20 3e 20 30 20 29 0a 09 f.length > 0 ).. 12a0: 09 7b 0a 09 09 09 69 6e 74 20 72 73 69 7a 20 3d .{....int rsiz = 12b0: 20 66 77 72 69 74 65 28 20 62 75 66 2e 70 74 72 fwrite( buf.ptr 12c0: 2c 20 31 2c 20 62 75 66 2e 6c 65 6e 67 74 68 2c , 1, buf.length, 12d0: 20 66 70 20 29 3b 0a 09 09 09 69 66 28 20 72 73 fp );....if( rs 12e0: 69 7a 20 3c 20 30 20 29 20 72 65 74 75 72 6e 3b iz < 0 ) return; 12f0: 0a 09 09 09 62 75 66 20 3d 20 62 75 66 5b 72 73 ....buf = buf[rs 1300: 69 7a 20 2e 2e 20 24 5d 3b 0a 09 09 7d 0a 09 7d iz .. $];...}..} 1310: 0a 0a 09 69 6e 74 20 63 75 72 28 29 0a 09 7b 0a ...int cur()..{. 1320: 09 09 72 65 74 75 72 6e 20 66 74 65 6c 6c 28 66 ..return ftell(f 1330: 70 29 3b 0a 09 7d 0a 0a 09 76 6f 69 64 20 73 65 p);..}...void se 1340: 65 6b 5f 74 6f 28 20 69 6e 74 20 69 20 29 0a 09 ek_to( int i ).. 1350: 7b 0a 09 09 66 73 65 65 6b 28 20 66 70 2c 20 69 {...fseek( fp, i 1360: 2c 20 73 74 64 2e 63 2e 73 74 64 69 6f 2e 53 45 , std.c.stdio.SE 1370: 45 4b 5f 53 45 54 20 29 3b 0a 09 7d 0a 0a 09 76 EK_SET );..}...v 1380: 6f 69 64 20 63 6c 6f 73 65 28 29 0a 09 7b 0a 09 oid close()..{.. 1390: 09 66 63 6c 6f 73 65 28 66 70 29 3b 0a 09 7d 0a .fclose(fp);..}. 13a0: 0a 09 46 49 4c 45 2a 20 67 65 74 5f 66 70 28 29 ..FILE* get_fp() 13b0: 0a 09 7b 0a 09 09 72 65 74 75 72 6e 20 66 70 3b ..{...return fp; 13c0: 0a 09 7d 0a 7d 0a 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d ..}.}...//------ 13d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 13e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 13f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 1400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 e3 83 ----------.// .. 1410: a1 e3 82 a4 e3 83 b3 e3 82 af e3 83 a9 e3 82 b9 ................ 1420: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .//------------- 1430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 1440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 1450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------- 1460: 2d 2d 2d 0a 0a 63 6c 61 73 73 20 42 67 61 4d 65 ---..class BgaMe 1470: 6c 74 65 72 0a 7b 0a 09 61 6c 69 61 73 20 42 67 lter.{..alias Bg 1480: 61 41 6e 73 77 65 72 20 64 65 6c 65 67 61 74 65 aAnswer delegate 1490: 28 72 65 66 20 42 67 61 48 65 61 64 65 72 29 20 (ref BgaHeader) 14a0: 46 69 6c 65 48 61 6e 64 6c 65 72 3b 0a 09 61 6c FileHandler;..al 14b0: 69 61 73 20 42 67 61 41 6e 73 77 65 72 20 64 65 ias BgaAnswer de 14c0: 6c 65 67 61 74 65 28 69 6e 74 2c 20 69 6e 74 29 legate(int, int) 14d0: 20 20 20 20 20 20 50 72 6f 67 72 65 73 73 48 61 ProgressHa 14e0: 6e 64 6c 65 72 3b 0a 0a 09 70 72 69 76 61 74 65 ndler;...private 14f0: 20 46 69 6c 65 70 20 66 70 20 3d 20 6e 75 6c 6c Filep fp = null 1500: 3b 0a 0a 09 74 68 69 73 28 20 73 74 72 69 6e 67 ;...this( string 1510: 20 61 72 63 5f 6e 61 6d 65 20 29 0a 09 7b 0a 09 arc_name )..{.. 1520: 09 66 70 20 3d 20 46 69 6c 65 70 2e 6f 70 65 6e .fp = Filep.open 1530: 28 20 61 72 63 5f 6e 61 6d 65 2c 20 74 72 75 65 ( arc_name, true 1540: 20 29 3b 0a 09 09 69 66 28 20 66 70 20 69 73 20 );...if( fp is 1550: 6e 75 6c 6c 20 29 0a 09 09 09 74 68 72 6f 77 20 null )....throw 1560: 6e 65 77 20 42 67 61 4d 65 6c 74 65 72 45 72 72 new BgaMelterErr 1570: 6f 72 28 45 52 52 4f 52 5f 46 49 4c 45 5f 4f 50 or(ERROR_FILE_OP 1580: 45 4e 29 3b 0a 09 7d 0a 0a 09 76 6f 69 64 20 63 EN);..}...void c 1590: 6c 6f 73 65 28 29 0a 09 7b 0a 09 09 69 66 28 20 lose()..{...if( 15a0: 66 70 20 29 20 7b 20 66 70 2e 63 6c 6f 73 65 28 fp ) { fp.close( 15b0: 29 3b 20 66 70 20 3d 20 6e 75 6c 6c 3b 20 7d 0a ); fp = null; }. 15c0: 09 7d 0a 0a 09 76 6f 69 64 20 73 74 61 72 74 28 .}...void start( 15d0: 20 46 69 6c 65 48 61 6e 64 6c 65 72 20 66 68 2c FileHandler fh, 15e0: 20 50 72 6f 67 72 65 73 73 48 61 6e 64 6c 65 72 ProgressHandler 15f0: 20 70 68 20 29 0a 09 7b 0a 09 09 74 72 79 0a 09 ph )..{...try.. 1600: 09 7b 0a 09 09 09 2f 2f 20 e3 83 98 e3 83 83 e3 .{....// ....... 1610: 83 80 e3 82 92 e6 8e a2 e3 81 99 0a 09 09 09 69 ...............i 1620: 6e 74 20 68 70 6f 73 20 3d 20 66 69 6e 64 5f 68 nt hpos = find_h 1630: 65 61 64 65 72 28 29 3b 0a 09 09 09 69 66 28 20 eader();....if( 1640: 68 70 6f 73 20 3d 3d 20 2d 31 20 29 0a 09 09 09 hpos == -1 ).... 1650: 09 74 68 72 6f 77 20 6e 65 77 20 42 67 61 4d 65 .throw new BgaMe 1660: 6c 74 65 72 45 72 72 6f 72 28 45 52 52 4f 52 5f lterError(ERROR_ 1670: 4e 4f 54 5f 41 52 43 5f 46 49 4c 45 29 3b 0a 09 NOT_ARC_FILE);.. 1680: 09 09 66 70 2e 73 65 65 6b 5f 74 6f 28 68 70 6f ..fp.seek_to(hpo 1690: 73 29 3b 0a 0a 09 09 09 2f 2f 20 e3 83 ab e3 83 s);.....// ..... 16a0: bc e3 83 97 ef bc 9a 0a 09 09 09 2f 2f 20 e3 83 ...........// .. 16b0: 98 e3 83 83 e3 83 80 e8 aa ad e3 81 bf e3 81 a8 ................ 16c0: e3 82 8a 0a 09 09 09 42 67 61 48 65 61 64 65 72 .......BgaHeader 16d0: 20 68 64 72 3b 0a 09 09 09 77 68 69 6c 65 28 20 hdr;....while( 16e0: 72 65 61 64 5f 68 65 61 64 65 72 28 68 64 72 29 read_header(hdr) 16f0: 20 29 0a 09 09 09 7b 0a 09 09 09 09 2f 2f 20 e6 )....{.....// . 1700: ac a1 e3 81 ae e3 83 98 e3 83 83 e3 83 80 e4 bd ................ 1710: 8d e7 bd ae e3 82 92 e8 a8 88 e7 ae 97 e3 81 97 ................ 1720: e3 81 a6 e3 81 8a e3 81 8f 0a 09 09 09 09 75 69 ..............ui 1730: 6e 74 20 6e 65 78 74 70 6f 73 20 3d 20 66 70 2e nt nextpos = fp. 1740: 63 75 72 28 29 20 2b 20 68 64 72 2e 63 6f 6d 70 cur() + hdr.comp 1750: 72 65 73 73 65 64 5f 73 69 7a 65 3b 0a 09 09 09 ressed_size;.... 1760: 09 74 72 79 0a 09 09 09 09 7b 0a 09 09 09 09 09 .try.....{...... 1770: 2f 2f 20 63 61 6c 6c 62 61 63 6b 0a 09 09 09 09 // callback..... 1780: 09 42 67 61 41 6e 73 77 65 72 20 61 20 3d 20 66 .BgaAnswer a = f 1790: 68 28 68 64 72 29 3b 0a 09 09 09 09 09 69 66 28 h(hdr);......if( 17a0: 20 61 20 3d 3d 20 42 67 61 41 6e 73 77 65 72 2e a == BgaAnswer. 17b0: 41 62 6f 72 74 20 29 20 20 72 65 74 75 72 6e 3b Abort ) return; 17c0: 0a 09 09 09 09 09 69 66 28 20 61 20 3d 3d 20 42 ......if( a == B 17d0: 67 61 41 6e 73 77 65 72 2e 53 6b 69 70 49 74 20 gaAnswer.SkipIt 17e0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 09 09 09 ) continue;..... 17f0: 09 09 2f 2f 20 e5 87 ba e5 8a 9b e5 85 88 e3 83 ..// ........... 1800: 95 e3 82 a1 e3 82 a4 e3 83 ab e3 82 92 e9 96 8b ................ 1810: e3 81 8f 0a 09 09 09 09 09 69 66 28 20 6c 61 73 .........if( las 1820: 74 43 68 61 72 28 68 64 72 2e 66 6e 61 6d 65 29 tChar(hdr.fname) 1830: 3d 3d 27 5c 5c 27 20 29 0a 09 09 09 09 09 20 20 =='\\' )...... 1840: 7b 20 70 61 74 68 4d 61 6b 65 28 68 64 72 2e 66 { pathMake(hdr.f 1850: 6e 61 6d 65 29 3b 20 63 6f 6e 74 69 6e 75 65 3b name); continue; 1860: 20 7d 0a 0a 09 09 09 09 09 46 69 6c 65 70 20 6f }.......Filep o 1870: 75 74 66 20 3d 20 46 69 6c 65 70 2e 6f 70 65 6e utf = Filep.open 1880: 28 20 70 61 74 68 4d 61 6b 65 28 68 64 72 2e 66 ( pathMake(hdr.f 1890: 6e 61 6d 65 29 2c 20 66 61 6c 73 65 20 29 3b 0a name), false );. 18a0: 09 09 09 09 09 69 66 28 20 6f 75 74 66 20 69 73 .....if( outf is 18b0: 20 6e 75 6c 6c 20 29 0a 09 09 09 09 09 09 74 68 null ).......th 18c0: 72 6f 77 20 6e 65 77 20 42 67 61 4d 65 6c 74 65 row new BgaMelte 18d0: 72 45 72 72 6f 72 28 45 52 52 4f 52 5f 46 49 4c rError(ERROR_FIL 18e0: 45 5f 4f 50 45 4e 29 3b 0a 0a 09 09 09 09 09 2f E_OPEN);......./ 18f0: 2f 20 e8 a7 a3 e5 87 8d e5 87 a6 e7 90 86 0a 09 / .............. 1900: 09 09 09 09 62 6f 6f 6c 20 62 43 6f 6e 74 69 6e ....bool bContin 1910: 75 65 20 3d 20 74 72 75 65 3b 0a 09 09 09 09 09 ue = true;...... 1920: 69 66 28 20 21 69 73 5f 63 6f 6d 70 72 65 73 73 if( !is_compress 1930: 65 64 28 68 64 72 29 20 29 0a 09 09 09 09 09 09 ed(hdr) )....... 1940: 62 43 6f 6e 74 69 6e 75 65 20 3d 20 4e 63 44 65 bContinue = NcDe 1950: 63 28 20 68 64 72 2e 6f 72 69 67 69 6e 61 6c 5f c( hdr.original_ 1960: 73 69 7a 65 2c 20 6f 75 74 66 2c 20 70 68 20 29 size, outf, ph ) 1970: 3b 0a 09 09 09 09 09 65 6c 73 65 20 69 66 28 20 ;......else if( 1980: 68 64 72 2e 6d 65 74 68 6f 64 20 3d 3d 20 22 47 hdr.method == "G 1990: 5a 49 50 22 20 29 0a 09 09 09 09 09 09 62 43 6f ZIP" ).......bCo 19a0: 6e 74 69 6e 75 65 20 3d 20 47 7a 44 65 63 28 20 ntinue = GzDec( 19b0: 68 64 72 2e 63 6f 6d 70 72 65 73 73 65 64 5f 73 hdr.compressed_s 19c0: 69 7a 65 2c 20 68 64 72 2e 6f 72 69 67 69 6e 61 ize, hdr.origina 19d0: 6c 5f 73 69 7a 65 2c 20 6f 75 74 66 2c 20 70 68 l_size, outf, ph 19e0: 20 29 3b 0a 09 09 09 09 09 65 6c 73 65 20 69 66 );......else if 19f0: 28 20 68 64 72 2e 6d 65 74 68 6f 64 20 3d 3d 20 ( hdr.method == 1a00: 22 42 5a 32 5c 30 22 20 29 0a 09 09 09 09 09 09 "BZ2\0" )....... 1a10: 62 43 6f 6e 74 69 6e 75 65 20 3d 20 42 7a 44 65 bContinue = BzDe 1a20: 63 28 20 68 64 72 2e 6f 72 69 67 69 6e 61 6c 5f c( hdr.original_ 1a30: 73 69 7a 65 2c 20 6f 75 74 66 2c 20 70 68 20 29 size, outf, ph ) 1a40: 3b 0a 0a 09 09 09 09 09 2f 2f 20 e9 96 89 e3 81 ;.......// ..... 1a50: 98 e3 81 a6 e5 b1 9e e6 80 a7 e8 a8 ad e5 ae 9a ................ 1a60: 0a 09 09 09 09 09 6f 75 74 66 2e 63 6c 6f 73 65 ......outf.close 1a70: 28 29 3b 0a 09 09 09 09 09 64 6f 73 53 65 74 46 ();......dosSetF 1a80: 54 69 6d 65 28 20 68 64 72 2e 66 6e 61 6d 65 2c Time( hdr.fname, 1a90: 20 68 64 72 2e 64 61 74 65 2c 20 68 64 72 2e 74 hdr.date, hdr.t 1aa0: 69 6d 65 20 29 3b 0a 09 09 09 09 09 53 65 74 46 ime );......SetF 1ab0: 69 6c 65 41 74 74 72 69 62 75 74 65 73 41 28 20 ileAttributesA( 1ac0: 68 64 72 2e 66 6e 61 6d 65 2e 74 6f 53 74 72 69 hdr.fname.toStri 1ad0: 6e 67 7a 28 29 2c 20 68 64 72 2e 61 74 74 72 69 ngz(), hdr.attri 1ae0: 62 20 29 3b 0a 09 09 09 09 09 69 66 28 20 21 62 b );......if( !b 1af0: 43 6f 6e 74 69 6e 75 65 20 29 0a 09 09 09 09 09 Continue )...... 1b00: 09 72 65 74 75 72 6e 3b 0a 09 09 09 09 7d 0a 09 .return;.....}.. 1b10: 09 09 09 66 69 6e 61 6c 6c 79 20 7b 20 66 70 2e ...finally { fp. 1b20: 73 65 65 6b 5f 74 6f 28 6e 65 78 74 70 6f 73 29 seek_to(nextpos) 1b30: 3b 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 66 ; }....}...}...f 1b40: 69 6e 61 6c 6c 79 20 7b 20 63 6c 6f 73 65 28 29 inally { close() 1b50: 3b 20 7d 0a 09 7d 0a 0a 09 73 74 61 74 69 63 20 ; }..}...static 1b60: 69 6e 74 20 73 69 67 6e 65 64 5f 63 68 61 72 28 int signed_char( 1b70: 20 63 68 61 72 20 63 20 29 0a 09 7b 0a 09 09 69 char c )..{...i 1b80: 6e 74 20 63 6e 20 3d 20 63 3b 0a 09 09 72 65 74 nt cn = c;...ret 1b90: 75 72 6e 20 28 63 6e 3e 3d 30 78 38 30 20 3f 20 urn (cn>=0x80 ? 1ba0: 63 6e 7c 30 78 66 66 66 66 66 66 30 30 20 3a 20 cn|0xffffff00 : 1bb0: 63 6e 29 3b 0a 09 7d 0a 0a 09 70 72 69 76 61 74 cn);..}...privat 1bc0: 65 20 69 6e 74 20 66 69 6e 64 5f 68 65 61 64 65 e int find_heade 1bd0: 72 28 29 0a 09 7b 0a 09 09 73 74 72 69 6e 67 20 r()..{...string 1be0: 64 61 74 20 3d 20 63 61 73 74 28 73 74 72 69 6e dat = cast(strin 1bf0: 67 29 20 66 70 2e 72 65 61 64 28 30 78 31 30 30 g) fp.read(0x100 1c00: 30 30 29 3b 0a 0a 09 09 66 6f 72 28 20 69 6e 74 00);....for( int 1c10: 20 69 3d 30 3b 20 69 3c 64 61 74 2e 6c 65 6e 67 i=0; i<dat.leng 1c20: 74 68 2d 32 38 3b 20 2b 2b 69 20 29 0a 09 09 7b th-28; ++i )...{ 1c30: 0a 09 09 09 69 66 28 20 64 61 74 5b 69 2b 34 5d ....if( dat[i+4] 1c40: 21 3d 27 47 27 20 26 26 20 64 61 74 5b 69 2b 34 !='G' && dat[i+4 1c50: 5d 21 3d 27 42 27 20 29 20 63 6f 6e 74 69 6e 75 ]!='B' ) continu 1c60: 65 3b 0a 09 09 09 69 66 28 20 64 61 74 5b 69 2b e;....if( dat[i+ 1c70: 35 5d 21 3d 27 5a 27 20 20 20 20 20 20 20 20 20 5]!='Z' 1c80: 20 20 20 20 20 20 20 20 20 29 20 63 6f 6e 74 69 ) conti 1c90: 6e 75 65 3b 0a 09 09 09 69 66 28 20 64 61 74 5b nue;....if( dat[ 1ca0: 69 2b 36 5d 21 3d 27 49 27 20 26 26 20 64 61 74 i+6]!='I' && dat 1cb0: 5b 69 2b 36 5d 21 3d 27 32 27 20 29 20 63 6f 6e [i+6]!='2' ) con 1cc0: 74 69 6e 75 65 3b 0a 09 09 09 69 66 28 20 64 61 tinue;....if( da 1cd0: 74 5b 69 2b 37 5d 21 3d 27 50 27 20 26 26 20 64 t[i+7]!='P' && d 1ce0: 61 74 5b 69 2b 37 5d 21 3d 27 5c 30 27 29 20 63 at[i+7]!='\0') c 1cf0: 6f 6e 74 69 6e 75 65 3b 0a 0a 09 09 09 20 69 6e ontinue;..... in 1d00: 74 20 63 68 65 63 6b 73 75 6d 20 3d 20 64 61 74 t checksum = dat 1d10: 5b 69 2b 30 5d 2b 28 64 61 74 5b 69 2b 31 5d 3c [i+0]+(dat[i+1]< 1d20: 3c 38 29 2b 28 64 61 74 5b 69 2b 32 5d 3c 3c 31 <8)+(dat[i+2]<<1 1d30: 36 29 2b 28 64 61 74 5b 69 2b 33 5d 3c 3c 32 34 6)+(dat[i+3]<<24 1d40: 29 3b 0a 09 09 09 75 69 6e 74 20 66 6e 6c 65 6e );....uint fnlen 1d50: 20 20 20 20 3d 20 64 61 74 5b 69 2b 32 34 5d 2b = dat[i+24]+ 1d60: 28 64 61 74 5b 69 2b 32 35 5d 3c 3c 38 29 2b 64 (dat[i+25]<<8)+d 1d70: 61 74 5b 69 2b 32 36 5d 2b 28 64 61 74 5b 69 2b at[i+26]+(dat[i+ 1d80: 32 37 5d 3c 3c 38 29 3b 0a 09 09 09 69 66 28 20 27]<<8);....if( 1d90: 69 2b 32 38 2b 66 6e 6c 65 6e 20 3e 20 64 61 74 i+28+fnlen > dat 1da0: 2e 6c 65 6e 67 74 68 20 29 20 20 20 20 20 20 20 .length ) 1db0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 09 09 09 69 continue;.....i 1dc0: 6e 74 20 73 75 6d 20 3d 20 30 3b 0a 09 09 09 66 nt sum = 0;....f 1dd0: 6f 72 28 20 69 6e 74 20 6a 3d 69 2b 34 3b 20 6a or( int j=i+4; j 1de0: 21 3d 69 2b 32 38 2b 66 6e 6c 65 6e 3b 20 2b 2b !=i+28+fnlen; ++ 1df0: 6a 20 29 0a 09 09 09 09 73 75 6d 20 2b 3d 20 73 j ).....sum += s 1e00: 69 67 6e 65 64 5f 63 68 61 72 28 64 61 74 5b 6a igned_char(dat[j 1e10: 5d 29 3b 0a 09 09 09 69 66 28 20 63 68 65 63 6b ]);....if( check 1e20: 73 75 6d 20 3d 3d 20 73 75 6d 20 29 0a 09 09 09 sum == sum ).... 1e30: 09 72 65 74 75 72 6e 20 69 3b 0a 09 09 7d 0a 0a .return i;...}.. 1e40: 09 09 72 65 74 75 72 6e 20 2d 31 3b 0a 09 7d 0a ..return -1;..}. 1e50: 0a 09 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 ..private bool r 1e60: 65 61 64 5f 68 65 61 64 65 72 28 20 6f 75 74 20 ead_header( out 1e70: 42 67 61 48 65 61 64 65 72 20 68 64 72 20 29 0a BgaHeader hdr ). 1e80: 09 7b 0a 09 09 2f 2f 20 e3 83 aa e3 83 88 e3 83 .{...// ........ 1e90: ab e3 82 a8 e3 83 b3 e3 83 87 e3 82 a3 e3 82 a2 ................ 1ea0: e3 83 b3 e3 82 92 e4 bb ae e5 ae 9a e3 80 82 e3 ................ 1eb0: 83 98 e3 83 83 e3 83 80 e8 aa ad e3 81 bf e8 be ................ 1ec0: bc e3 81 bf 0a 09 09 76 6f 69 64 5b 5d 20 62 75 .......void[] bu 1ed0: 66 20 3d 20 66 70 2e 72 65 61 64 28 32 38 29 3b f = fp.read(28); 1ee0: 0a 09 09 69 66 28 20 62 75 66 2e 6c 65 6e 67 74 ...if( buf.lengt 1ef0: 68 20 3c 20 32 38 20 29 20 72 65 74 75 72 6e 20 h < 28 ) return 1f00: 66 61 6c 73 65 3b 0a 09 09 62 75 66 2e 6c 65 6e false;...buf.len 1f10: 67 74 68 20 3d 20 42 67 61 48 65 61 64 65 72 2e gth = BgaHeader. 1f20: 73 69 7a 65 6f 66 3b 0a 09 09 68 64 72 20 3d 20 sizeof;...hdr = 1f30: 28 63 61 73 74 28 42 67 61 48 65 61 64 65 72 5b (cast(BgaHeader[ 1f40: 5d 29 20 62 75 66 29 5b 30 5d 3b 0a 09 09 68 64 ]) buf)[0];...hd 1f50: 72 2e 66 6e 61 6d 65 20 3d 20 22 22 3b 0a 0a 09 r.fname = "";... 1f60: 09 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab .// ............ 1f70: e5 90 8d 0a 09 09 68 64 72 2e 66 6e 61 6d 65 20 ......hdr.fname 1f80: 3d 20 63 61 73 74 28 73 74 72 69 6e 67 29 20 66 = cast(string) f 1f90: 70 2e 72 65 61 64 28 68 64 72 2e 64 69 72 5f 6e p.read(hdr.dir_n 1fa0: 61 6d 65 5f 6c 65 6e 20 2b 20 68 64 72 2e 66 69 ame_len + hdr.fi 1fb0: 6c 65 5f 6e 61 6d 65 5f 6c 65 6e 29 3b 0a 09 09 le_name_len);... 1fc0: 69 66 28 20 68 64 72 2e 66 6e 61 6d 65 2e 6c 65 if( hdr.fname.le 1fd0: 6e 67 74 68 20 3c 20 68 64 72 2e 64 69 72 5f 6e ngth < hdr.dir_n 1fe0: 61 6d 65 5f 6c 65 6e 20 2b 20 68 64 72 2e 66 69 ame_len + hdr.fi 1ff0: 6c 65 5f 6e 61 6d 65 5f 6c 65 6e 20 29 20 72 65 le_name_len ) re 2000: 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 09 09 2f turn false;..../ 2010: 2f 20 e3 83 81 e3 82 a7 e3 83 83 e3 82 af e3 82 / .............. 2020: b5 e3 83 a0 0a 09 09 69 6e 74 20 73 75 6d 20 3d .......int sum = 2030: 20 30 3b 0a 09 09 66 6f 72 28 20 69 6e 74 20 69 0;...for( int i 2040: 3d 34 3b 20 69 21 3d 32 38 3b 20 2b 2b 69 20 29 =4; i!=28; ++i ) 2050: 20 20 20 20 73 75 6d 20 2b 3d 20 73 69 67 6e 65 sum += signe 2060: 64 5f 63 68 61 72 28 28 63 61 73 74 28 63 68 61 d_char((cast(cha 2070: 72 5b 5d 29 62 75 66 29 5b 69 5d 29 3b 0a 09 09 r[])buf)[i]);... 2080: 66 6f 72 65 61 63 68 28 20 63 68 61 72 20 63 20 foreach( char c 2090: 3b 20 68 64 72 2e 66 6e 61 6d 65 20 29 20 73 75 ; hdr.fname ) su 20a0: 6d 20 2b 3d 20 73 69 67 6e 65 64 5f 63 68 61 72 m += signed_char 20b0: 28 63 29 3b 0a 09 09 72 65 74 75 72 6e 20 28 73 (c);...return (s 20c0: 75 6d 20 3d 3d 20 68 64 72 2e 63 68 65 63 6b 73 um == hdr.checks 20d0: 75 6d 29 3b 0a 09 7d 0a 0a 09 70 72 69 76 61 74 um);..}...privat 20e0: 65 20 62 6f 6f 6c 20 69 73 5f 63 6f 6d 70 72 65 e bool is_compre 20f0: 73 73 65 64 28 20 72 65 66 20 42 67 61 48 65 61 ssed( ref BgaHea 2100: 64 65 72 20 68 64 72 20 29 20 2f 2f 20 72 65 66 der hdr ) // ref 2110: 3d 6a 75 73 74 20 66 6f 72 20 6f 70 74 69 6d 69 =just for optimi 2120: 7a 61 74 69 6f 6e 0a 09 7b 0a 09 09 2f 2f 20 e3 zation..{...// . 2130: 83 98 e3 83 83 e3 83 80 e3 81 8b e3 82 89 e3 80 ................ 2140: 81 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 8c ................ 2150: e5 9c a7 e7 b8 ae e6 a0 bc e7 b4 8d e3 81 95 e3 ................ 2160: 82 8c e3 81 a6 e3 81 84 e3 82 8b e3 81 8b e3 81 ................ 2170: a9 e3 81 86 e3 81 8b e3 82 92 e5 88 a4 e5 ae 9a ................ 2180: 0a 09 09 69 66 28 20 68 64 72 2e 61 72 63 5f 74 ...if( hdr.arc_t 2190: 79 70 65 3d 3d 32 20 29 0a 09 09 09 72 65 74 75 ype==2 )....retu 21a0: 72 6e 20 66 61 6c 73 65 3b 0a 09 09 69 66 28 20 rn false;...if( 21b0: 68 64 72 2e 61 72 63 5f 74 79 70 65 3d 3d 30 20 hdr.arc_type==0 21c0: 26 26 20 68 64 72 2e 63 6f 6d 70 72 65 73 73 65 && hdr.compresse 21d0: 64 5f 73 69 7a 65 3d 3d 68 64 72 2e 6f 72 69 67 d_size==hdr.orig 21e0: 69 6e 61 6c 5f 73 69 7a 65 20 29 0a 09 09 7b 0a inal_size )...{. 21f0: 09 09 09 69 6e 74 20 78 20 3d 20 68 64 72 2e 66 ...int x = hdr.f 2200: 6e 61 6d 65 2e 6c 61 73 74 49 6e 64 65 78 4f 66 name.lastIndexOf 2210: 28 27 2e 27 29 3b 0a 09 09 09 69 66 28 20 78 20 ('.');....if( x 2220: 3d 3d 20 2d 31 20 29 0a 09 09 09 09 72 65 74 75 == -1 ).....retu 2230: 72 6e 20 74 72 75 65 3b 0a 09 09 09 73 74 72 69 rn true;....stri 2240: 6e 67 20 65 78 74 20 3d 20 68 64 72 2e 66 6e 61 ng ext = hdr.fna 2250: 6d 65 5b 78 2b 31 20 2e 2e 20 24 5d 2e 74 6f 4c me[x+1 .. $].toL 2260: 6f 77 65 72 28 29 3b 0a 09 09 09 69 66 28 20 65 ower();....if( e 2270: 78 74 3d 3d 22 61 72 63 22 20 7c 7c 20 65 78 74 xt=="arc" || ext 2280: 3d 3d 22 61 72 6a 22 20 7c 7c 20 65 78 74 3d 3d =="arj" || ext== 2290: 22 62 7a 32 22 20 7c 7c 20 65 78 74 3d 3d 22 62 "bz2" || ext=="b 22a0: 7a 61 22 0a 09 09 09 20 7c 7c 20 65 78 74 3d 3d za".... || ext== 22b0: 22 63 61 62 22 20 7c 7c 20 65 78 74 3d 3d 22 67 "cab" || ext=="g 22c0: 7a 22 20 20 7c 7c 20 65 78 74 3d 3d 22 67 7a 61 z" || ext=="gza 22d0: 22 20 7c 7c 20 65 78 74 3d 3d 22 6c 7a 68 22 0a " || ext=="lzh". 22e0: 09 09 09 20 7c 7c 20 65 78 74 3d 3d 22 6c 7a 73 ... || ext=="lzs 22f0: 22 20 7c 7c 20 65 78 74 3d 3d 22 70 61 6b 22 20 " || ext=="pak" 2300: 7c 7c 20 65 78 74 3d 3d 22 72 61 72 22 20 7c 7c || ext=="rar" || 2310: 20 65 78 74 3d 3d 22 74 61 7a 22 0a 09 09 09 20 ext=="taz".... 2320: 7c 7c 20 65 78 74 3d 3d 22 74 62 7a 22 20 7c 7c || ext=="tbz" || 2330: 20 65 78 74 3d 3d 22 74 67 7a 22 20 7c 7c 20 65 ext=="tgz" || e 2340: 78 74 3d 3d 22 7a 22 20 20 20 7c 7c 20 65 78 74 xt=="z" || ext 2350: 3d 3d 22 7a 69 70 22 0a 09 09 09 20 7c 7c 20 65 =="zip".... || e 2360: 78 74 3d 3d 22 7a 6f 6f 22 20 29 0a 09 09 09 09 xt=="zoo" )..... 2370: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 09 09 return false;... 2380: 7d 0a 09 09 72 65 74 75 72 6e 20 74 72 75 65 3b }...return true; 2390: 0a 09 7d 0a 0a 09 73 74 61 74 69 63 20 73 74 72 ..}...static str 23a0: 69 6e 67 20 70 61 74 68 4d 61 6b 65 28 20 73 74 ing pathMake( st 23b0: 72 69 6e 67 20 70 61 74 68 20 29 0a 09 7b 0a 09 ring path )..{.. 23c0: 09 63 68 61 72 2a 20 70 73 20 3d 20 63 61 73 74 .char* ps = cast 23d0: 28 63 68 61 72 2a 29 70 61 74 68 2e 74 6f 53 74 (char*)path.toSt 23e0: 72 69 6e 67 7a 28 29 3b 0a 09 09 66 6f 72 28 63 ringz();...for(c 23f0: 68 61 72 2a 20 70 3d 70 73 3b 3b 20 2b 2b 70 29 har* p=ps;; ++p) 2400: 0a 09 09 7b 0a 09 09 09 66 6f 72 28 3b 20 2a 70 ...{....for(; *p 2410: 21 3d 30 26 26 2a 70 21 3d 27 5c 5c 27 26 26 2a !=0&&*p!='\\'&&* 2420: 70 21 3d 27 2f 27 3b 20 70 3d 43 68 61 72 4e 65 p!='/'; p=CharNe 2430: 78 74 41 28 70 29 29 20 7b 7d 0a 09 09 09 69 66 xtA(p)) {}....if 2440: 28 20 2a 70 3d 3d 30 20 29 0a 09 09 09 09 62 72 ( *p==0 ).....br 2450: 65 61 6b 3b 0a 09 09 09 43 72 65 61 74 65 44 69 eak;....CreateDi 2460: 72 65 63 74 6f 72 79 41 28 20 70 73 5b 30 2e 2e rectoryA( ps[0.. 2470: 28 70 2d 70 73 29 5d 2e 74 6f 53 74 72 69 6e 67 (p-ps)].toString 2480: 7a 28 29 2c 20 6e 75 6c 6c 20 29 3b 0a 09 09 7d z(), null );...} 2490: 0a 09 09 72 65 74 75 72 6e 20 70 61 74 68 3b 0a ...return path;. 24a0: 09 7d 0a 0a 09 65 6e 75 6d 20 42 55 46 53 49 5a .}...enum BUFSIZ 24b0: 20 3d 20 36 35 35 33 36 3b 0a 0a 09 70 72 69 76 = 65536;...priv 24c0: 61 74 65 20 62 6f 6f 6c 20 4e 63 44 65 63 28 20 ate bool NcDec( 24d0: 75 69 6e 74 20 75 73 69 7a 2c 20 46 69 6c 65 70 uint usiz, Filep 24e0: 20 6f 75 74 66 2c 20 50 72 6f 67 72 65 73 73 48 outf, ProgressH 24f0: 61 6e 64 6c 65 72 20 70 68 20 29 0a 09 7b 0a 09 andler ph )..{.. 2500: 09 75 69 6e 74 20 69 6e 69 74 5f 75 73 69 7a 20 .uint init_usiz 2510: 3d 20 75 73 69 7a 3b 0a 0a 09 09 2f 2f 20 e9 9d = usiz;....// .. 2520: 9e e5 9c a7 e7 b8 ae e3 80 82 e3 82 b3 e3 83 94 ................ 2530: e3 83 bc e3 81 99 e3 82 8b e3 81 a0 e3 81 91 0a ................ 2540: 09 09 77 68 69 6c 65 28 20 75 73 69 7a 20 29 0a ..while( usiz ). 2550: 09 09 7b 0a 09 09 09 73 74 72 69 6e 67 20 72 20 ..{....string r 2560: 3d 20 63 61 73 74 28 73 74 72 69 6e 67 29 20 66 = cast(string) f 2570: 70 2e 72 65 61 64 28 20 42 55 46 53 49 5a 3c 75 p.read( BUFSIZ<u 2580: 73 69 7a 3f 42 55 46 53 49 5a 3a 75 73 69 7a 20 siz?BUFSIZ:usiz 2590: 29 3b 0a 09 09 09 75 73 69 7a 20 2d 3d 20 72 2e );....usiz -= r. 25a0: 6c 65 6e 67 74 68 3b 0a 09 09 09 6f 75 74 66 2e length;....outf. 25b0: 77 72 69 74 65 28 63 61 73 74 28 63 68 61 72 5b write(cast(char[ 25c0: 5d 29 72 29 3b 0a 0a 09 09 09 2f 2f 20 64 6c 67 ])r);.....// dlg 25d0: 0a 09 09 09 69 66 28 20 42 67 61 41 6e 73 77 65 ....if( BgaAnswe 25e0: 72 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 r.Abort==ph(init 25f0: 5f 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 _usiz-usiz,usiz) 2600: 20 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ) return false; 2610: 0a 09 09 7d 0a 0a 09 09 2f 2f 20 64 6c 67 0a 09 ...}....// dlg.. 2620: 09 69 66 28 20 42 67 61 41 6e 73 77 65 72 2e 41 .if( BgaAnswer.A 2630: 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 5f 75 73 bort==ph(init_us 2640: 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 20 29 20 iz-usiz,usiz) ) 2650: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 09 09 return false;... 2660: 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 09 7d 0a return true;..}. 2670: 0a 09 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 47 ..private bool G 2680: 7a 44 65 63 28 20 75 69 6e 74 20 63 73 69 7a 2c zDec( uint csiz, 2690: 20 75 69 6e 74 20 75 73 69 7a 2c 20 46 69 6c 65 uint usiz, File 26a0: 70 20 6f 75 74 66 2c 20 50 72 6f 67 72 65 73 73 p outf, Progress 26b0: 48 61 6e 64 6c 65 72 20 70 68 20 29 0a 09 7b 0a Handler ph )..{. 26c0: 09 09 75 69 6e 74 20 69 6e 69 74 5f 75 73 69 7a ..uint init_usiz 26d0: 20 3d 20 75 73 69 7a 3b 0a 0a 09 09 2f 2f 20 7a = usiz;....// z 26e0: 6c 69 62 e3 81 a7 e5 b1 95 e9 96 8b 0a 09 09 66 lib............f 26f0: 70 2e 72 65 61 64 28 31 30 29 3b 20 63 73 69 7a p.read(10); csiz 2700: 20 2d 3d 20 31 30 3b 20 2f 2f 20 e3 83 98 e3 83 -= 10; // ..... 2710: 83 e3 83 80 2c e3 83 95 e3 83 83 e3 82 bf e3 82 ....,........... 2720: b9 e3 82 ad e3 83 83 e3 83 97 0a 0a 09 09 75 62 ..............ub 2730: 79 74 65 5b 5d 20 20 69 6e 62 75 66 3b 20 20 69 yte[] inbuf; i 2740: 6e 62 75 66 2e 6c 65 6e 67 74 68 20 3d 20 36 35 nbuf.length = 65 2750: 35 33 36 3b 0a 09 09 75 62 79 74 65 5b 5d 20 6f 536;...ubyte[] o 2760: 75 74 62 75 66 3b 20 6f 75 74 62 75 66 2e 6c 65 utbuf; outbuf.le 2770: 6e 67 74 68 20 3d 20 36 35 35 33 36 3b 0a 0a 09 ngth = 65536;... 2780: 09 2f 2f 20 7a 6c 69 62 e6 ba 96 e5 82 99 0a 09 .// zlib........ 2790: 09 7a 5f 73 74 72 65 61 6d 20 7a 73 3b 0a 09 09 .z_stream zs;... 27a0: 7a 73 2e 7a 61 6c 6c 6f 63 20 20 20 3d 20 6e 75 zs.zalloc = nu 27b0: 6c 6c 3b 0a 09 09 7a 73 2e 7a 66 72 65 65 20 20 ll;...zs.zfree 27c0: 20 20 3d 20 6e 75 6c 6c 3b 0a 0a 09 09 2f 2f 20 = null;....// 27d0: e5 87 ba e5 8a 9b e3 83 90 e3 83 83 e3 83 95 e3 ................ 27e0: 82 a1 0a 09 09 7a 73 2e 6e 65 78 74 5f 6f 75 74 .....zs.next_out 27f0: 20 20 3d 20 6f 75 74 62 75 66 2e 70 74 72 3b 0a = outbuf.ptr;. 2800: 09 09 7a 73 2e 61 76 61 69 6c 5f 6f 75 74 20 3d ..zs.avail_out = 2810: 20 6f 75 74 62 75 66 2e 6c 65 6e 67 74 68 3b 0a outbuf.length;. 2820: 0a 09 09 2f 2f 20 e5 85 a5 e5 8a 9b e3 83 90 e3 ...// .......... 2830: 83 83 e3 83 95 e3 82 a1 0a 09 09 69 6e 62 75 66 ...........inbuf 2840: 20 3d 20 63 61 73 74 28 75 62 79 74 65 5b 5d 29 = cast(ubyte[]) 2850: 20 66 70 2e 72 65 61 64 28 20 63 73 69 7a 3c 36 fp.read( csiz<6 2860: 35 35 33 36 20 3f 20 63 73 69 7a 20 3a 20 36 35 5536 ? csiz : 65 2870: 35 33 36 20 29 3b 0a 09 09 63 73 69 7a 20 20 20 536 );...csiz 2880: 20 20 20 20 2d 3d 20 69 6e 62 75 66 2e 6c 65 6e -= inbuf.len 2890: 67 74 68 3b 0a 09 09 7a 73 2e 6e 65 78 74 5f 69 gth;...zs.next_i 28a0: 6e 20 20 3d 20 69 6e 62 75 66 2e 70 74 72 3b 0a n = inbuf.ptr;. 28b0: 09 09 7a 73 2e 61 76 61 69 6c 5f 69 6e 20 3d 20 ..zs.avail_in = 28c0: 69 6e 62 75 66 2e 6c 65 6e 67 74 68 3b 0a 0a 09 inbuf.length;... 28d0: 09 2f 2f 20 e3 82 b9 e3 82 bf e3 83 bc e3 83 88 .// ............ 28e0: 0a 09 09 69 6e 66 6c 61 74 65 49 6e 69 74 32 28 ...inflateInit2( 28f0: 20 26 7a 73 2c 20 2d 31 35 20 29 3b 0a 09 09 74 &zs, -15 );...t 2900: 72 79 20 7b 0a 0a 09 09 2f 2f 20 e6 9b b8 e5 ba ry {....// ..... 2910: ab e3 81 8b e3 82 89 e5 85 a5 e5 8a 9b e3 81 97 ................ 2920: e7 b5 82 e3 82 8f e3 82 8b e3 81 be e3 81 a7 e3 ................ 2930: 83 ab e3 83 bc e3 83 97 0a 09 09 69 6e 74 20 65 ...........int e 2940: 72 72 20 3d 20 5a 5f 4f 4b 3b 0a 09 09 77 68 69 rr = Z_OK;...whi 2950: 6c 65 28 20 63 73 69 7a 26 26 75 73 69 7a 20 29 le( csiz&&usiz ) 2960: 0a 09 09 7b 0a 09 09 09 77 68 69 6c 65 28 20 7a ...{....while( z 2970: 73 2e 61 76 61 69 6c 5f 6f 75 74 20 3e 20 30 20 s.avail_out > 0 2980: 29 0a 09 09 09 7b 0a 09 09 09 09 65 72 72 20 3d )....{.....err = 2990: 20 65 74 63 2e 63 2e 7a 6c 69 62 2e 69 6e 66 6c etc.c.zlib.infl 29a0: 61 74 65 28 20 26 7a 73 2c 20 5a 5f 50 41 52 54 ate( &zs, Z_PART 29b0: 49 41 4c 5f 46 4c 55 53 48 20 29 3b 0a 09 09 09 IAL_FLUSH );.... 29c0: 09 69 66 28 20 65 72 72 21 3d 5a 5f 53 54 52 45 .if( err!=Z_STRE 29d0: 41 4d 5f 45 4e 44 20 26 26 20 65 72 72 21 3d 5a AM_END && err!=Z 29e0: 5f 4f 4b 20 29 0a 09 09 09 09 09 63 73 69 7a 3d _OK )......csiz= 29f0: 30 3b 0a 09 09 09 09 69 66 28 20 21 63 73 69 7a 0;.....if( !csiz 2a00: 20 29 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 0a )......break;.. 2a10: 09 09 09 09 69 66 28 20 7a 73 2e 61 76 61 69 6c ....if( zs.avail 2a20: 5f 69 6e 3c 3d 30 20 29 0a 09 09 09 09 7b 0a 09 _in<=0 ).....{.. 2a30: 09 09 09 09 69 6e 62 75 66 20 3d 20 63 61 73 74 ....inbuf = cast 2a40: 28 75 62 79 74 65 5b 5d 29 20 66 70 2e 72 65 61 (ubyte[]) fp.rea 2a50: 64 28 20 63 73 69 7a 3c 36 35 35 33 36 20 3f 20 d( csiz<65536 ? 2a60: 63 73 69 7a 20 3a 20 36 35 35 33 36 20 29 3b 0a csiz : 65536 );. 2a70: 09 09 09 09 09 63 73 69 7a 20 20 20 20 20 20 20 .....csiz 2a80: 2d 3d 20 69 6e 62 75 66 2e 6c 65 6e 67 74 68 3b -= inbuf.length; 2a90: 0a 09 09 09 09 09 7a 73 2e 6e 65 78 74 5f 69 6e ......zs.next_in 2aa0: 20 20 3d 20 69 6e 62 75 66 2e 70 74 72 3b 0a 09 = inbuf.ptr;.. 2ab0: 09 09 09 09 7a 73 2e 61 76 61 69 6c 5f 69 6e 20 ....zs.avail_in 2ac0: 3d 20 69 6e 62 75 66 2e 6c 65 6e 67 74 68 3b 0a = inbuf.length;. 2ad0: 0a 09 09 09 09 09 69 66 28 20 69 6e 62 75 66 2e ......if( inbuf. 2ae0: 6c 65 6e 67 74 68 3d 3d 30 20 29 0a 09 09 09 09 length==0 )..... 2af0: 09 7b 0a 09 09 09 09 09 09 65 72 72 20 20 3d 20 .{.......err = 2b00: 5a 5f 53 54 52 45 41 4d 5f 45 4e 44 3b 0a 09 09 Z_STREAM_END;... 2b10: 09 09 09 09 63 73 69 7a 20 3d 20 30 3b 0a 09 09 ....csiz = 0;... 2b20: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 ....break;...... 2b30: 7d 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 }.....}....}.... 2b40: 09 69 6e 74 20 77 72 69 74 74 65 6e 20 3d 20 6f .int written = o 2b50: 75 74 62 75 66 2e 6c 65 6e 67 74 68 20 2d 20 7a utbuf.length - z 2b60: 73 2e 61 76 61 69 6c 5f 6f 75 74 3b 0a 09 09 09 s.avail_out;.... 2b70: 69 66 28 20 75 73 69 7a 20 3c 20 77 72 69 74 74 if( usiz < writt 2b80: 65 6e 20 29 20 77 72 69 74 74 65 6e 20 3d 20 75 en ) written = u 2b90: 73 69 7a 3b 0a 09 09 09 75 73 69 7a 20 2d 3d 20 siz;....usiz -= 2ba0: 77 72 69 74 74 65 6e 3b 0a 09 09 09 6f 75 74 66 written;....outf 2bb0: 2e 77 72 69 74 65 28 20 6f 75 74 62 75 66 5b 30 .write( outbuf[0 2bc0: 2e 2e 77 72 69 74 74 65 6e 5d 20 29 3b 0a 09 09 ..written] );... 2bd0: 09 7a 73 2e 6e 65 78 74 5f 6f 75 74 20 20 3d 20 .zs.next_out = 2be0: 6f 75 74 62 75 66 2e 70 74 72 3b 0a 09 09 09 7a outbuf.ptr;....z 2bf0: 73 2e 61 76 61 69 6c 5f 6f 75 74 20 3d 20 6f 75 s.avail_out = ou 2c00: 74 62 75 66 2e 6c 65 6e 67 74 68 3b 0a 0a 09 09 tbuf.length;.... 2c10: 09 2f 2f 20 64 6c 67 0a 09 09 09 69 66 28 20 42 .// dlg....if( B 2c20: 67 61 41 6e 73 77 65 72 2e 41 62 6f 72 74 3d 3d gaAnswer.Abort== 2c30: 70 68 28 69 6e 69 74 5f 75 73 69 7a 2d 75 73 69 ph(init_usiz-usi 2c40: 7a 2c 75 73 69 7a 29 20 29 20 72 65 74 75 72 6e z,usiz) ) return 2c50: 20 66 61 6c 73 65 3b 0a 09 09 7d 0a 0a 09 09 2f false;...}..../ 2c60: 2f 20 e5 87 ba e5 8a 9b e6 ae 8b e3 81 97 e3 82 / .............. 2c70: 92 e7 84 a1 e3 81 8f e3 81 99 e3 80 82 0a 09 09 ................ 2c80: 77 68 69 6c 65 28 20 65 72 72 21 3d 5a 5f 53 54 while( err!=Z_ST 2c90: 52 45 41 4d 5f 45 4e 44 26 26 75 73 69 7a 20 29 REAM_END&&usiz ) 2ca0: 0a 09 09 7b 0a 09 09 09 65 72 72 20 3d 20 65 74 ...{....err = et 2cb0: 63 2e 63 2e 7a 6c 69 62 2e 69 6e 66 6c 61 74 65 c.c.zlib.inflate 2cc0: 28 26 7a 73 2c 5a 5f 50 41 52 54 49 41 4c 5f 46 (&zs,Z_PARTIAL_F 2cd0: 4c 55 53 48 29 3b 0a 09 09 09 69 66 28 20 65 72 LUSH);....if( er 2ce0: 72 21 3d 5a 5f 53 54 52 45 41 4d 5f 45 4e 44 20 r!=Z_STREAM_END 2cf0: 26 26 20 65 72 72 21 3d 5a 5f 4f 4b 20 29 0a 09 && err!=Z_OK ).. 2d00: 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 69 6e ...break;.....in 2d10: 74 20 77 72 69 74 74 65 6e 20 3d 20 6f 75 74 62 t written = outb 2d20: 75 66 2e 6c 65 6e 67 74 68 20 2d 20 7a 73 2e 61 uf.length - zs.a 2d30: 76 61 69 6c 5f 6f 75 74 3b 0a 09 09 09 69 66 28 vail_out;....if( 2d40: 20 75 73 69 7a 20 3c 20 77 72 69 74 74 65 6e 20 usiz < written 2d50: 29 20 77 72 69 74 74 65 6e 20 3d 20 75 73 69 7a ) written = usiz 2d60: 3b 0a 09 09 09 75 73 69 7a 20 2d 3d 20 77 72 69 ;....usiz -= wri 2d70: 74 74 65 6e 3b 0a 09 09 09 6f 75 74 66 2e 77 72 tten;....outf.wr 2d80: 69 74 65 28 20 6f 75 74 62 75 66 5b 30 2e 2e 77 ite( outbuf[0..w 2d90: 72 69 74 74 65 6e 5d 20 29 3b 0a 09 09 09 7a 73 ritten] );....zs 2da0: 2e 6e 65 78 74 5f 6f 75 74 20 20 3d 20 6f 75 74 .next_out = out 2db0: 62 75 66 2e 70 74 72 3b 0a 09 09 09 7a 73 2e 61 buf.ptr;....zs.a 2dc0: 76 61 69 6c 5f 6f 75 74 20 3d 20 6f 75 74 62 75 vail_out = outbu 2dd0: 66 2e 6c 65 6e 67 74 68 3b 0a 0a 09 09 09 2f 2f f.length;.....// 2de0: 20 64 6c 67 0a 09 09 09 69 66 28 20 42 67 61 41 dlg....if( BgaA 2df0: 6e 73 77 65 72 2e 41 62 6f 72 74 3d 3d 70 68 28 nswer.Abort==ph( 2e00: 69 6e 69 74 5f 75 73 69 7a 2d 75 73 69 7a 2c 75 init_usiz-usiz,u 2e10: 73 69 7a 29 20 29 20 72 65 74 75 72 6e 20 66 61 siz) ) return fa 2e20: 6c 73 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2f 20 e7 lse;...}....// . 2e30: b5 82 e4 ba 86 0a 09 09 7d 20 66 69 6e 61 6c 6c ........} finall 2e40: 79 20 7b 20 69 6e 66 6c 61 74 65 45 6e 64 28 26 y { inflateEnd(& 2e50: 7a 73 29 3b 20 7d 0a 0a 09 09 2f 2f 20 64 6c 67 zs); }....// dlg 2e60: 0a 09 09 69 66 28 20 42 67 61 41 6e 73 77 65 72 ...if( BgaAnswer 2e70: 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 5f .Abort==ph(init_ 2e80: 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 20 usiz-usiz,usiz) 2e90: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a ) return false;. 2ea0: 09 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 09 ..return true;.. 2eb0: 7d 0a 0a 09 70 72 69 76 61 74 65 20 62 6f 6f 6c }...private bool 2ec0: 20 42 7a 44 65 63 28 20 75 69 6e 74 20 75 73 69 BzDec( uint usi 2ed0: 7a 2c 20 46 69 6c 65 70 20 6f 75 74 66 2c 20 50 z, Filep outf, P 2ee0: 72 6f 67 72 65 73 73 48 61 6e 64 6c 65 72 20 70 rogressHandler p 2ef0: 68 20 29 0a 09 7b 0a 09 09 75 69 6e 74 20 69 6e h )..{...uint in 2f00: 69 74 5f 75 73 69 7a 20 3d 20 75 73 69 7a 3b 0a it_usiz = usiz;. 2f10: 0a 09 09 2f 2f 20 6c 69 62 62 7a 32 e3 81 a7 e5 ...// libbz2.... 2f20: b1 95 e9 96 8b 0a 09 09 69 6e 74 20 65 72 72 3b ........int err; 2f30: 0a 09 09 42 5a 46 49 4c 45 2a 20 62 20 3d 20 42 ...BZFILE* b = B 2f40: 5a 32 5f 62 7a 52 65 61 64 4f 70 65 6e 28 20 26 Z2_bzReadOpen( & 2f50: 65 72 72 2c 20 66 70 2e 67 65 74 5f 66 70 28 29 err, fp.get_fp() 2f60: 2c 20 30 2c 20 30 2c 20 6e 75 6c 6c 2c 20 30 20 , 0, 0, null, 0 2f70: 29 3b 0a 09 09 69 66 28 20 65 72 72 21 3d 42 5a );...if( err!=BZ 2f80: 5f 4f 4b 20 7c 7c 20 62 20 69 73 20 6e 75 6c 6c _OK || b is null 2f90: 20 29 0a 09 09 09 72 65 74 75 72 6e 20 74 72 75 )....return tru 2fa0: 65 3b 0a 0a 09 09 74 72 79 0a 09 09 7b 0a 09 09 e;....try...{... 2fb0: 09 63 68 61 72 5b 5d 20 62 75 66 3b 20 62 75 66 .char[] buf; buf 2fc0: 2e 6c 65 6e 67 74 68 20 3d 20 42 55 46 53 49 5a .length = BUFSIZ 2fd0: 3b 0a 09 09 09 69 6e 74 20 6c 65 6e 3b 0a 09 09 ;....int len;... 2fe0: 09 77 68 69 6c 65 28 20 30 3c 28 6c 65 6e 3d 42 .while( 0<(len=B 2ff0: 5a 32 5f 62 7a 52 65 61 64 28 20 26 65 72 72 2c Z2_bzRead( &err, 3000: 20 62 2c 20 62 75 66 2e 70 74 72 2c 20 42 55 46 b, buf.ptr, BUF 3010: 53 49 5a 3c 75 73 69 7a 3f 42 55 46 53 49 5a 3a SIZ<usiz?BUFSIZ: 3020: 75 73 69 7a 20 29 29 20 29 0a 09 09 09 7b 0a 09 usiz )) )....{.. 3030: 09 09 09 6f 75 74 66 2e 77 72 69 74 65 28 20 62 ...outf.write( b 3040: 75 66 5b 30 2e 2e 6c 65 6e 5d 20 29 3b 0a 09 09 uf[0..len] );... 3050: 09 09 75 73 69 7a 20 2d 3d 20 6c 65 6e 3b 0a 09 ..usiz -= len;.. 3060: 09 09 09 69 66 28 20 65 72 72 20 21 3d 20 42 5a ...if( err != BZ 3070: 5f 4f 4b 20 29 0a 09 09 09 09 09 62 72 65 61 6b _OK )......break 3080: 3b 0a 0a 09 09 09 09 2f 2f 20 64 6c 67 0a 09 09 ;......// dlg... 3090: 09 09 69 66 28 20 42 67 61 41 6e 73 77 65 72 2e ..if( BgaAnswer. 30a0: 41 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 5f 75 Abort==ph(init_u 30b0: 73 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 20 29 siz-usiz,usiz) ) 30c0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 09 return false;.. 30d0: 09 09 7d 0a 09 09 7d 20 66 69 6e 61 6c 6c 79 20 ..}...} finally 30e0: 7b 20 42 5a 32 5f 62 7a 52 65 61 64 43 6c 6f 73 { BZ2_bzReadClos 30f0: 65 28 20 26 65 72 72 2c 20 62 20 29 3b 20 7d 0a e( &err, b ); }. 3100: 0a 09 09 2f 2f 20 64 6c 67 0a 09 09 69 66 28 20 ...// dlg...if( 3110: 42 67 61 41 6e 73 77 65 72 2e 41 62 6f 72 74 3d BgaAnswer.Abort= 3120: 3d 70 68 28 69 6e 69 74 5f 75 73 69 7a 2d 75 73 =ph(init_usiz-us 3130: 69 7a 2c 75 73 69 7a 29 20 29 20 72 65 74 75 72 iz,usiz) ) retur 3140: 6e 20 66 61 6c 73 65 3b 0a 09 09 72 65 74 75 72 n false;...retur 3150: 6e 20 74 72 75 65 3b 0a 09 7d 0a 7d 0a n true;..}.}.