Hex Artifact Content

Not logged in

Artifact 9075347c70b2342c7bab6d0b4b99195e0862c08c:


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