Hex Artifact Content

Not logged in

Artifact 3b6f189d5603825c38c2c5cca8e0a5ee6e0d765b:


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