0000: ef bb bf 70 72 69 76 61 74 65 20 69 6d 70 6f 72 ...private impor
0010: 74 20 77 69 6e 33 32 2e 77 69 6e 64 6f 77 73 3b t win32.windows;
0020: 0a 70 72 69 76 61 74 65 20 69 6d 70 6f 72 74 20 .private import
0030: 73 74 64 2e 73 74 72 69 6e 67 3b 0a 70 72 69 76 std.string;.priv
0040: 61 74 65 20 69 6d 70 6f 72 74 20 73 74 64 2e 66 ate import std.f
0050: 69 6c 65 3b 0a 70 72 69 76 61 74 65 20 69 6d 70 ile;.private imp
0060: 6f 72 74 20 73 74 64 2e 63 2e 73 74 64 69 6f 3b ort std.c.stdio;
0070: 0a 70 72 69 76 61 74 65 20 69 6d 70 6f 72 74 20 .private import
0080: 73 74 64 2e 73 74 72 69 6e 67 3b 0a 70 72 69 76 std.string;.priv
0090: 61 74 65 20 69 6d 70 6f 72 74 20 65 74 63 2e 63 ate import etc.c
00a0: 2e 7a 6c 69 62 3b 0a 70 72 69 76 61 74 65 20 69 .zlib;.private i
00b0: 6d 70 6f 72 74 20 6c 69 62 62 7a 32 2e 62 7a 6c mport libbz2.bzl
00c0: 69 62 3b 0a 70 72 69 76 61 74 65 20 69 6d 70 6f ib;.private impo
00d0: 72 74 20 75 74 69 6c 3b 0a 0a 2f 2f 2d 2d 2d 2d rt util;..//----
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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 ------------.//
0120: 42 67 61 e6 9b b8 e5 ba ab e3 81 ae e3 83 95 e3 Bga.............
0130: 82 a1 e3 82 a4 e3 83 ab e3 83 98 e3 83 83 e3 83 ................
0140: 80 e5 bd a2 e5 bc 8f 0a 2f 2f 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 61 6c 69 67 ----------..alig
0190: 6e 28 31 29 20 73 74 72 75 63 74 20 42 67 61 48 n(1) struct BgaH
01a0: 65 61 64 65 72 0a 7b 0a 09 20 69 6e 74 20 20 20 eader.{.. int
01b0: 63 68 65 63 6b 73 75 6d 3b 20 20 20 20 20 20 20 checksum;
01c0: 20 2f 2f 20 74 79 70 65 ef bd 9e 66 6e 61 6d 65 // type...fname
01d0: 20 e3 81 ae 73 69 67 6e 65 64 20 63 68 61 72 e3 ...signed char.
01e0: 81 a7 e3 81 ae e5 92 8c 0a 09 63 68 61 72 20 20 ..........char
01f0: 20 6d 65 74 68 6f 64 5b 34 5d 3b 20 20 20 20 20 method[4];
0200: 20 20 2f 2f 20 22 47 5a 49 50 22 20 e3 81 be e3 // "GZIP" ....
0210: 81 9f e3 81 af 20 22 42 5a 32 5c 30 22 0a 09 75 ..... "BZ2\0"..u
0220: 69 6e 74 20 20 20 63 6f 6d 70 72 65 73 73 65 64 int compressed
0230: 5f 73 69 7a 65 3b 20 2f 2f 20 e5 9c a7 e7 b8 ae _size; // ......
0240: e5 be 8c e3 81 ae e3 83 87 e3 83 bc e3 82 bf e3 ................
0250: 82 b5 e3 82 a4 e3 82 ba 28 20 e3 83 98 e3 83 83 ........( ......
0260: e3 83 80 e3 81 af e5 90 ab e3 81 be e3 81 aa e3 ................
0270: 81 84 20 29 0a 09 75 69 6e 74 20 20 20 6f 72 69 .. )..uint ori
0280: 67 69 6e 61 6c 5f 73 69 7a 65 3b 20 20 20 2f 2f ginal_size; //
0290: 20 e5 85 83 e3 81 ae e3 83 95 e3 82 a1 e3 82 a4 ...............
02a0: e3 83 ab e3 82 b5 e3 82 a4 e3 82 ba 0a 09 75 73 ..............us
02b0: 68 6f 72 74 20 64 61 74 65 3b 20 20 20 20 20 20 hort date;
02c0: 20 20 20 20 20 20 2f 2f 20 e3 83 95 e3 82 a1 e3 // .......
02d0: 82 a4 e3 83 ab e3 81 ae e6 9b b4 e6 96 b0 e6 97 ................
02e0: a5 e4 bb 98 28 20 44 4f 53 e5 bd a2 e5 bc 8f 20 ....( DOS......
02f0: 29 0a 09 75 73 68 6f 72 74 20 74 69 6d 65 3b 20 )..ushort time;
0300: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 e3 83 // ..
0310: 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 ae e6 9b b4 ................
0320: e6 96 b0 e6 99 82 e5 88 bb 28 20 44 4f 53 e5 bd .........( DOS..
0330: a2 e5 bc 8f 20 29 0a 09 75 62 79 74 65 20 20 61 .... )..ubyte a
0340: 74 74 72 69 62 3b 20 20 20 20 20 20 20 20 20 20 ttrib;
0350: 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 // .............
0360: 81 ae e5 b1 9e e6 80 a7 0a 09 20 20 20 20 20 20 ..........
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0380: 20 20 2f 2f 20 28 20 31 3a 52 4f 20 32 3a 48 69 // ( 1:RO 2:Hi
0390: 64 20 34 3a 53 79 73 20 38 3a 56 6f 6c 20 31 36 d 4:Sys 8:Vol 16
03a0: 3a 44 69 72 20 33 32 3a 41 72 63 20 29 0a 09 75 :Dir 32:Arc )..u
03b0: 62 79 74 65 20 20 68 65 61 64 65 72 5f 74 79 70 byte header_typ
03c0: 65 3b 20 20 20 20 20 2f 2f 20 e3 83 98 e3 83 83 e; // ......
03d0: e3 83 80 e3 81 ae e7 a8 ae e9 a1 9e 28 20 e7 8f ............( ..
03e0: be e5 9c a8 e3 81 af e5 b8 b8 e3 81 ab 20 30 20 ............. 0
03f0: 29 0a 09 75 73 68 6f 72 74 20 61 72 63 5f 74 79 )..ushort arc_ty
0400: 70 65 3b 20 20 20 20 20 20 20 20 2f 2f 20 e3 82 pe; // ..
0410: a2 e3 83 bc e3 82 ab e3 82 a4 e3 83 96 e3 82 bf ................
0420: e3 82 a4 e3 83 97 0a 09 20 20 20 20 20 20 20 20 ........
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0440: 2f 2f 20 30 3a 28 65 78 74 3d 3d e2 86 93 3f e9 // 0:(ext==...?.
0450: 9d 9e e5 9c a7 e7 b8 ae 3a e5 9c a7 e7 b8 ae 29 ........:......)
0460: 20 31 3a e5 9c a7 e7 b8 ae 20 32 3a e9 9d 9e e5 1:...... 2:....
0470: 9c a7 e7 b8 ae 0a 09 20 20 20 20 20 20 20 20 20 .......
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
0490: 2f 09 2e 41 52 43 2c 20 2e 41 52 4a 2c 20 2e 42 /..ARC, .ARJ, .B
04a0: 5a 32 2c 20 2e 42 5a 41 2c 20 2e 43 41 42 2c 20 Z2, .BZA, .CAB,
04b0: 2e 47 5a 2c 20 2e 47 5a 41 2c 20 2e 4c 5a 48 2c .GZ, .GZA, .LZH,
04c0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
04d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 09 2e 4c 5a //..LZ
04e0: 53 2c 20 2e 50 41 4b 2c 20 2e 52 41 52 2c 20 2e S, .PAK, .RAR, .
04f0: 54 41 5a 2c 20 2e 54 42 5a 2c 20 2e 54 47 5a 2c TAZ, .TBZ, .TGZ,
0500: 20 2e 5a 2c 20 2e 5a 49 50 2c 20 2e 5a 4f 4f 0a .Z, .ZIP, .ZOO.
0510: 09 75 73 68 6f 72 74 20 64 69 72 5f 6e 61 6d 65 .ushort dir_name
0520: 5f 6c 65 6e 3b 20 20 20 20 2f 2f 20 e3 83 87 e3 _len; // ....
0530: 82 a3 e3 83 ac e3 82 af e3 83 88 e3 83 aa e5 90 ................
0540: 8d e3 81 ae e9 95 b7 e3 81 95 0a 09 75 73 68 6f ............usho
0550: 72 74 20 66 69 6c 65 5f 6e 61 6d 65 5f 6c 65 6e rt file_name_len
0560: 3b 20 20 20 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 ; // .........
0570: e3 83 ab e5 90 8d e3 81 ae e9 95 b7 e3 81 95 0a ................
0580: 09 73 74 72 69 6e 67 20 66 6e 61 6d 65 3b 20 20 .string fname;
0590: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 72 5f // dir_
05a0: 6e 61 6d 65 5f 6c 65 6e 20 2b 20 66 69 6c 65 5f name_len + file_
05b0: 6e 61 6d 65 5f 6c 65 6e 20 28 20 6e 6f 20 27 5c name_len ( no '\
05c0: 30 27 20 29 0a 7d 0a 0a 2f 2f 2d 2d 2d 2d 2d 2d 0' ).}..//------
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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 e3 82 ----------.// ..
0610: a8 e3 83 a9 e3 83 bc e7 99 ba e7 94 9f e6 99 82 ................
0620: e3 81 ab e6 8a 95 e3 81 92 e3 82 8b e4 be 8b e5 ................
0630: a4 96 0a 2f 2f 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 2d ----------------
0660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0670: 2d 2d 2d 2d 2d 0a 0a 63 6c 61 73 73 20 42 67 61 -----..class Bga
0680: 4d 65 6c 74 65 72 45 72 72 6f 72 20 3a 20 45 72 MelterError : Er
0690: 72 6f 72 0a 7b 0a 09 69 6e 74 20 65 72 72 63 6f ror.{..int errco
06a0: 64 65 3b 0a 09 74 68 69 73 28 20 69 6e 74 20 65 de;..this( int e
06b0: 20 29 20 7b 20 73 75 70 65 72 28 22 42 67 61 4d ) { super("BgaM
06c0: 65 6c 74 65 72 45 72 72 6f 72 22 29 3b 20 65 72 elterError"); er
06d0: 72 63 6f 64 65 3d 65 3b 20 7d 0a 7d 0a 0a 65 6e rcode=e; }.}..en
06e0: 75 6d 0a 7b 0a 09 45 52 52 4f 52 5f 46 49 4c 45 um.{..ERROR_FILE
06f0: 5f 4f 50 45 4e 3d 30 78 38 30 30 44 2c 2f 2f 20 _OPEN=0x800D,//
0700: 20 20 20 20 20 20 20 20 e3 83 95 e3 82 a1 e3 82 ........
0710: a4 e3 83 ab e3 82 92 e9 96 8b e3 81 91 e3 81 be ................
0720: e3 81 9b e3 82 93 e3 81 a7 e3 81 97 e3 81 9f e3 ................
0730: 80 82 0a 09 45 52 52 4f 52 5f 4d 41 4b 45 44 49 ....ERROR_MAKEDI
0740: 52 45 43 54 4f 52 59 3d 30 78 38 30 31 32 2c 2f RECTORY=0x8012,/
0750: 2f 20 20 20 20 20 e3 83 87 e3 82 a3 e3 83 ac e3 / ..........
0760: 82 af e3 83 88 e3 83 aa e3 81 8c e4 bd 9c e6 88 ................
0770: 90 e3 81 a7 e3 81 8d e3 81 be e3 81 9b e3 82 93 ................
0780: e3 80 82 0a 09 45 52 52 4f 52 5f 43 41 4e 4e 4f .....ERROR_CANNO
0790: 54 5f 57 52 49 54 45 3d 30 78 38 30 31 33 2c 2f T_WRITE=0x8013,/
07a0: 2f 20 20 20 20 20 20 e6 9b b8 e3 81 8d e8 be bc / .........
07b0: e3 81 bf e3 82 a8 e3 83 a9 e3 83 bc e3 81 8c e7 ................
07c0: 94 9f e3 81 98 e3 81 be e3 81 97 e3 81 9f e3 80 ................
07d0: 82 0a 09 45 52 52 4f 52 5f 48 45 41 44 45 52 5f ...ERROR_HEADER_
07e0: 43 52 43 3d 30 78 38 30 31 36 2c 2f 2f 20 20 20 CRC=0x8016,//
07f0: 20 20 20 20 20 e6 9b b8 e5 ba ab e3 81 ae e3 83 ...........
0800: 98 e3 83 83 e3 83 80 e3 81 ae e3 83 81 e3 82 a7 ................
0810: e3 83 83 e3 82 af e3 82 b5 e3 83 a0 e3 81 8c e5 ................
0820: 90 88 e3 81 a3 e3 81 a6 e3 81 84 e3 81 be e3 81 ................
0830: 9b e3 82 93 e3 80 82 0a 09 45 52 52 4f 52 5f 41 .........ERROR_A
0840: 52 43 5f 46 49 4c 45 5f 4f 50 45 4e 3d 30 78 38 RC_FILE_OPEN=0x8
0850: 30 31 38 2c 2f 2f 20 20 20 20 20 e6 9b b8 e5 ba 018,// .....
0860: ab e3 82 92 e9 96 8b e3 81 8f e4 ba 8b e3 81 8c ................
0870: e5 87 ba e6 9d a5 e3 81 be e3 81 9b e3 82 93 e3 ................
0880: 80 82 0a 09 45 52 52 4f 52 5f 4e 4f 54 5f 41 52 ....ERROR_NOT_AR
0890: 43 5f 46 49 4c 45 3d 30 78 38 30 31 39 2c 2f 2f C_FILE=0x8019,//
08a0: 20 20 20 20 20 20 e6 9b b8 e5 ba ab e3 81 ae e3 ..........
08b0: 83 95 e3 82 a1 e3 82 a4 e3 83 ab e5 90 8d e3 81 ................
08c0: 8c e6 8c 87 e5 ae 9a e3 81 95 e3 82 8c e3 81 a6 ................
08d0: e3 81 84 e3 81 be e3 81 9b e3 82 93 e3 80 82 0a ................
08e0: 09 45 52 52 4f 52 5f 43 41 4e 4e 4f 54 5f 52 45 .ERROR_CANNOT_RE
08f0: 41 44 3d 30 78 38 30 31 41 2c 2f 2f 20 20 20 20 AD=0x801A,//
0900: 20 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 .............
0910: 81 ae e8 aa ad e3 81 bf e8 be bc e3 81 bf e6 99 ................
0920: 82 e3 81 ab e3 82 a8 e3 83 a9 e3 83 bc e3 81 8c ................
0930: e7 94 9f e3 81 98 e3 81 be e3 81 97 e3 81 9f e3 ................
0940: 80 82 0a 09 45 52 52 4f 52 5f 46 49 4c 45 5f 53 ....ERROR_FILE_S
0950: 54 59 4c 45 3d 30 78 38 30 31 42 2c 2f 2f 20 20 TYLE=0x801B,//
0960: 20 20 20 20 20 20 e6 8c 87 e5 ae 9a e3 81 95 e3 ..........
0970: 82 8c e3 81 9f e3 83 95 e3 82 a1 e3 82 a4 e3 83 ................
0980: ab e3 81 af e6 9c 89 e5 8a b9 e3 81 aa e6 9b b8 ................
0990: e5 ba ab e3 81 a7 e3 81 af e3 81 82 e3 82 8a e3 ................
09a0: 81 be e3 81 9b e3 82 93 e3 80 82 0a 09 45 52 52 .............ERR
09b0: 4f 52 5f 43 4f 4d 4d 41 4e 44 5f 4e 41 4d 45 3d OR_COMMAND_NAME=
09c0: 30 78 38 30 31 43 2c 2f 2f 20 20 20 20 20 20 e3 0x801C,// .
09d0: 82 b3 e3 83 9e e3 83 b3 e3 83 89 e6 8c 87 e5 ae ................
09e0: 9a e3 81 8c e9 96 93 e9 81 95 e3 81 a3 e3 81 a6 ................
09f0: e3 81 84 e3 81 be e3 81 99 e3 80 82 0a 09 45 52 ..............ER
0a00: 52 4f 52 5f 4d 4f 52 45 5f 48 45 41 50 5f 4d 45 ROR_MORE_HEAP_ME
0a10: 4d 4f 52 59 3d 30 78 38 30 31 44 2c 2f 2f 20 20 MORY=0x801D,//
0a20: e4 bd 9c e6 a5 ad e7 94 a8 e3 81 ae e3 81 9f e3 ................
0a30: 82 81 e3 81 ae e3 83 92 e3 83 bc e3 83 97 e3 83 ................
0a40: a1 e3 83 a2 e3 83 aa e3 81 8c e4 b8 8d e8 b6 b3 ................
0a50: e3 81 97 e3 81 a6 e3 81 84 e3 81 be e3 81 99 e3 ................
0a60: 80 82 0a 09 45 52 52 4f 52 5f 41 4c 52 45 41 44 ....ERROR_ALREAD
0a70: 59 5f 52 55 4e 4e 49 4e 47 3d 30 78 38 30 31 46 Y_RUNNING=0x801F
0a80: 2c 2f 2f 20 20 20 e6 97 a2 e3 81 ab 20 42 47 41 ,// ...... BGA
0a90: 33 32 2e 44 4c 4c 20 e3 81 8c e5 8b 95 e4 bd 9c 32.DLL .........
0aa0: e4 b8 ad e3 81 a7 e3 81 99 e3 80 82 0a 09 45 52 ..............ER
0ab0: 52 4f 52 5f 55 53 45 52 5f 43 41 4e 43 45 4c 3d ROR_USER_CANCEL=
0ac0: 30 78 38 30 32 30 2c 2f 2f 20 20 20 20 20 20 20 0x8020,//
0ad0: e3 83 a6 e3 83 bc e3 82 b6 e3 83 bc e3 81 ab e3 ................
0ae0: 82 88 e3 81 a3 e3 81 a6 e5 87 a6 e7 90 86 e3 82 ................
0af0: 92 e4 b8 ad e6 96 ad e3 81 95 e3 82 8c e3 81 be ................
0b00: e3 81 97 e3 81 9f e3 80 82 0a 09 45 52 52 4f 52 ...........ERROR
0b10: 5f 54 4d 50 5f 4f 50 45 4e 3d 30 78 38 30 32 35 _TMP_OPEN=0x8025
0b20: 2c 2f 2f 20 20 20 20 20 20 20 20 20 20 e4 bd 9c ,// ...
0b30: e6 a5 ad e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 ................
0b40: 81 8c e4 bd 9c e6 88 90 e3 81 a7 e3 81 8d e3 81 ................
0b50: be e3 81 9b e3 82 93 e3 80 82 0a 09 45 52 52 4f ............ERRO
0b60: 52 5f 41 52 43 5f 52 45 41 44 5f 4f 4e 4c 59 3d R_ARC_READ_ONLY=
0b70: 30 78 38 30 32 37 2c 2f 2f 20 20 20 20 20 e6 9b 0x8027,// ..
0b80: b8 e3 81 8d e8 be bc e3 81 bf e5 b0 82 e7 94 a8 ................
0b90: e5 b1 9e e6 80 a7 e3 81 ae e6 9b b8 e5 ba ab e3 ................
0ba0: 81 ab e5 af be e3 81 99 e3 82 8b e6 93 8d e4 bd ................
0bb0: 9c e3 81 af e3 81 a7 e3 81 8d e3 81 be e3 81 9b ................
0bc0: e3 82 93 e3 80 82 0a 09 45 52 52 4f 52 5f 4e 4f ........ERROR_NO
0bd0: 54 5f 46 49 4e 44 5f 41 52 43 5f 46 49 4c 45 3d T_FIND_ARC_FILE=
0be0: 30 78 38 30 32 39 2c 2f 2f 20 e6 8c 87 e5 ae 9a 0x8029,// ......
0bf0: e3 81 95 e3 82 8c e3 81 9f e3 83 87 e3 82 a3 e3 ................
0c00: 83 ac e3 82 af e3 83 88 e3 83 aa e3 81 ab e3 81 ................
0c10: af e6 9b b8 e5 ba ab e3 81 8c e3 81 82 e3 82 8a ................
0c20: e3 81 be e3 81 9b e3 82 93 e3 81 a7 e3 81 97 e3 ................
0c30: 81 9f e3 80 82 0a 09 45 52 52 4f 52 5f 52 45 53 .......ERROR_RES
0c40: 50 4f 4e 53 45 5f 52 45 41 44 3d 30 78 38 30 32 PONSE_READ=0x802
0c50: 41 2c 2f 2f 20 20 20 20 20 e3 83 ac e3 82 b9 e3 A,// .......
0c60: 83 9d e3 83 b3 e3 82 b9 e3 83 95 e3 82 a1 e3 82 ................
0c70: a4 e3 83 ab e3 81 ae e8 aa ad e3 81 bf e8 be bc ................
0c80: e3 81 bf e6 99 82 e3 81 ab e3 82 a8 e3 83 a9 e3 ................
0c90: 83 bc e3 81 8c e7 94 9f e3 81 98 e3 81 be e3 81 ................
0ca0: 97 e3 81 9f e3 80 82 0a 09 45 52 52 4f 52 5f 54 .........ERROR_T
0cb0: 4d 50 5f 43 4f 50 59 3d 30 78 38 30 32 43 2c 2f MP_COPY=0x802C,/
0cc0: 2f 20 20 20 20 20 20 20 20 20 20 e4 bd 9c e6 a5 / .....
0cd0: ad e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 81 ae ................
0ce0: e6 9b b8 e5 ba ab e3 81 b8 e3 81 ae e6 9b b8 e3 ................
0cf0: 81 8d e6 88 bb e3 81 97 e3 81 8c e3 81 a7 e3 81 ................
0d00: 8d e3 81 be e3 81 9b e3 82 93 e3 81 a7 e3 81 97 ................
0d10: e3 81 9f e3 80 82 0a 09 45 52 52 4f 52 5f 4e 4f ........ERROR_NO
0d20: 54 5f 46 49 4e 44 5f 46 49 4c 45 3d 30 78 38 30 T_FIND_FILE=0x80
0d30: 33 31 2c 2f 2f 20 20 20 20 20 e3 83 95 e3 82 a1 31,// ......
0d40: e3 82 a4 e3 83 ab e3 81 8c e8 a6 8b e3 81 a4 e3 ................
0d50: 81 8b e3 82 8a e3 81 be e3 81 9b e3 82 93 e3 80 ................
0d60: 82 0a 09 45 52 52 4f 52 5f 47 45 54 5f 41 54 54 ...ERROR_GET_ATT
0d70: 52 49 42 55 54 45 53 3d 30 78 38 30 33 34 2c 2f RIBUTES=0x8034,/
0d80: 2f 20 20 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 83 / ...........
0d90: ab e5 b1 9e e6 80 a7 e3 81 8c e5 8f 96 e5 be 97 ................
0da0: e3 81 a7 e3 81 8d e3 81 be e3 81 9b e3 82 93 e3 ................
0db0: 80 82 0a 09 45 52 52 4f 52 5f 47 45 54 5f 49 4e ....ERROR_GET_IN
0dc0: 46 4f 52 4d 41 54 49 4f 4e 3d 30 78 38 30 33 36 FORMATION=0x8036
0dd0: 2c 2f 2f 20 20 20 e3 83 95 e3 82 a1 e3 82 a4 e3 ,// ..........
0de0: 83 ab e6 83 85 e5 a0 b1 e3 81 8c e5 8f 96 e5 be ................
0df0: 97 e3 81 a7 e3 81 8d e3 81 be e3 81 9b e3 82 93 ................
0e00: e3 80 82 0a 7d 0a 0a 2f 2f 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 e3 82 b3 ---------.// ...
0e50: e3 83 bc e3 83 ab e3 83 90 e3 83 83 e3 82 af e9 ................
0e60: 96 a2 e6 95 b0 e3 81 ae e8 bf 94 e7 ad 94 e7 94 ................
0e70: a8 e5 9e 8b 0a 2f 2f 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0eb0: 2d 2d 2d 2d 2d 2d 2d 0a 0a 65 6e 75 6d 20 42 67 -------..enum Bg
0ec0: 61 41 6e 73 77 65 72 0a 7b 0a 09 4d 65 6c 74 49 aAnswer.{..MeltI
0ed0: 74 2c 20 53 6b 69 70 49 74 2c 20 41 62 6f 72 74 t, SkipIt, Abort
0ee0: 0a 7d 0a 0a 2f 2f 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: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0f20: 2d 2d 2d 2d 2d 2d 0a 2f 2f 20 46 69 6c 65 70 0a ------.// Filep.
0f30: 2f 2f 20 20 20 44 e8 a8 80 e8 aa 9e e3 82 89 e3 // D..........
0f40: 81 97 e3 81 8b e3 82 89 e3 81 ac e3 81 ae e3 81 ................
0f50: a7 e3 81 99 e3 81 8c 7a 6c 69 62 e3 82 84 6c 69 .......zlib...li
0f60: 62 62 7a 32 e3 81 a8 e7 b0 a1 e5 8d 98 e3 81 ab bbz2............
0f70: e9 80 a3 e6 90 ba e3 81 99 e3 82 8b 0a 2f 2f 20 .............//
0f80: 20 20 e9 83 bd e5 90 88 e4 b8 8a 73 74 64 2e 63 .........std.c
0f90: 2e 73 74 64 69 6f 2e 46 49 4c 45 2a e3 81 a7 e3 .stdio.FILE*....
0fa0: 83 95 e3 82 a1 e3 82 a4 e3 83 ab e3 82 92 e8 aa ................
0fb0: ad e3 81 bf e6 9b b8 e3 81 8d e3 81 97 e3 81 be ................
0fc0: e3 81 99 e3 80 82 0a 2f 2f 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 65 78 74 65 72 ---------..exter
1010: 6e 28 43 29 0a 7b 0a 09 2f 2f 20 73 74 64 69 6f n(C).{..// stdio
1020: 2e 68 0a 20 20 20 20 69 6e 74 20 66 69 6c 65 6e .h. int filen
1030: 6f 28 20 46 49 4c 45 20 2a 66 70 20 29 20 7b 20 o( FILE *fp ) {
1040: 72 65 74 75 72 6e 20 66 70 2e 5f 66 69 6c 65 3b return fp._file;
1050: 20 7d 0a 09 2f 2f 20 69 6f 2e 68 0a 09 69 6e 74 }..// io.h..int
1060: 20 6c 73 65 65 6b 28 20 69 6e 74 20 66 64 2c 20 lseek( int fd,
1070: 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 int offset, int
1080: 6d 6f 64 65 20 29 3b 0a 09 69 6e 74 20 64 75 70 mode );..int dup
1090: 28 20 69 6e 74 20 66 64 20 29 3b 20 0a 09 69 6e ( int fd ); ..in
10a0: 74 20 63 6c 6f 73 65 28 20 69 6e 74 20 66 64 20 t close( int fd
10b0: 29 3b 0a 7d 0a 0a 63 6c 61 73 73 20 46 69 6c 65 );.}..class File
10c0: 70 0a 7b 0a 09 70 72 69 76 61 74 65 20 46 49 4c p.{..private FIL
10d0: 45 2a 20 66 70 3b 0a 09 70 72 69 76 61 74 65 20 E* fp;..private
10e0: 74 68 69 73 28 20 46 49 4c 45 2a 20 70 20 29 20 this( FILE* p )
10f0: 7b 20 66 70 20 3d 20 70 3b 20 7d 0a 0a 09 73 74 { fp = p; }...st
1100: 61 74 69 63 20 46 69 6c 65 70 20 6f 70 65 6e 28 atic Filep open(
1110: 20 73 74 72 69 6e 67 20 66 69 6c 65 6e 61 6d 65 string filename
1120: 2c 20 62 6f 6f 6c 20 72 65 61 64 20 29 0a 09 7b , bool read )..{
1130: 0a 09 09 46 49 4c 45 2a 20 66 70 20 3d 20 66 6f ...FILE* fp = fo
1140: 70 65 6e 28 20 74 6f 53 74 72 69 6e 67 7a 28 66 pen( toStringz(f
1150: 69 6c 65 6e 61 6d 65 29 2c 20 72 65 61 64 3f 22 ilename), read?"
1160: 72 62 22 3a 22 77 62 22 20 29 3b 0a 09 09 72 65 rb":"wb" );...re
1170: 74 75 72 6e 20 28 66 70 20 3f 20 6e 65 77 20 46 turn (fp ? new F
1180: 69 6c 65 70 28 66 70 29 20 3a 20 6e 75 6c 6c 29 ilep(fp) : null)
1190: 3b 0a 09 7d 0a 0a 09 69 6e 74 20 64 75 70 5f 68 ;..}...int dup_h
11a0: 61 6e 28 29 0a 09 7b 0a 09 09 69 6e 74 20 66 64 an()..{...int fd
11b0: 20 3d 20 64 75 70 28 20 66 69 6c 65 6e 6f 28 66 = dup( fileno(f
11c0: 70 29 20 29 3b 0a 09 09 6c 73 65 65 6b 28 20 66 p) );...lseek( f
11d0: 64 2c 20 63 75 72 28 29 2c 20 30 20 29 3b 0a 09 d, cur(), 0 );..
11e0: 09 72 65 74 75 72 6e 20 66 64 3b 0a 09 7d 0a 0a .return fd;..}..
11f0: 09 76 6f 69 64 5b 5d 20 72 65 61 64 28 20 69 6e .void[] read( in
1200: 74 20 73 69 7a 20 29 0a 09 7b 0a 09 09 63 68 61 t siz )..{...cha
1210: 72 5b 5d 20 62 75 66 3b 20 62 75 66 2e 6c 65 6e r[] buf; buf.len
1220: 67 74 68 20 3d 20 73 69 7a 3b 0a 09 09 69 6e 74 gth = siz;...int
1230: 20 72 73 69 7a 20 3d 20 66 72 65 61 64 28 20 62 rsiz = fread( b
1240: 75 66 2e 70 74 72 2c 20 31 2c 20 73 69 7a 2c 20 uf.ptr, 1, siz,
1250: 66 70 20 29 3b 0a 09 09 69 66 28 20 72 73 69 7a fp );...if( rsiz
1260: 20 3c 20 30 20 29 0a 09 09 09 74 68 72 6f 77 20 < 0 )....throw
1270: 6e 65 77 20 42 67 61 4d 65 6c 74 65 72 45 72 72 new BgaMelterErr
1280: 6f 72 28 45 52 52 4f 52 5f 46 49 4c 45 5f 4f 50 or(ERROR_FILE_OP
1290: 45 4e 29 3b 0a 09 09 62 75 66 2e 6c 65 6e 67 74 EN);...buf.lengt
12a0: 68 20 3d 20 72 73 69 7a 3b 0a 09 09 72 65 74 75 h = rsiz;...retu
12b0: 72 6e 20 62 75 66 3b 0a 09 7d 0a 0a 09 76 6f 69 rn buf;..}...voi
12c0: 64 20 77 72 69 74 65 28 20 76 6f 69 64 5b 5d 20 d write( void[]
12d0: 62 75 66 20 29 0a 09 7b 0a 09 09 77 68 69 6c 65 buf )..{...while
12e0: 28 20 62 75 66 2e 6c 65 6e 67 74 68 20 3e 20 30 ( buf.length > 0
12f0: 20 29 0a 09 09 7b 0a 09 09 09 69 6e 74 20 72 73 )...{....int rs
1300: 69 7a 20 3d 20 66 77 72 69 74 65 28 20 62 75 66 iz = fwrite( buf
1310: 2e 70 74 72 2c 20 31 2c 20 62 75 66 2e 6c 65 6e .ptr, 1, buf.len
1320: 67 74 68 2c 20 66 70 20 29 3b 0a 09 09 09 69 66 gth, fp );....if
1330: 28 20 72 73 69 7a 20 3c 20 30 20 29 20 72 65 74 ( rsiz < 0 ) ret
1340: 75 72 6e 3b 0a 09 09 09 62 75 66 20 3d 20 62 75 urn;....buf = bu
1350: 66 5b 72 73 69 7a 20 2e 2e 20 24 5d 3b 0a 09 09 f[rsiz .. $];...
1360: 7d 0a 09 7d 0a 0a 09 69 6e 74 20 63 75 72 28 29 }..}...int cur()
1370: 0a 09 7b 0a 09 09 72 65 74 75 72 6e 20 66 74 65 ..{...return fte
1380: 6c 6c 28 66 70 29 3b 0a 09 7d 0a 0a 09 76 6f 69 ll(fp);..}...voi
1390: 64 20 73 65 65 6b 5f 74 6f 28 20 69 6e 74 20 69 d seek_to( int i
13a0: 20 29 0a 09 7b 0a 09 09 66 73 65 65 6b 28 20 66 )..{...fseek( f
13b0: 70 2c 20 69 2c 20 73 74 64 2e 63 2e 73 74 64 69 p, i, std.c.stdi
13c0: 6f 2e 53 45 45 4b 5f 53 45 54 20 29 3b 0a 09 7d o.SEEK_SET );..}
13d0: 0a 0a 09 76 6f 69 64 20 63 6c 6f 73 65 28 29 0a ...void close().
13e0: 09 7b 0a 09 09 66 63 6c 6f 73 65 28 66 70 29 3b .{...fclose(fp);
13f0: 0a 09 7d 0a 0a 09 46 49 4c 45 2a 20 67 65 74 5f ..}...FILE* get_
1400: 66 70 28 29 0a 09 7b 0a 09 09 72 65 74 75 72 6e fp()..{...return
1410: 20 66 70 3b 0a 09 7d 0a 7d 0a 0a 0a 2f 2f 2d 2d fp;..}.}...//--
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 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 0a 2f --------------./
1460: 2f 20 e3 83 a1 e3 82 a4 e3 83 b3 e3 82 af e3 83 / ..............
1470: a9 e3 82 b9 0a 2f 2f 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 2d 2d ----------------
14a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
14b0: 2d 2d 2d 2d 2d 2d 2d 0a 0a 63 6c 61 73 73 20 42 -------..class B
14c0: 67 61 4d 65 6c 74 65 72 0a 7b 0a 09 61 6c 69 61 gaMelter.{..alia
14d0: 73 20 42 67 61 41 6e 73 77 65 72 20 64 65 6c 65 s BgaAnswer dele
14e0: 67 61 74 65 28 72 65 66 20 42 67 61 48 65 61 64 gate(ref BgaHead
14f0: 65 72 29 20 46 69 6c 65 48 61 6e 64 6c 65 72 3b er) FileHandler;
1500: 0a 09 61 6c 69 61 73 20 42 67 61 41 6e 73 77 65 ..alias BgaAnswe
1510: 72 20 64 65 6c 65 67 61 74 65 28 69 6e 74 2c 20 r delegate(int,
1520: 69 6e 74 29 20 20 20 20 20 20 20 20 50 72 6f 67 int) Prog
1530: 72 65 73 73 48 61 6e 64 6c 65 72 3b 0a 0a 09 70 ressHandler;...p
1540: 72 69 76 61 74 65 20 46 69 6c 65 70 20 66 70 20 rivate Filep fp
1550: 3d 20 6e 75 6c 6c 3b 0a 0a 09 74 68 69 73 28 20 = null;...this(
1560: 73 74 72 69 6e 67 20 61 72 63 5f 6e 61 6d 65 20 string arc_name
1570: 29 0a 09 7b 0a 09 09 66 70 20 3d 20 46 69 6c 65 )..{...fp = File
1580: 70 2e 6f 70 65 6e 28 20 61 72 63 5f 6e 61 6d 65 p.open( arc_name
1590: 2c 20 74 72 75 65 20 29 3b 0a 09 09 69 66 28 20 , true );...if(
15a0: 66 70 20 69 73 20 6e 75 6c 6c 20 29 0a 09 09 09 fp is null )....
15b0: 74 68 72 6f 77 20 6e 65 77 20 42 67 61 4d 65 6c throw new BgaMel
15c0: 74 65 72 45 72 72 6f 72 28 45 52 52 4f 52 5f 46 terError(ERROR_F
15d0: 49 4c 45 5f 4f 50 45 4e 29 3b 0a 09 7d 0a 0a 09 ILE_OPEN);..}...
15e0: 76 6f 69 64 20 63 6c 6f 73 65 28 29 0a 09 7b 0a void close()..{.
15f0: 09 09 69 66 28 20 66 70 20 29 20 7b 20 66 70 2e ..if( fp ) { fp.
1600: 63 6c 6f 73 65 28 29 3b 20 66 70 20 3d 20 6e 75 close(); fp = nu
1610: 6c 6c 3b 20 7d 0a 09 7d 0a 0a 09 76 6f 69 64 20 ll; }..}...void
1620: 73 74 61 72 74 28 20 46 69 6c 65 48 61 6e 64 6c start( FileHandl
1630: 65 72 20 66 68 2c 20 50 72 6f 67 72 65 73 73 48 er fh, ProgressH
1640: 61 6e 64 6c 65 72 20 70 68 20 29 0a 09 7b 0a 09 andler ph )..{..
1650: 09 74 72 79 0a 09 09 7b 0a 09 09 09 2f 2f 20 e3 .try...{....// .
1660: 83 98 e3 83 83 e3 83 80 e3 82 92 e6 8e a2 e3 81 ................
1670: 99 0a 09 09 09 69 6e 74 20 68 70 6f 73 20 3d 20 .....int hpos =
1680: 66 69 6e 64 5f 68 65 61 64 65 72 28 29 3b 0a 09 find_header();..
1690: 09 09 69 66 28 20 68 70 6f 73 20 3d 3d 20 2d 31 ..if( hpos == -1
16a0: 20 29 0a 09 09 09 09 74 68 72 6f 77 20 6e 65 77 ).....throw new
16b0: 20 42 67 61 4d 65 6c 74 65 72 45 72 72 6f 72 28 BgaMelterError(
16c0: 45 52 52 4f 52 5f 4e 4f 54 5f 41 52 43 5f 46 49 ERROR_NOT_ARC_FI
16d0: 4c 45 29 3b 0a 09 09 09 66 70 2e 73 65 65 6b 5f LE);....fp.seek_
16e0: 74 6f 28 68 70 6f 73 29 3b 0a 0a 09 09 09 2f 2f to(hpos);.....//
16f0: 20 e3 83 ab e3 83 bc e3 83 97 ef bc 9a 0a 09 09 ...............
1700: 09 2f 2f 20 e3 83 98 e3 83 83 e3 83 80 e8 aa ad .// ............
1710: e3 81 bf e3 81 a8 e3 82 8a 0a 09 09 09 42 67 61 .............Bga
1720: 48 65 61 64 65 72 20 68 64 72 3b 0a 09 09 09 77 Header hdr;....w
1730: 68 69 6c 65 28 20 72 65 61 64 5f 68 65 61 64 65 hile( read_heade
1740: 72 28 68 64 72 29 20 29 0a 09 09 09 7b 0a 09 09 r(hdr) )....{...
1750: 09 09 2f 2f 20 e6 ac a1 e3 81 ae e3 83 98 e3 83 ..// ...........
1760: 83 e3 83 80 e4 bd 8d e7 bd ae e3 82 92 e8 a8 88 ................
1770: e7 ae 97 e3 81 97 e3 81 a6 e3 81 8a e3 81 8f 0a ................
1780: 09 09 09 09 75 69 6e 74 20 6e 65 78 74 70 6f 73 ....uint nextpos
1790: 20 3d 20 66 70 2e 63 75 72 28 29 20 2b 20 68 64 = fp.cur() + hd
17a0: 72 2e 63 6f 6d 70 72 65 73 73 65 64 5f 73 69 7a r.compressed_siz
17b0: 65 3b 0a 09 09 09 09 74 72 79 0a 09 09 09 09 7b e;.....try.....{
17c0: 0a 09 09 09 09 09 2f 2f 20 63 61 6c 6c 62 61 63 ......// callbac
17d0: 6b 0a 09 09 09 09 09 42 67 61 41 6e 73 77 65 72 k......BgaAnswer
17e0: 20 61 20 3d 20 66 68 28 68 64 72 29 3b 0a 09 09 a = fh(hdr);...
17f0: 09 09 09 69 66 28 20 61 20 3d 3d 20 42 67 61 41 ...if( a == BgaA
1800: 6e 73 77 65 72 2e 41 62 6f 72 74 20 29 20 20 72 nswer.Abort ) r
1810: 65 74 75 72 6e 3b 0a 09 09 09 09 09 69 66 28 20 eturn;......if(
1820: 61 20 3d 3d 20 42 67 61 41 6e 73 77 65 72 2e 53 a == BgaAnswer.S
1830: 6b 69 70 49 74 20 29 20 63 6f 6e 74 69 6e 75 65 kipIt ) continue
1840: 3b 0a 0a 09 09 09 09 09 2f 2f 20 e5 87 ba e5 8a ;.......// .....
1850: 9b e5 85 88 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ab ................
1860: e3 82 92 e9 96 8b e3 81 8f 0a 09 09 09 09 09 69 ...............i
1870: 66 28 20 6c 61 73 74 43 68 61 72 28 68 64 72 2e f( lastChar(hdr.
1880: 66 6e 61 6d 65 29 3d 3d 27 5c 5c 27 20 29 0a 09 fname)=='\\' )..
1890: 09 09 09 09 20 20 7b 20 70 61 74 68 4d 61 6b 65 .... { pathMake
18a0: 28 68 64 72 2e 66 6e 61 6d 65 29 3b 20 63 6f 6e (hdr.fname); con
18b0: 74 69 6e 75 65 3b 20 7d 0a 0a 09 09 09 09 09 46 tinue; }.......F
18c0: 69 6c 65 70 20 6f 75 74 66 20 3d 20 46 69 6c 65 ilep outf = File
18d0: 70 2e 6f 70 65 6e 28 20 70 61 74 68 4d 61 6b 65 p.open( pathMake
18e0: 28 68 64 72 2e 66 6e 61 6d 65 29 2c 20 66 61 6c (hdr.fname), fal
18f0: 73 65 20 29 3b 0a 09 09 09 09 09 69 66 28 20 6f se );......if( o
1900: 75 74 66 20 69 73 20 6e 75 6c 6c 20 29 0a 09 09 utf is null )...
1910: 09 09 09 09 74 68 72 6f 77 20 6e 65 77 20 42 67 ....throw new Bg
1920: 61 4d 65 6c 74 65 72 45 72 72 6f 72 28 45 52 52 aMelterError(ERR
1930: 4f 52 5f 46 49 4c 45 5f 4f 50 45 4e 29 3b 0a 0a OR_FILE_OPEN);..
1940: 09 09 09 09 09 2f 2f 20 e8 a7 a3 e5 87 8d e5 87 .....// ........
1950: a6 e7 90 86 0a 09 09 09 09 09 62 6f 6f 6c 20 62 ..........bool b
1960: 43 6f 6e 74 69 6e 75 65 20 3d 20 74 72 75 65 3b Continue = true;
1970: 0a 09 09 09 09 09 69 66 28 20 21 69 73 5f 63 6f ......if( !is_co
1980: 6d 70 72 65 73 73 65 64 28 68 64 72 29 20 29 0a mpressed(hdr) ).
1990: 09 09 09 09 09 09 62 43 6f 6e 74 69 6e 75 65 20 ......bContinue
19a0: 3d 20 4e 63 44 65 63 28 20 68 64 72 2e 6f 72 69 = NcDec( hdr.ori
19b0: 67 69 6e 61 6c 5f 73 69 7a 65 2c 20 6f 75 74 66 ginal_size, outf
19c0: 2c 20 70 68 20 29 3b 0a 09 09 09 09 09 65 6c 73 , ph );......els
19d0: 65 20 69 66 28 20 68 64 72 2e 6d 65 74 68 6f 64 e if( hdr.method
19e0: 20 3d 3d 20 22 47 5a 49 50 22 20 29 0a 09 09 09 == "GZIP" )....
19f0: 09 09 09 62 43 6f 6e 74 69 6e 75 65 20 3d 20 47 ...bContinue = G
1a00: 7a 44 65 63 28 20 68 64 72 2e 63 6f 6d 70 72 65 zDec( hdr.compre
1a10: 73 73 65 64 5f 73 69 7a 65 2c 20 68 64 72 2e 6f ssed_size, hdr.o
1a20: 72 69 67 69 6e 61 6c 5f 73 69 7a 65 2c 20 6f 75 riginal_size, ou
1a30: 74 66 2c 20 70 68 20 29 3b 0a 09 09 09 09 09 65 tf, ph );......e
1a40: 6c 73 65 20 69 66 28 20 68 64 72 2e 6d 65 74 68 lse if( hdr.meth
1a50: 6f 64 20 3d 3d 20 22 42 5a 32 5c 30 22 20 29 0a od == "BZ2\0" ).
1a60: 09 09 09 09 09 09 62 43 6f 6e 74 69 6e 75 65 20 ......bContinue
1a70: 3d 20 42 7a 44 65 63 28 20 68 64 72 2e 6f 72 69 = BzDec( hdr.ori
1a80: 67 69 6e 61 6c 5f 73 69 7a 65 2c 20 6f 75 74 66 ginal_size, outf
1a90: 2c 20 70 68 20 29 3b 0a 0a 09 09 09 09 09 2f 2f , ph );.......//
1aa0: 20 e9 96 89 e3 81 98 e3 81 a6 e5 b1 9e e6 80 a7 ...............
1ab0: e8 a8 ad e5 ae 9a 0a 09 09 09 09 09 6f 75 74 66 ............outf
1ac0: 2e 63 6c 6f 73 65 28 29 3b 0a 09 09 09 09 09 64 .close();......d
1ad0: 6f 73 53 65 74 46 54 69 6d 65 28 20 68 64 72 2e osSetFTime( hdr.
1ae0: 66 6e 61 6d 65 2c 20 68 64 72 2e 64 61 74 65 2c fname, hdr.date,
1af0: 20 68 64 72 2e 74 69 6d 65 20 29 3b 0a 09 09 09 hdr.time );....
1b00: 09 09 53 65 74 46 69 6c 65 41 74 74 72 69 62 75 ..SetFileAttribu
1b10: 74 65 73 41 28 20 74 6f 53 74 72 69 6e 67 7a 28 tesA( toStringz(
1b20: 68 64 72 2e 66 6e 61 6d 65 29 2c 20 68 64 72 2e hdr.fname), hdr.
1b30: 61 74 74 72 69 62 20 29 3b 0a 09 09 09 09 09 69 attrib );......i
1b40: 66 28 20 21 62 43 6f 6e 74 69 6e 75 65 20 29 0a f( !bContinue ).
1b50: 09 09 09 09 09 09 72 65 74 75 72 6e 3b 0a 09 09 ......return;...
1b60: 09 09 7d 0a 09 09 09 09 66 69 6e 61 6c 6c 79 20 ..}.....finally
1b70: 7b 20 66 70 2e 73 65 65 6b 5f 74 6f 28 6e 65 78 { fp.seek_to(nex
1b80: 74 70 6f 73 29 3b 20 7d 0a 09 09 09 7d 0a 09 09 tpos); }....}...
1b90: 7d 0a 09 09 66 69 6e 61 6c 6c 79 20 7b 20 63 6c }...finally { cl
1ba0: 6f 73 65 28 29 3b 20 7d 0a 09 7d 0a 0a 09 73 74 ose(); }..}...st
1bb0: 61 74 69 63 20 69 6e 74 20 73 69 67 6e 65 64 5f atic int signed_
1bc0: 63 68 61 72 28 20 63 68 61 72 20 63 20 29 0a 09 char( char c )..
1bd0: 7b 0a 09 09 69 6e 74 20 63 6e 20 3d 20 63 3b 0a {...int cn = c;.
1be0: 09 09 72 65 74 75 72 6e 20 28 63 6e 3e 3d 30 78 ..return (cn>=0x
1bf0: 38 30 20 3f 20 63 6e 7c 30 78 66 66 66 66 66 66 80 ? cn|0xffffff
1c00: 30 30 20 3a 20 63 6e 29 3b 0a 09 7d 0a 0a 09 70 00 : cn);..}...p
1c10: 72 69 76 61 74 65 20 69 6e 74 20 66 69 6e 64 5f rivate int find_
1c20: 68 65 61 64 65 72 28 29 0a 09 7b 0a 09 09 73 74 header()..{...st
1c30: 72 69 6e 67 20 64 61 74 20 3d 20 63 61 73 74 28 ring dat = cast(
1c40: 73 74 72 69 6e 67 29 20 66 70 2e 72 65 61 64 28 string) fp.read(
1c50: 30 78 31 30 30 30 30 29 3b 0a 0a 09 09 66 6f 72 0x10000);....for
1c60: 28 20 69 6e 74 20 69 3d 30 3b 20 69 3c 64 61 74 ( int i=0; i<dat
1c70: 2e 6c 65 6e 67 74 68 2d 32 38 3b 20 2b 2b 69 20 .length-28; ++i
1c80: 29 0a 09 09 7b 0a 09 09 09 69 66 28 20 64 61 74 )...{....if( dat
1c90: 5b 69 2b 34 5d 21 3d 27 47 27 20 26 26 20 64 61 [i+4]!='G' && da
1ca0: 74 5b 69 2b 34 5d 21 3d 27 42 27 20 29 20 63 6f t[i+4]!='B' ) co
1cb0: 6e 74 69 6e 75 65 3b 0a 09 09 09 69 66 28 20 64 ntinue;....if( d
1cc0: 61 74 5b 69 2b 35 5d 21 3d 27 5a 27 20 20 20 20 at[i+5]!='Z'
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 20 )
1ce0: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 69 66 28 continue;....if(
1cf0: 20 64 61 74 5b 69 2b 36 5d 21 3d 27 49 27 20 26 dat[i+6]!='I' &
1d00: 26 20 64 61 74 5b 69 2b 36 5d 21 3d 27 32 27 20 & dat[i+6]!='2'
1d10: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 69 ) continue;....i
1d20: 66 28 20 64 61 74 5b 69 2b 37 5d 21 3d 27 50 27 f( dat[i+7]!='P'
1d30: 20 26 26 20 64 61 74 5b 69 2b 37 5d 21 3d 27 5c && dat[i+7]!='\
1d40: 30 27 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 09 0') continue;...
1d50: 09 09 20 69 6e 74 20 63 68 65 63 6b 73 75 6d 20 .. int checksum
1d60: 3d 20 64 61 74 5b 69 2b 30 5d 2b 28 64 61 74 5b = dat[i+0]+(dat[
1d70: 69 2b 31 5d 3c 3c 38 29 2b 28 64 61 74 5b 69 2b i+1]<<8)+(dat[i+
1d80: 32 5d 3c 3c 31 36 29 2b 28 64 61 74 5b 69 2b 33 2]<<16)+(dat[i+3
1d90: 5d 3c 3c 32 34 29 3b 0a 09 09 09 75 69 6e 74 20 ]<<24);....uint
1da0: 66 6e 6c 65 6e 20 20 20 20 3d 20 64 61 74 5b 69 fnlen = dat[i
1db0: 2b 32 34 5d 2b 28 64 61 74 5b 69 2b 32 35 5d 3c +24]+(dat[i+25]<
1dc0: 3c 38 29 2b 64 61 74 5b 69 2b 32 36 5d 2b 28 64 <8)+dat[i+26]+(d
1dd0: 61 74 5b 69 2b 32 37 5d 3c 3c 38 29 3b 0a 09 09 at[i+27]<<8);...
1de0: 09 69 66 28 20 69 2b 32 38 2b 66 6e 6c 65 6e 20 .if( i+28+fnlen
1df0: 3e 20 64 61 74 2e 6c 65 6e 67 74 68 20 29 20 20 > dat.length )
1e00: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a continue;.
1e10: 0a 09 09 09 69 6e 74 20 73 75 6d 20 3d 20 30 3b ....int sum = 0;
1e20: 0a 09 09 09 66 6f 72 28 20 69 6e 74 20 6a 3d 69 ....for( int j=i
1e30: 2b 34 3b 20 6a 21 3d 69 2b 32 38 2b 66 6e 6c 65 +4; j!=i+28+fnle
1e40: 6e 3b 20 2b 2b 6a 20 29 0a 09 09 09 09 73 75 6d n; ++j ).....sum
1e50: 20 2b 3d 20 73 69 67 6e 65 64 5f 63 68 61 72 28 += signed_char(
1e60: 64 61 74 5b 6a 5d 29 3b 0a 09 09 09 69 66 28 20 dat[j]);....if(
1e70: 63 68 65 63 6b 73 75 6d 20 3d 3d 20 73 75 6d 20 checksum == sum
1e80: 29 0a 09 09 09 09 72 65 74 75 72 6e 20 69 3b 0a ).....return i;.
1e90: 09 09 7d 0a 0a 09 09 72 65 74 75 72 6e 20 2d 31 ..}....return -1
1ea0: 3b 0a 09 7d 0a 0a 09 70 72 69 76 61 74 65 20 62 ;..}...private b
1eb0: 6f 6f 6c 20 72 65 61 64 5f 68 65 61 64 65 72 28 ool read_header(
1ec0: 20 6f 75 74 20 42 67 61 48 65 61 64 65 72 20 68 out BgaHeader h
1ed0: 64 72 20 29 0a 09 7b 0a 09 09 2f 2f 20 e3 83 aa dr )..{...// ...
1ee0: e3 83 88 e3 83 ab e3 82 a8 e3 83 b3 e3 83 87 e3 ................
1ef0: 82 a3 e3 82 a2 e3 83 b3 e3 82 92 e4 bb ae e5 ae ................
1f00: 9a e3 80 82 e3 83 98 e3 83 83 e3 83 80 e8 aa ad ................
1f10: e3 81 bf e8 be bc e3 81 bf 0a 09 09 73 74 72 69 ............stri
1f20: 6e 67 20 62 75 66 20 3d 20 63 61 73 74 28 73 74 ng buf = cast(st
1f30: 72 69 6e 67 29 20 66 70 2e 72 65 61 64 28 32 38 ring) fp.read(28
1f40: 29 3b 0a 09 09 69 66 28 20 62 75 66 2e 6c 65 6e );...if( buf.len
1f50: 67 74 68 20 3c 20 32 38 20 29 20 72 65 74 75 72 gth < 28 ) retur
1f60: 6e 20 66 61 6c 73 65 3b 0a 09 09 62 75 66 2e 6c n false;...buf.l
1f70: 65 6e 67 74 68 20 3d 20 42 67 61 48 65 61 64 65 ength = BgaHeade
1f80: 72 2e 73 69 7a 65 6f 66 3b 0a 09 09 68 64 72 20 r.sizeof;...hdr
1f90: 3d 20 28 63 61 73 74 28 42 67 61 48 65 61 64 65 = (cast(BgaHeade
1fa0: 72 5b 5d 29 20 62 75 66 29 5b 30 5d 3b 0a 09 09 r[]) buf)[0];...
1fb0: 68 64 72 2e 66 6e 61 6d 65 20 3d 20 22 22 3b 0a hdr.fname = "";.
1fc0: 0a 09 09 2f 2f 20 e3 83 95 e3 82 a1 e3 82 a4 e3 ...// ..........
1fd0: 83 ab e5 90 8d 0a 09 09 68 64 72 2e 66 6e 61 6d ........hdr.fnam
1fe0: 65 20 3d 20 63 61 73 74 28 73 74 72 69 6e 67 29 e = cast(string)
1ff0: 20 66 70 2e 72 65 61 64 28 68 64 72 2e 64 69 72 fp.read(hdr.dir
2000: 5f 6e 61 6d 65 5f 6c 65 6e 20 2b 20 68 64 72 2e _name_len + hdr.
2010: 66 69 6c 65 5f 6e 61 6d 65 5f 6c 65 6e 29 3b 0a file_name_len);.
2020: 09 09 69 66 28 20 68 64 72 2e 66 6e 61 6d 65 2e ..if( hdr.fname.
2030: 6c 65 6e 67 74 68 20 3c 20 68 64 72 2e 64 69 72 length < hdr.dir
2040: 5f 6e 61 6d 65 5f 6c 65 6e 20 2b 20 68 64 72 2e _name_len + hdr.
2050: 66 69 6c 65 5f 6e 61 6d 65 5f 6c 65 6e 20 29 20 file_name_len )
2060: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 09 return false;...
2070: 09 2f 2f 20 e3 83 81 e3 82 a7 e3 83 83 e3 82 af .// ............
2080: e3 82 b5 e3 83 a0 0a 09 09 69 6e 74 20 73 75 6d .........int sum
2090: 20 3d 20 30 3b 0a 09 09 66 6f 72 28 20 69 6e 74 = 0;...for( int
20a0: 20 69 3d 34 3b 20 69 21 3d 32 38 3b 20 2b 2b 69 i=4; i!=28; ++i
20b0: 20 29 20 20 20 20 73 75 6d 20 2b 3d 20 73 69 67 ) sum += sig
20c0: 6e 65 64 5f 63 68 61 72 28 62 75 66 5b 69 5d 29 ned_char(buf[i])
20d0: 3b 0a 09 09 66 6f 72 65 61 63 68 28 20 63 68 61 ;...foreach( cha
20e0: 72 20 63 20 3b 20 68 64 72 2e 66 6e 61 6d 65 20 r c ; hdr.fname
20f0: 29 20 73 75 6d 20 2b 3d 20 73 69 67 6e 65 64 5f ) sum += signed_
2100: 63 68 61 72 28 63 29 3b 0a 09 09 72 65 74 75 72 char(c);...retur
2110: 6e 20 28 73 75 6d 20 3d 3d 20 68 64 72 2e 63 68 n (sum == hdr.ch
2120: 65 63 6b 73 75 6d 29 3b 0a 09 7d 0a 0a 09 70 72 ecksum);..}...pr
2130: 69 76 61 74 65 20 62 6f 6f 6c 20 69 73 5f 63 6f ivate bool is_co
2140: 6d 70 72 65 73 73 65 64 28 20 72 65 66 20 42 67 mpressed( ref Bg
2150: 61 48 65 61 64 65 72 20 68 64 72 20 29 20 2f 2f aHeader hdr ) //
2160: 20 72 65 66 3d 6a 75 73 74 20 66 6f 72 20 6f 70 ref=just for op
2170: 74 69 6d 69 7a 61 74 69 6f 6e 0a 09 7b 0a 09 09 timization..{...
2180: 2f 2f 20 e3 83 98 e3 83 83 e3 83 80 e3 81 8b e3 // .............
2190: 82 89 e3 80 81 e3 83 95 e3 82 a1 e3 82 a4 e3 83 ................
21a0: ab e3 81 8c e5 9c a7 e7 b8 ae e6 a0 bc e7 b4 8d ................
21b0: e3 81 95 e3 82 8c e3 81 a6 e3 81 84 e3 82 8b e3 ................
21c0: 81 8b e3 81 a9 e3 81 86 e3 81 8b e3 82 92 e5 88 ................
21d0: a4 e5 ae 9a 0a 09 09 69 66 28 20 68 64 72 2e 61 .......if( hdr.a
21e0: 72 63 5f 74 79 70 65 3d 3d 32 20 29 0a 09 09 09 rc_type==2 )....
21f0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 09 09 return false;...
2200: 69 66 28 20 68 64 72 2e 61 72 63 5f 74 79 70 65 if( hdr.arc_type
2210: 3d 3d 30 20 26 26 20 68 64 72 2e 63 6f 6d 70 72 ==0 && hdr.compr
2220: 65 73 73 65 64 5f 73 69 7a 65 3d 3d 68 64 72 2e essed_size==hdr.
2230: 6f 72 69 67 69 6e 61 6c 5f 73 69 7a 65 20 29 0a original_size ).
2240: 09 09 7b 0a 09 09 09 69 6e 74 20 78 20 3d 20 68 ..{....int x = h
2250: 64 72 2e 66 6e 61 6d 65 2e 6c 61 73 74 49 6e 64 dr.fname.lastInd
2260: 65 78 4f 66 28 27 2e 27 29 3b 0a 09 09 09 69 66 exOf('.');....if
2270: 28 20 78 20 3d 3d 20 2d 31 20 29 0a 09 09 09 09 ( x == -1 ).....
2280: 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 09 09 09 return true;....
2290: 73 74 72 69 6e 67 20 65 78 74 20 3d 20 74 6f 4c string ext = toL
22a0: 6f 77 65 72 28 68 64 72 2e 66 6e 61 6d 65 5b 78 ower(hdr.fname[x
22b0: 2b 31 20 2e 2e 20 24 5d 29 3b 0a 09 09 09 69 66 +1 .. $]);....if
22c0: 28 20 65 78 74 3d 3d 22 61 72 63 22 20 7c 7c 20 ( ext=="arc" ||
22d0: 65 78 74 3d 3d 22 61 72 6a 22 20 7c 7c 20 65 78 ext=="arj" || ex
22e0: 74 3d 3d 22 62 7a 32 22 20 7c 7c 20 65 78 74 3d t=="bz2" || ext=
22f0: 3d 22 62 7a 61 22 0a 09 09 09 20 7c 7c 20 65 78 ="bza".... || ex
2300: 74 3d 3d 22 63 61 62 22 20 7c 7c 20 65 78 74 3d t=="cab" || ext=
2310: 3d 22 67 7a 22 20 20 7c 7c 20 65 78 74 3d 3d 22 ="gz" || ext=="
2320: 67 7a 61 22 20 7c 7c 20 65 78 74 3d 3d 22 6c 7a gza" || ext=="lz
2330: 68 22 0a 09 09 09 20 7c 7c 20 65 78 74 3d 3d 22 h".... || ext=="
2340: 6c 7a 73 22 20 7c 7c 20 65 78 74 3d 3d 22 70 61 lzs" || ext=="pa
2350: 6b 22 20 7c 7c 20 65 78 74 3d 3d 22 72 61 72 22 k" || ext=="rar"
2360: 20 7c 7c 20 65 78 74 3d 3d 22 74 61 7a 22 0a 09 || ext=="taz"..
2370: 09 09 20 7c 7c 20 65 78 74 3d 3d 22 74 62 7a 22 .. || ext=="tbz"
2380: 20 7c 7c 20 65 78 74 3d 3d 22 74 67 7a 22 20 7c || ext=="tgz" |
2390: 7c 20 65 78 74 3d 3d 22 7a 22 20 20 20 7c 7c 20 | ext=="z" ||
23a0: 65 78 74 3d 3d 22 7a 69 70 22 0a 09 09 09 20 7c ext=="zip".... |
23b0: 7c 20 65 78 74 3d 3d 22 7a 6f 6f 22 20 29 0a 09 | ext=="zoo" )..
23c0: 09 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ...return false;
23d0: 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e 20 74 72 ...}...return tr
23e0: 75 65 3b 0a 09 7d 0a 0a 09 73 74 61 74 69 63 20 ue;..}...static
23f0: 73 74 72 69 6e 67 20 70 61 74 68 4d 61 6b 65 28 string pathMake(
2400: 20 73 74 72 69 6e 67 20 70 61 74 68 20 29 0a 09 string path )..
2410: 7b 0a 09 09 63 68 61 72 2a 20 70 73 20 3d 20 63 {...char* ps = c
2420: 61 73 74 28 63 68 61 72 2a 29 74 6f 53 74 72 69 ast(char*)toStri
2430: 6e 67 7a 28 70 61 74 68 29 3b 0a 09 09 66 6f 72 ngz(path);...for
2440: 28 63 68 61 72 2a 20 70 3d 70 73 3b 3b 29 0a 09 (char* p=ps;;)..
2450: 09 7b 0a 09 09 09 66 6f 72 28 3b 20 2a 70 21 3d .{....for(; *p!=
2460: 30 26 26 2a 70 21 3d 27 5c 5c 27 26 26 2a 70 21 0&&*p!='\\'&&*p!
2470: 3d 27 2f 27 3b 20 70 3d 43 68 61 72 4e 65 78 74 ='/'; p=CharNext
2480: 41 28 70 29 29 20 7b 7d 0a 09 09 09 69 66 28 20 A(p)) {}....if(
2490: 2a 70 3d 3d 30 20 29 0a 09 09 09 09 62 72 65 61 *p==0 ).....brea
24a0: 6b 3b 0a 09 09 09 43 72 65 61 74 65 44 69 72 65 k;....CreateDire
24b0: 63 74 6f 72 79 41 28 20 74 6f 53 74 72 69 6e 67 ctoryA( toString
24c0: 7a 28 70 73 5b 30 2e 2e 28 70 2d 70 73 29 5d 29 z(ps[0..(p-ps)])
24d0: 2c 20 6e 75 6c 6c 20 29 3b 0a 09 09 09 2b 2b 70 , null );....++p
24e0: 3b 0a 09 09 7d 0a 09 09 72 65 74 75 72 6e 20 70 ;...}...return p
24f0: 61 74 68 3b 0a 09 7d 0a 0a 09 65 6e 75 6d 20 7b ath;..}...enum {
2500: 20 42 55 46 53 49 5a 20 3d 20 36 35 35 33 36 20 BUFSIZ = 65536
2510: 7d 0a 0a 09 70 72 69 76 61 74 65 20 62 6f 6f 6c }...private bool
2520: 20 4e 63 44 65 63 28 20 75 69 6e 74 20 75 73 69 NcDec( uint usi
2530: 7a 2c 20 46 69 6c 65 70 20 6f 75 74 66 2c 20 50 z, Filep outf, P
2540: 72 6f 67 72 65 73 73 48 61 6e 64 6c 65 72 20 70 rogressHandler p
2550: 68 20 29 0a 09 7b 0a 09 09 75 69 6e 74 20 69 6e h )..{...uint in
2560: 69 74 5f 75 73 69 7a 20 3d 20 75 73 69 7a 3b 0a it_usiz = usiz;.
2570: 0a 09 09 2f 2f 20 e9 9d 9e e5 9c a7 e7 b8 ae e3 ...// ..........
2580: 80 82 e3 82 b3 e3 83 94 e3 83 bc e3 81 99 e3 82 ................
2590: 8b e3 81 a0 e3 81 91 0a 09 09 77 68 69 6c 65 28 ..........while(
25a0: 20 75 73 69 7a 20 29 0a 09 09 7b 0a 09 09 09 73 usiz )...{....s
25b0: 74 72 69 6e 67 20 72 20 3d 20 63 61 73 74 28 73 tring r = cast(s
25c0: 74 72 69 6e 67 29 20 66 70 2e 72 65 61 64 28 20 tring) fp.read(
25d0: 42 55 46 53 49 5a 3c 75 73 69 7a 3f 42 55 46 53 BUFSIZ<usiz?BUFS
25e0: 49 5a 3a 75 73 69 7a 20 29 3b 0a 09 09 09 75 73 IZ:usiz );....us
25f0: 69 7a 20 2d 3d 20 72 2e 6c 65 6e 67 74 68 3b 0a iz -= r.length;.
2600: 09 09 09 6f 75 74 66 2e 77 72 69 74 65 28 63 61 ...outf.write(ca
2610: 73 74 28 63 68 61 72 5b 5d 29 72 29 3b 0a 0a 09 st(char[])r);...
2620: 09 09 2f 2f 20 64 6c 67 0a 09 09 09 69 66 28 20 ..// dlg....if(
2630: 42 67 61 41 6e 73 77 65 72 2e 41 62 6f 72 74 3d BgaAnswer.Abort=
2640: 3d 70 68 28 69 6e 69 74 5f 75 73 69 7a 2d 75 73 =ph(init_usiz-us
2650: 69 7a 2c 75 73 69 7a 29 20 29 20 72 65 74 75 72 iz,usiz) ) retur
2660: 6e 20 66 61 6c 73 65 3b 0a 09 09 7d 0a 0a 09 09 n false;...}....
2670: 2f 2f 20 64 6c 67 0a 09 09 69 66 28 20 42 67 61 // dlg...if( Bga
2680: 41 6e 73 77 65 72 2e 41 62 6f 72 74 3d 3d 70 68 Answer.Abort==ph
2690: 28 69 6e 69 74 5f 75 73 69 7a 2d 75 73 69 7a 2c (init_usiz-usiz,
26a0: 75 73 69 7a 29 20 29 20 72 65 74 75 72 6e 20 66 usiz) ) return f
26b0: 61 6c 73 65 3b 0a 09 09 72 65 74 75 72 6e 20 74 alse;...return t
26c0: 72 75 65 3b 0a 09 7d 0a 0a 09 70 72 69 76 61 74 rue;..}...privat
26d0: 65 20 62 6f 6f 6c 20 47 7a 44 65 63 28 20 75 69 e bool GzDec( ui
26e0: 6e 74 20 63 73 69 7a 2c 20 75 69 6e 74 20 75 73 nt csiz, uint us
26f0: 69 7a 2c 20 46 69 6c 65 70 20 6f 75 74 66 2c 20 iz, Filep outf,
2700: 50 72 6f 67 72 65 73 73 48 61 6e 64 6c 65 72 20 ProgressHandler
2710: 70 68 20 29 0a 09 7b 0a 09 09 75 69 6e 74 20 69 ph )..{...uint i
2720: 6e 69 74 5f 75 73 69 7a 20 3d 20 75 73 69 7a 3b nit_usiz = usiz;
2730: 0a 0a 09 09 2f 2f 20 7a 6c 69 62 e3 81 a7 e5 b1 ....// zlib.....
2740: 95 e9 96 8b 0a 09 09 66 70 2e 72 65 61 64 28 31 .......fp.read(1
2750: 30 29 3b 20 63 73 69 7a 20 2d 3d 20 31 30 3b 20 0); csiz -= 10;
2760: 2f 2f 20 e3 83 98 e3 83 83 e3 83 80 2c e3 83 95 // .........,...
2770: e3 83 83 e3 82 bf e3 82 b9 e3 82 ad e3 83 83 e3 ................
2780: 83 97 0a 0a 09 09 75 62 79 74 65 5b 5d 20 20 69 ......ubyte[] i
2790: 6e 62 75 66 3b 20 20 69 6e 62 75 66 2e 6c 65 6e nbuf; inbuf.len
27a0: 67 74 68 20 3d 20 36 35 35 33 36 3b 0a 09 09 75 gth = 65536;...u
27b0: 62 79 74 65 5b 5d 20 6f 75 74 62 75 66 3b 20 6f byte[] outbuf; o
27c0: 75 74 62 75 66 2e 6c 65 6e 67 74 68 20 3d 20 36 utbuf.length = 6
27d0: 35 35 33 36 3b 0a 0a 09 09 2f 2f 20 7a 6c 69 62 5536;....// zlib
27e0: e6 ba 96 e5 82 99 0a 09 09 7a 5f 73 74 72 65 61 .........z_strea
27f0: 6d 20 7a 73 3b 0a 09 09 7a 73 2e 7a 61 6c 6c 6f m zs;...zs.zallo
2800: 63 20 20 20 3d 20 6e 75 6c 6c 3b 0a 09 09 7a 73 c = null;...zs
2810: 2e 7a 66 72 65 65 20 20 20 20 3d 20 6e 75 6c 6c .zfree = null
2820: 3b 0a 0a 09 09 2f 2f 20 e5 87 ba e5 8a 9b e3 83 ;....// ........
2830: 90 e3 83 83 e3 83 95 e3 82 a1 0a 09 09 7a 73 2e .............zs.
2840: 6e 65 78 74 5f 6f 75 74 20 20 3d 20 6f 75 74 62 next_out = outb
2850: 75 66 2e 70 74 72 3b 0a 09 09 7a 73 2e 61 76 61 uf.ptr;...zs.ava
2860: 69 6c 5f 6f 75 74 20 3d 20 6f 75 74 62 75 66 2e il_out = outbuf.
2870: 6c 65 6e 67 74 68 3b 0a 0a 09 09 2f 2f 20 e5 85 length;....// ..
2880: a5 e5 8a 9b e3 83 90 e3 83 83 e3 83 95 e3 82 a1 ................
2890: 0a 09 09 69 6e 62 75 66 20 3d 20 63 61 73 74 28 ...inbuf = cast(
28a0: 75 62 79 74 65 5b 5d 29 20 66 70 2e 72 65 61 64 ubyte[]) fp.read
28b0: 28 20 63 73 69 7a 3c 36 35 35 33 36 20 3f 20 63 ( csiz<65536 ? c
28c0: 73 69 7a 20 3a 20 36 35 35 33 36 20 29 3b 0a 09 siz : 65536 );..
28d0: 09 63 73 69 7a 20 20 20 20 20 20 20 2d 3d 20 69 .csiz -= i
28e0: 6e 62 75 66 2e 6c 65 6e 67 74 68 3b 0a 09 09 7a nbuf.length;...z
28f0: 73 2e 6e 65 78 74 5f 69 6e 20 20 3d 20 69 6e 62 s.next_in = inb
2900: 75 66 2e 70 74 72 3b 0a 09 09 7a 73 2e 61 76 61 uf.ptr;...zs.ava
2910: 69 6c 5f 69 6e 20 3d 20 69 6e 62 75 66 2e 6c 65 il_in = inbuf.le
2920: 6e 67 74 68 3b 0a 0a 09 09 2f 2f 20 e3 82 b9 e3 ngth;....// ....
2930: 82 bf e3 83 bc e3 83 88 0a 09 09 69 6e 66 6c 61 ...........infla
2940: 74 65 49 6e 69 74 32 28 20 26 7a 73 2c 20 2d 31 teInit2( &zs, -1
2950: 35 20 29 3b 0a 09 09 74 72 79 20 7b 0a 0a 09 09 5 );...try {....
2960: 2f 2f 20 e6 9b b8 e5 ba ab e3 81 8b e3 82 89 e5 // .............
2970: 85 a5 e5 8a 9b e3 81 97 e7 b5 82 e3 82 8f e3 82 ................
2980: 8b e3 81 be e3 81 a7 e3 83 ab e3 83 bc e3 83 97 ................
2990: 0a 09 09 69 6e 74 20 65 72 72 20 3d 20 5a 5f 4f ...int err = Z_O
29a0: 4b 3b 0a 09 09 77 68 69 6c 65 28 20 63 73 69 7a K;...while( csiz
29b0: 26 26 75 73 69 7a 20 29 0a 09 09 7b 0a 09 09 09 &&usiz )...{....
29c0: 77 68 69 6c 65 28 20 7a 73 2e 61 76 61 69 6c 5f while( zs.avail_
29d0: 6f 75 74 20 3e 20 30 20 29 0a 09 09 09 7b 0a 09 out > 0 )....{..
29e0: 09 09 09 65 72 72 20 3d 20 65 74 63 2e 63 2e 7a ...err = etc.c.z
29f0: 6c 69 62 2e 69 6e 66 6c 61 74 65 28 20 26 7a 73 lib.inflate( &zs
2a00: 2c 20 5a 5f 50 41 52 54 49 41 4c 5f 46 4c 55 53 , Z_PARTIAL_FLUS
2a10: 48 20 29 3b 0a 09 09 09 09 69 66 28 20 65 72 72 H );.....if( err
2a20: 21 3d 5a 5f 53 54 52 45 41 4d 5f 45 4e 44 20 26 !=Z_STREAM_END &
2a30: 26 20 65 72 72 21 3d 5a 5f 4f 4b 20 29 0a 09 09 & err!=Z_OK )...
2a40: 09 09 09 63 73 69 7a 3d 30 3b 0a 09 09 09 09 69 ...csiz=0;.....i
2a50: 66 28 20 21 63 73 69 7a 20 29 0a 09 09 09 09 09 f( !csiz )......
2a60: 62 72 65 61 6b 3b 0a 0a 09 09 09 09 69 66 28 20 break;......if(
2a70: 7a 73 2e 61 76 61 69 6c 5f 69 6e 3c 3d 30 20 29 zs.avail_in<=0 )
2a80: 0a 09 09 09 09 7b 0a 09 09 09 09 09 69 6e 62 75 .....{......inbu
2a90: 66 20 3d 20 63 61 73 74 28 75 62 79 74 65 5b 5d f = cast(ubyte[]
2aa0: 29 20 66 70 2e 72 65 61 64 28 20 63 73 69 7a 3c ) fp.read( csiz<
2ab0: 36 35 35 33 36 20 3f 20 63 73 69 7a 20 3a 20 36 65536 ? csiz : 6
2ac0: 35 35 33 36 20 29 3b 0a 09 09 09 09 09 63 73 69 5536 );......csi
2ad0: 7a 20 20 20 20 20 20 20 2d 3d 20 69 6e 62 75 66 z -= inbuf
2ae0: 2e 6c 65 6e 67 74 68 3b 0a 09 09 09 09 09 7a 73 .length;......zs
2af0: 2e 6e 65 78 74 5f 69 6e 20 20 3d 20 69 6e 62 75 .next_in = inbu
2b00: 66 2e 70 74 72 3b 0a 09 09 09 09 09 7a 73 2e 61 f.ptr;......zs.a
2b10: 76 61 69 6c 5f 69 6e 20 3d 20 69 6e 62 75 66 2e vail_in = inbuf.
2b20: 6c 65 6e 67 74 68 3b 0a 0a 09 09 09 09 09 69 66 length;.......if
2b30: 28 20 69 6e 62 75 66 2e 6c 65 6e 67 74 68 3d 3d ( inbuf.length==
2b40: 30 20 29 0a 09 09 09 09 09 7b 0a 09 09 09 09 09 0 )......{......
2b50: 09 65 72 72 20 20 3d 20 5a 5f 53 54 52 45 41 4d .err = Z_STREAM
2b60: 5f 45 4e 44 3b 0a 09 09 09 09 09 09 63 73 69 7a _END;.......csiz
2b70: 20 3d 20 30 3b 0a 09 09 09 09 09 09 62 72 65 61 = 0;.......brea
2b80: 6b 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a k;......}.....}.
2b90: 09 09 09 7d 0a 0a 09 09 09 69 6e 74 20 77 72 69 ...}.....int wri
2ba0: 74 74 65 6e 20 3d 20 6f 75 74 62 75 66 2e 6c 65 tten = outbuf.le
2bb0: 6e 67 74 68 20 2d 20 7a 73 2e 61 76 61 69 6c 5f ngth - zs.avail_
2bc0: 6f 75 74 3b 0a 09 09 09 69 66 28 20 75 73 69 7a out;....if( usiz
2bd0: 20 3c 20 77 72 69 74 74 65 6e 20 29 20 77 72 69 < written ) wri
2be0: 74 74 65 6e 20 3d 20 75 73 69 7a 3b 0a 09 09 09 tten = usiz;....
2bf0: 75 73 69 7a 20 2d 3d 20 77 72 69 74 74 65 6e 3b usiz -= written;
2c00: 0a 09 09 09 6f 75 74 66 2e 77 72 69 74 65 28 20 ....outf.write(
2c10: 6f 75 74 62 75 66 5b 30 2e 2e 77 72 69 74 74 65 outbuf[0..writte
2c20: 6e 5d 20 29 3b 0a 09 09 09 7a 73 2e 6e 65 78 74 n] );....zs.next
2c30: 5f 6f 75 74 20 20 3d 20 6f 75 74 62 75 66 2e 70 _out = outbuf.p
2c40: 74 72 3b 0a 09 09 09 7a 73 2e 61 76 61 69 6c 5f tr;....zs.avail_
2c50: 6f 75 74 20 3d 20 6f 75 74 62 75 66 2e 6c 65 6e out = outbuf.len
2c60: 67 74 68 3b 0a 0a 09 09 09 2f 2f 20 64 6c 67 0a gth;.....// dlg.
2c70: 09 09 09 69 66 28 20 42 67 61 41 6e 73 77 65 72 ...if( BgaAnswer
2c80: 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 5f .Abort==ph(init_
2c90: 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 20 usiz-usiz,usiz)
2ca0: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a ) return false;.
2cb0: 09 09 7d 0a 0a 09 09 2f 2f 20 e5 87 ba e5 8a 9b ..}....// ......
2cc0: e6 ae 8b e3 81 97 e3 82 92 e7 84 a1 e3 81 8f e3 ................
2cd0: 81 99 e3 80 82 0a 09 09 77 68 69 6c 65 28 20 65 ........while( e
2ce0: 72 72 21 3d 5a 5f 53 54 52 45 41 4d 5f 45 4e 44 rr!=Z_STREAM_END
2cf0: 26 26 75 73 69 7a 20 29 0a 09 09 7b 0a 09 09 09 &&usiz )...{....
2d00: 65 72 72 20 3d 20 65 74 63 2e 63 2e 7a 6c 69 62 err = etc.c.zlib
2d10: 2e 69 6e 66 6c 61 74 65 28 26 7a 73 2c 5a 5f 50 .inflate(&zs,Z_P
2d20: 41 52 54 49 41 4c 5f 46 4c 55 53 48 29 3b 0a 09 ARTIAL_FLUSH);..
2d30: 09 09 69 66 28 20 65 72 72 21 3d 5a 5f 53 54 52 ..if( err!=Z_STR
2d40: 45 41 4d 5f 45 4e 44 20 26 26 20 65 72 72 21 3d EAM_END && err!=
2d50: 5a 5f 4f 4b 20 29 0a 09 09 09 09 62 72 65 61 6b Z_OK ).....break
2d60: 3b 0a 0a 09 09 09 69 6e 74 20 77 72 69 74 74 65 ;.....int writte
2d70: 6e 20 3d 20 6f 75 74 62 75 66 2e 6c 65 6e 67 74 n = outbuf.lengt
2d80: 68 20 2d 20 7a 73 2e 61 76 61 69 6c 5f 6f 75 74 h - zs.avail_out
2d90: 3b 0a 09 09 09 69 66 28 20 75 73 69 7a 20 3c 20 ;....if( usiz <
2da0: 77 72 69 74 74 65 6e 20 29 20 77 72 69 74 74 65 written ) writte
2db0: 6e 20 3d 20 75 73 69 7a 3b 0a 09 09 09 75 73 69 n = usiz;....usi
2dc0: 7a 20 2d 3d 20 77 72 69 74 74 65 6e 3b 0a 09 09 z -= written;...
2dd0: 09 6f 75 74 66 2e 77 72 69 74 65 28 20 6f 75 74 .outf.write( out
2de0: 62 75 66 5b 30 2e 2e 77 72 69 74 74 65 6e 5d 20 buf[0..written]
2df0: 29 3b 0a 09 09 09 7a 73 2e 6e 65 78 74 5f 6f 75 );....zs.next_ou
2e00: 74 20 20 3d 20 6f 75 74 62 75 66 2e 70 74 72 3b t = outbuf.ptr;
2e10: 0a 09 09 09 7a 73 2e 61 76 61 69 6c 5f 6f 75 74 ....zs.avail_out
2e20: 20 3d 20 6f 75 74 62 75 66 2e 6c 65 6e 67 74 68 = outbuf.length
2e30: 3b 0a 0a 09 09 09 2f 2f 20 64 6c 67 0a 09 09 09 ;.....// dlg....
2e40: 69 66 28 20 42 67 61 41 6e 73 77 65 72 2e 41 62 if( BgaAnswer.Ab
2e50: 6f 72 74 3d 3d 70 68 28 69 6e 69 74 5f 75 73 69 ort==ph(init_usi
2e60: 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 20 29 20 72 z-usiz,usiz) ) r
2e70: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 09 09 7d eturn false;...}
2e80: 0a 0a 09 09 2f 2f 20 e7 b5 82 e4 ba 86 0a 09 09 ....// .........
2e90: 7d 20 66 69 6e 61 6c 6c 79 20 7b 20 69 6e 66 6c } finally { infl
2ea0: 61 74 65 45 6e 64 28 26 7a 73 29 3b 20 7d 0a 0a ateEnd(&zs); }..
2eb0: 09 09 2f 2f 20 64 6c 67 0a 09 09 69 66 28 20 42 ..// dlg...if( B
2ec0: 67 61 41 6e 73 77 65 72 2e 41 62 6f 72 74 3d 3d gaAnswer.Abort==
2ed0: 70 68 28 69 6e 69 74 5f 75 73 69 7a 2d 75 73 69 ph(init_usiz-usi
2ee0: 7a 2c 75 73 69 7a 29 20 29 20 72 65 74 75 72 6e z,usiz) ) return
2ef0: 20 66 61 6c 73 65 3b 0a 09 09 72 65 74 75 72 6e false;...return
2f00: 20 74 72 75 65 3b 0a 09 7d 0a 0a 09 70 72 69 76 true;..}...priv
2f10: 61 74 65 20 62 6f 6f 6c 20 42 7a 44 65 63 28 20 ate bool BzDec(
2f20: 75 69 6e 74 20 75 73 69 7a 2c 20 46 69 6c 65 70 uint usiz, Filep
2f30: 20 6f 75 74 66 2c 20 50 72 6f 67 72 65 73 73 48 outf, ProgressH
2f40: 61 6e 64 6c 65 72 20 70 68 20 29 0a 09 7b 0a 09 andler ph )..{..
2f50: 09 75 69 6e 74 20 69 6e 69 74 5f 75 73 69 7a 20 .uint init_usiz
2f60: 3d 20 75 73 69 7a 3b 0a 0a 09 09 2f 2f 20 6c 69 = usiz;....// li
2f70: 62 62 7a 32 e3 81 a7 e5 b1 95 e9 96 8b 0a 09 09 bbz2............
2f80: 69 6e 74 20 65 72 72 3b 0a 09 09 42 5a 46 49 4c int err;...BZFIL
2f90: 45 2a 20 62 20 3d 20 42 5a 32 5f 62 7a 52 65 61 E* b = BZ2_bzRea
2fa0: 64 4f 70 65 6e 28 20 26 65 72 72 2c 20 66 70 2e dOpen( &err, fp.
2fb0: 67 65 74 5f 66 70 28 29 2c 20 30 2c 20 30 2c 20 get_fp(), 0, 0,
2fc0: 6e 75 6c 6c 2c 20 30 20 29 3b 0a 09 09 69 66 28 null, 0 );...if(
2fd0: 20 65 72 72 21 3d 42 5a 5f 4f 4b 20 7c 7c 20 62 err!=BZ_OK || b
2fe0: 20 69 73 20 6e 75 6c 6c 20 29 0a 09 09 09 72 65 is null )....re
2ff0: 74 75 72 6e 20 74 72 75 65 3b 0a 0a 09 09 74 72 turn true;....tr
3000: 79 0a 09 09 7b 0a 09 09 09 63 68 61 72 5b 5d 20 y...{....char[]
3010: 62 75 66 3b 20 62 75 66 2e 6c 65 6e 67 74 68 20 buf; buf.length
3020: 3d 20 42 55 46 53 49 5a 3b 0a 09 09 09 69 6e 74 = BUFSIZ;....int
3030: 20 6c 65 6e 3b 0a 09 09 09 77 68 69 6c 65 28 20 len;....while(
3040: 30 3c 28 6c 65 6e 3d 42 5a 32 5f 62 7a 52 65 61 0<(len=BZ2_bzRea
3050: 64 28 20 26 65 72 72 2c 20 62 2c 20 62 75 66 2e d( &err, b, buf.
3060: 70 74 72 2c 20 42 55 46 53 49 5a 3c 75 73 69 7a ptr, BUFSIZ<usiz
3070: 3f 42 55 46 53 49 5a 3a 75 73 69 7a 20 29 29 20 ?BUFSIZ:usiz ))
3080: 29 0a 09 09 09 7b 0a 09 09 09 09 6f 75 74 66 2e )....{.....outf.
3090: 77 72 69 74 65 28 20 62 75 66 5b 30 2e 2e 6c 65 write( buf[0..le
30a0: 6e 5d 20 29 3b 0a 09 09 09 09 75 73 69 7a 20 2d n] );.....usiz -
30b0: 3d 20 6c 65 6e 3b 0a 09 09 09 09 69 66 28 20 65 = len;.....if( e
30c0: 72 72 20 21 3d 20 42 5a 5f 4f 4b 20 29 0a 09 09 rr != BZ_OK )...
30d0: 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 09 2f ...break;....../
30e0: 2f 20 64 6c 67 0a 09 09 09 09 69 66 28 20 42 67 / dlg.....if( Bg
30f0: 61 41 6e 73 77 65 72 2e 41 62 6f 72 74 3d 3d 70 aAnswer.Abort==p
3100: 68 28 69 6e 69 74 5f 75 73 69 7a 2d 75 73 69 7a h(init_usiz-usiz
3110: 2c 75 73 69 7a 29 20 29 20 72 65 74 75 72 6e 20 ,usiz) ) return
3120: 66 61 6c 73 65 3b 0a 09 09 09 7d 0a 09 09 7d 20 false;....}...}
3130: 66 69 6e 61 6c 6c 79 20 7b 20 42 5a 32 5f 62 7a finally { BZ2_bz
3140: 52 65 61 64 43 6c 6f 73 65 28 20 26 65 72 72 2c ReadClose( &err,
3150: 20 62 20 29 3b 20 7d 0a 0a 09 09 2f 2f 20 64 6c b ); }....// dl
3160: 67 0a 09 09 69 66 28 20 42 67 61 41 6e 73 77 65 g...if( BgaAnswe
3170: 72 2e 41 62 6f 72 74 3d 3d 70 68 28 69 6e 69 74 r.Abort==ph(init
3180: 5f 75 73 69 7a 2d 75 73 69 7a 2c 75 73 69 7a 29 _usiz-usiz,usiz)
3190: 20 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ) return false;
31a0: 0a 09 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0a ...return true;.
31b0: 09 7d 0a 7d 0a .}.}.