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