Hex Artifact Content

Not logged in

Artifact eeea8ebd808979ec2caa7dce299adb97aae75e4f:


0000: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61  ..#include "stda
0010: 66 78 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20  fx.h"..#include 
0020: 22 41 72 63 41 63 65 2e 68 22 0d 0a 23 69 6e 63  "ArcAce.h"..#inc
0030: 6c 75 64 65 20 22 4e 6f 61 68 41 70 70 2e 68 22  lude "NoahApp.h"
0040: 0d 0a 0d 0a 0d 0a 69 6e 74 20 43 41 72 63 41 63  ......int CArcAc
0050: 65 3a 3a 76 5f 6c 6f 61 64 28 29 0d 0a 7b 0d 0a  e::v_load()..{..
0060: 09 69 66 28 20 68 44 4c 4c 20 3d 20 6b 69 53 55  .if( hDLL = kiSU
0070: 74 69 6c 3a 3a 6c 6f 61 64 4c 69 62 72 61 72 79  til::loadLibrary
0080: 28 22 55 6e 41 63 65 56 32 22 29 20 29 0d 0a 09  ("UnAceV2") )...
0090: 7b 0d 0a 09 09 69 66 28 20 28 61 63 65 49 6e 69  {....if( (aceIni
00a0: 74 20 3d 20 28 46 49 29 3a 3a 47 65 74 50 72 6f  t = (FI)::GetPro
00b0: 63 41 64 64 72 65 73 73 28 20 68 44 4c 4c 2c 22  cAddress( hDLL,"
00c0: 41 43 45 49 6e 69 74 44 6c 6c 22 20 29 29 0d 0a  ACEInitDll" ))..
00d0: 09 09 20 26 26 20 28 61 63 65 48 65 61 64 20 3d  .. && (aceHead =
00e0: 20 28 46 52 29 3a 3a 47 65 74 50 72 6f 63 41 64   (FR)::GetProcAd
00f0: 64 72 65 73 73 28 20 68 44 4c 4c 2c 22 41 43 45  dress( hDLL,"ACE
0100: 52 65 61 64 41 72 63 68 69 76 65 44 61 74 61 22  ReadArchiveData"
0110: 20 29 29 0d 0a 09 09 20 26 26 20 28 61 63 65 4c   )).... && (aceL
0120: 69 73 74 20 3d 20 28 46 4c 29 3a 3a 47 65 74 50  ist = (FL)::GetP
0130: 72 6f 63 41 64 64 72 65 73 73 28 20 68 44 4c 4c  rocAddress( hDLL
0140: 2c 22 41 43 45 4c 69 73 74 22 20 29 29 0d 0a 09  ,"ACEList" ))...
0150: 09 20 26 26 20 28 61 63 65 54 65 73 74 20 3d 20  . && (aceTest = 
0160: 28 46 54 29 3a 3a 47 65 74 50 72 6f 63 41 64 64  (FT)::GetProcAdd
0170: 72 65 73 73 28 20 68 44 4c 4c 2c 22 41 43 45 54  ress( hDLL,"ACET
0180: 65 73 74 22 20 29 29 0d 0a 09 09 20 26 26 20 28  est" )).... && (
0190: 61 63 65 45 78 74 72 20 3d 20 28 46 45 29 3a 3a  aceExtr = (FE)::
01a0: 47 65 74 50 72 6f 63 41 64 64 72 65 73 73 28 20  GetProcAddress( 
01b0: 68 44 4c 4c 2c 22 41 43 45 45 78 74 72 61 63 74  hDLL,"ACEExtract
01c0: 22 20 29 29 20 29 0d 0a 09 09 7b 0d 0a 09 09 09  " )) )....{.....
01d0: 74 41 43 45 49 6e 69 74 44 6c 6c 53 74 72 75 63  tACEInitDllStruc
01e0: 20 69 6e 69 3b 0d 0a 09 09 09 6b 69 5f 6d 65 6d   ini;.....ki_mem
01f0: 7a 65 72 6f 28 20 26 69 6e 69 2c 20 73 69 7a 65  zero( &ini, size
0200: 6f 66 28 69 6e 69 29 20 29 3b 0d 0a 0d 0a 09 09  of(ini) );......
0210: 09 69 6e 69 2e 47 6c 6f 62 61 6c 44 61 74 61 2e  .ini.GlobalData.
0220: 4f 62 6a 20 20 20 20 20 20 20 20 20 20 20 20 20  Obj             
0230: 20 20 20 20 3d 20 74 68 69 73 3b 0d 0a 09 09 09      = this;.....
0240: 69 6e 69 2e 47 6c 6f 62 61 6c 44 61 74 61 2e 4d  ini.GlobalData.M
0250: 61 78 41 72 63 68 69 76 65 54 65 73 74 42 79 74  axArchiveTestByt
0260: 65 73 20 3d 20 30 78 32 66 66 46 46 3b 0d 0a 09  es = 0x2ffFF;...
0270: 09 09 69 6e 69 2e 47 6c 6f 62 61 6c 44 61 74 61  ..ini.GlobalData
0280: 2e 4d 61 78 46 69 6c 65 42 75 66 53 69 7a 65 20  .MaxFileBufSize 
0290: 20 20 20 20 20 3d 20 30 78 32 66 66 46 46 3b 0d       = 0x2ffFF;.
02a0: 0a 09 09 09 69 6e 69 2e 47 6c 6f 62 61 6c 44 61  ....ini.GlobalDa
02b0: 74 61 2e 49 6e 66 6f 43 61 6c 6c 62 61 63 6b 50  ta.InfoCallbackP
02c0: 72 6f 63 20 20 20 20 3d 20 63 61 6c 6c 62 61 63  roc    = callbac
02d0: 6b 5f 69 6e 66 6f 3b 0d 0a 09 09 09 69 6e 69 2e  k_info;.....ini.
02e0: 47 6c 6f 62 61 6c 44 61 74 61 2e 45 72 72 6f 72  GlobalData.Error
02f0: 43 61 6c 6c 62 61 63 6b 50 72 6f 63 20 20 20 3d  CallbackProc   =
0300: 20 63 61 6c 6c 62 61 63 6b 5f 65 72 72 6f 72 3b   callback_error;
0310: 0d 0a 09 09 09 69 6e 69 2e 47 6c 6f 62 61 6c 44  .....ini.GlobalD
0320: 61 74 61 2e 52 65 71 75 65 73 74 43 61 6c 6c 62  ata.RequestCallb
0330: 61 63 6b 50 72 6f 63 20 3d 20 63 61 6c 6c 62 61  ackProc = callba
0340: 63 6b 5f 72 65 71 75 65 73 74 3b 0d 0a 09 09 09  ck_request;.....
0350: 69 6e 69 2e 47 6c 6f 62 61 6c 44 61 74 61 2e 53  ini.GlobalData.S
0360: 74 61 74 65 43 61 6c 6c 62 61 63 6b 50 72 6f 63  tateCallbackProc
0370: 20 20 20 3d 20 63 61 6c 6c 62 61 63 6b 5f 73 74     = callback_st
0380: 61 74 65 3b 0d 0a 09 09 09 69 6e 69 2e 47 6c 6f  ate;.....ini.Glo
0390: 62 61 6c 44 61 74 61 2e 44 65 63 72 79 70 74 50  balData.DecryptP
03a0: 61 73 73 77 6f 72 64 20 20 20 20 20 3d 20 70 77  assword     = pw
03b0: 64 42 75 66 3b 0d 0a 0d 0a 09 09 09 69 66 28 20  dBuf;.......if( 
03c0: 30 20 3d 3d 20 61 63 65 49 6e 69 74 28 20 26 69  0 == aceInit( &i
03d0: 6e 69 20 29 20 29 0d 0a 09 09 09 09 72 65 74 75  ni ) )......retu
03e0: 72 6e 20 61 43 68 65 63 6b 7c 61 4d 65 6c 74 7c  rn aCheck|aMelt|
03f0: 61 4c 69 73 74 7c 61 4d 65 6c 74 45 61 63 68 3b  aList|aMeltEach;
0400: 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 3a 3a 46 72 65  ....}......::Fre
0410: 65 4c 69 62 72 61 72 79 28 20 68 44 4c 4c 20 29  eLibrary( hDLL )
0420: 3b 0d 0a 09 09 68 44 4c 4c 20 3d 20 4e 55 4c 4c  ;....hDLL = NULL
0430: 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e 20 30  ;...}...return 0
0440: 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 72  ;..}....bool CAr
0450: 63 41 63 65 3a 3a 76 5f 76 65 72 28 20 6b 69 53  cAce::v_ver( kiS
0460: 74 72 26 20 73 74 72 20 29 0d 0a 7b 0d 0a 09 73  tr& str )..{...s
0470: 74 72 20 3d 20 22 55 6e 41 63 65 56 32 2e 64 6c  tr = "UnAceV2.dl
0480: 6c 20 20 22 3b 0d 0a 0d 0a 09 2f 2f 2d 2d 20 91  l  ";.....//-- .
0490: b6 8d dd 8a 6d 94 46 0d 0a 09 63 68 61 72 20 62  ....m.F...char b
04a0: 75 66 5b 34 30 5d 3b 0d 0a 09 69 66 28 20 68 44  uf[40];...if( hD
04b0: 4c 4c 20 29 0d 0a 09 09 69 66 28 20 47 65 74 56  LL )....if( GetV
04c0: 65 72 73 69 6f 6e 49 6e 66 6f 53 74 72 28 20 22  ersionInfoStr( "
04d0: 55 6e 41 63 65 56 32 22 2c 20 62 75 66 2c 20 73  UnAceV2", buf, s
04e0: 69 7a 65 6f 66 28 62 75 66 29 20 29 20 29 0d 0a  izeof(buf) ) )..
04f0: 09 09 09 73 74 72 20 2b 3d 20 62 75 66 3b 0d 0a  ...str += buf;..
0500: 09 09 65 6c 73 65 0d 0a 09 09 09 73 74 72 20 2b  ..else.....str +
0510: 3d 20 22 4f 4b 21 22 3b 0d 0a 09 65 6c 73 65 0d  = "OK!";...else.
0520: 0a 09 09 73 74 72 20 2b 3d 20 22 2d 2d 2d 2d 22  ...str += "----"
0530: 3b 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 74 72 75  ;.....return tru
0540: 65 3b 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41  e;..}....bool CA
0550: 72 63 41 63 65 3a 3a 76 5f 63 68 65 63 6b 28 20  rcAce::v_check( 
0560: 63 6f 6e 73 74 20 6b 69 50 61 74 68 26 20 61 6e  const kiPath& an
0570: 61 6d 65 20 29 0d 0a 7b 0d 0a 09 2f 2f 2d 2d 20  ame )..{...//-- 
0580: 8f 91 8c c9 8f ee 95 f1 82 f0 93 c7 82 dd 8d 9e  ................
0590: 82 f1 82 c5 82 dd 82 e9 0d 0a 09 74 41 43 45 52  ...........tACER
05a0: 65 61 64 41 72 63 68 69 76 65 44 61 74 61 53 74  eadArchiveDataSt
05b0: 72 75 63 20 64 74 3b 0d 0a 09 6b 69 5f 6d 65 6d  ruc dt;...ki_mem
05c0: 7a 65 72 6f 28 20 26 64 74 2c 20 73 69 7a 65 6f  zero( &dt, sizeo
05d0: 66 28 64 74 29 20 29 3b 0d 0a 09 72 65 74 75 72  f(dt) );...retur
05e0: 6e 20 28 20 20 30 3d 3d 61 63 65 48 65 61 64 28  n (  0==aceHead(
05f0: 20 63 6f 6e 73 74 5f 63 61 73 74 3c 63 68 61 72   const_cast<char
0600: 2a 3e 28 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  *>((const char*)
0610: 61 6e 61 6d 65 29 2c 20 26 64 74 20 29 0d 0a 09  aname), &dt )...
0620: 09 26 26 20 4e 55 4c 4c 21 3d 64 74 2e 41 72 63  .&& NULL!=dt.Arc
0630: 68 69 76 65 44 61 74 61 20 29 3b 0d 0a 7d 0d 0a  hiveData );..}..
0640: 0d 0a 62 6f 6f 6c 20 43 41 72 63 41 63 65 3a 3a  ..bool CArcAce::
0650: 76 5f 6c 69 73 74 28 20 63 6f 6e 73 74 20 61 72  v_list( const ar
0660: 63 6e 61 6d 65 26 20 61 6e 61 6d 65 2c 20 61 66  cname& aname, af
0670: 6c 41 72 72 61 79 26 20 66 69 6c 65 73 20 29 0d  lArray& files ).
0680: 0a 7b 0d 0a 09 6c 69 73 74 20 3d 20 26 66 69 6c  .{...list = &fil
0690: 65 73 3b 0d 0a 0d 0a 09 2f 2f 2d 2d 20 83 8a 83  es;.....//-- ...
06a0: 58 83 65 83 42 83 93 83 4f 8a 4a 8e 6e 81 49 0d  X.e.B...O.J.n.I.
06b0: 0a 09 74 41 43 45 4c 69 73 74 53 74 72 75 63 20  ..tACEListStruc 
06c0: 6c 73 74 3b 0d 0a 09 6b 69 5f 6d 65 6d 7a 65 72  lst;...ki_memzer
06d0: 6f 28 20 26 6c 73 74 2c 20 73 69 7a 65 6f 66 28  o( &lst, sizeof(
06e0: 6c 73 74 29 20 29 3b 0d 0a 09 6c 73 74 2e 46 69  lst) );...lst.Fi
06f0: 6c 65 73 2e 53 6f 75 72 63 65 44 69 72 20 20 20  les.SourceDir   
0700: 3d 20 22 22 3b 0d 0a 09 6c 73 74 2e 46 69 6c 65  = "";...lst.File
0710: 73 2e 46 69 6c 65 4c 69 73 74 20 20 20 20 3d 20  s.FileList    = 
0720: 22 2a 22 3b 0d 0a 09 6c 73 74 2e 46 69 6c 65 73  "*";...lst.Files
0730: 2e 45 78 63 6c 75 64 65 4c 69 73 74 20 3d 20 22  .ExcludeList = "
0740: 22 3b 0d 0a 09 6c 73 74 2e 46 69 6c 65 73 2e 46  ";...lst.Files.F
0750: 75 6c 6c 4d 61 74 63 68 20 20 20 3d 20 46 41 4c  ullMatch   = FAL
0760: 53 45 3b 0d 0a 0d 0a 09 63 68 61 72 20 61 6e 6d  SE;.....char anm
0770: 5b 4d 41 58 5f 50 41 54 48 5d 3b 0d 0a 09 6b 69  [MAX_PATH];...ki
0780: 5f 73 74 72 63 70 79 28 20 61 6e 6d 2c 20 61 6e  _strcpy( anm, an
0790: 61 6d 65 2e 62 61 73 65 64 69 72 20 29 3b 0d 0a  ame.basedir );..
07a0: 09 6b 69 5f 73 74 72 63 61 74 28 20 61 6e 6d 2c  .ki_strcat( anm,
07b0: 20 61 6e 61 6d 65 2e 6c 6e 61 6d 65 20 29 3b 0d   aname.lname );.
07c0: 0a 0d 0a 09 72 65 74 75 72 6e 20 28 20 30 3d 3d  ....return ( 0==
07d0: 61 63 65 4c 69 73 74 28 20 61 6e 6d 2c 20 26 6c  aceList( anm, &l
07e0: 73 74 20 29 20 29 3b 0d 0a 7d 0d 0a 0d 0a 69 6e  st ) );..}....in
07f0: 74 20 43 41 72 63 41 63 65 3a 3a 76 5f 63 6f 6e  t CArcAce::v_con
0800: 74 65 6e 74 73 28 20 63 6f 6e 73 74 20 6b 69 50  tents( const kiP
0810: 61 74 68 26 20 61 6e 61 6d 65 2c 20 6b 69 50 61  ath& aname, kiPa
0820: 74 68 26 20 64 6e 61 6d 65 20 29 0d 0a 7b 0d 0a  th& dname )..{..
0830: 09 6c 69 73 74 20 3d 20 4e 55 4c 4c 3b 0d 0a 09  .list = NULL;...
0840: 61 43 6e 74 20 3d 20 61 55 6e 6b 6e 6f 77 6e 3b  aCnt = aUnknown;
0850: 0d 0a 09 64 4e 61 6d 65 20 3d 20 26 64 6e 61 6d  ...dName = &dnam
0860: 65 3b 0d 0a 0d 0a 09 2f 2f 2d 2d 20 83 8a 83 58  e;.....//-- ...X
0870: 83 65 83 42 83 93 83 4f 8a 4a 8e 6e 81 49 0d 0a  .e.B...O.J.n.I..
0880: 09 74 41 43 45 4c 69 73 74 53 74 72 75 63 20 6c  .tACEListStruc l
0890: 73 74 3b 0d 0a 09 6b 69 5f 6d 65 6d 7a 65 72 6f  st;...ki_memzero
08a0: 28 20 26 6c 73 74 2c 20 73 69 7a 65 6f 66 28 6c  ( &lst, sizeof(l
08b0: 73 74 29 20 29 3b 0d 0a 09 6c 73 74 2e 46 69 6c  st) );...lst.Fil
08c0: 65 73 2e 53 6f 75 72 63 65 44 69 72 20 20 20 3d  es.SourceDir   =
08d0: 20 22 22 3b 0d 0a 09 6c 73 74 2e 46 69 6c 65 73   "";...lst.Files
08e0: 2e 46 69 6c 65 4c 69 73 74 20 20 20 20 3d 20 22  .FileList    = "
08f0: 2a 22 3b 0d 0a 09 6c 73 74 2e 46 69 6c 65 73 2e  *";...lst.Files.
0900: 45 78 63 6c 75 64 65 4c 69 73 74 20 3d 20 22 22  ExcludeList = ""
0910: 3b 0d 0a 09 6c 73 74 2e 46 69 6c 65 73 2e 46 75  ;...lst.Files.Fu
0920: 6c 6c 4d 61 74 63 68 20 20 20 3d 20 54 52 55 45  llMatch   = TRUE
0930: 3b 0d 0a 09 69 66 28 20 30 21 3d 61 63 65 4c 69  ;...if( 0!=aceLi
0940: 73 74 28 20 63 6f 6e 73 74 5f 63 61 73 74 3c 63  st( const_cast<c
0950: 68 61 72 2a 3e 28 28 63 6f 6e 73 74 20 63 68 61  har*>((const cha
0960: 72 2a 29 61 6e 61 6d 65 29 2c 20 26 6c 73 74 20  r*)aname), &lst 
0970: 29 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 61 4d  ) )....return aM
0980: 75 6c 74 69 3b 0d 0a 09 72 65 74 75 72 6e 20 61  ulti;...return a
0990: 43 6e 74 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 43  Cnt;..}....int C
09a0: 41 72 63 41 63 65 3a 3a 76 5f 6d 65 6c 74 28 20  ArcAce::v_melt( 
09b0: 63 6f 6e 73 74 20 61 72 63 6e 61 6d 65 26 20 61  const arcname& a
09c0: 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 6b 69 50 61  name, const kiPa
09d0: 74 68 26 20 64 64 69 72 2c 20 63 6f 6e 73 74 20  th& ddir, const 
09e0: 61 66 6c 41 72 72 61 79 2a 20 66 69 6c 65 73 20  aflArray* files 
09f0: 29 0d 0a 7b 0d 0a 09 70 61 74 68 43 68 65 63 6b  )..{...pathCheck
0a00: 20 3d 20 6e 65 77 20 43 41 72 63 50 61 74 68 43   = new CArcPathC
0a10: 68 65 63 6b 44 6c 67 3b 0d 0a 0d 0a 09 2f 2f 2d  heckDlg;.....//-
0a20: 2d 20 93 6e 82 b7 83 74 83 40 83 43 83 8b 83 8a  - .n...t.@.C....
0a30: 83 58 83 67 8d ec 90 ac 0d 0a 09 6b 69 53 74 72  .X.g.......kiStr
0a40: 20 6c 73 74 3b 0d 0a 09 69 66 28 20 66 69 6c 65   lst;...if( file
0a50: 73 20 29 0d 0a 09 7b 0d 0a 09 09 64 6c 67 20 3d  s )...{....dlg =
0a60: 20 4e 55 4c 4c 3b 0d 0a 09 09 66 6f 72 28 20 75   NULL;....for( u
0a70: 6e 73 69 67 6e 65 64 20 69 6e 74 20 69 3d 30 3b  nsigned int i=0;
0a80: 20 69 21 3d 6c 69 73 74 2d 3e 6c 65 6e 28 29 3b   i!=list->len();
0a90: 20 69 2b 2b 20 29 0d 0a 09 09 09 69 66 28 20 28   i++ ).....if( (
0aa0: 2a 66 69 6c 65 73 29 5b 69 5d 2e 73 65 6c 65 63  *files)[i].selec
0ab0: 74 65 64 20 29 0d 0a 09 09 09 09 6c 73 74 20 2b  ted )......lst +
0ac0: 3d 20 28 2a 66 69 6c 65 73 29 5b 69 5d 2e 69 6e  = (*files)[i].in
0ad0: 66 2e 73 7a 46 69 6c 65 4e 61 6d 65 2c 20 6c 73  f.szFileName, ls
0ae0: 74 20 2b 3d 20 27 5c 78 64 27 3b 0d 0a 09 7d 0d  t += '\xd';...}.
0af0: 0a 09 65 6c 73 65 0d 0a 09 09 6c 73 74 20 3d 20  ..else....lst = 
0b00: 22 2a 22 2c 20 64 6c 67 20 3d 20 6e 65 77 20 43  "*", dlg = new C
0b10: 41 72 63 50 72 6f 67 72 65 73 73 44 6c 67 28 20  ArcProgressDlg( 
0b20: 33 32 37 36 38 20 29 3b 0d 0a 0d 0a 09 2f 2f 2d  32768 );.....//-
0b30: 2d 20 93 57 8a 4a 8a 4a 8e 6e 81 49 0d 0a 09 3a  - .W.J.J.n.I...:
0b40: 3a 53 65 74 43 75 72 72 65 6e 74 44 69 72 65 63  :SetCurrentDirec
0b50: 74 6f 72 79 28 20 64 64 69 72 20 29 3b 0d 0a 0d  tory( ddir );...
0b60: 0a 09 6d 5f 61 6e 61 6d 65 20 3d 20 61 6e 61 6d  ..m_aname = anam
0b70: 65 2e 6c 6e 61 6d 65 3b 0d 0a 09 70 77 64 42 75  e.lname;...pwdBu
0b80: 66 5b 30 5d 20 3d 20 2d 31 3b 0d 0a 0d 0a 09 74  f[0] = -1;.....t
0b90: 41 43 45 45 78 74 72 61 63 74 53 74 72 75 63 20  ACEExtractStruc 
0ba0: 65 78 3b 0d 0a 09 6b 69 5f 6d 65 6d 7a 65 72 6f  ex;...ki_memzero
0bb0: 28 20 26 65 78 2c 20 73 69 7a 65 6f 66 28 65 78  ( &ex, sizeof(ex
0bc0: 29 20 29 3b 0d 0a 09 65 78 2e 46 69 6c 65 73 2e  ) );...ex.Files.
0bd0: 53 6f 75 72 63 65 44 69 72 20 20 20 3d 20 22 22  SourceDir   = ""
0be0: 3b 0d 0a 09 65 78 2e 46 69 6c 65 73 2e 46 69 6c  ;...ex.Files.Fil
0bf0: 65 4c 69 73 74 20 20 20 20 3d 20 63 6f 6e 73 74  eList    = const
0c00: 5f 63 61 73 74 3c 63 68 61 72 2a 3e 28 28 63 6f  _cast<char*>((co
0c10: 6e 73 74 20 63 68 61 72 2a 29 6c 73 74 29 3b 0d  nst char*)lst);.
0c20: 0a 09 65 78 2e 46 69 6c 65 73 2e 45 78 63 6c 75  ..ex.Files.Exclu
0c30: 64 65 4c 69 73 74 20 3d 20 22 22 3b 0d 0a 09 65  deList = "";...e
0c40: 78 2e 46 69 6c 65 73 2e 46 75 6c 6c 4d 61 74 63  x.Files.FullMatc
0c50: 68 20 20 20 3d 20 66 69 6c 65 73 3d 3d 4e 55 4c  h   = files==NUL
0c60: 4c 3b 0d 0a 09 65 78 2e 44 65 73 74 69 6e 61 74  L;...ex.Destinat
0c70: 69 6f 6e 44 69 72 20 20 20 20 3d 20 63 6f 6e 73  ionDir    = cons
0c80: 74 5f 63 61 73 74 3c 63 68 61 72 2a 3e 28 28 63  t_cast<char*>((c
0c90: 6f 6e 73 74 20 63 68 61 72 2a 29 64 64 69 72 29  onst char*)ddir)
0ca0: 3b 0d 0a 09 65 78 2e 45 78 63 6c 75 64 65 50 61  ;...ex.ExcludePa
0cb0: 74 68 20 20 20 20 20 20 20 3d 20 46 41 4c 53 45  th       = FALSE
0cc0: 3b 0d 0a 09 65 78 2e 44 65 63 72 79 70 74 50 61  ;...ex.DecryptPa
0cd0: 73 73 77 6f 72 64 20 20 20 3d 20 22 22 3b 0d 0a  ssword   = "";..
0ce0: 0d 0a 09 63 68 61 72 20 61 6e 6d 5b 4d 41 58 5f  ...char anm[MAX_
0cf0: 50 41 54 48 5d 3b 0d 0a 09 6b 69 5f 73 74 72 63  PATH];...ki_strc
0d00: 70 79 28 20 61 6e 6d 2c 20 61 6e 61 6d 65 2e 62  py( anm, aname.b
0d10: 61 73 65 64 69 72 20 29 3b 0d 0a 09 6b 69 5f 73  asedir );...ki_s
0d20: 74 72 63 61 74 28 20 61 6e 6d 2c 20 61 6e 61 6d  trcat( anm, anam
0d30: 65 2e 6c 6e 61 6d 65 20 29 3b 0d 0a 0d 0a 09 6d  e.lname );.....m
0d40: 5f 62 43 61 6e 63 65 6c 65 64 20 3d 20 66 61 6c  _bCanceled = fal
0d50: 73 65 3b 0d 0a 09 62 6f 6f 6c 20 61 6e 73 20 3d  se;...bool ans =
0d60: 20 28 20 30 3d 3d 61 63 65 45 78 74 72 28 20 61   ( 0==aceExtr( a
0d70: 6e 6d 2c 20 26 65 78 20 29 20 29 3b 0d 0a 09 69  nm, &ex ) );...i
0d80: 66 28 20 64 6c 67 20 26 26 20 61 6e 73 20 29 0d  f( dlg && ans ).
0d90: 0a 09 7b 0d 0a 09 09 64 6c 67 2d 3e 63 68 61 6e  ..{....dlg->chan
0da0: 67 65 28 4e 55 4c 4c 2c 33 32 37 36 38 29 3b 0d  ge(NULL,32768);.
0db0: 0a 09 09 3a 3a 53 6c 65 65 70 28 31 30 30 29 3b  ...::Sleep(100);
0dc0: 0d 0a 09 7d 0d 0a 09 64 65 6c 65 74 65 20 64 6c  ...}...delete dl
0dd0: 67 3b 0d 0a 09 64 65 6c 65 74 65 20 70 61 74 68  g;...delete path
0de0: 43 68 65 63 6b 3b 0d 0a 09 72 65 74 75 72 6e 20  Check;...return 
0df0: 61 6e 73 20 3f 20 30 20 3a 20 28 6d 5f 62 43 61  ans ? 0 : (m_bCa
0e00: 6e 63 65 6c 65 64 3f 30 78 38 30 32 30 3a 30 78  nceled?0x8020:0x
0e10: 66 66 66 66 29 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74  ffff);..}....int
0e20: 20 5f 5f 73 74 64 63 61 6c 6c 20 43 41 72 63 41   __stdcall CArcA
0e30: 63 65 3a 3a 63 61 6c 6c 62 61 63 6b 5f 65 72 72  ce::callback_err
0e40: 6f 72 28 20 70 41 43 45 45 72 72 6f 72 43 61 6c  or( pACEErrorCal
0e50: 6c 62 61 63 6b 50 72 6f 63 53 74 72 75 63 20 45  lbackProcStruc E
0e60: 72 72 6f 72 20 29 0d 0a 7b 0d 0a 09 72 65 74 75  rror )..{...retu
0e70: 72 6e 20 41 43 45 5f 43 41 4c 4c 42 41 43 4b 5f  rn ACE_CALLBACK_
0e80: 52 45 54 55 52 4e 5f 4f 4b 3b 0d 0a 7d 0d 0a 0d  RETURN_OK;..}...
0e90: 0a 69 6e 74 20 5f 5f 73 74 64 63 61 6c 6c 20 43  .int __stdcall C
0ea0: 41 72 63 41 63 65 3a 3a 63 61 6c 6c 62 61 63 6b  ArcAce::callback
0eb0: 5f 69 6e 66 6f 28 20 70 41 43 45 49 6e 66 6f 43  _info( pACEInfoC
0ec0: 61 6c 6c 62 61 63 6b 50 72 6f 63 53 74 72 75 63  allbackProcStruc
0ed0: 20 49 6e 66 6f 20 29 0d 0a 7b 0d 0a 09 72 65 74   Info )..{...ret
0ee0: 75 72 6e 20 41 43 45 5f 43 41 4c 4c 42 41 43 4b  urn ACE_CALLBACK
0ef0: 5f 52 45 54 55 52 4e 5f 4f 4b 3b 0d 0a 7d 0d 0a  _RETURN_OK;..}..
0f00: 0d 0a 69 6e 74 20 5f 5f 73 74 64 63 61 6c 6c 20  ..int __stdcall 
0f10: 43 41 72 63 41 63 65 3a 3a 63 61 6c 6c 62 61 63  CArcAce::callbac
0f20: 6b 5f 72 65 71 75 65 73 74 28 20 70 41 43 45 52  k_request( pACER
0f30: 65 71 75 65 73 74 43 61 6c 6c 62 61 63 6b 50 72  equestCallbackPr
0f40: 6f 63 53 74 72 75 63 20 52 65 71 75 65 73 74 20  ocStruc Request 
0f50: 29 0d 0a 7b 0d 0a 09 2f 2f 20 83 70 83 58 83 8f  )..{...// .p.X..
0f60: 81 5b 83 68 97 76 8b 81 81 97 89 f0 93 80 20 2e  .[.h.v........ .
0f70: 2e 2e 20 41 72 63 68 69 76 65 64 46 69 6c 65 0d  .. ArchivedFile.
0f80: 0a 09 69 66 28 20 52 65 71 75 65 73 74 2d 3e 47  ..if( Request->G
0f90: 6c 6f 62 61 6c 2e 43 6f 64 65 20 3d 3d 20 41 43  lobal.Code == AC
0fa0: 45 5f 43 41 4c 4c 42 41 43 4b 5f 52 45 51 55 45  E_CALLBACK_REQUE
0fb0: 53 54 5f 50 41 53 53 57 4f 52 44 0d 0a 09 20 26  ST_PASSWORD... &
0fc0: 26 20 52 65 71 75 65 73 74 2d 3e 47 6c 6f 62 61  & Request->Globa
0fd0: 6c 2e 4f 70 65 72 61 74 69 6f 6e 20 3d 3d 20 41  l.Operation == A
0fe0: 43 45 5f 43 41 4c 4c 42 41 43 4b 5f 4f 50 45 52  CE_CALLBACK_OPER
0ff0: 41 54 49 4f 4e 5f 45 58 54 52 41 43 54 20 29 0d  ATION_EXTRACT ).
1000: 0a 09 7b 0d 0a 09 09 43 41 72 63 41 63 65 2a 20  ..{....CArcAce* 
1010: 61 63 65 20 3d 20 28 43 41 72 63 41 63 65 2a 29  ace = (CArcAce*)
1020: 28 52 65 71 75 65 73 74 2d 3e 47 6c 6f 62 61 6c  (Request->Global
1030: 2e 47 6c 6f 62 61 6c 44 61 74 61 2d 3e 4f 62 6a  .GlobalData->Obj
1040: 29 3b 0d 0a 09 09 69 66 28 20 61 63 65 2d 3e 70  );....if( ace->p
1050: 77 64 42 75 66 5b 30 5d 20 3d 3d 20 2d 31 20 29  wdBuf[0] == -1 )
1060: 0d 0a 09 09 7b 0d 0a 09 09 09 61 63 65 2d 3e 70  ....{.....ace->p
1070: 77 64 42 75 66 5b 30 5d 3d 30 3b 0d 0a 0d 0a 09  wdBuf[0]=0;.....
1080: 09 09 43 41 72 63 50 77 64 44 6c 67 20 70 77 64  ..CArcPwdDlg pwd
1090: 28 20 61 63 65 2d 3e 64 6c 67 20 3f 20 61 63 65  ( ace->dlg ? ace
10a0: 2d 3e 64 6c 67 2d 3e 68 77 6e 64 28 29 20 3a 20  ->dlg->hwnd() : 
10b0: 4e 55 4c 4c 2c 20 61 63 65 2d 3e 70 77 64 42 75  NULL, ace->pwdBu
10c0: 66 2c 20 36 30 2c 20 61 63 65 2d 3e 6d 5f 61 6e  f, 60, ace->m_an
10d0: 61 6d 65 20 29 3b 0d 0a 09 09 09 69 66 28 20 49  ame );.....if( I
10e0: 44 43 41 4e 43 45 4c 20 3d 3d 20 70 77 64 2e 67  DCANCEL == pwd.g
10f0: 65 74 45 6e 64 43 6f 64 65 28 29 20 29 0d 0a 09  etEndCode() )...
1100: 09 09 7b 0d 0a 09 09 09 09 61 63 65 2d 3e 6d 5f  ..{......ace->m_
1110: 62 43 61 6e 63 65 6c 65 64 20 3d 20 74 72 75 65  bCanceled = true
1120: 3b 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 41 43  ;......return AC
1130: 45 5f 43 41 4c 4c 42 41 43 4b 5f 52 45 54 55 52  E_CALLBACK_RETUR
1140: 4e 5f 43 41 4e 43 45 4c 3b 0d 0a 09 09 09 7d 0d  N_CANCEL;.....}.
1150: 0a 0d 0a 09 09 09 52 65 71 75 65 73 74 2d 3e 47  ......Request->G
1160: 6c 6f 62 61 6c 2e 47 6c 6f 62 61 6c 44 61 74 61  lobal.GlobalData
1170: 2d 3e 44 65 63 72 79 70 74 50 61 73 73 77 6f 72  ->DecryptPasswor
1180: 64 20 3d 20 61 63 65 2d 3e 70 77 64 42 75 66 3b  d = ace->pwdBuf;
1190: 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 0d 0a 09 69 66  ....}...}.....if
11a0: 28 20 52 65 71 75 65 73 74 2d 3e 47 6c 6f 62 61  ( Request->Globa
11b0: 6c 2e 43 6f 64 65 20 3d 3d 20 41 43 45 5f 43 41  l.Code == ACE_CA
11c0: 4c 4c 42 41 43 4b 5f 52 45 51 55 45 53 54 5f 43  LLBACK_REQUEST_C
11d0: 48 41 4e 47 45 56 4f 4c 55 4d 45 20 29 0d 0a 09  HANGEVOLUME )...
11e0: 09 69 66 28 20 21 6b 69 53 55 74 69 6c 3a 3a 65  .if( !kiSUtil::e
11f0: 78 69 73 74 28 52 65 71 75 65 73 74 2d 3e 41 72  xist(Request->Ar
1200: 63 68 69 76 65 2e 41 72 63 68 69 76 65 44 61 74  chive.ArchiveDat
1210: 61 2d 3e 41 72 63 68 69 76 65 4e 61 6d 65 29 20  a->ArchiveName) 
1220: 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 41 43 45  ).....return ACE
1230: 5f 43 41 4c 4c 42 41 43 4b 5f 52 45 54 55 52 4e  _CALLBACK_RETURN
1240: 5f 43 41 4e 43 45 4c 3b 0d 0a 0d 0a 09 72 65 74  _CANCEL;.....ret
1250: 75 72 6e 20 41 43 45 5f 43 41 4c 4c 42 41 43 4b  urn ACE_CALLBACK
1260: 5f 52 45 54 55 52 4e 5f 4f 4b 3b 0d 0a 7d 0d 0a  _RETURN_OK;..}..
1270: 0d 0a 69 6e 74 20 5f 5f 73 74 64 63 61 6c 6c 20  ..int __stdcall 
1280: 43 41 72 63 41 63 65 3a 3a 63 61 6c 6c 62 61 63  CArcAce::callbac
1290: 6b 5f 73 74 61 74 65 28 20 70 41 43 45 53 74 61  k_state( pACESta
12a0: 74 65 43 61 6c 6c 62 61 63 6b 50 72 6f 63 53 74  teCallbackProcSt
12b0: 72 75 63 20 53 74 61 74 65 20 29 0d 0a 7b 0d 0a  ruc State )..{..
12c0: 09 2f 2f 20 83 74 83 40 83 43 83 8b 8f 88 97 9d  .// .t.@.C......
12d0: 8a 4a 8e 6e 81 97 89 f0 93 80 6f 72 83 8a 83 58  .J.n......or...X
12e0: 83 67 0d 0a 09 69 66 28 20 53 74 61 74 65 2d 3e  .g...if( State->
12f0: 50 72 6f 67 72 65 73 73 2e 43 6f 64 65 20 3d 3d  Progress.Code ==
1300: 20 41 43 45 5f 43 41 4c 4c 42 41 43 4b 5f 53 54   ACE_CALLBACK_ST
1310: 41 54 45 5f 53 54 41 52 54 46 49 4c 45 20 29 0d  ATE_STARTFILE ).
1320: 0a 09 7b 0d 0a 09 09 43 41 72 63 41 63 65 2a 20  ..{....CArcAce* 
1330: 70 74 72 20 3d 20 28 43 41 72 63 41 63 65 2a 29  ptr = (CArcAce*)
1340: 28 53 74 61 74 65 2d 3e 41 72 63 68 69 76 65 64  (State->Archived
1350: 46 69 6c 65 2e 47 6c 6f 62 61 6c 44 61 74 61 2d  File.GlobalData-
1360: 3e 4f 62 6a 29 3b 0d 0a 0d 0a 09 09 69 66 28 20  >Obj);......if( 
1370: 53 74 61 74 65 2d 3e 50 72 6f 67 72 65 73 73 2e  State->Progress.
1380: 4f 70 65 72 61 74 69 6f 6e 20 3d 3d 20 41 43 45  Operation == ACE
1390: 5f 43 41 4c 4c 42 41 43 4b 5f 4f 50 45 52 41 54  _CALLBACK_OPERAT
13a0: 49 4f 4e 5f 4c 49 53 54 20 29 0d 0a 09 09 7b 0d  ION_LIST )....{.
13b0: 0a 09 09 09 69 66 28 20 21 70 74 72 2d 3e 6c 69  ....if( !ptr->li
13c0: 73 74 75 70 28 20 2a 28 53 74 61 74 65 2d 3e 41  stup( *(State->A
13d0: 72 63 68 69 76 65 64 46 69 6c 65 2e 46 69 6c 65  rchivedFile.File
13e0: 44 61 74 61 29 20 29 20 29 0d 0a 09 09 09 09 72  Data) ) )......r
13f0: 65 74 75 72 6e 20 41 43 45 5f 43 41 4c 4c 42 41  eturn ACE_CALLBA
1400: 43 4b 5f 52 45 54 55 52 4e 5f 43 41 4e 43 45 4c  CK_RETURN_CANCEL
1410: 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 20 69  ;....}....else i
1420: 66 28 20 53 74 61 74 65 2d 3e 50 72 6f 67 72 65  f( State->Progre
1430: 73 73 2e 4f 70 65 72 61 74 69 6f 6e 20 3d 3d 20  ss.Operation == 
1440: 41 43 45 5f 43 41 4c 4c 42 41 43 4b 5f 4f 50 45  ACE_CALLBACK_OPE
1450: 52 41 54 49 4f 4e 5f 45 58 54 52 41 43 54 20 29  RATION_EXTRACT )
1460: 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 20 70 74  ....{.....if( pt
1470: 72 2d 3e 64 6c 67 20 29 0d 0a 09 09 09 09 70 74  r->dlg )......pt
1480: 72 2d 3e 64 6c 67 2d 3e 63 68 61 6e 67 65 28 20  r->dlg->change( 
1490: 53 74 61 74 65 2d 3e 41 72 63 68 69 76 65 64 46  State->ArchivedF
14a0: 69 6c 65 2e 46 69 6c 65 44 61 74 61 2d 3e 53 6f  ile.FileData->So
14b0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 29 3b 0d  urceFileName );.
14c0: 0a 09 09 09 69 66 28 20 70 74 72 2d 3e 70 61 74  ....if( ptr->pat
14d0: 68 43 68 65 63 6b 20 29 0d 0a 09 09 09 09 69 66  hCheck )......if
14e0: 28 20 63 6f 6e 74 61 69 6e 73 44 61 6e 67 65 72  ( containsDanger
14f0: 50 61 74 68 28 20 53 74 61 74 65 2d 3e 41 72 63  Path( State->Arc
1500: 68 69 76 65 64 46 69 6c 65 2e 46 69 6c 65 44 61  hivedFile.FileDa
1510: 74 61 2d 3e 53 6f 75 72 63 65 46 69 6c 65 4e 61  ta->SourceFileNa
1520: 6d 65 20 29 20 29 0d 0a 09 09 09 09 09 69 66 28  me ) ).......if(
1530: 20 21 20 70 74 72 2d 3e 70 61 74 68 43 68 65 63   ! ptr->pathChec
1540: 6b 2d 3e 69 73 5f 6f 6b 5f 74 6f 5f 65 78 74 72  k->is_ok_to_extr
1550: 61 63 74 28 20 53 74 61 74 65 2d 3e 41 72 63 68  act( State->Arch
1560: 69 76 65 64 46 69 6c 65 2e 46 69 6c 65 44 61 74  ivedFile.FileDat
1570: 61 2d 3e 53 6f 75 72 63 65 46 69 6c 65 4e 61 6d  a->SourceFileNam
1580: 65 2c 20 70 74 72 2d 3e 64 6c 67 20 29 20 29 0d  e, ptr->dlg ) ).
1590: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 41 43  .......return AC
15a0: 45 5f 43 41 4c 4c 42 41 43 4b 5f 52 45 54 55 52  E_CALLBACK_RETUR
15b0: 4e 5f 43 41 4e 43 45 4c 3b 0d 0a 09 09 7d 0d 0a  N_CANCEL;....}..
15c0: 09 7d 0d 0a 09 2f 2f 20 90 69 93 57 8f f3 8b b5  .}...// .i.W....
15d0: 83 4f 83 89 83 74 81 97 89 f0 93 80 0d 0a 09 65  .O...t.........e
15e0: 6c 73 65 20 69 66 28 20 53 74 61 74 65 2d 3e 50  lse if( State->P
15f0: 72 6f 67 72 65 73 73 2e 43 6f 64 65 20 3d 3d 20  rogress.Code == 
1600: 41 43 45 5f 43 41 4c 4c 42 41 43 4b 5f 53 54 41  ACE_CALLBACK_STA
1610: 54 45 5f 50 52 4f 47 52 45 53 53 20 29 0d 0a 09  TE_PROGRESS )...
1620: 7b 0d 0a 09 09 43 41 72 63 41 63 65 2a 20 70 74  {....CArcAce* pt
1630: 72 20 3d 20 28 43 41 72 63 41 63 65 2a 29 28 53  r = (CArcAce*)(S
1640: 74 61 74 65 2d 3e 41 72 63 68 69 76 65 64 46 69  tate->ArchivedFi
1650: 6c 65 2e 47 6c 6f 62 61 6c 44 61 74 61 2d 3e 4f  le.GlobalData->O
1660: 62 6a 29 3b 0d 0a 0d 0a 09 09 69 66 28 20 53 74  bj);......if( St
1670: 61 74 65 2d 3e 50 72 6f 67 72 65 73 73 2e 4f 70  ate->Progress.Op
1680: 65 72 61 74 69 6f 6e 20 3d 3d 20 41 43 45 5f 43  eration == ACE_C
1690: 41 4c 4c 42 41 43 4b 5f 4f 50 45 52 41 54 49 4f  ALLBACK_OPERATIO
16a0: 4e 5f 45 58 54 52 41 43 54 20 26 26 20 70 74 72  N_EXTRACT && ptr
16b0: 2d 3e 64 6c 67 20 29 0d 0a 09 09 7b 0d 0a 09 09  ->dlg )....{....
16c0: 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 70  .unsigned long p
16d0: 72 73 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c  rs = (unsigned l
16e0: 6f 6e 67 29 53 74 61 74 65 2d 3e 50 72 6f 67 72  ong)State->Progr
16f0: 65 73 73 2e 50 72 6f 67 72 65 73 73 44 61 74 61  ess.ProgressData
1700: 2d 3e 54 6f 74 61 6c 50 72 6f 63 65 73 73 65 64  ->TotalProcessed
1710: 53 69 7a 65 3b 0d 0a 09 09 09 75 6e 73 69 67 6e  Size;.....unsign
1720: 65 64 20 6c 6f 6e 67 20 74 74 6c 20 3d 20 28 75  ed long ttl = (u
1730: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 53 74 61  nsigned long)Sta
1740: 74 65 2d 3e 50 72 6f 67 72 65 73 73 2e 50 72 6f  te->Progress.Pro
1750: 67 72 65 73 73 44 61 74 61 2d 3e 54 6f 74 61 6c  gressData->Total
1760: 53 69 7a 65 3b 0d 0a 09 09 09 70 74 72 2d 3e 64  Size;.....ptr->d
1770: 6c 67 2d 3e 63 68 61 6e 67 65 28 20 4e 55 4c 4c  lg->change( NULL
1780: 2c 20 74 74 6c 20 3f 20 28 69 6e 74 29 28 28 28  , ttl ? (int)(((
1790: 28 5f 5f 69 6e 74 36 34 29 70 72 73 29 3c 3c 31  (__int64)prs)<<1
17a0: 35 29 2f 74 74 6c 29 20 3a 20 31 30 30 30 30 20  5)/ttl) : 10000 
17b0: 29 3b 0d 0a 09 09 09 69 66 28 20 21 70 74 72 2d  );.....if( !ptr-
17c0: 3e 64 6c 67 2d 3e 6d 73 67 6c 6f 6f 70 28 29 20  >dlg->msgloop() 
17d0: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 70 74 72  ).....{......ptr
17e0: 2d 3e 6d 5f 62 43 61 6e 63 65 6c 65 64 20 3d 20  ->m_bCanceled = 
17f0: 74 72 75 65 3b 0d 0a 09 09 09 09 72 65 74 75 72  true;......retur
1800: 6e 20 41 43 45 5f 43 41 4c 4c 42 41 43 4b 5f 52  n ACE_CALLBACK_R
1810: 45 54 55 52 4e 5f 43 41 4e 43 45 4c 3b 0d 0a 09  ETURN_CANCEL;...
1820: 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 2f  ..}....}...}.../
1830: 2f 20 43 52 43 83 60 83 46 83 62 83 4e 81 97 89  / CRC.`.F.b.N...
1840: f0 93 80 0d 0a 09 65 6c 73 65 20 69 66 28 20 53  ......else if( S
1850: 74 61 74 65 2d 3e 50 72 6f 67 72 65 73 73 2e 43  tate->Progress.C
1860: 6f 64 65 20 3d 3d 20 41 43 45 5f 43 41 4c 4c 42  ode == ACE_CALLB
1870: 41 43 4b 5f 53 54 41 54 45 5f 45 4e 44 43 52 43  ACK_STATE_ENDCRC
1880: 43 48 45 43 4b 20 29 0d 0a 09 7b 0d 0a 09 09 69  CHECK )...{....i
1890: 66 28 20 21 53 74 61 74 65 2d 3e 43 52 43 43 68  f( !State->CRCCh
18a0: 65 63 6b 2e 43 52 43 4f 6b 20 29 0d 0a 09 09 09  eck.CRCOk ).....
18b0: 3a 3a 44 65 6c 65 74 65 46 69 6c 65 28 20 53 74  ::DeleteFile( St
18c0: 61 74 65 2d 3e 43 52 43 43 68 65 63 6b 2e 46 69  ate->CRCCheck.Fi
18d0: 6c 65 44 61 74 61 2d 3e 53 6f 75 72 63 65 46 69  leData->SourceFi
18e0: 6c 65 4e 61 6d 65 20 29 3b 0d 0a 09 7d 0d 0a 0d  leName );...}...
18f0: 0a 09 72 65 74 75 72 6e 20 41 43 45 5f 43 41 4c  ..return ACE_CAL
1900: 4c 42 41 43 4b 5f 52 45 54 55 52 4e 5f 4f 4b 3b  LBACK_RETURN_OK;
1910: 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 72 63  ..}....bool CArc
1920: 41 63 65 3a 3a 6c 69 73 74 75 70 28 20 74 41 43  Ace::listup( tAC
1930: 45 46 69 6c 65 44 61 74 61 53 74 72 75 63 26 20  EFileDataStruc& 
1940: 66 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 6c 69 73  f )..{...if( lis
1950: 74 20 29 20 2f 2f 20 91 53 83 74 83 40 83 43 83  t ) // .S.t.@.C.
1960: 8b 83 8a 83 58 83 65 83 42 83 93 83 4f 83 82 81  ....X.e.B...O...
1970: 5b 83 68 0d 0a 09 7b 0d 0a 09 09 61 72 63 66 69  [.h...{....arcfi
1980: 6c 65 20 78 3b 0d 0a 0d 0a 09 09 6b 69 5f 73 74  le x;......ki_st
1990: 72 63 70 79 28 20 78 2e 69 6e 66 2e 73 7a 46 69  rcpy( x.inf.szFi
19a0: 6c 65 4e 61 6d 65 2c 20 66 2e 53 6f 75 72 63 65  leName, f.Source
19b0: 46 69 6c 65 4e 61 6d 65 20 29 3b 0d 0a 09 09 78  FileName );....x
19c0: 2e 69 73 66 69 6c 65 20 3d 20 28 20 30 3d 3d 20  .isfile = ( 0== 
19d0: 28 66 2e 41 74 74 72 69 62 75 74 65 73 20 26 20  (f.Attributes & 
19e0: 30 78 31 30 29 20 29 3b 20 2f 2f 5f 41 5f 53 55  0x10) ); //_A_SU
19f0: 42 44 49 52 0d 0a 09 09 78 2e 69 6e 66 2e 64 77  BDIR....x.inf.dw
1a00: 43 6f 6d 70 72 65 73 73 65 64 53 69 7a 65 20 3d  CompressedSize =
1a10: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29   (unsigned long)
1a20: 66 2e 43 6f 6d 70 72 65 73 73 65 64 53 69 7a 65  f.CompressedSize
1a30: 3b 0d 0a 09 09 78 2e 69 6e 66 2e 64 77 4f 72 69  ;....x.inf.dwOri
1a40: 67 69 6e 61 6c 53 69 7a 65 20 20 20 3d 20 28 75  ginalSize   = (u
1a50: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 66 2e 53  nsigned long)f.S
1a60: 69 7a 65 3b 0d 0a 09 09 78 2e 69 6e 66 2e 77 44  ize;....x.inf.wD
1a70: 61 74 65 20 3d 20 28 75 6e 73 69 67 6e 65 64 20  ate = (unsigned 
1a80: 73 68 6f 72 74 29 28 66 2e 54 69 6d 65 3e 3e 31  short)(f.Time>>1
1a90: 36 29 3b 0d 0a 09 09 78 2e 69 6e 66 2e 77 54 69  6);....x.inf.wTi
1aa0: 6d 65 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 73  me = (unsigned s
1ab0: 68 6f 72 74 29 28 66 2e 54 69 6d 65 29 3b 0d 0a  hort)(f.Time);..
1ac0: 0d 0a 09 09 69 66 28 20 66 2e 4d 65 74 68 6f 64  ....if( f.Method
1ad0: 3d 3d 30 20 29 09 09 6b 69 5f 73 74 72 63 70 79  ==0 )..ki_strcpy
1ae0: 28 20 78 2e 69 6e 66 2e 73 7a 4d 6f 64 65 2c 20  ( x.inf.szMode, 
1af0: 22 73 74 6f 72 65 22 20 29 3b 0d 0a 09 09 65 6c  "store" );....el
1b00: 73 65 20 69 66 28 20 66 2e 4d 65 74 68 6f 64 26  se if( f.Method&
1b10: 32 20 29 09 6b 69 5f 73 74 72 63 70 79 28 20 78  2 ).ki_strcpy( x
1b20: 2e 69 6e 66 2e 73 7a 4d 6f 64 65 2c 20 22 61 63  .inf.szMode, "ac
1b30: 65 32 22 20 29 3b 0d 0a 09 09 65 6c 73 65 20 69  e2" );....else i
1b40: 66 28 20 66 2e 4d 65 74 68 6f 64 26 31 20 29 09  f( f.Method&1 ).
1b50: 6b 69 5f 73 74 72 63 70 79 28 20 78 2e 69 6e 66  ki_strcpy( x.inf
1b60: 2e 73 7a 4d 6f 64 65 2c 20 22 61 63 65 31 22 20  .szMode, "ace1" 
1b70: 29 3b 0d 0a 09 09 65 6c 73 65 09 09 09 09 09 6b  );....else.....k
1b80: 69 5f 73 74 72 63 70 79 28 20 78 2e 69 6e 66 2e  i_strcpy( x.inf.
1b90: 73 7a 4d 6f 64 65 2c 20 22 2d 61 63 65 2d 22 20  szMode, "-ace-" 
1ba0: 29 3b 0d 0a 0d 0a 09 09 6c 69 73 74 2d 3e 61 64  );......list->ad
1bb0: 64 28 20 78 20 29 3b 0d 0a 09 09 72 65 74 75 72  d( x );....retur
1bc0: 6e 20 74 72 75 65 3b 0d 0a 09 7d 0d 0a 0d 0a 09  n true;...}.....
1bd0: 2f 2f 20 8f 91 8c c9 93 e0 83 74 83 40 83 43 83  // .......t.@.C.
1be0: 8b 8d 5c 90 ac 8c 9f 8d f5 83 82 81 5b 83 68 0d  ..\.........[.h.
1bf0: 0a 09 66 6f 72 28 20 63 6f 6e 73 74 20 63 68 61  ..for( const cha
1c00: 72 2a 20 70 3d 66 2e 53 6f 75 72 63 65 46 69 6c  r* p=f.SourceFil
1c10: 65 4e 61 6d 65 3b 20 2a 70 3b 20 70 3d 6b 69 53  eName; *p; p=kiS
1c20: 74 72 3a 3a 6e 65 78 74 28 70 29 20 29 0d 0a 09  tr::next(p) )...
1c30: 09 69 66 28 20 2a 70 3d 3d 27 5c 5c 27 20 7c 7c  .if( *p=='\\' ||
1c40: 20 2a 70 3d 3d 27 2f 27 20 29 0d 0a 09 09 09 72   *p=='/' ).....r
1c50: 65 74 75 72 6e 20 74 72 75 65 3b 20 2f 2f 20 83  eturn true; // .
1c60: 8b 81 5b 83 67 82 cc 83 74 83 40 83 43 83 8b 82  ..[.g...t.@.C...
1c70: cc 82 dd 8f 88 97 9d 91 ce 8f db 81 63 0d 0a 0d  ............c...
1c80: 0a 09 69 66 28 20 61 43 6e 74 20 21 3d 20 61 55  ..if( aCnt != aU
1c90: 6e 6b 6e 6f 77 6e 20 29 0d 0a 09 09 72 65 74 75  nknown )....retu
1ca0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 61 43  rn false;.....aC
1cb0: 6e 74 20 3d 20 28 66 2e 41 74 74 72 69 62 75 74  nt = (f.Attribut
1cc0: 65 73 20 26 20 30 78 31 30 29 20 3f 20 61 53 69  es & 0x10) ? aSi
1cd0: 6e 67 6c 65 44 69 72 20 3a 20 61 53 69 6e 67 6c  ngleDir : aSingl
1ce0: 65 46 69 6c 65 3b 0d 0a 09 69 66 28 20 61 43 6e  eFile;...if( aCn
1cf0: 74 20 3d 3d 20 61 53 69 6e 67 6c 65 44 69 72 20  t == aSingleDir 
1d00: 29 0d 0a 09 09 2a 64 4e 61 6d 65 20 3d 20 66 2e  )....*dName = f.
1d10: 53 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 3b 0d  SourceFileName;.
1d20: 0a 0d 0a 09 72 65 74 75 72 6e 20 74 72 75 65 3b  ....return true;
1d30: 0d 0a 7d 0d 0a                                   ..}..