Hex Artifact Content

Not logged in

Artifact cf24a8abe2b880fcd11fe5bb48575748d0278f5a:


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