0000: ef bb bf 70 72 69 76 61 74 65 20 69 6d 70 6f 72 ...private impor
0010: 74 20 73 74 64 2e 73 74 72 69 6e 67 3b 0a 70 72 t std.string;.pr
0020: 69 76 61 74 65 20 69 6d 70 6f 72 74 20 73 74 64 ivate import std
0030: 2e 66 69 6c 65 3b 0a 70 72 69 76 61 74 65 20 69 .file;.private i
0040: 6d 70 6f 72 74 20 73 74 64 2e 63 2e 73 74 64 69 mport std.c.stdi
0050: 6f 3b 0a 70 72 69 76 61 74 65 20 69 6d 70 6f 72 o;.private impor
0060: 74 20 65 74 63 2e 63 2e 7a 6c 69 62 3b 0a 70 72 t etc.c.zlib;.pr
0070: 69 76 61 74 65 20 69 6d 70 6f 72 74 20 77 69 6e ivate import win
0080: 33 32 2e 61 6e 73 69 2e 77 69 6e 64 6f 77 73 3b 32.ansi.windows;
0090: 0a 70 72 69 76 61 74 65 20 69 6d 70 6f 72 74 20 .private import
00a0: 6c 69 62 62 7a 32 2e 62 7a 6c 69 62 3b 0a 70 72 libbz2.bzlib;.pr
00b0: 69 76 61 74 65 20 69 6d 70 6f 72 74 20 75 74 69 ivate import uti
00c0: 6c 3b 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d l;..//----------
00d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0100: 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 42 67 61 e6 9b b8 ------.// Bga...
0110: e5 ba ab e3 81 ae e3 83 95 e3 82 a1 e3 82 a4 e3 ................
0120: 83 ab e3 83 98 e3 83 83 e3 83 80 e5 bd a2 e5 bc ................
0130: 8f 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..//------------
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0170: 2d 2d 2d 2d 0a 0a 61 6c 69 67 6e 28 31 29 20 73 ----..align(1) s
0180: 74 72 75 63 74 20 42 67 61 48 65 61 64 65 72 0a truct BgaHeader.
0190: 7b 0a 09 20 69 6e 74 20 20 20 63 68 65 63 6b 73 {.. int checks
01a0: 75 6d 3b 20 20 20 20 20 20 20 20 2f 2f 20 74 79 um; // ty
01b0: 70 65 ef bd 9e 66 6e 61 6d 65 20 e3 81 ae 73 69 pe...fname ...si
01c0: 67 6e 65 64 20 63 68 61 72 e3 81 a7 e3 81 ae e5 gned char.......
01d0: 92 8c 0a 09 63 68 61 72 20 20 20 6d 65 74 68 6f ....char metho
01e0: 64 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2f 20 22 d[4]; // "
01f0: 47 5a 49 50 22 20 e3 81 be e3 81 9f e3 81 af 20 GZIP" .........
0200: 22 42 5a 32 5c 30 22 0a 09 75 69 6e 74 20 20 20 "BZ2\0"..uint
0210: 63 6f 6d 70 72 65 73 73 65 64 5f 73 69 7a 65 3b compressed_size;
0220: 20 2f 2f 20 e5 9c a7 e7 b8 ae e5 be 8c e3 81 ae // ............
0230: e3 83 87 e3 83 bc e3 82 bf e3 82 b5 e3 82 a4 e3 ................
0240: 82 ba 28 20 e3 83 98 e3 83 83 e3 83 80 e3 81 af ..( ............
0250: e5 90 ab e3 81 be e3 81 aa e3 81 84 20 29 0a 09 ............ )..
0260: 75 69 6e 74 20 20 20 6f 72 69 67 69 6e 61 6c 5f uint original_
0270: 73 69 7a 65 3b 20 20 20 2f 2f 20 e5 85 83 e3 81 size; // .....
0280: ae e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 82 b5 ................
0290: e3 82 a4 e3 82 ba 0a 09 75 73 68 6f 72 74 20 64 ........ushort d
02a0: 61 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 ate;
02b0: 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 // .............
02c0: 81 ae e6 9b b4 e6 96 b0 e6 97 a5 e4 bb 98 28 20 ..............(
02d0: 44 4f 53 e5 bd a2 e5 bc 8f 20 29 0a 09 75 73 68 DOS...... )..ush
02e0: 6f 72 74 20 74 69 6d 65 3b 20 20 20 20 20 20 20 ort time;
02f0: 20 20 20 20 20 2f 2f 20 e3 83 95 e3 82 a1 e3 82 // ........
0300: a4 e3 83 ab e3 81 ae e6 9b b4 e6 96 b0 e6 99 82 ................
0310: e5 88 bb 28 20 44 4f 53 e5 bd a2 e5 bc 8f 20 29 ...( DOS...... )
0320: 0a 09 75 62 79 74 65 20 20 61 74 74 72 69 62 3b ..ubyte attrib;
0330: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 e3 83 95 // ...
0340: e3 82 a1 e3 82 a4 e3 83 ab e3 81 ae e5 b1 9e e6 ................
0350: 80 a7 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 ....
0360: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 28 // (
0370: 20 31 3a 52 4f 20 32 3a 48 69 64 20 34 3a 53 79 1:RO 2:Hid 4:Sy
0380: 73 20 38 3a 56 6f 6c 20 31 36 3a 44 69 72 20 33 s 8:Vol 16:Dir 3
0390: 32 3a 41 72 63 20 29 0a 09 75 62 79 74 65 20 20 2:Arc )..ubyte
03a0: 68 65 61 64 65 72 5f 74 79 70 65 3b 20 20 20 20 header_type;
03b0: 20 2f 2f 20 e3 83 98 e3 83 83 e3 83 80 e3 81 ae // ............
03c0: e7 a8 ae e9 a1 9e 28 20 e7 8f be e5 9c a8 e3 81 ......( ........
03d0: af e5 b8 b8 e3 81 ab 20 30 20 29 0a 09 75 73 68 ....... 0 )..ush
03e0: 6f 72 74 20 61 72 63 5f 74 79 70 65 3b 20 20 20 ort arc_type;
03f0: 20 20 20 20 20 2f 2f 20 e3 82 a2 e3 83 bc e3 82 // ........
0400: ab e3 82 a4 e3 83 96 e3 82 bf e3 82 a4 e3 83 97 ................
0410: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
0420: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 30 3a 28 // 0:(
0430: 65 78 74 3d 3d e2 86 93 3f e9 9d 9e e5 9c a7 e7 ext==...?.......
0440: b8 ae 3a e5 9c a7 e7 b8 ae 29 20 31 3a e5 9c a7 ..:......) 1:...
0450: e7 b8 ae 20 32 3a e9 9d 9e e5 9c a7 e7 b8 ae 0a ... 2:..........
0460: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0470: 20 20 20 20 20 20 20 20 20 2f 2f 09 2e 41 52 43 //..ARC
0480: 2c 20 2e 41 52 4a 2c 20 2e 42 5a 32 2c 20 2e 42 , .ARJ, .BZ2, .B
0490: 5a 41 2c 20 2e 43 41 42 2c 20 2e 47 5a 2c 20 2e ZA, .CAB, .GZ, .
04a0: 47 5a 41 2c 20 2e 4c 5a 48 2c 0a 09 20 20 20 20 GZA, .LZH,..
04b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04c0: 20 20 20 20 2f 2f 09 2e 4c 5a 53 2c 20 2e 50 41 //..LZS, .PA
04d0: 4b 2c 20 2e 52 41 52 2c 20 2e 54 41 5a 2c 20 2e K, .RAR, .TAZ, .
04e0: 54 42 5a 2c 20 2e 54 47 5a 2c 20 2e 5a 2c 20 2e TBZ, .TGZ, .Z, .
04f0: 5a 49 50 2c 20 2e 5a 4f 4f 0a 09 75 73 68 6f 72 ZIP, .ZOO..ushor
0500: 74 20 64 69 72 5f 6e 61 6d 65 5f 6c 65 6e 3b 20 t dir_name_len;
0510: 20 20 20 2f 2f 20 e3 83 87 e3 82 a3 e3 83 ac e3 // ..........
0520: 82 af e3 83 88 e3 83 aa e5 90 8d e3 81 ae e9 95 ................
0530: b7 e3 81 95 0a 09 75 73 68 6f 72 74 20 66 69 6c ......ushort fil
0540: 65 5f 6e 61 6d 65 5f 6c 65 6e 3b 20 20 20 2f 2f e_name_len; //
0550: 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e5 90 8d ...............
0560: e3 81 ae e9 95 b7 e3 81 95 0a 09 63 68 61 72 5b ...........char[
0570: 5d 20 66 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 ] fname;
0580: 20 20 20 2f 2f 20 64 69 72 5f 6e 61 6d 65 5f 6c // dir_name_l
0590: 65 6e 20 2b 20 66 69 6c 65 5f 6e 61 6d 65 5f 6c en + file_name_l
05a0: 65 6e 20 28 20 6e 6f 20 27 5c 30 27 20 29 0a 7d en ( no '\0' ).}
05b0: 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..//------------
05c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05f0: 2d 2d 2d 2d 0a 2f 2f 20 e3 82 a8 e3 83 a9 e3 83 ----.// ........
0600: bc e7 99 ba e7 94 9f e6 99 82 e3 81 ab e6 8a 95 ................
0610: e3 81 92 e3 82 8b e4 be 8b e5 a4 96 0a 2f 2f 2d .............//-
0620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
0660: 0a 63 6c 61 73 73 20 42 67 61 4d 65 6c 74 65 72 .class BgaMelter
0670: 45 72 72 6f 72 20 3a 20 45 72 72 6f 72 0a 7b 0a Error : Error.{.
0680: 09 69 6e 74 20 65 72 72 63 6f 64 65 3b 0a 09 74 .int errcode;..t
0690: 68 69 73 28 20 69 6e 74 20 65 20 29 20 7b 20 73 his( int e ) { s
06a0: 75 70 65 72 28 22 42 67 61 4d 65 6c 74 65 72 45 uper("BgaMelterE
06b0: 72 72 6f 72 22 29 3b 20 65 72 72 63 6f 64 65 3d rror"); errcode=
06c0: 65 3b 20 7d 0a 7d 0a 0a 65 6e 75 6d 0a 7b 0a 09 e; }.}..enum.{..
06d0: 45 52 52 4f 52 5f 46 49 4c 45 5f 4f 50 45 4e 3d ERROR_FILE_OPEN=
06e0: 30 78 38 30 30 44 2c 2f 2f 20 20 20 20 20 20 20 0x800D,//
06f0: 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 82 ..............
0700: 92 e9 96 8b e3 81 91 e3 81 be e3 81 9b e3 82 93 ................
0710: e3 81 a7 e3 81 97 e3 81 9f e3 80 82 0a 09 45 52 ..............ER
0720: 52 4f 52 5f 4d 41 4b 45 44 49 52 45 43 54 4f 52 ROR_MAKEDIRECTOR
0730: 59 3d 30 78 38 30 31 32 2c 2f 2f 20 20 20 20 20 Y=0x8012,//
0740: e3 83 87 e3 82 a3 e3 83 ac e3 82 af e3 83 88 e3 ................
0750: 83 aa e3 81 8c e4 bd 9c e6 88 90 e3 81 a7 e3 81 ................
0760: 8d e3 81 be e3 81 9b e3 82 93 e3 80 82 0a 09 45 ...............E
0770: 52 52 4f 52 5f 43 41 4e 4e 4f 54 5f 57 52 49 54 RROR_CANNOT_WRIT
0780: 45 3d 30 78 38 30 31 33 2c 2f 2f 20 20 20 20 20 E=0x8013,//
0790: 20 e6 9b b8 e3 81 8d e8 be bc e3 81 bf e3 82 a8 ...............
07a0: e3 83 a9 e3 83 bc e3 81 8c e7 94 9f e3 81 98 e3 ................
07b0: 81 be e3 81 97 e3 81 9f e3 80 82 0a 09 45 52 52 .............ERR
07c0: 4f 52 5f 48 45 41 44 45 52 5f 43 52 43 3d 30 78 OR_HEADER_CRC=0x
07d0: 38 30 31 36 2c 2f 2f 20 20 20 20 20 20 20 20 e6 8016,// .
07e0: 9b b8 e5 ba ab e3 81 ae e3 83 98 e3 83 83 e3 83 ................
07f0: 80 e3 81 ae e3 83 81 e3 82 a7 e3 83 83 e3 82 af ................
0800: e3 82 b5 e3 83 a0 e3 81 8c e5 90 88 e3 81 a3 e3 ................
0810: 81 a6 e3 81 84 e3 81 be e3 81 9b e3 82 93 e3 80 ................
0820: 82 0a 09 45 52 52 4f 52 5f 41 52 43 5f 46 49 4c ...ERROR_ARC_FIL
0830: 45 5f 4f 50 45 4e 3d 30 78 38 30 31 38 2c 2f 2f E_OPEN=0x8018,//
0840: 20 20 20 20 20 e6 9b b8 e5 ba ab e3 82 92 e9 96 ...........
0850: 8b e3 81 8f e4 ba 8b e3 81 8c e5 87 ba e6 9d a5 ................
0860: e3 81 be e3 81 9b e3 82 93 e3 80 82 0a 09 45 52 ..............ER
0870: 52 4f 52 5f 4e 4f 54 5f 41 52 43 5f 46 49 4c 45 ROR_NOT_ARC_FILE
0880: 3d 30 78 38 30 31 39 2c 2f 2f 20 20 20 20 20 20 =0x8019,//
0890: e6 9b b8 e5 ba ab e3 81 ae e3 83 95 e3 82 a1 e3 ................
08a0: 82 a4 e3 83 ab e5 90 8d e3 81 8c e6 8c 87 e5 ae ................
08b0: 9a e3 81 95 e3 82 8c e3 81 a6 e3 81 84 e3 81 be ................
08c0: e3 81 9b e3 82 93 e3 80 82 0a 09 45 52 52 4f 52 ...........ERROR
08d0: 5f 43 41 4e 4e 4f 54 5f 52 45 41 44 3d 30 78 38 _CANNOT_READ=0x8
08e0: 30 31 41 2c 2f 2f 20 20 20 20 20 20 20 e3 83 95 01A,// ...
08f0: e3 82 a1 e3 82 a4 e3 83 ab e3 81 ae e8 aa ad e3 ................
0900: 81 bf e8 be bc e3 81 bf e6 99 82 e3 81 ab e3 82 ................
0910: a8 e3 83 a9 e3 83 bc e3 81 8c e7 94 9f e3 81 98 ................
0920: e3 81 be e3 81 97 e3 81 9f e3 80 82 0a 09 45 52 ..............ER
0930: 52 4f 52 5f 46 49 4c 45 5f 53 54 59 4c 45 3d 30 ROR_FILE_STYLE=0
0940: 78 38 30 31 42 2c 2f 2f 20 20 20 20 20 20 20 20 x801B,//
0950: e6 8c 87 e5 ae 9a e3 81 95 e3 82 8c e3 81 9f e3 ................
0960: 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 af e6 9c ................
0970: 89 e5 8a b9 e3 81 aa e6 9b b8 e5 ba ab e3 81 a7 ................
0980: e3 81 af e3 81 82 e3 82 8a e3 81 be e3 81 9b e3 ................
0990: 82 93 e3 80 82 0a 09 45 52 52 4f 52 5f 43 4f 4d .......ERROR_COM
09a0: 4d 41 4e 44 5f 4e 41 4d 45 3d 30 78 38 30 31 43 MAND_NAME=0x801C
09b0: 2c 2f 2f 20 20 20 20 20 20 e3 82 b3 e3 83 9e e3 ,// .......
09c0: 83 b3 e3 83 89 e6 8c 87 e5 ae 9a e3 81 8c e9 96 ................
09d0: 93 e9 81 95 e3 81 a3 e3 81 a6 e3 81 84 e3 81 be ................
09e0: e3 81 99 e3 80 82 0a 09 45 52 52 4f 52 5f 4d 4f ........ERROR_MO
09f0: 52 45 5f 48 45 41 50 5f 4d 45 4d 4f 52 59 3d 30 RE_HEAP_MEMORY=0
0a00: 78 38 30 31 44 2c 2f 2f 20 20 e4 bd 9c e6 a5 ad x801D,// ......
0a10: e7 94 a8 e3 81 ae e3 81 9f e3 82 81 e3 81 ae e3 ................
0a20: 83 92 e3 83 bc e3 83 97 e3 83 a1 e3 83 a2 e3 83 ................
0a30: aa e3 81 8c e4 b8 8d e8 b6 b3 e3 81 97 e3 81 a6 ................
0a40: e3 81 84 e3 81 be e3 81 99 e3 80 82 0a 09 45 52 ..............ER
0a50: 52 4f 52 5f 41 4c 52 45 41 44 59 5f 52 55 4e 4e ROR_ALREADY_RUNN
0a60: 49 4e 47 3d 30 78 38 30 31 46 2c 2f 2f 20 20 20 ING=0x801F,//
0a70: e6 97 a2 e3 81 ab 20 42 47 41 33 32 2e 44 4c 4c ...... BGA32.DLL
0a80: 20 e3 81 8c e5 8b 95 e4 bd 9c e4 b8 ad e3 81 a7 ...............
0a90: e3 81 99 e3 80 82 0a 09 45 52 52 4f 52 5f 55 53 ........ERROR_US
0aa0: 45 52 5f 43 41 4e 43 45 4c 3d 30 78 38 30 32 30 ER_CANCEL=0x8020
0ab0: 2c 2f 2f 20 20 20 20 20 20 20 e3 83 a6 e3 83 bc ,// ......
0ac0: e3 82 b6 e3 83 bc e3 81 ab e3 82 88 e3 81 a3 e3 ................
0ad0: 81 a6 e5 87 a6 e7 90 86 e3 82 92 e4 b8 ad e6 96 ................
0ae0: ad e3 81 95 e3 82 8c e3 81 be e3 81 97 e3 81 9f ................
0af0: e3 80 82 0a 09 45 52 52 4f 52 5f 54 4d 50 5f 4f .....ERROR_TMP_O
0b00: 50 45 4e 3d 30 78 38 30 32 35 2c 2f 2f 20 20 20 PEN=0x8025,//
0b10: 20 20 20 20 20 20 20 e4 bd 9c e6 a5 ad e3 83 95 .........
0b20: e3 82 a1 e3 82 a4 e3 83 ab e3 81 8c e4 bd 9c e6 ................
0b30: 88 90 e3 81 a7 e3 81 8d e3 81 be e3 81 9b e3 82 ................
0b40: 93 e3 80 82 0a 09 45 52 52 4f 52 5f 41 52 43 5f ......ERROR_ARC_
0b50: 52 45 41 44 5f 4f 4e 4c 59 3d 30 78 38 30 32 37 READ_ONLY=0x8027
0b60: 2c 2f 2f 20 20 20 20 20 e6 9b b8 e3 81 8d e8 be ,// ........
0b70: bc e3 81 bf e5 b0 82 e7 94 a8 e5 b1 9e e6 80 a7 ................
0b80: e3 81 ae e6 9b b8 e5 ba ab e3 81 ab e5 af be e3 ................
0b90: 81 99 e3 82 8b e6 93 8d e4 bd 9c e3 81 af e3 81 ................
0ba0: a7 e3 81 8d e3 81 be e3 81 9b e3 82 93 e3 80 82 ................
0bb0: 0a 09 45 52 52 4f 52 5f 4e 4f 54 5f 46 49 4e 44 ..ERROR_NOT_FIND
0bc0: 5f 41 52 43 5f 46 49 4c 45 3d 30 78 38 30 32 39 _ARC_FILE=0x8029
0bd0: 2c 2f 2f 20 e6 8c 87 e5 ae 9a e3 81 95 e3 82 8c ,// ............
0be0: e3 81 9f e3 83 87 e3 82 a3 e3 83 ac e3 82 af e3 ................
0bf0: 83 88 e3 83 aa e3 81 ab e3 81 af e6 9b b8 e5 ba ................
0c00: ab e3 81 8c e3 81 82 e3 82 8a e3 81 be e3 81 9b ................
0c10: e3 82 93 e3 81 a7 e3 81 97 e3 81 9f e3 80 82 0a ................
0c20: 09 45 52 52 4f 52 5f 52 45 53 50 4f 4e 53 45 5f .ERROR_RESPONSE_
0c30: 52 45 41 44 3d 30 78 38 30 32 41 2c 2f 2f 20 20 READ=0x802A,//
0c40: 20 20 20 e3 83 ac e3 82 b9 e3 83 9d e3 83 b3 e3 .............
0c50: 82 b9 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 ................
0c60: ae e8 aa ad e3 81 bf e8 be bc e3 81 bf e6 99 82 ................
0c70: e3 81 ab e3 82 a8 e3 83 a9 e3 83 bc e3 81 8c e7 ................
0c80: 94 9f e3 81 98 e3 81 be e3 81 97 e3 81 9f e3 80 ................
0c90: 82 0a 09 45 52 52 4f 52 5f 54 4d 50 5f 43 4f 50 ...ERROR_TMP_COP
0ca0: 59 3d 30 78 38 30 32 43 2c 2f 2f 20 20 20 20 20 Y=0x802C,//
0cb0: 20 20 20 20 20 e4 bd 9c e6 a5 ad e3 83 95 e3 82 ...........
0cc0: a1 e3 82 a4 e3 83 ab e3 81 ae e6 9b b8 e5 ba ab ................
0cd0: e3 81 b8 e3 81 ae e6 9b b8 e3 81 8d e6 88 bb e3 ................
0ce0: 81 97 e3 81 8c e3 81 a7 e3 81 8d e3 81 be e3 81 ................
0cf0: 9b e3 82 93 e3 81 a7 e3 81 97 e3 81 9f e3 80 82 ................
0d00: 0a 09 45 52 52 4f 52 5f 4e 4f 54 5f 46 49 4e 44 ..ERROR_NOT_FIND
0d10: 5f 46 49 4c 45 3d 30 78 38 30 33 31 2c 2f 2f 20 _FILE=0x8031,//
0d20: 20 20 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab ............
0d30: e3 81 8c e8 a6 8b e3 81 a4 e3 81 8b e3 82 8a e3 ................
0d40: 81 be e3 81 9b e3 82 93 e3 80 82 0a 09 45 52 52 .............ERR
0d50: 4f 52 5f 47 45 54 5f 41 54 54 52 49 42 55 54 45 OR_GET_ATTRIBUTE
0d60: 53 3d 30 78 38 30 33 34 2c 2f 2f 20 20 20 20 e3 S=0x8034,// .
0d70: 83 95 e3 82 a1 e3 82 a4 e3 83 ab e5 b1 9e e6 80 ................
0d80: a7 e3 81 8c e5 8f 96 e5 be 97 e3 81 a7 e3 81 8d ................
0d90: e3 81 be e3 81 9b e3 82 93 e3 80 82 0a 09 45 52 ..............ER
0da0: 52 4f 52 5f 47 45 54 5f 49 4e 46 4f 52 4d 41 54 ROR_GET_INFORMAT
0db0: 49 4f 4e 3d 30 78 38 30 33 36 2c 2f 2f 20 20 20 ION=0x8036,//
0dc0: e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e6 83 85 e5 ................
0dd0: a0 b1 e3 81 8c e5 8f 96 e5 be 97 e3 81 a7 e3 81 ................
0de0: 8d e3 81 be e3 81 9b e3 82 93 e3 80 82 0a 7d 0a ..............}.
0df0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .//-------------
0e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e30: 2d 2d 2d 0a 2f 2f 20 e3 82 b3 e3 83 bc e3 83 ab ---.// .........
0e40: e3 83 90 e3 83 83 e3 82 af e9 96 a2 e6 95 b0 e3 ................
0e50: 81 ae e8 bf 94 e7 ad 94 e7 94 a8 e5 9e 8b 0a 2f .............../
0e60: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /---------------
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ea0: 2d 0a 0a 65 6e 75 6d 20 42 67 61 41 6e 73 77 65 -..enum BgaAnswe
0eb0: 72 0a 7b 0a 09 4d 65 6c 74 49 74 2c 20 53 6b 69 r.{..MeltIt, Ski
0ec0: 70 49 74 2c 20 41 62 6f 72 74 0a 7d 0a 0a 2f 2f pIt, Abort.}..//
0ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f10: 0a 2f 2f 20 46 69 6c 65 70 0a 2f 2f 20 20 20 44 .// Filep.// D
0f20: e8 a8 80 e8 aa 9e e3 82 89 e3 81 97 e3 81 8b e3 ................
0f30: 82 89 e3 81 ac e3 81 ae e3 81 a7 e3 81 99 e3 81 ................
0f40: 8c 7a 6c 69 62 e3 82 84 6c 69 62 62 7a 32 e3 81 .zlib...libbz2..
0f50: a8 e7 b0 a1 e5 8d 98 e3 81 ab e9 80 a3 e6 90 ba ................
0f60: e3 81 99 e3 82 8b 0a 2f 2f 20 20 20 e9 83 bd e5 .......// ....
0f70: 90 88 e4 b8 8a 73 74 64 2e 63 2e 73 74 64 69 6f .....std.c.stdio
0f80: 2e 46 49 4c 45 2a e3 81 a7 e3 83 95 e3 82 a1 e3 .FILE*..........
0f90: 82 a4 e3 83 ab e3 82 92 e8 aa ad e3 81 bf e6 9b ................
0fa0: b8 e3 81 8d e3 81 97 e3 81 be e3 81 99 e3 80 82 ................
0fb0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .//-------------
0fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ff0: 2d 2d 2d 0a 0a 65 78 74 65 72 6e 28 43 29 0a 7b ---..extern(C).{
1000: 0a 09 2f 2f 20 73 74 64 69 6f 2e 68 0a 20 20 20 ..// stdio.h.
1010: 20 69 6e 74 20 66 69 6c 65 6e 6f 28 20 46 49 4c int fileno( FIL
1020: 45 20 2a 66 70 20 29 20 7b 20 72 65 74 75 72 6e E *fp ) { return
1030: 20 66 70 2e 5f 66 69 6c 65 3b 20 7d 0a 09 2f 2f fp._file; }..//
1040: 20 69 6f 2e 68 0a 09 69 6e 74 20 6c 73 65 65 6b io.h..int lseek
1050: 28 20 69 6e 74 20 66 64 2c 20 69 6e 74 20 6f 66 ( int fd, int of
1060: 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64 65 20 29 fset, int mode )
1070: 3b 0a 09 69 6e 74 20 64 75 70 28 20 69 6e 74 20 ;..int dup( int
1080: 66 64 20 29 3b 20 0a 09 69 6e 74 20 63 6c 6f 73 fd ); ..int clos
1090: 65 28 20 69 6e 74 20 66 64 20 29 3b 0a 7d 0a 0a e( int fd );.}..
10a0: 63 6c 61 73 73 20 46 69 6c 65 70 0a 7b 0a 09 70 class Filep.{..p
10b0: 72 69 76 61 74 65 20 46 49 4c 45 2a 20 66 70 3b rivate FILE* fp;
10c0: 0a 09 70 72 69 76 61 74 65 20 74 68 69 73 28 20 ..private this(
10d0: 46 49 4c 45 2a 20 70 20 29 20 7b 20 66 70 20 3d FILE* p ) { fp =
10e0: 20 70 3b 20 7d 0a 0a 09 73 74 61 74 69 63 20 46 p; }...static F
10f0: 69 6c 65 70 20 6f 70 65 6e 28 20 63 68 61 72 5b ilep open( char[
1100: 5d 20 66 69 6c 65 6e 61 6d 65 2c 20 62 6f 6f 6c ] filename, bool
1110: 20 72 65 61 64 20 29 0a 09 7b 0a 09 09 46 49 4c read )..{...FIL
1120: 45 2a 20 66 70 20 3d 20 66 6f 70 65 6e 28 20 74 E* fp = fopen( t
1130: 6f 53 74 72 69 6e 67 7a 28 66 69 6c 65 6e 61 6d oStringz(filenam
1140: 65 29 2c 20 72 65 61 64 3f 22 72 62 22 3a 22 77 e), read?"rb":"w
1150: 62 22 20 29 3b 0a 09 09 72 65 74 75 72 6e 20 28 b" );...return (
1160: 66 70 20 3f 20 6e 65 77 20 46 69 6c 65 70 28 66 fp ? new Filep(f
1170: 70 29 20 3a 20 6e 75 6c 6c 29 3b 0a 09 7d 0a 0a p) : null);..}..
1180: 09 69 6e 74 20 64 75 70 5f 68 61 6e 28 29 0a 09 .int dup_han()..
1190: 7b 0a 09 09 69 6e 74 20 66 64 20 3d 20 64 75 70 {...int fd = dup
11a0: 28 20 66 69 6c 65 6e 6f 28 66 70 29 20 29 3b 0a ( fileno(fp) );.
11b0: 09 09 6c 73 65 65 6b 28 20 66 64 2c 20 63 75 72 ..lseek( fd, cur
11c0: 28 29 2c 20 30 20 29 3b 0a 09 09 72 65 74 75 72 (), 0 );...retur
11d0: 6e 20 66 64 3b 0a 09 7d 0a 0a 09 76 6f 69 64 5b n fd;..}...void[
11e0: 5d 20 72 65 61 64 28 20 69 6e 74 20 73 69 7a 20 ] read( int siz
11f0: 29 0a 09 7b 0a 09 09 63 68 61 72 5b 5d 20 62 75 )..{...char[] bu
1200: 66 3b 20 62 75 66 2e 6c 65 6e 67 74 68 20 3d 20 f; buf.length =
1210: 73 69 7a 3b 0a 09 09 69 6e 74 20 72 73 69 7a 20 siz;...int rsiz
1220: 3d 20 66 72 65 61 64 28 20 62 75 66 2c 20 31 2c = fread( buf, 1,
1230: 20 73 69 7a 2c 20 66 70 20 29 3b 0a 09 09 69 66 siz, fp );...if
1240: 28 20 72 73 69 7a 20 3c 20 30 20 29 0a 09 09 09 ( rsiz < 0 )....
1250: 74 68 72 6f 77 20 6e 65 77 20 42 67 61 4d 65 6c throw new BgaMel
1260: 74 65 72 45 72 72 6f 72 28 45 52 52 4f 52 5f 46 terError(ERROR_F
1270: 49 4c 45 5f 4f 50 45 4e 29 3b 0a 09 09 62 75 66 ILE_OPEN);...buf
1280: 2e 6c 65 6e 67 74 68 20 3d 20 72 73 69 7a 3b 0a .length = rsiz;.
1290: 09 09 72 65 74 75 72 6e 20 62 75 66 3b 0a 09 7d ..return buf;..}
12a0: 0a 0a 09 76 6f 69 64 20 77 72 69 74 65 28 20 76 ...void write( v
12b0: 6f 69 64 5b 5d 20 62 75 66 20 29 0a 09 7b 0a 09 oid[] buf )..{..
12c0: 09 77 68 69 6c 65 28 20 62 75 66 2e 6c 65 6e 67 .while( buf.leng
12d0: 74 68 20 3e 20 30 20 29 0a 09 09 7b 0a 09 09 09 th > 0 )...{....
12e0: 69 6e 74 20 72 73 69 7a 20 3d 20 66 77 72 69 74 int rsiz = fwrit
12f0: 65 28 20 62 75 66 2c 20 31 2c 20 62 75 66 2e 6c e( buf, 1, buf.l
1300: 65 6e 67 74 68 2c 20 66 70 20 29 3b 0a 09 09 09 ength, fp );....
1310: 69 66 28 20 72 73 69 7a 20 3c 20 30 20 29 20 72 if( rsiz < 0 ) r
1320: 65 74 75 72 6e 3b 0a 09 09 09 62 75 66 20 3d 20 eturn;....buf =
1330: 62 75 66 5b 72 73 69 7a 20 2e 2e 20 6c 65 6e 67 buf[rsiz .. leng
1340: 74 68 5d 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 6e th];...}..}...in
1350: 74 20 63 75 72 28 29 0a 09 7b 0a 09 09 72 65 74 t cur()..{...ret
1360: 75 72 6e 20 66 74 65 6c 6c 28 66 70 29 3b 0a 09 urn ftell(fp);..
1370: 7d 0a 0a 09 76 6f 69 64 20 73 65 65 6b 5f 74 6f }...void seek_to
1380: 28 20 69 6e 74 20 69 20 29 0a 09 7b 0a 09 09 66 ( int i )..{...f
1390: 73 65 65 6b 28 20 66 70 2c 20 69 2c 20 73 74 64 seek( fp, i, std
13a0: 2e 63 2e 73 74 64 69 6f 2e 53 45 45 4b 5f 53 45 .c.stdio.SEEK_SE
13b0: 54 20 29 3b 0a 09 7d 0a 0a 09 76 6f 69 64 20 63 T );..}...void c
13c0: 6c 6f 73 65 28 29 0a 09 7b 0a 09 09 66 63 6c 6f lose()..{...fclo
13d0: 73 65 28 66 70 29 3b 0a 09 7d 0a 0a 09 46 49 4c se(fp);..}...FIL
13e0: 45 2a 20 67 65 74 5f 66 70 28 29 0a 09 7b 0a 09 E* get_fp()..{..
13f0: 09 72 65 74 75 72 6e 20 66 70 3b 0a 09 7d 0a 7d .return fp;..}.}
1400: 0a 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...//-----------
1410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1420: 2d 2d 2d 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 0a 2f 2f 20 e3 83 a1 e3 82 a4 e3 -----.// .......
1450: 83 b3 e3 82 af e3 83 a9 e3 82 b9 0a 2f 2f 2d 2d ............//--
1460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a --------------..
14a0: 63 6c 61 73 73 20 42 67 61 4d 65 6c 74 65 72 0a class BgaMelter.
14b0: 7b 0a 09 61 6c 69 61 73 20 42 67 61 41 6e 73 77 {..alias BgaAnsw
14c0: 65 72 20 64 65 6c 65 67 61 74 65 28 69 6e 6f 75 er delegate(inou
14d0: 74 20 42 67 61 48 65 61 64 65 72 29 20 46 69 6c t BgaHeader) Fil
14e0: 65 48 61 6e 64 6c 65 72 3b 0a 09 61 6c 69 61 73 eHandler;..alias
14f0: 20 42 67 61 41 6e 73 77 65 72 20 64 65 6c 65 67 BgaAnswer deleg
1500: 61 74 65 28 69 6e 74 2c 20 69 6e 74 29 20 20 20 ate(int, int)
1510: 20 20 20 20 20 50 72 6f 67 72 65 73 73 48 61 6e ProgressHan
1520: 64 6c 65 72 3b 0a 0a 09 70 72 69 76 61 74 65 20 dler;...private
1530: 46 69 6c 65 70 20 66 70 20 3d 20 6e 75 6c 6c 3b Filep fp = null;
1540: 0a 0a 09 74 68 69 73 28 20 63 68 61 72 5b 5d 20 ...this( char[]
1550: 61 72 63 5f 6e 61 6d 65 20 29 0a 09 7b 0a 09 09 arc_name )..{...
1560: 66 70 20 3d 20 46 69 6c 65 70 2e 6f 70 65 6e 28 fp = Filep.open(
1570: 20 61 72 63 5f 6e 61 6d 65 2c 20 74 72 75 65 20 arc_name, true
1580: 29 3b 0a 09 09 69 66 28 20 66 70 20 69 73 20 6e );...if( fp is n
1590: 75 6c 6c 20 29 0a 09 09 09 74 68 72 6f 77 20 6e ull )....throw n
15a0: 65 77 20 42 67 61 4d 65 6c 74 65 72 45 72 72 6f ew BgaMelterErro
15b0: 72 28 45 52 52 4f 52 5f 46 49 4c 45 5f 4f 50 45 r(ERROR_FILE_OPE
15c0: 4e 29 3b 0a 09 7d 0a 0a 09 76 6f 69 64 20 63 6c N);..}...void cl
15d0: 6f 73 65 28 29 0a 09 7b 0a 09 09 69 66 28 20 66 ose()..{...if( f
15e0: 70 20 29 20 7b 20 66 70 2e 63 6c 6f 73 65 28 29 p ) { fp.close()
15f0: 3b 20 66 70 20 3d 20 6e 75 6c 6c 3b 20 7d 0a 09 ; fp = null; }..
1600: 7d 0a 0a 09 76 6f 69 64 20 73 74 61 72 74 28 20 }...void start(
1610: 46 69 6c 65 48 61 6e 64 6c 65 72 20 66 68 2c 20 FileHandler fh,
1620: 50 72 6f 67 72 65 73 73 48 61 6e 64 6c 65 72 20 ProgressHandler
1630: 70 68 20 29 0a 09 7b 0a 09 09 74 72 79 0a 09 09 ph )..{...try...
1640: 7b 0a 09 09 09 2f 2f 20 e3 83 98 e3 83 83 e3 83 {....// ........
1650: 80 e3 82 92 e6 8e a2 e3 81 99 0a 09 09 09 69 6e ..............in
1660: 74 20 68 70 6f 73 20 3d 20 66 69 6e 64 5f 68 65 t hpos = find_he
1670: 61 64 65 72 28 29 3b 0a 09 09 09 69 66 28 20 68 ader();....if( h
1680: 70 6f 73 20 3d 3d 20 2d 31 20 29 0a 09 09 09 09 pos == -1 ).....
1690: 74 68 72 6f 77 20 6e 65 77 20 42 67 61 4d 65 6c throw new BgaMel
16a0: 74 65 72 45 72 72 6f 72 28 45 52 52 4f 52 5f 4e terError(ERROR_N
16b0: 4f 54 5f 41 52 43 5f 46 49 4c 45 29 3b 0a 09 09 OT_ARC_FILE);...
16c0: 09 66 70 2e 73 65 65 6b 5f 74 6f 28 68 70 6f 73 .fp.seek_to(hpos
16d0: 29 3b 0a 0a 09 09 09 2f 2f 20 e3 83 ab e3 83 bc );.....// ......
16e0: e3 83 97 ef bc 9a 0a 09 09 09 2f 2f 20 e3 83 98 ..........// ...
16f0: e3 83 83 e3 83 80 e8 aa ad e3 81 bf e3 81 a8 e3 ................
1700: 82 8a 0a 09 09 09 42 67 61 48 65 61 64 65 72 20 ......BgaHeader
1710: 68 64 72 3b 0a 09 09 09 77 68 69 6c 65 28 20 72 hdr;....while( r
1720: 65 61 64 5f 68 65 61 64 65 72 28 68 64 72 29 20 ead_header(hdr)
1730: 29 0a 09 09 09 7b 0a 09 09 09 09 2f 2f 20 e6 ac )....{.....// ..
1740: a1 e3 81 ae e3 83 98 e3 83 83 e3 83 80 e4 bd 8d ................
1750: e7 bd ae e3 82 92 e8 a8 88 e7 ae 97 e3 81 97 e3 ................
1760: 81 a6 e3 81 8a e3 81 8f 0a 09 09 09 09 75 69 6e .............uin
1770: 74 20 6e 65 78 74 70 6f 73 20 3d 20 66 70 2e 63 t nextpos = fp.c
1780: 75 72 28 29 20 2b 20 68 64 72 2e 63 6f 6d 70 72 ur() + hdr.compr
1790: 65 73 73 65 64 5f 73 69 7a 65 3b 0a 09 09 09 09 essed_size;.....
17a0: 74 72 79 0a 09 09 09 09 7b 0a 09 09 09 09 09 2f try.....{....../
17b0: 2f 20 63 61 6c 6c 62 61 63 6b 0a 09 09 09 09 09 / callback......
17c0: 42 67 61 41 6e 73 77 65 72 20 61 20 3d 20 66 68 BgaAnswer a = fh
17d0: 28 68 64 72 29 3b 0a 09 09 09 09 09 69 66 28 20 (hdr);......if(
17e0: 61 20 3d 3d 20 42 67 61 41 6e 73 77 65 72 2e 41 a == BgaAnswer.A
17f0: 62 6f 72 74 20 29 20 20 72 65 74 75 72 6e 3b 0a bort ) return;.
1800: 09 09 09 09 09 69 66 28 20 61 20 3d 3d 20 42 67 .....if( a == Bg
1810: 61 41 6e 73 77 65 72 2e 53 6b 69 70 49 74 20 29 aAnswer.SkipIt )
1820: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 09 09 09 09 continue;......
1830: 09 2f 2f 20 e5 87 ba e5 8a 9b e5 85 88 e3 83 95 .// ............
1840: e3 82 a1 e3 82 a4 e3 83 ab e3 82 92 e9 96 8b e3 ................
1850: 81 8f 0a 09 09 09 09 09 69 66 28 20 6c 61 73 74 ........if( last
1860: 43 68 61 72 28 68 64 72 2e 66 6e 61 6d 65 29 3d Char(hdr.fname)=
1870: 3d 27 5c 5c 27 20 29 0a 09 09 09 09 09 20 20 7b ='\\' )...... {
1880: 20 70 61 74 68 4d 61 6b 65 28 68 64 72 2e 66 6e pathMake(hdr.fn
1890: 61 6d 65 29 3b 20 63 6f 6e 74 69 6e 75 65 3b 20 ame); continue;
18a0: 7d 0a 0a 09 09 09 09 09 46 69 6c 65 70 20 6f 75 }.......Filep ou
18b0: 74 66 20 3d 20 46 69 6c 65 70 2e 6f 70 65 6e 28 tf = Filep.open(
18c0: 20 70 61 74 68 4d 61 6b 65 28 68 64 72 2e 66 6e pathMake(hdr.fn
18d0: 61 6d 65 29 2c 20 66 61 6c 73 65 20 29 3b 0a 09 ame), false );..
18e0: 09 09 09 09 69 66 28 20 6f 75 74 66 20 69 73 20 ....if( outf is
18f0: 6e 75 6c 6c 20 29 0a 09 09 09 09 09 09 74 68 72 null ).......thr
1900: 6f 77 20 6e 65 77 20 42 67 61 4d 65 6c 74 65 72 ow new BgaMelter
1910: 45 72 72 6f 72 28 45 52 52 4f 52 5f 46 49 4c 45 Error(ERROR_FILE
1920: 5f 4f 50 45 4e 29 3b 0a 0a 09 09 09 09 09 2f 2f _OPEN);.......//
1930: 20 e8 a7 a3 e5 87 8d e5 87 a6 e7 90 86 0a 09 09 ...............
1940: 09 09 09 62 6f 6f 6c 20 62 43 6f 6e 74 69 6e 75 ...bool bContinu
1950: 65 20 3d 20 74 72 75 65 3b 0a 09 09 09 09 09 69 e = true;......i
1960: 66 28 20 21 69 73 5f 63 6f 6d 70 72 65 73 73 65 f( !is_compresse
1970: 64 28 68 64 72 29 20 29 0a 09 09 09 09 09 09 62 d(hdr) ).......b
1980: 43 6f 6e 74 69 6e 75 65 20 3d 20 4e 63 44 65 63 Continue = NcDec
1990: 28 20 68 64 72 2e 6f 72 69 67 69 6e 61 6c 5f 73 ( hdr.original_s
19a0: 69 7a 65 2c 20 6f 75 74 66 2c 20 70 68 20 29 3b ize, outf, ph );
19b0: 0a 09 09 09 09 09 65 6c 73 65 20 69 66 28 20 68 ......else if( h
19c0: 64 72 2e 6d 65 74 68 6f 64 20 3d 3d 20 22 47 5a dr.method == "GZ
19d0: 49 50 22 20 29 0a 09 09 09 09 09 09 62 43 6f 6e IP" ).......bCon
19e0: 74 69 6e 75 65 20 3d 20 47 7a 44 65 63 28 20 68 tinue = GzDec( h
19f0: 64 72 2e 63 6f 6d 70 72 65 73 73 65 64 5f 73 69 dr.compressed_si
1a00: 7a 65 2c 20 68 64 72 2e 6f 72 69 67 69 6e 61 6c ze, hdr.original
1a10: 5f 73 69 7a 65 2c 20 6f 75 74 66 2c 20 70 68 20 _size, outf, ph
1a20: 29 3b 0a 09 09 09 09 09 65 6c 73 65 20 69 66 28 );......else if(
1a30: 20 68 64 72 2e 6d 65 74 68 6f 64 20 3d 3d 20 22 hdr.method == "
1a40: 42 5a 32 5c 30 22 20 29 0a 09 09 09 09 09 09 62 BZ2\0" ).......b
1a50: 43 6f 6e 74 69 6e 75 65 20 3d 20 42 7a 44 65 63 Continue = BzDec
1a60: 28 20 68 64 72 2e 6f 72 69 67 69 6e 61 6c 5f 73 ( hdr.original_s
1a70: 69 7a 65 2c 20 6f 75 74 66 2c 20 70 68 20 29 3b ize, outf, ph );
1a80: 0a 0a 09 09 09 09 09 2f 2f 20 e9 96 89 e3 81 98 .......// ......
1a90: e3 81 a6 e5 b1 9e e6 80 a7 e8 a8 ad e5 ae 9a 0a ................
1aa0: 09 09 09 09 09 6f 75 74 66 2e 63 6c 6f 73 65 28 .....outf.close(
1ab0: 29 3b 0a 09 09 09 09 09 64 6f 73 53 65 74 46 54 );......dosSetFT
1ac0: 69 6d 65 28 20 68 64 72 2e 66 6e 61 6d 65 2c 20 ime( hdr.fname,
1ad0: 68 64 72 2e 64 61 74 65 2c 20 68 64 72 2e 74 69 hdr.date, hdr.ti
1ae0: 6d 65 20 29 3b 0a 09 09 09 09 09 53 65 74 46 69 me );......SetFi
1af0: 6c 65 41 74 74 72 69 62 75 74 65 73 28 20 68 64 leAttributes( hd
1b00: 72 2e 66 6e 61 6d 65 2c 20 68 64 72 2e 61 74 74 r.fname, hdr.att
1b10: 72 69 62 20 29 3b 0a 09 09 09 09 09 69 66 28 20 rib );......if(
1b20: 21 62 43 6f 6e 74 69 6e 75 65 20 29 0a 09 09 09 !bContinue )....
1b30: 09 09 09 72 65 74 75 72 6e 3b 0a 09 09 09 09 7d ...return;.....}
1b40: 0a 09 09 09 09 66 69 6e 61 6c 6c 79 20 7b 20 66 .....finally { f
1b50: 70 2e 73 65 65 6b 5f 74 6f 28 6e 65 78 74 70 6f p.seek_to(nextpo
1b60: 73 29 3b 20 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 s); }....}...}..
1b70: 09 66 69 6e 61 6c 6c 79 20 7b 20 63 6c 6f 73 65 .finally { close
1b80: 28 29 3b 20 7d 0a 09 7d 0a 0a 09 73 74 61 74 69 (); }..}...stati
1b90: 63 20 69 6e 74 20 73 69 67 6e 65 64 5f 63 68 61 c int signed_cha
1ba0: 72 28 20 63 68 61 72 20 63 20 29 0a 09 7b 0a 09 r( char c )..{..
1bb0: 09 69 6e 74 20 63 6e 20 3d 20 63 3b 0a 09 09 72 .int cn = c;...r
1bc0: 65 74 75 72 6e 20 28 63 6e 3e 3d 30 78 38 30 20 eturn (cn>=0x80
1bd0: 3f 20 63 6e 7c 30 78 66 66 66 66 66 66 30 30 20 ? cn|0xffffff00
1be0: 3a 20 63 6e 29 3b 0a 09 7d 0a 0a 09 70 72 69 76 : cn);..}...priv
1bf0: 61 74 65 20 69 6e 74 20 66 69 6e 64 5f 68 65 61 ate int find_hea
1c00: 64 65 72 28 29 0a 09 7b 0a 09 09 63 68 61 72 5b der()..{...char[
1c10: 5d 20 64 61 74 20 3d 20 63 61 73 74 28 63 68 61 ] dat = cast(cha
1c20: 72 5b 5d 29 20 66 70 2e 72 65 61 64 28 30 78 31 r[]) fp.read(0x1
1c30: 30 30 30 30 29 3b 0a 0a 09 09 66 6f 72 28 20 69 0000);....for( i
1c40: 6e 74 20 69 3d 30 3b 20 69 3c 64 61 74 2e 6c 65 nt i=0; i<dat.le
1c50: 6e 67 74 68 2d 32 38 3b 20 2b 2b 69 20 29 0a 09 ngth-28; ++i )..
1c60: 09 7b 0a 09 09 09 69 66 28 20 64 61 74 5b 69 2b .{....if( dat[i+
1c70: 34 5d 21 3d 27 47 27 20 26 26 20 64 61 74 5b 69 4]!='G' && dat[i
1c80: 2b 34 5d 21 3d 27 42 27 20 29 20 63 6f 6e 74 69 +4]!='B' ) conti
1c90: 6e 75 65 3b 0a 09 09 09 69 66 28 20 64 61 74 5b nue;....if( dat[
1ca0: 69 2b 35 5d 21 3d 27 5a 27 20 20 20 20 20 20 20 i+5]!='Z'
1cb0: 20 20 20 20 20 20 20 20 20 20 20 29 20 63 6f 6e ) 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 36 5d 21 3d 27 49 27 20 26 26 20 64 t[i+6]!='I' && d
1ce0: 61 74 5b 69 2b 36 5d 21 3d 27 32 27 20 29 20 63 at[i+6]!='2' ) c
1cf0: 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 69 66 28 20 ontinue;....if(
1d00: 64 61 74 5b 69 2b 37 5d 21 3d 27 50 27 20 26 26 dat[i+7]!='P' &&
1d10: 20 64 61 74 5b 69 2b 37 5d 21 3d 27 5c 30 27 29 dat[i+7]!='\0')
1d20: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 09 09 09 20 continue;.....
1d30: 69 6e 74 20 63 68 65 63 6b 73 75 6d 20 3d 20 64 int checksum = d
1d40: 61 74 5b 69 2b 30 5d 2b 28 64 61 74 5b 69 2b 31 at[i+0]+(dat[i+1
1d50: 5d 3c 3c 38 29 2b 28 64 61 74 5b 69 2b 32 5d 3c ]<<8)+(dat[i+2]<
1d60: 3c 31 36 29 2b 28 64 61 74 5b 69 2b 33 5d 3c 3c <16)+(dat[i+3]<<
1d70: 32 34 29 3b 0a 09 09 09 75 69 6e 74 20 66 6e 6c 24);....uint fnl
1d80: 65 6e 20 20 20 20 3d 20 64 61 74 5b 69 2b 32 34 en = dat[i+24
1d90: 5d 2b 28 64 61 74 5b 69 2b 32 35 5d 3c 3c 38 29 ]+(dat[i+25]<<8)
1da0: 2b 64 61 74 5b 69 2b 32 36 5d 2b 28 64 61 74 5b +dat[i+26]+(dat[
1db0: 69 2b 32 37 5d 3c 3c 38 29 3b 0a 09 09 09 69 66 i+27]<<8);....if
1dc0: 28 20 69 2b 32 38 2b 66 6e 6c 65 6e 20 3e 20 64 ( i+28+fnlen > d
1dd0: 61 74 2e 6c 65 6e 67 74 68 20 29 20 20 20 20 20 at.length )
1de0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 09 09 continue;....
1df0: 09 69 6e 74 20 73 75 6d 20 3d 20 30 3b 0a 09 09 .int sum = 0;...
1e00: 09 66 6f 72 28 20 69 6e 74 20 6a 3d 69 2b 34 3b .for( int j=i+4;
1e10: 20 6a 21 3d 69 2b 32 38 2b 66 6e 6c 65 6e 3b 20 j!=i+28+fnlen;
1e20: 2b 2b 6a 20 29 0a 09 09 09 09 73 75 6d 20 2b 3d ++j ).....sum +=
1e30: 20 73 69 67 6e 65 64 5f 63 68 61 72 28 64 61 74 signed_char(dat
1e40: 5b 6a 5d 29 3b 0a 09 09 09 69 66 28 20 63 68 65 [j]);....if( che
1e50: 63 6b 73 75 6d 20 3d 3d 20 73 75 6d 20 29 0a 09 cksum == sum )..
1e60: 09 09 09 72 65 74 75 72 6e 20 69 3b 0a 09 09 7d ...return i;...}
1e70: 0a 0a 09 09 72 65 74 75 72 6e 20 2d 31 3b 0a 09 ....return -1;..
1e80: 7d 0a 0a 09 70 72 69 76 61 74 65 20 62 6f 6f 6c }...private bool
1e90: 20 72 65 61 64 5f 68 65 61 64 65 72 28 20 6f 75 read_header( ou
1ea0: 74 20 42 67 61 48 65 61 64 65 72 20 68 64 72 20 t BgaHeader hdr
1eb0: 29 0a 09 7b 0a 09 09 2f 2f 20 e3 83 aa e3 83 88 )..{...// ......
1ec0: e3 83 ab e3 82 a8 e3 83 b3 e3 83 87 e3 82 a3 e3 ................
1ed0: 82 a2 e3 83 b3 e3 82 92 e4 bb ae e5 ae 9a e3 80 ................
1ee0: 82 e3 83 98 e3 83 83 e3 83 80 e8 aa ad e3 81 bf ................
1ef0: e8 be bc e3 81 bf 0a 09 09 63 68 61 72 5b 5d 20 .........char[]
1f00: 62 75 66 20 3d 20 63 61 73 74 28 63 68 61 72 5b buf = cast(char[
1f10: 5d 29 20 66 70 2e 72 65 61 64 28 32 38 29 3b 0a ]) fp.read(28);.
1f20: 09 09 69 66 28 20 62 75 66 2e 6c 65 6e 67 74 68 ..if( buf.length
1f30: 20 3c 20 32 38 20 29 20 72 65 74 75 72 6e 20 66 < 28 ) return f
1f40: 61 6c 73 65 3b 0a 09 09 62 75 66 2e 6c 65 6e 67 alse;...buf.leng
1f50: 74 68 20 3d 20 42 67 61 48 65 61 64 65 72 2e 73 th = BgaHeader.s
1f60: 69 7a 65 6f 66 3b 0a 09 09 68 64 72 20 3d 20 28 izeof;...hdr = (
1f70: 63 61 73 74 28 42 67 61 48 65 61 64 65 72 5b 5d cast(BgaHeader[]
1f80: 29 20 62 75 66 29 5b 30 5d 3b 0a 09 09 68 64 72 ) buf)[0];...hdr
1f90: 2e 66 6e 61 6d 65 20 3d 20 22 22 3b 0a 0a 09 09 .fname = "";....
1fa0: 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e5 // .............
1fb0: 90 8d 0a 09 09 68 64 72 2e 66 6e 61 6d 65 20 3d .....hdr.fname =
1fc0: 20 63 61 73 74 28 63 68 61 72 5b 5d 29 20 66 70 cast(char[]) fp
1fd0: 2e 72 65 61 64 28 68 64 72 2e 64 69 72 5f 6e 61 .read(hdr.dir_na
1fe0: 6d 65 5f 6c 65 6e 20 2b 20 68 64 72 2e 66 69 6c me_len + hdr.fil
1ff0: 65 5f 6e 61 6d 65 5f 6c 65 6e 29 3b 0a 09 09 69 e_name_len);...i
2000: 66 28 20 68 64 72 2e 66 6e 61 6d 65 2e 6c 65 6e f( hdr.fname.len
2010: 67 74 68 20 3c 20 68 64 72 2e 64 69 72 5f 6e 61 gth < hdr.dir_na
2020: 6d 65 5f 6c 65 6e 20 2b 20 68 64 72 2e 66 69 6c me_len + hdr.fil
2030: 65 5f 6e 61 6d 65 5f 6c 65 6e 20 29 20 72 65 74 e_name_len ) ret
2040: 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 09 09 2f 2f urn false;....//
2050: 20 e3 83 81 e3 82 a7 e3 83 83 e3 82 af e3 82 b5 ...............
2060: e3 83 a0 0a 09 09 69 6e 74 20 73 75 6d 20 3d 20 ......int sum =
2070: 30 3b 0a 09 09 66 6f 72 28 20 69 6e 74 20 69 3d 0;...for( int i=
2080: 34 3b 20 69 21 3d 32 38 3b 20 2b 2b 69 20 29 20 4; i!=28; ++i )
2090: 20 20 20 73 75 6d 20 2b 3d 20 73 69 67 6e 65 64 sum += signed
20a0: 5f 63 68 61 72 28 62 75 66 5b 69 5d 29 3b 0a 09 _char(buf[i]);..
20b0: 09 66 6f 72 65 61 63 68 28 20 63 68 61 72 20 63 .foreach( char c
20c0: 20 3b 20 68 64 72 2e 66 6e 61 6d 65 20 29 20 73 ; hdr.fname ) s
20d0: 75 6d 20 2b 3d 20 73 69 67 6e 65 64 5f 63 68 61 um += signed_cha
20e0: 72 28 63 29 3b 0a 09 09 72 65 74 75 72 6e 20 28 r(c);...return (
20f0: 73 75 6d 20 3d 3d 20 68 64 72 2e 63 68 65 63 6b sum == hdr.check
2100: 73 75 6d 29 3b 0a 09 7d 0a 0a 09 70 72 69 76 61 sum);..}...priva
2110: 74 65 20 62 6f 6f 6c 20 69 73 5f 63 6f 6d 70 72 te bool is_compr
2120: 65 73 73 65 64 28 20 69 6e 6f 75 74 20 42 67 61 essed( inout Bga
2130: 48 65 61 64 65 72 20 68 64 72 20 29 20 2f 2f 20 Header hdr ) //
2140: 69 6e 6f 75 74 3d 6a 75 73 74 20 66 6f 72 20 6f inout=just for o
2150: 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 09 7b 0a 09 ptimization..{..
2160: 09 2f 2f 20 e3 83 98 e3 83 83 e3 83 80 e3 81 8b .// ............
2170: e3 82 89 e3 80 81 e3 83 95 e3 82 a1 e3 82 a4 e3 ................
2180: 83 ab e3 81 8c e5 9c a7 e7 b8 ae e6 a0 bc e7 b4 ................
2190: 8d e3 81 95 e3 82 8c e3 81 a6 e3 81 84 e3 82 8b ................
21a0: e3 81 8b e3 81 a9 e3 81 86 e3 81 8b e3 82 92 e5 ................
21b0: 88 a4 e5 ae 9a 0a 09 09 69 66 28 20 68 64 72 2e ........if( hdr.
21c0: 61 72 63 5f 74 79 70 65 3d 3d 32 20 29 0a 09 09 arc_type==2 )...
21d0: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 09 .return false;..
21e0: 09 69 66 28 20 68 64 72 2e 61 72 63 5f 74 79 70 .if( hdr.arc_typ
21f0: 65 3d 3d 30 20 26 26 20 68 64 72 2e 63 6f 6d 70 e==0 && hdr.comp
2200: 72 65 73 73 65 64 5f 73 69 7a 65 3d 3d 68 64 72 ressed_size==hdr
2210: 2e 6f 72 69 67 69 6e 61 6c 5f 73 69 7a 65 20 29 .original_size )
2220: 0a 09 09 7b 0a 09 09 09 69 6e 74 20 78 20 3d 20 ...{....int x =
2230: 72 66 69 6e 64 28 20 68 64 72 2e 66 6e 61 6d 65 rfind( hdr.fname
2240: 2c 20 27 2e 27 20 29 3b 0a 09 09 09 69 66 28 20 , '.' );....if(
2250: 78 20 3d 3d 20 2d 31 20 29 0a 09 09 09 09 72 65 x == -1 ).....re
2260: 74 75 72 6e 20 74 72 75 65 3b 0a 09 09 09 63 68 turn true;....ch
2270: 61 72 5b 5d 20 65 78 74 20 3d 20 74 6f 6c 6f 77 ar[] ext = tolow
2280: 65 72 28 68 64 72 2e 66 6e 61 6d 65 5b 78 2b 31 er(hdr.fname[x+1
2290: 20 2e 2e 20 6c 65 6e 67 74 68 5d 29 3b 0a 09 09 .. length]);...
22a0: 09 69 66 28 20 65 78 74 3d 3d 22 61 72 63 22 20 .if( ext=="arc"
22b0: 7c 7c 20 65 78 74 3d 3d 22 61 72 6a 22 20 7c 7c || ext=="arj" ||
22c0: 20 65 78 74 3d 3d 22 62 7a 32 22 20 7c 7c 20 65 ext=="bz2" || e
22d0: 78 74 3d 3d 22 62 7a 61 22 0a 09 09 09 20 7c 7c xt=="bza".... ||
22e0: 20 65 78 74 3d 3d 22 63 61 62 22 20 7c 7c 20 65 ext=="cab" || e
22f0: 78 74 3d 3d 22 67 7a 22 20 20 7c 7c 20 65 78 74 xt=="gz" || ext
2300: 3d 3d 22 67 7a 61 22 20 7c 7c 20 65 78 74 3d 3d =="gza" || ext==
2310: 22 6c 7a 68 22 0a 09 09 09 20 7c 7c 20 65 78 74 "lzh".... || ext
2320: 3d 3d 22 6c 7a 73 22 20 7c 7c 20 65 78 74 3d 3d =="lzs" || ext==
2330: 22 70 61 6b 22 20 7c 7c 20 65 78 74 3d 3d 22 72 "pak" || ext=="r
2340: 61 72 22 20 7c 7c 20 65 78 74 3d 3d 22 74 61 7a ar" || ext=="taz
2350: 22 0a 09 09 09 20 7c 7c 20 65 78 74 3d 3d 22 74 ".... || ext=="t
2360: 62 7a 22 20 7c 7c 20 65 78 74 3d 3d 22 74 67 7a bz" || ext=="tgz
2370: 22 20 7c 7c 20 65 78 74 3d 3d 22 7a 22 20 20 20 " || ext=="z"
2380: 7c 7c 20 65 78 74 3d 3d 22 7a 69 70 22 0a 09 09 || ext=="zip"...
2390: 09 20 7c 7c 20 65 78 74 3d 3d 22 7a 6f 6f 22 20 . || ext=="zoo"
23a0: 29 0a 09 09 09 09 72 65 74 75 72 6e 20 66 61 6c ).....return fal
23b0: 73 65 3b 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e se;...}...return
23c0: 20 74 72 75 65 3b 0a 09 7d 0a 0a 09 73 74 61 74 true;..}...stat
23d0: 69 63 20 63 68 61 72 5b 5d 20 70 61 74 68 4d 61 ic char[] pathMa
23e0: 6b 65 28 20 63 68 61 72 5b 5d 20 70 61 74 68 20 ke( char[] path
23f0: 29 0a 09 7b 0a 09 09 63 68 61 72 2a 20 70 73 20 )..{...char* ps
2400: 3d 20 74 6f 53 74 72 69 6e 67 7a 28 70 61 74 68 = toStringz(path
2410: 29 3b 0a 09 09 66 6f 72 28 63 68 61 72 2a 20 70 );...for(char* p
2420: 3d 70 73 3b 3b 29 0a 09 09 7b 0a 09 09 09 66 6f =ps;;)...{....fo
2430: 72 28 3b 20 2a 70 21 3d 30 26 26 2a 70 21 3d 27 r(; *p!=0&&*p!='
2440: 5c 5c 27 26 26 2a 70 21 3d 27 2f 27 3b 20 70 3d \\'&&*p!='/'; p=
2450: 43 68 61 72 4e 65 78 74 28 70 29 29 20 7b 7d 0a CharNext(p)) {}.
2460: 09 09 09 69 66 28 20 2a 70 3d 3d 30 20 29 0a 09 ...if( *p==0 )..
2470: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 43 72 65 ...break;....Cre
2480: 61 74 65 44 69 72 65 63 74 6f 72 79 28 20 74 6f ateDirectory( to
2490: 53 74 72 69 6e 67 7a 28 70 73 5b 30 2e 2e 28 70 Stringz(ps[0..(p
24a0: 2d 70 73 29 5d 29 2c 20 6e 75 6c 6c 20 29 3b 0a -ps)]), null );.
24b0: 09 09 09 2b 2b 70 3b 0a 09 09 7d 0a 09 09 72 65 ...++p;...}...re
24c0: 74 75 72 6e 20 70 61 74 68 3b 0a 09 7d 0a 0a 09 turn path;..}...
24d0: 65 6e 75 6d 20 7b 20 42 55 46 53 49 5a 20 3d 20 enum { BUFSIZ =
24e0: 36 35 35 33 36 20 7d 0a 0a 09 70 72 69 76 61 74 65536 }...privat
24f0: 65 20 62 6f 6f 6c 20 4e 63 44 65 63 28 20 75 69 e bool NcDec( ui
2500: 6e 74 20 75 73 69 7a 2c 20 46 69 6c 65 70 20 6f nt usiz, Filep o
2510: 75 74 66 2c 20 50 72 6f 67 72 65 73 73 48 61 6e utf, ProgressHan
2520: 64 6c 65 72 20 70 68 20 29 0a 09 7b 0a 09 09 75 dler ph )..{...u
2530: 69 6e 74 20 69 6e 69 74 5f 75 73 69 7a 20 3d 20 int init_usiz =
2540: 75 73 69 7a 3b 0a 0a 09 09 2f 2f 20 e9 9d 9e e5 usiz;....// ....
2550: 9c a7 e7 b8 ae e3 80 82 e3 82 b3 e3 83 94 e3 83 ................
2560: bc e3 81 99 e3 82 8b e3 81 a0 e3 81 91 0a 09 09 ................
2570: 77 68 69 6c 65 28 20 75 73 69 7a 20 29 0a 09 09 while( usiz )...
2580: 7b 0a 09 09 09 63 68 61 72 5b 5d 20 72 20 3d 20 {....char[] r =
2590: 63 61 73 74 28 63 68 61 72 5b 5d 29 20 66 70 2e cast(char[]) fp.
25a0: 72 65 61 64 28 20 42 55 46 53 49 5a 3c 75 73 69 read( BUFSIZ<usi
25b0: 7a 3f 42 55 46 53 49 5a 3a 75 73 69 7a 20 29 3b z?BUFSIZ:usiz );
25c0: 0a 09 09 09 75 73 69 7a 20 2d 3d 20 72 2e 6c 65 ....usiz -= r.le
25d0: 6e 67 74 68 3b 0a 09 09 09 6f 75 74 66 2e 77 72 ngth;....outf.wr
25e0: 69 74 65 28 72 29 3b 0a 0a 09 09 09 2f 2f 20 64 ite(r);.....// d
25f0: 6c 67 0a 09 09 09 69 66 28 20 42 67 61 41 6e 73 lg....if( BgaAns
2600: 77 65 72 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e wer.Abort==ph(in
2610: 69 74 5f 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 it_usiz-usiz,usi
2620: 7a 29 20 29 20 72 65 74 75 72 6e 20 66 61 6c 73 z) ) return fals
2630: 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2f 20 64 6c 67 e;...}....// dlg
2640: 0a 09 09 69 66 28 20 42 67 61 41 6e 73 77 65 72 ...if( BgaAnswer
2650: 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 5f .Abort==ph(init_
2660: 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 20 usiz-usiz,usiz)
2670: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a ) return false;.
2680: 09 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 09 ..return true;..
2690: 7d 0a 0a 09 70 72 69 76 61 74 65 20 62 6f 6f 6c }...private bool
26a0: 20 47 7a 44 65 63 28 20 75 69 6e 74 20 63 73 69 GzDec( uint csi
26b0: 7a 2c 20 75 69 6e 74 20 75 73 69 7a 2c 20 46 69 z, uint usiz, Fi
26c0: 6c 65 70 20 6f 75 74 66 2c 20 50 72 6f 67 72 65 lep outf, Progre
26d0: 73 73 48 61 6e 64 6c 65 72 20 70 68 20 29 0a 09 ssHandler ph )..
26e0: 7b 0a 09 09 75 69 6e 74 20 69 6e 69 74 5f 75 73 {...uint init_us
26f0: 69 7a 20 3d 20 75 73 69 7a 3b 0a 0a 09 09 2f 2f iz = usiz;....//
2700: 20 7a 6c 69 62 e3 81 a7 e5 b1 95 e9 96 8b 0a 09 zlib...........
2710: 09 66 70 2e 72 65 61 64 28 31 30 29 3b 20 63 73 .fp.read(10); cs
2720: 69 7a 20 2d 3d 20 31 30 3b 20 2f 2f 20 e3 83 98 iz -= 10; // ...
2730: e3 83 83 e3 83 80 2c e3 83 95 e3 83 83 e3 82 bf ......,.........
2740: e3 82 b9 e3 82 ad e3 83 83 e3 83 97 0a 0a 09 09 ................
2750: 75 62 79 74 65 5b 5d 20 20 69 6e 62 75 66 3b 20 ubyte[] inbuf;
2760: 20 69 6e 62 75 66 2e 6c 65 6e 67 74 68 20 3d 20 inbuf.length =
2770: 36 35 35 33 36 3b 0a 09 09 75 62 79 74 65 5b 5d 65536;...ubyte[]
2780: 20 6f 75 74 62 75 66 3b 20 6f 75 74 62 75 66 2e outbuf; outbuf.
2790: 6c 65 6e 67 74 68 20 3d 20 36 35 35 33 36 3b 0a length = 65536;.
27a0: 0a 09 09 2f 2f 20 7a 6c 69 62 e6 ba 96 e5 82 99 ...// zlib......
27b0: 0a 09 09 7a 5f 73 74 72 65 61 6d 20 7a 73 3b 0a ...z_stream zs;.
27c0: 09 09 7a 73 2e 7a 61 6c 6c 6f 63 20 20 20 3d 20 ..zs.zalloc =
27d0: 6e 75 6c 6c 3b 0a 09 09 7a 73 2e 7a 66 72 65 65 null;...zs.zfree
27e0: 20 20 20 20 3d 20 6e 75 6c 6c 3b 0a 0a 09 09 2f = null;..../
27f0: 2f 20 e5 87 ba e5 8a 9b e3 83 90 e3 83 83 e3 83 / ..............
2800: 95 e3 82 a1 0a 09 09 7a 73 2e 6e 65 78 74 5f 6f .......zs.next_o
2810: 75 74 20 20 3d 20 6f 75 74 62 75 66 3b 0a 09 09 ut = outbuf;...
2820: 7a 73 2e 61 76 61 69 6c 5f 6f 75 74 20 3d 20 6f zs.avail_out = o
2830: 75 74 62 75 66 2e 6c 65 6e 67 74 68 3b 0a 0a 09 utbuf.length;...
2840: 09 2f 2f 20 e5 85 a5 e5 8a 9b e3 83 90 e3 83 83 .// ............
2850: e3 83 95 e3 82 a1 0a 09 09 69 6e 62 75 66 20 3d .........inbuf =
2860: 20 63 61 73 74 28 75 62 79 74 65 5b 5d 29 20 66 cast(ubyte[]) f
2870: 70 2e 72 65 61 64 28 20 63 73 69 7a 3c 36 35 35 p.read( csiz<655
2880: 33 36 20 3f 20 63 73 69 7a 20 3a 20 36 35 35 33 36 ? csiz : 6553
2890: 36 20 29 3b 0a 09 09 63 73 69 7a 20 20 20 20 20 6 );...csiz
28a0: 20 20 2d 3d 20 69 6e 62 75 66 2e 6c 65 6e 67 74 -= inbuf.lengt
28b0: 68 3b 0a 09 09 7a 73 2e 6e 65 78 74 5f 69 6e 20 h;...zs.next_in
28c0: 20 3d 20 69 6e 62 75 66 3b 0a 09 09 7a 73 2e 61 = inbuf;...zs.a
28d0: 76 61 69 6c 5f 69 6e 20 3d 20 69 6e 62 75 66 2e vail_in = inbuf.
28e0: 6c 65 6e 67 74 68 3b 0a 0a 09 09 2f 2f 20 e3 82 length;....// ..
28f0: b9 e3 82 bf e3 83 bc e3 83 88 0a 09 09 69 6e 66 .............inf
2900: 6c 61 74 65 49 6e 69 74 32 28 20 26 7a 73 2c 20 lateInit2( &zs,
2910: 2d 31 35 20 29 3b 0a 09 09 74 72 79 20 7b 0a 0a -15 );...try {..
2920: 09 09 2f 2f 20 e6 9b b8 e5 ba ab e3 81 8b e3 82 ..// ...........
2930: 89 e5 85 a5 e5 8a 9b e3 81 97 e7 b5 82 e3 82 8f ................
2940: e3 82 8b e3 81 be e3 81 a7 e3 83 ab e3 83 bc e3 ................
2950: 83 97 0a 09 09 69 6e 74 20 65 72 72 20 3d 20 5a .....int err = Z
2960: 5f 4f 4b 3b 0a 09 09 77 68 69 6c 65 28 20 63 73 _OK;...while( cs
2970: 69 7a 26 26 75 73 69 7a 20 29 0a 09 09 7b 0a 09 iz&&usiz )...{..
2980: 09 09 77 68 69 6c 65 28 20 7a 73 2e 61 76 61 69 ..while( zs.avai
2990: 6c 5f 6f 75 74 20 3e 20 30 20 29 0a 09 09 09 7b l_out > 0 )....{
29a0: 0a 09 09 09 09 65 72 72 20 3d 20 65 74 63 2e 63 .....err = etc.c
29b0: 2e 7a 6c 69 62 2e 69 6e 66 6c 61 74 65 28 20 26 .zlib.inflate( &
29c0: 7a 73 2c 20 5a 5f 50 41 52 54 49 41 4c 5f 46 4c zs, Z_PARTIAL_FL
29d0: 55 53 48 20 29 3b 0a 09 09 09 09 69 66 28 20 65 USH );.....if( e
29e0: 72 72 21 3d 5a 5f 53 54 52 45 41 4d 5f 45 4e 44 rr!=Z_STREAM_END
29f0: 20 26 26 20 65 72 72 21 3d 5a 5f 4f 4b 20 29 0a && err!=Z_OK ).
2a00: 09 09 09 09 09 63 73 69 7a 3d 30 3b 0a 09 09 09 .....csiz=0;....
2a10: 09 69 66 28 20 21 63 73 69 7a 20 29 0a 09 09 09 .if( !csiz )....
2a20: 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 09 69 66 ..break;......if
2a30: 28 20 7a 73 2e 61 76 61 69 6c 5f 69 6e 3c 3d 30 ( zs.avail_in<=0
2a40: 20 29 0a 09 09 09 09 7b 0a 09 09 09 09 09 69 6e ).....{......in
2a50: 62 75 66 20 3d 20 63 61 73 74 28 75 62 79 74 65 buf = cast(ubyte
2a60: 5b 5d 29 20 66 70 2e 72 65 61 64 28 20 63 73 69 []) fp.read( csi
2a70: 7a 3c 36 35 35 33 36 20 3f 20 63 73 69 7a 20 3a z<65536 ? csiz :
2a80: 20 36 35 35 33 36 20 29 3b 0a 09 09 09 09 09 63 65536 );......c
2a90: 73 69 7a 20 20 20 20 20 20 20 2d 3d 20 69 6e 62 siz -= inb
2aa0: 75 66 2e 6c 65 6e 67 74 68 3b 0a 09 09 09 09 09 uf.length;......
2ab0: 7a 73 2e 6e 65 78 74 5f 69 6e 20 20 3d 20 69 6e zs.next_in = in
2ac0: 62 75 66 3b 0a 09 09 09 09 09 7a 73 2e 61 76 61 buf;......zs.ava
2ad0: 69 6c 5f 69 6e 20 3d 20 69 6e 62 75 66 2e 6c 65 il_in = inbuf.le
2ae0: 6e 67 74 68 3b 0a 0a 09 09 09 09 09 69 66 28 20 ngth;.......if(
2af0: 69 6e 62 75 66 2e 6c 65 6e 67 74 68 3d 3d 30 20 inbuf.length==0
2b00: 29 0a 09 09 09 09 09 7b 0a 09 09 09 09 09 09 65 )......{.......e
2b10: 72 72 20 20 3d 20 5a 5f 53 54 52 45 41 4d 5f 45 rr = Z_STREAM_E
2b20: 4e 44 3b 0a 09 09 09 09 09 09 63 73 69 7a 20 3d ND;.......csiz =
2b30: 20 30 3b 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0;.......break;
2b40: 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a 09 09 ......}.....}...
2b50: 09 7d 0a 0a 09 09 09 69 6e 74 20 77 72 69 74 74 .}.....int writt
2b60: 65 6e 20 3d 20 6f 75 74 62 75 66 2e 6c 65 6e 67 en = outbuf.leng
2b70: 74 68 20 2d 20 7a 73 2e 61 76 61 69 6c 5f 6f 75 th - zs.avail_ou
2b80: 74 3b 0a 09 09 09 69 66 28 20 75 73 69 7a 20 3c t;....if( usiz <
2b90: 20 77 72 69 74 74 65 6e 20 29 20 77 72 69 74 74 written ) writt
2ba0: 65 6e 20 3d 20 75 73 69 7a 3b 0a 09 09 09 75 73 en = usiz;....us
2bb0: 69 7a 20 2d 3d 20 77 72 69 74 74 65 6e 3b 0a 09 iz -= written;..
2bc0: 09 09 6f 75 74 66 2e 77 72 69 74 65 28 20 6f 75 ..outf.write( ou
2bd0: 74 62 75 66 5b 30 2e 2e 77 72 69 74 74 65 6e 5d tbuf[0..written]
2be0: 20 29 3b 0a 09 09 09 7a 73 2e 6e 65 78 74 5f 6f );....zs.next_o
2bf0: 75 74 20 20 3d 20 6f 75 74 62 75 66 3b 0a 09 09 ut = outbuf;...
2c00: 09 7a 73 2e 61 76 61 69 6c 5f 6f 75 74 20 3d 20 .zs.avail_out =
2c10: 6f 75 74 62 75 66 2e 6c 65 6e 67 74 68 3b 0a 0a outbuf.length;..
2c20: 09 09 09 2f 2f 20 64 6c 67 0a 09 09 09 69 66 28 ...// dlg....if(
2c30: 20 42 67 61 41 6e 73 77 65 72 2e 41 62 6f 72 74 BgaAnswer.Abort
2c40: 3d 3d 70 68 28 69 6e 69 74 5f 75 73 69 7a 2d 75 ==ph(init_usiz-u
2c50: 73 69 7a 2c 75 73 69 7a 29 20 29 20 72 65 74 75 siz,usiz) ) retu
2c60: 72 6e 20 66 61 6c 73 65 3b 0a 09 09 7d 0a 0a 09 rn false;...}...
2c70: 09 2f 2f 20 e5 87 ba e5 8a 9b e6 ae 8b e3 81 97 .// ............
2c80: e3 82 92 e7 84 a1 e3 81 8f e3 81 99 e3 80 82 0a ................
2c90: 09 09 77 68 69 6c 65 28 20 65 72 72 21 3d 5a 5f ..while( err!=Z_
2ca0: 53 54 52 45 41 4d 5f 45 4e 44 26 26 75 73 69 7a STREAM_END&&usiz
2cb0: 20 29 0a 09 09 7b 0a 09 09 09 65 72 72 20 3d 20 )...{....err =
2cc0: 65 74 63 2e 63 2e 7a 6c 69 62 2e 69 6e 66 6c 61 etc.c.zlib.infla
2cd0: 74 65 28 26 7a 73 2c 5a 5f 50 41 52 54 49 41 4c te(&zs,Z_PARTIAL
2ce0: 5f 46 4c 55 53 48 29 3b 0a 09 09 09 69 66 28 20 _FLUSH);....if(
2cf0: 65 72 72 21 3d 5a 5f 53 54 52 45 41 4d 5f 45 4e err!=Z_STREAM_EN
2d00: 44 20 26 26 20 65 72 72 21 3d 5a 5f 4f 4b 20 29 D && err!=Z_OK )
2d10: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 .....break;.....
2d20: 69 6e 74 20 77 72 69 74 74 65 6e 20 3d 20 6f 75 int written = ou
2d30: 74 62 75 66 2e 6c 65 6e 67 74 68 20 2d 20 7a 73 tbuf.length - zs
2d40: 2e 61 76 61 69 6c 5f 6f 75 74 3b 0a 09 09 09 69 .avail_out;....i
2d50: 66 28 20 75 73 69 7a 20 3c 20 77 72 69 74 74 65 f( usiz < writte
2d60: 6e 20 29 20 77 72 69 74 74 65 6e 20 3d 20 75 73 n ) written = us
2d70: 69 7a 3b 0a 09 09 09 75 73 69 7a 20 2d 3d 20 77 iz;....usiz -= w
2d80: 72 69 74 74 65 6e 3b 0a 09 09 09 6f 75 74 66 2e ritten;....outf.
2d90: 77 72 69 74 65 28 20 6f 75 74 62 75 66 5b 30 2e write( outbuf[0.
2da0: 2e 77 72 69 74 74 65 6e 5d 20 29 3b 0a 09 09 09 .written] );....
2db0: 7a 73 2e 6e 65 78 74 5f 6f 75 74 20 20 3d 20 6f zs.next_out = o
2dc0: 75 74 62 75 66 3b 0a 09 09 09 7a 73 2e 61 76 61 utbuf;....zs.ava
2dd0: 69 6c 5f 6f 75 74 20 3d 20 6f 75 74 62 75 66 2e il_out = outbuf.
2de0: 6c 65 6e 67 74 68 3b 0a 0a 09 09 09 2f 2f 20 64 length;.....// d
2df0: 6c 67 0a 09 09 09 69 66 28 20 42 67 61 41 6e 73 lg....if( BgaAns
2e00: 77 65 72 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e wer.Abort==ph(in
2e10: 69 74 5f 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 it_usiz-usiz,usi
2e20: 7a 29 20 29 20 72 65 74 75 72 6e 20 66 61 6c 73 z) ) return fals
2e30: 65 3b 0a 09 09 7d 0a 0a 09 09 2f 2f 20 e7 b5 82 e;...}....// ...
2e40: e4 ba 86 0a 09 09 7d 20 66 69 6e 61 6c 6c 79 20 ......} finally
2e50: 7b 20 69 6e 66 6c 61 74 65 45 6e 64 28 26 7a 73 { inflateEnd(&zs
2e60: 29 3b 20 7d 0a 0a 09 09 2f 2f 20 64 6c 67 0a 09 ); }....// dlg..
2e70: 09 69 66 28 20 42 67 61 41 6e 73 77 65 72 2e 41 .if( BgaAnswer.A
2e80: 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 5f 75 73 bort==ph(init_us
2e90: 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 20 29 20 iz-usiz,usiz) )
2ea0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 09 09 return false;...
2eb0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 09 7d 0a return true;..}.
2ec0: 0a 09 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 42 ..private bool B
2ed0: 7a 44 65 63 28 20 75 69 6e 74 20 75 73 69 7a 2c zDec( uint usiz,
2ee0: 20 46 69 6c 65 70 20 6f 75 74 66 2c 20 50 72 6f Filep outf, Pro
2ef0: 67 72 65 73 73 48 61 6e 64 6c 65 72 20 70 68 20 gressHandler ph
2f00: 29 0a 09 7b 0a 09 09 75 69 6e 74 20 69 6e 69 74 )..{...uint init
2f10: 5f 75 73 69 7a 20 3d 20 75 73 69 7a 3b 0a 0a 09 _usiz = usiz;...
2f20: 09 2f 2f 20 6c 69 62 62 7a 32 e3 81 a7 e5 b1 95 .// libbz2......
2f30: e9 96 8b 0a 09 09 69 6e 74 20 65 72 72 3b 0a 09 ......int err;..
2f40: 09 42 5a 46 49 4c 45 2a 20 62 20 3d 20 42 5a 32 .BZFILE* b = BZ2
2f50: 5f 62 7a 52 65 61 64 4f 70 65 6e 28 20 26 65 72 _bzReadOpen( &er
2f60: 72 2c 20 66 70 2e 67 65 74 5f 66 70 28 29 2c 20 r, fp.get_fp(),
2f70: 30 2c 20 30 2c 20 4e 55 4c 4c 2c 20 30 20 29 3b 0, 0, NULL, 0 );
2f80: 0a 09 09 69 66 28 20 65 72 72 21 3d 42 5a 5f 4f ...if( err!=BZ_O
2f90: 4b 20 7c 7c 20 62 20 69 73 20 6e 75 6c 6c 20 29 K || b is null )
2fa0: 0a 09 09 09 72 65 74 75 72 6e 20 74 72 75 65 3b ....return true;
2fb0: 0a 0a 09 09 74 72 79 0a 09 09 7b 0a 09 09 09 63 ....try...{....c
2fc0: 68 61 72 5b 5d 20 62 75 66 3b 20 62 75 66 2e 6c har[] buf; buf.l
2fd0: 65 6e 67 74 68 20 3d 20 42 55 46 53 49 5a 3b 0a ength = BUFSIZ;.
2fe0: 09 09 09 69 6e 74 20 6c 65 6e 3b 0a 09 09 09 77 ...int len;....w
2ff0: 68 69 6c 65 28 20 30 3c 28 6c 65 6e 3d 42 5a 32 hile( 0<(len=BZ2
3000: 5f 62 7a 52 65 61 64 28 20 26 65 72 72 2c 20 62 _bzRead( &err, b
3010: 2c 20 62 75 66 2c 20 42 55 46 53 49 5a 3c 75 73 , buf, BUFSIZ<us
3020: 69 7a 3f 42 55 46 53 49 5a 3a 75 73 69 7a 20 29 iz?BUFSIZ:usiz )
3030: 29 20 29 0a 09 09 09 7b 0a 09 09 09 09 6f 75 74 ) )....{.....out
3040: 66 2e 77 72 69 74 65 28 20 62 75 66 5b 30 2e 2e f.write( buf[0..
3050: 6c 65 6e 5d 20 29 3b 0a 09 09 09 09 75 73 69 7a len] );.....usiz
3060: 20 2d 3d 20 6c 65 6e 3b 0a 09 09 09 09 69 66 28 -= len;.....if(
3070: 20 65 72 72 20 21 3d 20 42 5a 5f 4f 4b 20 29 0a err != BZ_OK ).
3080: 09 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 .....break;.....
3090: 09 2f 2f 20 64 6c 67 0a 09 09 09 09 69 66 28 20 .// dlg.....if(
30a0: 42 67 61 41 6e 73 77 65 72 2e 41 62 6f 72 74 3d BgaAnswer.Abort=
30b0: 3d 70 68 28 69 6e 69 74 5f 75 73 69 7a 2d 75 73 =ph(init_usiz-us
30c0: 69 7a 2c 75 73 69 7a 29 20 29 20 72 65 74 75 72 iz,usiz) ) retur
30d0: 6e 20 66 61 6c 73 65 3b 0a 09 09 09 7d 0a 09 09 n false;....}...
30e0: 7d 20 66 69 6e 61 6c 6c 79 20 7b 20 42 5a 32 5f } finally { BZ2_
30f0: 62 7a 52 65 61 64 43 6c 6f 73 65 28 20 26 65 72 bzReadClose( &er
3100: 72 2c 20 62 20 29 3b 20 7d 0a 0a 09 09 2f 2f 20 r, b ); }....//
3110: 64 6c 67 0a 09 09 69 66 28 20 42 67 61 41 6e 73 dlg...if( BgaAns
3120: 77 65 72 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e wer.Abort==ph(in
3130: 69 74 5f 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 it_usiz-usiz,usi
3140: 7a 29 20 29 20 72 65 74 75 72 6e 20 66 61 6c 73 z) ) return fals
3150: 65 3b 0a 09 09 72 65 74 75 72 6e 20 74 72 75 65 e;...return true
3160: 3b 0a 09 7d 0a 7d 0a ;..}.}.