Hex Artifact Content

Not logged in

Artifact 4c58bb3061c0a99d990a27dce2a5906146af6fe1:


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