Hex Artifact Content

Not logged in

Artifact 10de0296b1be04cd0e0dda2965a5f5195347073d:


0000: 2f 2f 20 41 72 63 68 69 76 65 72 2e 63 70 70 0d  // Archiver.cpp.
0010: 0a 2f 2f 2d 2d 20 43 41 72 63 68 69 76 65 72 20  .//-- CArchiver 
0020: 2d 2d 20 63 6f 6d 6d 6f 6e 20 69 6e 74 65 72 66  -- common interf
0030: 61 63 65 20 69 6e 20 27 4e 6f 61 68 27 20 66 6f  ace in 'Noah' fo
0040: 72 20 61 72 63 68 69 76 69 6e 67 20 72 6f 75 74  r archiving rout
0050: 69 6e 65 20 2d 2d 0d 0a 0d 0a 23 69 6e 63 6c 75  ine --....#inclu
0060: 64 65 20 22 73 74 64 61 66 78 2e 68 22 0d 0a 23  de "stdafx.h"..#
0070: 69 6e 63 6c 75 64 65 20 22 41 72 63 68 69 76 65  include "Archive
0080: 72 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22  r.h"..#include "
0090: 4e 6f 61 68 41 70 70 2e 68 22 0d 0a 0d 0a 0d 0a  NoahApp.h"......
00a0: 0d 0a 43 41 72 63 4d 6f 64 75 6c 65 3a 3a 43 41  ..CArcModule::CA
00b0: 72 63 4d 6f 64 75 6c 65 28 20 63 6f 6e 73 74 20  rcModule( const 
00c0: 63 68 61 72 2a 20 6e 61 6d 65 2c 20 62 6f 6f 6c  char* name, bool
00d0: 20 75 73 20 29 0d 0a 09 3a 20 6d 5f 64 6c 6c 28   us )...: m_dll(
00e0: 4e 55 4c 4c 29 0d 0a 7b 0d 0a 09 2f 2f 20 53 65  NULL)..{...// Se
00f0: 61 72 63 68 50 61 74 68 82 cc 91 4f 82 c9 83 4a  archPath...O...J
0100: 83 8c 83 93 83 67 83 66 83 42 83 8c 83 4e 83 67  .....g.f.B...N.g
0110: 83 8a 82 f0 6e 6f 61 68 2e 65 78 65 82 c6 93 af  ....noah.exe....
0120: 82 b6 8f ea 8f 8a 82 d6 0d 0a 09 63 68 61 72 20  ...........char 
0130: 70 72 65 76 5f 63 75 72 5b 4d 41 58 5f 50 41 54  prev_cur[MAX_PAT
0140: 48 5d 3b 0d 0a 09 3a 3a 47 65 74 43 75 72 72 65  H];...::GetCurre
0150: 6e 74 44 69 72 65 63 74 6f 72 79 28 4d 41 58 5f  ntDirectory(MAX_
0160: 50 41 54 48 2c 20 70 72 65 76 5f 63 75 72 29 3b  PATH, prev_cur);
0170: 0d 0a 09 6b 69 53 55 74 69 6c 3a 3a 73 77 69 74  ...kiSUtil::swit
0180: 63 68 43 75 72 44 69 72 54 6f 45 78 65 44 69 72  chCurDirToExeDir
0190: 28 29 3b 0d 0a 0d 0a 09 69 66 28 20 30 21 3d 3a  ();.....if( 0!=:
01a0: 3a 53 65 61 72 63 68 50 61 74 68 28 20 4e 55 4c  :SearchPath( NUL
01b0: 4c 2c 6e 61 6d 65 2c 4e 55 4c 4c 2c 4d 41 58 5f  L,name,NULL,MAX_
01c0: 50 41 54 48 2c 6d 5f 6e 61 6d 65 2c 4e 55 4c 4c  PATH,m_name,NULL
01d0: 20 29 20 29 0d 0a 09 7b 0d 0a 09 09 63 6f 6e 73   ) )...{....cons
01e0: 74 20 63 68 61 72 2a 20 78 74 3d 6b 69 50 61 74  t char* xt=kiPat
01f0: 68 3a 3a 65 78 74 28 6e 61 6d 65 29 3b 0d 0a 09  h::ext(name);...
0200: 09 69 66 28 20 30 21 3d 6b 69 5f 73 74 72 63 6d  .if( 0!=ki_strcm
0210: 70 69 28 22 64 6c 6c 22 2c 78 74 29 20 29 0d 0a  pi("dll",xt) )..
0220: 09 09 7b 0d 0a 09 09 09 2f 2f 20 45 58 45 82 cc  ..{.....// EXE..
0230: 8f ea 8d 87 0d 0a 09 09 09 6d 5f 74 79 70 65 20  .........m_type 
0240: 3d 20 75 73 20 3f 20 45 58 45 55 53 20 3a 20 45  = us ? EXEUS : E
0250: 58 45 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65  XE;....}....else
0260: 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 44 4c 4c  ....{.....// DLL
0270: 82 cc 8f ea 8d 87 0d 0a 09 09 09 6d 5f 64 6c 6c  ...........m_dll
0280: 20 3d 20 6e 65 77 20 6b 69 41 72 63 44 4c 4c 52   = new kiArcDLLR
0290: 61 77 28 6e 61 6d 65 29 3b 0d 0a 09 09 09 6d 5f  aw(name);.....m_
02a0: 74 79 70 65 20 3d 20 44 4c 4c 3b 0d 0a 09 09 09  type = DLL;.....
02b0: 69 66 28 6e 61 6d 65 3c 3d 78 74 2d 38 26 26 78  if(name<=xt-8&&x
02c0: 74 5b 2d 36 5d 3d 3d 27 47 27 26 26 78 74 5b 2d  t[-6]=='G'&&xt[-
02d0: 35 5d 3d 3d 27 43 27 26 26 78 74 5b 2d 34 5d 3d  5]=='C'&&xt[-4]=
02e0: 3d 27 41 27 20 29 0d 0a 09 09 09 09 6d 5f 74 79  ='A' )......m_ty
02f0: 70 65 20 3d 20 44 4c 4c 47 43 41 3b 0d 0a 09 09  pe = DLLGCA;....
0300: 09 65 6c 73 65 20 69 66 28 6e 61 6d 65 3d 3d 78  .else if(name==x
0310: 74 2d 36 26 26 78 74 5b 2d 36 5d 3d 3d 27 42 27  t-6&&xt[-6]=='B'
0320: 26 26 78 74 5b 2d 35 5d 3d 3d 27 67 27 26 26 78  &&xt[-5]=='g'&&x
0330: 74 5b 2d 34 5d 3d 3d 27 61 27 20 29 0d 0a 09 09  t[-4]=='a' )....
0340: 09 09 6d 5f 74 79 70 65 20 3d 20 44 4c 4c 42 47  ..m_type = DLLBG
0350: 41 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 65 6c  A;....}...}...el
0360: 73 65 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 83 74 83  se...{....// .t.
0370: 40 83 43 83 8b 82 aa 96 b3 82 a2 82 a9 81 41 83  @.C...........A.
0380: 56 83 46 83 8b 82 cc 83 52 83 7d 83 93 83 68 82  V.F.....R.}...h.
0390: cc 8f ea 8d 87 0d 0a 09 09 2f 2f 20 83 6f 83 62  .........// .o.b
03a0: 83 74 83 40 83 49 81 5b 83 6f 81 5b 83 74 83 8d  .t.@.I.[.o.[.t..
03b0: 81 5b 82 cc 8a eb 8c af 81 63 28 5e 5e 3b 0d 0a  .[.......c(^^;..
03c0: 09 09 6b 69 5f 73 74 72 63 70 79 28 20 6d 5f 6e  ..ki_strcpy( m_n
03d0: 61 6d 65 2c 20 6e 61 6d 65 20 29 3b 0d 0a 09 09  ame, name );....
03e0: 6d 5f 74 79 70 65 20 3d 20 53 48 4c 43 4d 44 3b  m_type = SHLCMD;
03f0: 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 83 4a 83 8c  ...}.....// .J..
0400: 83 93 83 67 82 f0 96 df 82 b7 0d 0a 09 3a 3a 53  ...g.........::S
0410: 65 74 43 75 72 72 65 6e 74 44 69 72 65 63 74 6f  etCurrentDirecto
0420: 72 79 28 70 72 65 76 5f 63 75 72 29 3b 0d 0a 7d  ry(prev_cur);..}
0430: 0d 0a 0d 0a 43 41 72 63 4d 6f 64 75 6c 65 3a 3a  ....CArcModule::
0440: 7e 43 41 72 63 4d 6f 64 75 6c 65 28 29 0d 0a 7b  ~CArcModule()..{
0450: 0d 0a 09 64 65 6c 65 74 65 20 6d 5f 64 6c 6c 3b  ...delete m_dll;
0460: 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 43 41 72 63 4d  ..}....int CArcM
0470: 6f 64 75 6c 65 3a 3a 63 6d 64 28 20 63 6f 6e 73  odule::cmd( cons
0480: 74 20 63 68 61 72 2a 20 63 6d 64 2c 20 62 6f 6f  t char* cmd, boo
0490: 6c 20 6d 69 6e 69 20 29 0d 0a 7b 0d 0a 09 69 66  l mini )..{...if
04a0: 28 20 6d 5f 64 6c 6c 20 29 0d 0a 09 7b 0d 0a 09  ( m_dll )...{...
04b0: 09 2f 2f 20 83 41 81 5b 83 4a 83 43 83 6f 44 4c  .// .A.[.J.C.oDL
04c0: 4c 83 82 81 5b 83 68 82 c8 82 e7 8a c8 92 50 82  L...[.h.......P.
04d0: c9 8f 49 97 b9 0d 0a 09 09 63 68 61 72 20 62 75  ..I......char bu
04e0: 66 5b 31 30 32 34 5d 3b 0d 0a 09 09 72 65 74 75  f[1024];....retu
04f0: 72 6e 20 6d 5f 64 6c 6c 2d 3e 63 6f 6d 6d 61 6e  rn m_dll->comman
0500: 64 28 20 4e 55 4c 4c 2c 20 63 6d 64 2c 20 62 75  d( NULL, cmd, bu
0510: 66 2c 20 73 69 7a 65 6f 66 28 62 75 66 29 20 29  f, sizeof(buf) )
0520: 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 4e 54 82  ;...}.....// NT.
0530: a9 82 c7 82 a4 82 a9 82 cc 83 60 83 46 83 62 83  ..........`.F.b.
0540: 4e 93 99 0d 0a 09 6b 69 50 61 74 68 20 74 6d 70  N.....kiPath tmp
0550: 64 69 72 3b 0d 0a 09 73 74 61 74 69 63 20 63 6f  dir;...static co
0560: 6e 73 74 20 62 6f 6f 6c 20 69 73 4e 54 20 3d 0d  nst bool isNT =.
0570: 0a 09 09 28 61 70 70 28 29 2d 3e 6f 73 76 65 72  ...(app()->osver
0580: 28 29 2e 64 77 50 6c 61 74 66 6f 72 6d 49 64 3d  ().dwPlatformId=
0590: 3d 56 45 52 5f 50 4c 41 54 46 4f 52 4d 5f 57 49  =VER_PLATFORM_WI
05a0: 4e 33 32 5f 4e 54 29 3b 0d 0a 09 73 74 61 74 69  N32_NT);...stati
05b0: 63 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 63 6f  c const char* co
05c0: 6e 73 74 20 63 6c 6f 73 65 53 68 65 6c 6c 20 3d  nst closeShell =
05d0: 0d 0a 09 09 28 69 73 4e 54 20 3f 20 22 63 6d 64  ....(isNT ? "cmd
05e0: 2e 65 78 65 20 2f 63 20 22 20 3a 20 22 63 6f 6d  .exe /c " : "com
05f0: 6d 61 6e 64 2e 63 6f 6d 20 2f 63 20 22 29 3b 0d  mand.com /c ");.
0600: 0a 0d 0a 09 2f 2f 20 83 52 83 7d 83 93 83 68 95  ....// .R.}...h.
0610: b6 8e 9a 97 f1 8d ec 90 ac 0d 0a 09 6b 69 56 61  ............kiVa
0620: 72 20 74 68 65 43 6d 64 28 20 6d 5f 6e 61 6d 65  r theCmd( m_name
0630: 20 29 3b 0d 0a 09 74 68 65 43 6d 64 2e 71 75 6f   );...theCmd.quo
0640: 74 65 28 29 3b 0d 0a 09 74 68 65 43 6d 64 20 2b  te();...theCmd +
0650: 3d 20 27 20 27 3b 0d 0a 09 74 68 65 43 6d 64 20  = ' ';...theCmd 
0660: 2b 3d 20 63 6d 64 3b 0d 0a 0d 0a 09 69 66 28 20  += cmd;.....if( 
0670: 6d 5f 74 79 70 65 3d 3d 53 48 4c 43 4d 44 20 29  m_type==SHLCMD )
0680: 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 83 56 83 46 83  ...{....// .V.F.
0690: 8b 83 52 83 7d 83 93 83 68 82 cc 8f ea 8d 87 0d  ..R.}...h.......
06a0: 0a 09 09 74 68 65 43 6d 64 20 3d 20 63 6c 6f 73  ...theCmd = clos
06b0: 65 53 68 65 6c 6c 20 2b 20 74 68 65 43 6d 64 3b  eShell + theCmd;
06c0: 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20 69 66 28 20  ...}...else if( 
06d0: 6d 5f 74 79 70 65 3d 3d 45 58 45 55 53 20 29 0d  m_type==EXEUS ).
06e0: 0a 09 7b 0d 0a 09 09 2f 2f 20 55 53 83 82 81 5b  ..{....// US...[
06f0: 83 68 82 cc 8f ea 8d 87 0d 0a 09 09 69 66 28 20  .h..........if( 
0700: 69 73 4e 54 20 29 0d 0a 09 09 7b 0d 0a 09 09 09  isNT )....{.....
0710: 3a 3a 53 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74  ::SetEnvironment
0720: 56 61 72 69 61 62 6c 65 28 20 22 4e 4f 41 48 43  Variable( "NOAHC
0730: 4d 44 22 2c 20 74 68 65 43 6d 64 20 29 3b 0d 0a  MD", theCmd );..
0740: 09 09 09 74 68 65 43 6d 64 20 3d 20 22 25 4e 4f  ...theCmd = "%NO
0750: 41 48 43 4d 44 25 22 3b 0d 0a 09 09 7d 0d 0a 0d  AHCMD%";....}...
0760: 0a 09 09 2f 2f 20 90 d8 91 d6 83 6f 83 62 83 60  ...// .....o.b.`
0770: 83 74 83 40 83 43 83 8b 90 b6 90 ac 0d 0a 09 09  .t.@.C..........
0780: 6d 79 61 70 70 28 29 2e 67 65 74 5f 74 65 6d 70  myapp().get_temp
0790: 64 69 72 28 74 6d 70 64 69 72 29 3b 0d 0a 09 09  dir(tmpdir);....
07a0: 6b 69 50 61 74 68 20 62 61 74 6e 61 6d 65 28 74  kiPath batname(t
07b0: 6d 70 64 69 72 29 3b 0d 0a 09 09 62 61 74 6e 61  mpdir);....batna
07c0: 6d 65 20 2b 3d 20 22 6e 63 6d 64 2e 62 61 74 22  me += "ncmd.bat"
07d0: 3b 0d 0a 09 09 6b 69 46 69 6c 65 20 62 61 74 3b  ;....kiFile bat;
07e0: 0d 0a 09 09 62 61 74 2e 6f 70 65 6e 28 20 62 61  ....bat.open( ba
07f0: 74 6e 61 6d 65 2c 66 61 6c 73 65 20 29 3b 0d 0a  tname,false );..
0800: 09 09 62 61 74 2e 77 72 69 74 65 28 20 22 40 43  ..bat.write( "@C
0810: 48 43 50 20 34 33 37 5c 72 5c 6e 40 22 2c 20 31  HCP 437\r\n@", 1
0820: 32 20 29 3b 0d 0a 09 09 62 61 74 2e 77 72 69 74  2 );....bat.writ
0830: 65 28 20 74 68 65 43 6d 64 2c 20 74 68 65 43 6d  e( theCmd, theCm
0840: 64 2e 6c 65 6e 28 29 20 29 3b 0d 0a 09 09 62 61  d.len() );....ba
0850: 74 2e 77 72 69 74 65 28 20 22 5c 72 5c 6e 40 43  t.write( "\r\n@C
0860: 48 43 50 20 39 33 32 5c 72 5c 6e 22 2c 20 31 33  HCP 932\r\n", 13
0870: 20 29 3b 0d 0a 0d 0a 09 09 74 68 65 43 6d 64 20   );......theCmd 
0880: 20 3d 20 63 6c 6f 73 65 53 68 65 6c 6c 3b 0d 0a   = closeShell;..
0890: 09 09 74 68 65 43 6d 64 20 2b 3d 20 62 61 74 6e  ..theCmd += batn
08a0: 61 6d 65 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20  ame;...}.....// 
08b0: 83 76 83 8d 83 5a 83 58 8a 4a 8e 6e 0d 0a 09 50  .v...Z.X.J.n...P
08c0: 52 4f 43 45 53 53 5f 49 4e 46 4f 52 4d 41 54 49  ROCESS_INFORMATI
08d0: 4f 4e 20 70 69 3b 0d 0a 09 53 54 41 52 54 55 50  ON pi;...STARTUP
08e0: 49 4e 46 4f 20 73 69 3d 7b 73 69 7a 65 6f 66 28  INFO si={sizeof(
08f0: 53 54 41 52 54 55 50 49 4e 46 4f 29 7d 3b 0d 0a  STARTUPINFO)};..
0900: 09 73 69 2e 64 77 46 6c 61 67 73 20 20 20 20 3d  .si.dwFlags    =
0910: 53 54 41 52 54 46 5f 55 53 45 53 48 4f 57 57 49  STARTF_USESHOWWI
0920: 4e 44 4f 57 3b 0d 0a 09 73 69 2e 77 53 68 6f 77  NDOW;...si.wShow
0930: 57 69 6e 64 6f 77 3d 6d 69 6e 69 3f 53 57 5f 4d  Window=mini?SW_M
0940: 49 4e 49 4d 49 5a 45 3a 53 57 5f 53 48 4f 57 3b  INIMIZE:SW_SHOW;
0950: 0d 0a 09 69 66 28 20 21 3a 3a 43 72 65 61 74 65  ...if( !::Create
0960: 50 72 6f 63 65 73 73 28 20 4e 55 4c 4c 2c 63 6f  Process( NULL,co
0970: 6e 73 74 5f 63 61 73 74 3c 63 68 61 72 2a 3e 28  nst_cast<char*>(
0980: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 74 68 65  (const char*)the
0990: 43 6d 64 29 2c 0d 0a 09 09 4e 55 4c 4c 2c 4e 55  Cmd),....NULL,NU
09a0: 4c 4c 2c 46 41 4c 53 45 2c 43 52 45 41 54 45 5f  LL,FALSE,CREATE_
09b0: 4e 45 57 5f 50 52 4f 43 45 53 53 5f 47 52 4f 55  NEW_PROCESS_GROU
09c0: 50 7c 4e 4f 52 4d 41 4c 5f 50 52 49 4f 52 49 54  P|NORMAL_PRIORIT
09d0: 59 5f 43 4c 41 53 53 2c 0d 0a 09 09 4e 55 4c 4c  Y_CLASS,....NULL
09e0: 2c 4e 55 4c 4c 2c 20 26 73 69 2c 26 70 69 20 29  ,NULL, &si,&pi )
09f0: 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 30 78 66   )....return 0xf
0a00: 66 66 66 3b 0d 0a 0d 0a 09 2f 2f 20 8f 49 97 b9  fff;.....// .I..
0a10: 91 d2 8b 40 0d 0a 09 3a 3a 43 6c 6f 73 65 48 61  ...@...::CloseHa
0a20: 6e 64 6c 65 28 20 70 69 2e 68 54 68 72 65 61 64  ndle( pi.hThread
0a30: 20 29 3b 0d 0a 09 77 68 69 6c 65 28 20 57 41 49   );...while( WAI
0a40: 54 5f 4f 42 4a 45 43 54 5f 30 20 21 3d 20 3a 3a  T_OBJECT_0 != ::
0a50: 57 61 69 74 46 6f 72 53 69 6e 67 6c 65 4f 62 6a  WaitForSingleObj
0a60: 65 63 74 28 20 70 69 2e 68 50 72 6f 63 65 73 73  ect( pi.hProcess
0a70: 2c 20 35 30 30 20 29 20 29 0d 0a 09 09 6b 69 57  , 500 ) )....kiW
0a80: 69 6e 64 6f 77 3a 3a 6d 73 67 28 29 3b 0d 0a 09  indow::msg();...
0a90: 69 6e 74 20 65 78 3b 0d 0a 09 3a 3a 47 65 74 45  int ex;...::GetE
0aa0: 78 69 74 43 6f 64 65 50 72 6f 63 65 73 73 28 20  xitCodeProcess( 
0ab0: 70 69 2e 68 50 72 6f 63 65 73 73 2c 20 28 44 57  pi.hProcess, (DW
0ac0: 4f 52 44 2a 29 26 65 78 20 29 3b 0d 0a 09 3a 3a  ORD*)&ex );...::
0ad0: 43 6c 6f 73 65 48 61 6e 64 6c 65 28 20 70 69 2e  CloseHandle( pi.
0ae0: 68 50 72 6f 63 65 73 73 20 29 3b 0d 0a 0d 0a 09  hProcess );.....
0af0: 2f 2f 20 8c e3 8e 6e 96 96 0d 0a 09 69 66 28 20  // ...n.....if( 
0b00: 6d 5f 74 79 70 65 3d 3d 45 58 45 55 53 20 29 0d  m_type==EXEUS ).
0b10: 0a 09 09 74 6d 70 64 69 72 2e 72 65 6d 6f 76 65  ...tmpdir.remove
0b20: 28 29 3b 0d 0a 09 72 65 74 75 72 6e 20 65 78 3b  ();...return ex;
0b30: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 43 41 72 63  ..}....void CArc
0b40: 4d 6f 64 75 6c 65 3a 3a 76 65 72 28 20 6b 69 53  Module::ver( kiS
0b50: 74 72 26 20 73 74 72 20 29 0d 0a 7b 0d 0a 09 2f  tr& str )..{.../
0b60: 2f 20 83 6f 81 5b 83 57 83 87 83 93 8f ee 95 f1  / .o.[.W........
0b70: 82 f0 90 ae 8c 60 82 b5 82 c4 95 5c 8e a6 0d 0a  .....`.....\....
0b80: 09 63 68 61 72 20 2a 76 65 72 73 74 72 3d 22 2d  .char *verstr="-
0b90: 2d 2d 2d 22 2c 20 62 75 66 5b 32 30 30 5d 3b 0d  ---", buf[200];.
0ba0: 0a 09 69 66 28 20 6d 5f 64 6c 6c 20 29 0d 0a 09  ..if( m_dll )...
0bb0: 7b 0d 0a 09 09 69 66 28 20 57 4f 52 44 20 76 65  {....if( WORD ve
0bc0: 72 3d 6d 5f 64 6c 6c 2d 3e 67 65 74 56 65 72 28  r=m_dll->getVer(
0bd0: 29 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 57 4f 52  ) )....{.....WOR
0be0: 44 20 73 75 62 3d 6d 5f 64 6c 6c 2d 3e 67 65 74  D sub=m_dll->get
0bf0: 56 65 72 53 75 62 28 29 3b 0d 0a 09 09 09 3a 3a  VerSub();.....::
0c00: 77 73 70 72 69 6e 74 66 28 20 76 65 72 73 74 72  wsprintf( verstr
0c10: 3d 62 75 66 2c 20 22 25 64 2e 25 30 32 64 25 63  =buf, "%d.%02d%c
0c20: 22 2c 20 76 65 72 2f 31 30 30 2c 20 76 65 72 25  ", ver/100, ver%
0c30: 31 30 30 2c 20 28 73 75 62 3c 31 30 30 29 3f 30  100, (sub<100)?0
0c40: 3a 73 75 62 2f 31 30 30 2b 27 61 27 2d 31 20 29  :sub/100+'a'-1 )
0c50: 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 65 6c 73  ;....}...}...els
0c60: 65 20 69 66 28 20 6d 5f 74 79 70 65 20 21 3d 20  e if( m_type != 
0c70: 4e 4f 54 45 58 49 53 54 20 29 0d 0a 09 7b 0d 0a  NOTEXIST )...{..
0c80: 09 09 2f 2f 20 89 c2 94 5c 82 c8 82 e7 83 8a 83  ..// ...\.......
0c90: 5c 81 5b 83 58 82 a9 82 e7 82 cc 8e e6 93 be 82  \.[.X...........
0ca0: f0 8e 8e 82 dd 82 e9 0d 0a 09 09 69 66 28 20 43  ...........if( C
0cb0: 41 72 63 68 69 76 65 72 3a 3a 47 65 74 56 65 72  Archiver::GetVer
0cc0: 73 69 6f 6e 49 6e 66 6f 53 74 72 28 20 6d 5f 6e  sionInfoStr( m_n
0cd0: 61 6d 65 2c 20 62 75 66 2c 20 73 69 7a 65 6f 66  ame, buf, sizeof
0ce0: 28 62 75 66 29 20 29 20 29 0d 0a 09 09 09 76 65  (buf) ) ).....ve
0cf0: 72 73 74 72 20 3d 20 62 75 66 3b 0d 0a 09 09 65  rstr = buf;....e
0d00: 6c 73 65 0d 0a 09 09 09 76 65 72 73 74 72 20 3d  lse.....verstr =
0d10: 20 22 4f 4b 21 22 3b 0d 0a 09 7d 0d 0a 0d 0a 09   "OK!";...}.....
0d20: 63 68 61 72 20 61 6e 73 5b 33 30 30 5d 3b 0d 0a  char ans[300];..
0d30: 09 3a 3a 77 73 70 72 69 6e 74 66 28 20 61 6e 73  .::wsprintf( ans
0d40: 2c 20 22 25 2d 31 32 73 20 25 73 22 2c 20 6b 69  , "%-12s %s", ki
0d50: 50 61 74 68 3a 3a 6e 61 6d 65 28 6d 5f 6e 61 6d  Path::name(m_nam
0d60: 65 29 2c 20 76 65 72 73 74 72 20 29 3b 0d 0a 09  e), verstr );...
0d70: 73 74 72 20 3d 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d  str = ans;..}...
0d80: 0a 62 6f 6f 6c 20 43 41 72 63 4d 6f 64 75 6c 65  .bool CArcModule
0d90: 3a 3a 6c 73 74 5f 64 6c 6c 28 20 63 6f 6e 73 74  ::lst_dll( const
0da0: 20 61 72 63 6e 61 6d 65 26 20 61 6e 61 6d 65 2c   arcname& aname,
0db0: 20 61 66 6c 41 72 72 61 79 26 20 66 69 6c 65 73   aflArray& files
0dc0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 77 69  , const char* wi
0dd0: 6c 64 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 21 6d  ld )..{...if( !m
0de0: 5f 64 6c 6c 20 29 0d 0a 09 09 72 65 74 75 72 6e  _dll )....return
0df0: 20 66 61 6c 73 65 3b 0d 0a 09 6b 69 50 61 74 68   false;...kiPath
0e00: 20 6e 6d 28 61 6e 61 6d 65 2e 62 61 73 65 64 69   nm(aname.basedi
0e10: 72 29 3b 20 6e 6d 2b 3d 61 6e 61 6d 65 2e 6c 6e  r); nm+=aname.ln
0e20: 61 6d 65 3b 0d 0a 09 48 41 4e 44 4c 45 20 68 20  ame;...HANDLE h 
0e30: 3d 20 6d 5f 64 6c 6c 2d 3e 6f 70 65 6e 41 72 63  = m_dll->openArc
0e40: 28 20 61 70 70 28 29 2d 3e 6d 61 69 6e 68 77 6e  ( app()->mainhwn
0e50: 64 28 29 2c 20 6e 6d 2c 20 4d 5f 43 48 45 43 4b  d(), nm, M_CHECK
0e60: 5f 46 49 4c 45 4e 41 4d 45 5f 4f 4e 4c 59 7c 4d  _FILENAME_ONLY|M
0e70: 5f 45 52 52 4f 52 5f 4d 45 53 53 41 47 45 5f 4f  _ERROR_MESSAGE_O
0e80: 46 46 20 29 3b 0d 0a 09 69 66 28 20 21 68 20 29  FF );...if( !h )
0e90: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
0ea0: 0d 0a 09 69 6e 74 20 63 74 3d 30 3b 0d 0a 09 66  ...int ct=0;...f
0eb0: 69 6c 65 73 2e 66 6f 72 63 65 6c 65 6e 28 20 31  iles.forcelen( 1
0ec0: 20 29 3b 0d 0a 09 69 66 28 20 30 3d 3d 6d 5f 64   );...if( 0==m_d
0ed0: 6c 6c 2d 3e 66 69 6e 64 66 69 72 73 74 28 20 68  ll->findfirst( h
0ee0: 2c 20 77 69 6c 64 2c 20 26 66 69 6c 65 73 5b 30  , wild, &files[0
0ef0: 5d 2e 69 6e 66 20 29 20 29 0d 0a 09 7b 0d 0a 09  ].inf ) )...{...
0f00: 09 64 6f 0d 0a 09 09 7b 0d 0a 09 09 09 49 4e 44  .do....{.....IND
0f10: 49 56 49 44 55 41 4c 49 4e 46 4f 26 20 69 69 69  IVIDUALINFO& iii
0f20: 20 3d 20 66 69 6c 65 73 5b 63 74 5d 2e 69 6e 66   = files[ct].inf
0f30: 3b 0d 0a 09 09 09 66 69 6c 65 73 5b 63 74 5d 2e  ;.....files[ct].
0f40: 69 73 66 69 6c 65 20 3d 0d 0a 09 09 09 09 20 28  isfile =...... (
0f50: 20 2a 66 69 6c 65 73 5b 63 74 5d 2e 69 6e 66 2e   *files[ct].inf.
0f60: 73 7a 41 74 74 72 69 62 75 74 65 21 3d 27 64 27  szAttribute!='d'
0f70: 0d 0a 09 09 09 09 26 26 20 21 6b 69 50 61 74 68  ......&& !kiPath
0f80: 3a 3a 65 6e 64 77 69 74 68 79 65 6e 28 66 69 6c  ::endwithyen(fil
0f90: 65 73 5b 63 74 5d 2e 69 6e 66 2e 73 7a 46 69 6c  es[ct].inf.szFil
0fa0: 65 4e 61 6d 65 29 0d 0a 09 09 09 09 26 26 20 21  eName)......&& !
0fb0: 28 6d 5f 64 6c 6c 2d 3e 67 65 74 41 74 74 72 28  (m_dll->getAttr(
0fc0: 20 68 20 29 26 46 49 4c 45 5f 41 54 54 52 49 42   h )&FILE_ATTRIB
0fd0: 55 54 45 5f 44 49 52 45 43 54 4f 52 59 29 20 29  UTE_DIRECTORY) )
0fe0: 3b 0d 0a 09 09 09 66 69 6c 65 73 2e 66 6f 72 63  ;.....files.forc
0ff0: 65 6c 65 6e 28 20 31 2b 28 2b 2b 63 74 29 20 29  elen( 1+(++ct) )
1000: 3b 0d 0a 09 09 7d 20 77 68 69 6c 65 28 20 30 3d  ;....} while( 0=
1010: 3d 6d 5f 64 6c 6c 2d 3e 66 69 6e 64 6e 65 78 74  =m_dll->findnext
1020: 28 20 68 2c 20 26 66 69 6c 65 73 5b 63 74 5d 2e  ( h, &files[ct].
1030: 69 6e 66 20 29 20 29 3b 0d 0a 09 7d 0d 0a 09 66  inf ) );...}...f
1040: 69 6c 65 73 2e 66 6f 72 63 65 6c 65 6e 28 20 63  iles.forcelen( c
1050: 74 20 29 3b 0d 0a 0d 0a 09 6d 5f 64 6c 6c 2d 3e  t );.....m_dll->
1060: 63 6c 6f 73 65 41 72 63 28 20 68 20 29 3b 0d 0a  closeArc( h );..
1070: 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d  .return true;..}
1080: 0d 0a 0d 0a 69 6e 74 20 43 41 72 63 4d 6f 64 75  ....int CArcModu
1090: 6c 65 3a 3a 63 6e 74 28 20 63 6f 6e 73 74 20 6b  le::cnt( const k
10a0: 69 50 61 74 68 26 20 61 6e 61 6d 65 2c 20 6b 69  iPath& aname, ki
10b0: 50 61 74 68 26 20 64 6e 61 6d 65 2c 20 63 6f 6e  Path& dname, con
10c0: 73 74 20 63 68 61 72 2a 20 77 69 6c 64 20 29 0d  st char* wild ).
10d0: 0a 7b 0d 0a 09 69 6e 74 20 61 6e 73 20 3d 20 61  .{...int ans = a
10e0: 55 6e 6b 6e 6f 77 6e 3b 0d 0a 0d 0a 09 69 66 28  Unknown;.....if(
10f0: 20 6d 5f 64 6c 6c 20 29 0d 0a 09 09 69 66 28 20   m_dll )....if( 
1100: 48 41 4e 44 4c 45 20 68 20 3d 20 6d 5f 64 6c 6c  HANDLE h = m_dll
1110: 2d 3e 6f 70 65 6e 41 72 63 28 20 61 70 70 28 29  ->openArc( app()
1120: 2d 3e 6d 61 69 6e 68 77 6e 64 28 29 2c 20 61 6e  ->mainhwnd(), an
1130: 61 6d 65 2c 20 4d 5f 43 48 45 43 4b 5f 46 49 4c  ame, M_CHECK_FIL
1140: 45 4e 41 4d 45 5f 4f 4e 4c 59 7c 4d 5f 45 52 52  ENAME_ONLY|M_ERR
1150: 4f 52 5f 4d 45 53 53 41 47 45 5f 4f 46 46 20 29  OR_MESSAGE_OFF )
1160: 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 49 4e 44 49   )....{.....INDI
1170: 56 49 44 55 41 4c 49 4e 46 4f 20 69 6e 66 31 73  VIDUALINFO inf1s
1180: 74 2c 20 69 6e 66 3b 0d 0a 09 09 09 69 66 28 20  t, inf;.....if( 
1190: 30 3d 3d 6d 5f 64 6c 6c 2d 3e 66 69 6e 64 66 69  0==m_dll->findfi
11a0: 72 73 74 28 20 68 2c 20 77 69 6c 64 2c 20 26 69  rst( h, wild, &i
11b0: 6e 66 31 73 74 20 29 20 29 0d 0a 09 09 09 7b 0d  nf1st ) ).....{.
11c0: 0a 09 09 09 09 66 6f 72 28 20 63 6f 6e 73 74 20  .....for( const 
11d0: 63 68 61 72 2a 20 79 3d 69 6e 66 31 73 74 2e 73  char* y=inf1st.s
11e0: 7a 46 69 6c 65 4e 61 6d 65 3b 20 2a 79 20 26 26  zFileName; *y &&
11f0: 20 2a 79 21 3d 27 5c 5c 27 20 26 26 20 2a 79 21   *y!='\\' && *y!
1200: 3d 27 2f 27 3b 20 79 3d 6b 69 50 61 74 68 3a 3a  ='/'; y=kiPath::
1210: 6e 65 78 74 28 79 29 20 29 3b 0d 0a 09 09 09 09  next(y) );......
1220: 69 66 28 20 79 21 3d 69 6e 66 31 73 74 2e 73 7a  if( y!=inf1st.sz
1230: 46 69 6c 65 4e 61 6d 65 20 29 0d 0a 09 09 09 09  FileName )......
1240: 7b 0d 0a 09 09 09 09 09 69 66 28 20 30 21 3d 6d  {.......if( 0!=m
1250: 5f 64 6c 6c 2d 3e 66 69 6e 64 6e 65 78 74 28 20  _dll->findnext( 
1260: 68 2c 20 26 69 6e 66 20 29 20 29 0d 0a 09 09 09  h, &inf ) ).....
1270: 09 09 09 61 6e 73 20 3d 20 2a 79 20 3f 20 61 53  ...ans = *y ? aS
1280: 69 6e 67 6c 65 44 69 72 20 3a 20 61 53 69 6e 67  ingleDir : aSing
1290: 6c 65 46 69 6c 65 3b 0d 0a 09 09 09 09 09 65 6c  leFile;.......el
12a0: 73 65 20 69 66 28 20 2a 79 20 26 26 20 28 79 2d  se if( *y && (y-
12b0: 69 6e 66 31 73 74 2e 73 7a 46 69 6c 65 4e 61 6d  inf1st.szFileNam
12c0: 65 21 3d 31 20 7c 7c 20 69 6e 66 31 73 74 2e 73  e!=1 || inf1st.s
12d0: 7a 46 69 6c 65 4e 61 6d 65 5b 30 5d 21 3d 27 2e  zFileName[0]!='.
12e0: 27 29 20 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09  ') ).......{....
12f0: 09 09 09 09 61 6e 73 20 3d 20 61 53 69 6e 67 6c  ....ans = aSingl
1300: 65 44 69 72 3b 0d 0a 09 09 09 09 09 09 64 6f 0d  eDir;........do.
1310: 0a 09 09 09 09 09 09 09 69 66 28 20 21 6b 69 5f  ........if( !ki_
1320: 6d 65 6d 63 6d 70 28 20 69 6e 66 31 73 74 2e 73  memcmp( inf1st.s
1330: 7a 46 69 6c 65 4e 61 6d 65 2c 20 69 6e 66 2e 73  zFileName, inf.s
1340: 7a 46 69 6c 65 4e 61 6d 65 2c 20 28 79 2d 69 6e  zFileName, (y-in
1350: 66 31 73 74 2e 73 7a 46 69 6c 65 4e 61 6d 65 29  f1st.szFileName)
1360: 2b 31 20 29 20 29 0d 0a 09 09 09 09 09 09 09 7b  +1 ) ).........{
1370: 0d 0a 09 09 09 09 09 09 09 09 61 6e 73 20 3d 20  ..........ans = 
1380: 61 55 6e 6b 6e 6f 77 6e 3b 0d 0a 09 09 09 09 09  aUnknown;.......
1390: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 09  ...break;.......
13a0: 09 09 7d 0d 0a 09 09 09 09 09 09 77 68 69 6c 65  ..}........while
13b0: 28 20 30 3d 3d 6d 5f 64 6c 6c 2d 3e 66 69 6e 64  ( 0==m_dll->find
13c0: 6e 65 78 74 28 20 68 2c 20 26 69 6e 66 20 29 20  next( h, &inf ) 
13d0: 29 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09  );.......}......
13e0: 09 69 66 28 20 61 6e 73 3d 3d 61 53 69 6e 67 6c  .if( ans==aSingl
13f0: 65 44 69 72 20 29 0d 0a 09 09 09 09 09 09 69 6e  eDir )........in
1400: 66 31 73 74 2e 73 7a 46 69 6c 65 4e 61 6d 65 5b  f1st.szFileName[
1410: 79 2d 69 6e 66 31 73 74 2e 73 7a 46 69 6c 65 4e  y-inf1st.szFileN
1420: 61 6d 65 5d 3d 27 5c 30 27 2c 20 64 6e 61 6d 65  ame]='\0', dname
1430: 2b 3d 69 6e 66 31 73 74 2e 73 7a 46 69 6c 65 4e  +=inf1st.szFileN
1440: 61 6d 65 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09  ame;......}.....
1450: 7d 0d 0a 09 09 09 6d 5f 64 6c 6c 2d 3e 63 6c 6f  }.....m_dll->clo
1460: 73 65 41 72 63 28 20 68 20 29 3b 0d 0a 09 09 7d  seArc( h );....}
1470: 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 61 6e 73 3b  .....return ans;
1480: 0d 0a 7d 0d 0a 0d 0a 62 6f 6f 6c 20 43 41 72 63  ..}....bool CArc
1490: 4d 6f 64 75 6c 65 3a 3a 6c 73 74 5f 65 78 65 28  Module::lst_exe(
14a0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 6c 73 74   const char* lst
14b0: 63 6d 64 2c 20 61 66 6c 41 72 72 61 79 26 20 66  cmd, aflArray& f
14c0: 69 6c 65 73 2c 0d 0a 09 63 6f 6e 73 74 20 63 68  iles,...const ch
14d0: 61 72 2a 20 42 4c 2c 20 69 6e 74 20 42 53 4c 2c  ar* BL, int BSL,
14e0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 45 4c 2c   const char* EL,
14f0: 20 69 6e 74 20 53 4c 2c 20 69 6e 74 20 64 78 20   int SL, int dx 
1500: 29 0d 0a 09 2f 2f 20 42 65 67 69 6e 4c 69 6e 65  )...// BeginLine
1510: 2c 20 42 65 67 69 6e 53 6b 69 70 4c 69 6e 65 2c  , BeginSkipLine,
1520: 20 45 6e 64 4c 69 6e 65 2c 20 53 6b 69 70 4c 69   EndLine, SkipLi
1530: 6e 65 2c 20 64 65 6c 74 61 2d 78 0d 0a 7b 0d 0a  ne, delta-x..{..
1540: 09 66 69 6c 65 73 2e 66 6f 72 63 65 6c 65 6e 28  .files.forcelen(
1550: 30 29 3b 0d 0a 0d 0a 09 2f 2f 20 8d ec 8b c6 95  0);.....// .....
1560: cf 90 94 0d 0a 09 63 6f 6e 73 74 20 69 6e 74 20  ......const int 
1570: 42 4c 4c 45 4e 20 3d 20 6b 69 5f 73 74 72 6c 65  BLLEN = ki_strle
1580: 6e 28 42 4c 29 3b 0d 0a 09 63 6f 6e 73 74 20 69  n(BL);...const i
1590: 6e 74 20 45 4c 4c 45 4e 20 3d 20 6b 69 5f 73 74  nt ELLEN = ki_st
15a0: 72 6c 65 6e 28 45 4c 29 3b 0d 0a 09 69 6e 74 20  rlen(EL);...int 
15b0: 2f 2a 63 74 3d 30 2c 2a 2f 20 73 74 65 70 3d 42  /*ct=0,*/ step=B
15c0: 53 4c 3b 0d 0a 0d 0a 09 2f 2f 20 45 58 45 88 c8  SL;.....// EXE..
15d0: 8a 4f 82 cc 82 e0 82 cc 82 c5 82 cd 83 5f 83 81  .O..........._..
15e0: 0d 0a 09 69 66 28 20 6d 5f 74 79 70 65 21 3d 45  ...if( m_type!=E
15f0: 58 45 20 26 26 20 6d 5f 74 79 70 65 21 3d 45 58  XE && m_type!=EX
1600: 45 55 53 20 29 0d 0a 09 09 72 65 74 75 72 6e 20  EUS )....return 
1610: 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f 2f 20 83 52  false;.....// .R
1620: 83 7d 83 93 83 68 95 b6 8e 9a 97 f1 8d ec 90 ac  .}...h..........
1630: 0d 0a 09 6b 69 56 61 72 20 74 68 65 43 6d 64 28  ...kiVar theCmd(
1640: 20 6d 5f 6e 61 6d 65 20 29 3b 0d 0a 09 74 68 65   m_name );...the
1650: 43 6d 64 2e 71 75 6f 74 65 28 29 3b 0d 0a 09 74  Cmd.quote();...t
1660: 68 65 43 6d 64 20 2b 3d 20 27 20 27 3b 0d 0a 09  heCmd += ' ';...
1670: 74 68 65 43 6d 64 20 2b 3d 20 6c 73 74 63 6d 64  theCmd += lstcmd
1680: 3b 0d 0a 0d 0a 09 2f 2f 20 83 70 83 43 83 76 8d  ;.....// .p.C.v.
1690: ec 90 ac 81 69 97 bc 95 fb 82 c6 82 e0 8c 70 8f  ....i.........p.
16a0: b3 4f 4e 81 42 44 75 70 48 61 6e 82 b7 82 e9 82  .ON.BDupHan.....
16b0: cc 96 ca 93 7c 82 a2 82 cc 82 c5 81 63 28 5e 5e  ....|.......c(^^
16c0: 3b 81 6a 0d 0a 09 48 41 4e 44 4c 45 20 72 70 2c  ;.j...HANDLE rp,
16d0: 20 77 70 3b 0d 0a 09 53 45 43 55 52 49 54 59 5f   wp;...SECURITY_
16e0: 41 54 54 52 49 42 55 54 45 53 20 73 61 20 3d 20  ATTRIBUTES sa = 
16f0: 7b 73 69 7a 65 6f 66 28 53 45 43 55 52 49 54 59  {sizeof(SECURITY
1700: 5f 41 54 54 52 49 42 55 54 45 53 29 2c 4e 55 4c  _ATTRIBUTES),NUL
1710: 4c 2c 54 52 55 45 7d 3b 0d 0a 09 3a 3a 43 72 65  L,TRUE};...::Cre
1720: 61 74 65 50 69 70 65 28 20 26 72 70 2c 20 26 77  atePipe( &rp, &w
1730: 70 2c 20 26 73 61 2c 20 34 30 39 36 20 29 3b 0d  p, &sa, 4096 );.
1740: 0a 0d 0a 09 2f 2f 20 83 76 83 8d 83 5a 83 58 8a  ....// .v...Z.X.
1750: 4a 8e 6e 0d 0a 09 50 52 4f 43 45 53 53 5f 49 4e  J.n...PROCESS_IN
1760: 46 4f 52 4d 41 54 49 4f 4e 20 70 69 3b 0d 0a 09  FORMATION pi;...
1770: 53 54 41 52 54 55 50 49 4e 46 4f 20 73 69 20 3d  STARTUPINFO si =
1780: 20 7b 73 69 7a 65 6f 66 28 53 54 41 52 54 55 50   {sizeof(STARTUP
1790: 49 4e 46 4f 29 7d 3b 0d 0a 09 73 69 2e 64 77 46  INFO)};...si.dwF
17a0: 6c 61 67 73 20 20 20 20 20 3d 20 53 54 41 52 54  lags     = START
17b0: 46 5f 55 53 45 53 48 4f 57 57 49 4e 44 4f 57 7c  F_USESHOWWINDOW|
17c0: 53 54 41 52 54 46 5f 55 53 45 53 54 44 48 41 4e  STARTF_USESTDHAN
17d0: 44 4c 45 53 3b 0d 0a 09 73 69 2e 77 53 68 6f 77  DLES;...si.wShow
17e0: 57 69 6e 64 6f 77 20 3d 20 53 57 5f 4d 49 4e 49  Window = SW_MINI
17f0: 4d 49 5a 45 3b 0d 0a 09 73 69 2e 68 53 74 64 4f  MIZE;...si.hStdO
1800: 75 74 70 75 74 20 20 3d 20 73 69 2e 68 53 74 64  utput  = si.hStd
1810: 45 72 72 6f 72 20 3d 20 77 70 3b 0d 0a 09 42 4f  Error = wp;...BO
1820: 4f 4c 20 6f 6b 20 3d 20 0d 0a 09 09 3a 3a 43 72  OL ok = ....::Cr
1830: 65 61 74 65 50 72 6f 63 65 73 73 28 20 4e 55 4c  eateProcess( NUL
1840: 4c 2c 63 6f 6e 73 74 5f 63 61 73 74 3c 63 68 61  L,const_cast<cha
1850: 72 2a 3e 28 28 63 6f 6e 73 74 20 63 68 61 72 2a  r*>((const char*
1860: 29 74 68 65 43 6d 64 29 2c 4e 55 4c 4c 2c 0d 0a  )theCmd),NULL,..
1870: 09 09 09 4e 55 4c 4c 2c 20 54 52 55 45 2c 20 43  ...NULL, TRUE, C
1880: 52 45 41 54 45 5f 4e 45 57 5f 50 52 4f 43 45 53  REATE_NEW_PROCES
1890: 53 5f 47 52 4f 55 50 7c 4e 4f 52 4d 41 4c 5f 50  S_GROUP|NORMAL_P
18a0: 52 49 4f 52 49 54 59 5f 43 4c 41 53 53 2c 0d 0a  RIORITY_CLASS,..
18b0: 09 09 09 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 26  ...NULL, NULL, &
18c0: 73 69 2c 26 70 69 20 29 3b 0d 0a 09 3a 3a 43 6c  si,&pi );...::Cl
18d0: 6f 73 65 48 61 6e 64 6c 65 28 20 77 70 20 29 3b  oseHandle( wp );
18e0: 0d 0a 0d 0a 09 2f 2f 20 8e b8 94 73 82 b5 82 bd  .....// ...s....
18f0: 82 e7 83 70 83 43 83 76 82 f0 95 c2 82 b6 82 c4  ...p.C.v........
1900: 91 a6 8f 49 97 b9 0d 0a 09 69 66 28 20 21 6f 6b  ...I.....if( !ok
1910: 20 29 0d 0a 09 7b 0d 0a 09 09 3a 3a 43 6c 6f 73   )...{....::Clos
1920: 65 48 61 6e 64 6c 65 28 20 72 70 20 29 3b 0d 0a  eHandle( rp );..
1930: 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ..return false;.
1940: 0a 09 7d 0d 0a 09 3a 3a 43 6c 6f 73 65 48 61 6e  ..}...::CloseHan
1950: 64 6c 65 28 20 70 69 2e 68 54 68 72 65 61 64 20  dle( pi.hThread 
1960: 29 3b 0d 0a 0d 0a 09 2f 2f 20 89 f0 90 cd 8d ec  );.....// ......
1970: 8b c6 65 74 63 28 83 6f 83 62 83 74 83 40 82 cc  ..etc(.o.b.t.@..
1980: 83 54 83 43 83 59 82 cd 83 70 83 43 83 76 82 cc  .T.C.Y...p.C.v..
1990: 83 54 83 43 83 59 82 cc 94 7b 88 c8 8f e3 82 c5  .T.C.Y...{......
19a0: 82 c8 82 ad 82 c4 82 cd 82 c8 82 e7 82 c8 82 a2  ................
19b0: 29 0d 0a 09 63 68 61 72 20 62 75 66 5b 38 31 39  )...char buf[819
19c0: 32 5d 2c 20 2a 65 6e 64 3d 62 75 66 3b 0d 0a 09  2], *end=buf;...
19d0: 66 6f 72 28 20 62 6f 6f 6c 20 65 6e 64 70 72 3d  for( bool endpr=
19e0: 66 61 6c 73 65 3b 20 21 65 6e 64 70 72 3b 20 29  false; !endpr; )
19f0: 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 8f 49 97 b9 91  ...{....// .I...
1a00: d2 8b 40 0d 0a 09 09 65 6e 64 70 72 20 3d 20 28  ..@....endpr = (
1a10: 57 41 49 54 5f 4f 42 4a 45 43 54 5f 30 3d 3d 3a  WAIT_OBJECT_0==:
1a20: 3a 57 61 69 74 46 6f 72 53 69 6e 67 6c 65 4f 62  :WaitForSingleOb
1a30: 6a 65 63 74 28 70 69 2e 68 50 72 6f 63 65 73 73  ject(pi.hProcess
1a40: 2c 35 30 30 29 29 3b 0d 0a 09 09 6b 69 57 69 6e  ,500));....kiWin
1a50: 64 6f 77 3a 3a 6d 73 67 28 29 3b 0d 0a 0d 0a 09  dow::msg();.....
1a60: 09 2f 2f 20 83 70 83 43 83 76 82 a9 82 e7 93 c7  .// .p.C.v......
1a70: 82 dd 82 c6 82 e8 0d 0a 09 09 44 57 4f 52 44 20  ..........DWORD 
1a80: 72 65 64 3b 0d 0a 09 09 3a 3a 50 65 65 6b 4e 61  red;....::PeekNa
1a90: 6d 65 64 50 69 70 65 28 20 72 70 2c 20 4e 55 4c  medPipe( rp, NUL
1aa0: 4c 2c 20 30 2c 20 4e 55 4c 4c 2c 20 26 72 65 64  L, 0, NULL, &red
1ab0: 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09 09 69 66 28  , NULL );....if(
1ac0: 20 72 65 64 3d 3d 30 20 29 0d 0a 09 09 09 63 6f   red==0 ).....co
1ad0: 6e 74 69 6e 75 65 3b 0d 0a 09 09 3a 3a 52 65 61  ntinue;....::Rea
1ae0: 64 46 69 6c 65 28 20 72 70 2c 20 65 6e 64 2c 20  dFile( rp, end, 
1af0: 62 75 66 2b 73 69 7a 65 6f 66 28 62 75 66 29 2d  buf+sizeof(buf)-
1b00: 65 6e 64 2c 20 26 72 65 64 2c 20 4e 55 4c 4c 20  end, &red, NULL 
1b10: 29 3b 0d 0a 09 09 65 6e 64 20 2b 3d 20 72 65 64  );....end += red
1b20: 3b 0d 0a 0d 0a 09 09 2f 2f 20 8d 73 82 c9 95 aa  ;......// .s....
1b30: 89 f0 0d 0a 09 09 63 68 61 72 20 2a 6c 73 73 3d  ......char *lss=
1b40: 62 75 66 3b 0d 0a 09 09 66 6f 72 28 20 63 68 61  buf;....for( cha
1b50: 72 20 2a 6c 73 2c 20 2a 6c 65 3d 62 75 66 3b 20  r *ls, *le=buf; 
1b60: 6c 65 3c 65 6e 64 3b 20 2b 2b 6c 65 20 29 0d 0a  le<end; ++le )..
1b70: 09 09 7b 0d 0a 09 09 09 2f 2f 20 8d 73 96 96 82  ..{.....// .s...
1b80: f0 92 54 82 b7 0d 0a 09 09 09 66 6f 72 28 20 6c  ..T.......for( l
1b90: 73 73 3d 6c 73 3d 6c 65 3b 20 6c 65 3c 65 6e 64  ss=ls=le; le<end
1ba0: 3b 20 2b 2b 6c 65 20 29 0d 0a 09 09 09 09 69 66  ; ++le )......if
1bb0: 28 20 2a 6c 65 3d 3d 27 5c 6e 27 20 29 0d 0a 09  ( *le=='\n' )...
1bc0: 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 69  ....break;.....i
1bd0: 66 28 20 6c 65 3d 3d 65 6e 64 20 29 0d 0a 09 09  f( le==end )....
1be0: 09 09 62 72 65 61 6b 3b 0d 0a 0d 0a 09 09 09 2f  ..break;......./
1bf0: 2f 20 90 e6 93 aa 8d 73 83 58 83 4c 83 62 83 76  / .....s.X.L.b.v
1c00: 8f 88 97 9d 0d 0a 09 09 09 69 66 28 20 2a 42 4c  .........if( *BL
1c10: 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66   ).....{......if
1c20: 28 20 42 4c 4c 45 4e 3c 3d 6c 65 2d 6c 73 20 26  ( BLLEN<=le-ls &
1c30: 26 20 6b 69 5f 6d 65 6d 63 6d 70 28 42 4c 2c 6c  & ki_memcmp(BL,l
1c40: 73 2c 42 4c 4c 45 4e 29 20 29 0d 0a 09 09 09 09  s,BLLEN) )......
1c50: 09 42 4c 20 3d 20 22 22 3b 0d 0a 09 09 09 7d 0d  .BL = "";.....}.
1c60: 0a 09 09 09 2f 2f 20 8d 73 83 58 83 65 83 62 83  ....// .s.X.e.b.
1c70: 76 8f 88 97 9d 0d 0a 09 09 09 65 6c 73 65 20 69  v.........else i
1c80: 66 28 20 2d 2d 73 74 65 70 3c 3d 30 20 29 0d 0a  f( --step<=0 )..
1c90: 09 09 09 7b 0d 0a 09 09 09 09 73 74 65 70 20 3d  ...{......step =
1ca0: 20 53 4c 3b 0d 0a 0d 0a 09 09 09 09 2f 2f 20 8f   SL;........// .
1cb0: 49 92 5b 8d 73 8f 88 97 9d 0d 0a 09 09 09 09 69  I.[.s..........i
1cc0: 66 28 20 45 4c 4c 45 4e 3d 3d 30 20 29 0d 0a 09  f( ELLEN==0 )...
1cd0: 09 09 09 09 7b 20 69 66 28 20 6c 65 2d 6c 73 3c  ....{ if( le-ls<
1ce0: 3d 31 20 29 20 62 72 65 61 6b 3b 20 7d 0d 0a 09  =1 ) break; }...
1cf0: 09 09 09 65 6c 73 65 20 69 66 28 20 45 4c 4c 45  ...else if( ELLE
1d00: 4e 3c 3d 6c 65 2d 6c 73 20 26 26 20 6b 69 5f 6d  N<=le-ls && ki_m
1d10: 65 6d 63 6d 70 28 45 4c 2c 6c 73 2c 45 4c 4c 45  emcmp(EL,ls,ELLE
1d20: 4e 29 20 29 0d 0a 09 09 09 09 09 62 72 65 61 6b  N) ).......break
1d30: 3b 0d 0a 0d 0a 09 09 09 09 2f 2f 20 95 b6 8e 9a  ;........// ....
1d40: 83 58 83 4c 83 62 83 76 8f 88 97 9d 0d 0a 09 09  .X.L.b.v........
1d50: 09 09 69 66 28 20 64 78 3e 3d 30 20 29 0d 0a 09  ..if( dx>=0 )...
1d60: 09 09 09 09 6c 73 20 2b 3d 20 64 78 3b 0d 0a 09  ....ls += dx;...
1d70: 09 09 09 2f 2f 20 88 f8 90 94 83 75 83 8d 83 62  ...// .....u...b
1d80: 83 4e 83 58 83 4c 83 62 83 76 8f 88 97 9d 0d 0a  .N.X.L.b.v......
1d90: 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 7b 0d  ....else......{.
1da0: 0a 09 09 09 09 09 66 6f 72 28 20 3b 6c 73 3c 6c  ......for( ;ls<l
1db0: 65 3b 2b 2b 6c 73 20 29 0d 0a 09 09 09 09 09 09  e;++ls )........
1dc0: 69 66 28 20 2a 6c 73 21 3d 27 20 27 20 26 26 20  if( *ls!=' ' && 
1dd0: 2a 6c 73 21 3d 27 5c 74 27 20 26 26 20 2a 6c 73  *ls!='\t' && *ls
1de0: 21 3d 27 5c 72 27 20 29 0d 0a 09 09 09 09 09 09  !='\r' )........
1df0: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 09 66 6f  .break;.......fo
1e00: 72 28 20 69 6e 74 20 74 3d 64 78 3b 20 2b 2b 74  r( int t=dx; ++t
1e10: 3b 20 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09  ; ).......{.....
1e20: 09 09 09 66 6f 72 28 20 3b 6c 73 3c 6c 65 3b 2b  ...for( ;ls<le;+
1e30: 2b 6c 73 20 29 0d 0a 09 09 09 09 09 09 09 69 66  +ls ).........if
1e40: 28 20 2a 6c 73 3d 3d 27 20 27 20 7c 7c 20 2a 6c  ( *ls==' ' || *l
1e50: 73 3d 3d 27 5c 74 27 20 26 26 20 2a 6c 73 3d 3d  s=='\t' && *ls==
1e60: 27 5c 72 27 20 29 0d 0a 09 09 09 09 09 09 09 09  '\r' )..........
1e70: 62 72 65 61 6b 3b 0d 0a 09 09 09 09 09 09 66 6f  break;........fo
1e80: 72 28 20 3b 6c 73 3c 6c 65 3b 2b 2b 6c 73 20 29  r( ;ls<le;++ls )
1e90: 0d 0a 09 09 09 09 09 09 09 69 66 28 20 2a 6c 73  .........if( *ls
1ea0: 21 3d 27 20 27 20 26 26 20 2a 6c 73 21 3d 27 5c  !=' ' && *ls!='\
1eb0: 74 27 20 26 26 20 2a 6c 73 21 3d 27 5c 72 27 20  t' && *ls!='\r' 
1ec0: 29 0d 0a 09 09 09 09 09 09 09 09 62 72 65 61 6b  )..........break
1ed0: 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d  ;.......}......}
1ee0: 0d 0a 09 09 09 09 2f 2f 20 83 74 83 40 83 43 83  ......// .t.@.C.
1ef0: 8b 96 bc 83 52 83 73 81 5b 0d 0a 09 09 09 09 69  ....R.s.[......i
1f00: 66 28 20 6c 73 3c 6c 65 20 29 0d 0a 09 09 09 09  f( ls<le )......
1f10: 7b 0d 0a 09 09 09 09 09 61 72 63 66 69 6c 65 20  {.......arcfile 
1f20: 61 66 3b 20 6b 69 5f 6d 65 6d 7a 65 72 6f 28 26  af; ki_memzero(&
1f30: 61 66 2c 20 73 69 7a 65 6f 66 28 61 66 29 29 3b  af, sizeof(af));
1f40: 0d 0a 09 09 09 09 09 61 66 2e 69 6e 66 2e 64 77  .......af.inf.dw
1f50: 4f 72 69 67 69 6e 61 6c 53 69 7a 65 20 3d 20 30  OriginalSize = 0
1f60: 78 66 66 66 66 66 66 66 66 3b 0d 0a 2f 2f 09 09  xffffffff;..//..
1f70: 09 09 09 6b 69 5f 6d 65 6d 7a 65 72 6f 28 20 26  ...ki_memzero( &
1f80: 66 69 6c 65 73 5b 63 74 5d 2e 69 6e 66 2c 20 73  files[ct].inf, s
1f90: 69 7a 65 6f 66 28 66 69 6c 65 73 5b 63 74 5d 2e  izeof(files[ct].
1fa0: 69 6e 66 29 20 29 3b 0d 0a 2f 2f 09 09 09 09 09  inf) );..//.....
1fb0: 66 69 6c 65 73 5b 63 74 5d 2e 69 6e 66 2e 64 77  files[ct].inf.dw
1fc0: 4f 72 69 67 69 6e 61 6c 53 69 7a 65 20 3d 20 30  OriginalSize = 0
1fd0: 78 66 66 66 66 66 66 66 66 3b 0d 0a 0d 0a 09 09  xffffffff;......
1fe0: 09 09 09 69 6e 74 20 69 3d 30 3b 0d 0a 09 09 09  ...int i=0;.....
1ff0: 09 09 62 6f 6f 6c 20 70 72 65 76 5f 69 73 5f 73  ..bool prev_is_s
2000: 70 61 63 65 3d 66 61 6c 73 65 3b 0d 0a 09 09 09  pace=false;.....
2010: 09 09 77 68 69 6c 65 28 20 69 3c 46 4e 41 4d 45  ..while( i<FNAME
2020: 5f 4d 41 58 33 32 20 26 26 20 6c 73 3c 6c 65 20  _MAX32 && ls<le 
2030: 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09  ).......{.......
2040: 09 69 66 28 20 2a 6c 73 3d 3d 27 20 27 20 29 0d  .if( *ls==' ' ).
2050: 0a 09 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09  .......{........
2060: 09 69 66 28 20 70 72 65 76 5f 69 73 5f 73 70 61  .if( prev_is_spa
2070: 63 65 20 29 0d 0a 09 09 09 09 09 09 09 09 62 72  ce )..........br
2080: 65 61 6b 3b 0d 0a 09 09 09 09 09 09 09 70 72 65  eak;.........pre
2090: 76 5f 69 73 5f 73 70 61 63 65 20 3d 20 74 72 75  v_is_space = tru
20a0: 65 3b 0d 0a 09 09 09 09 09 09 7d 0d 0a 09 09 09  e;........}.....
20b0: 09 09 09 65 6c 73 65 20 69 66 28 20 2a 6c 73 3d  ...else if( *ls=
20c0: 3d 27 5c 74 27 20 7c 7c 20 2a 6c 73 3d 3d 27 5c  ='\t' || *ls=='\
20d0: 72 27 20 29 0d 0a 09 09 09 09 09 09 09 62 72 65  r' ).........bre
20e0: 61 6b 3b 0d 0a 09 09 09 09 09 09 65 6c 73 65 0d  ak;........else.
20f0: 0a 09 09 09 09 09 09 09 70 72 65 76 5f 69 73 5f  ........prev_is_
2100: 73 70 61 63 65 20 3d 20 66 61 6c 73 65 3b 0d 0a  space = false;..
2110: 0d 0a 09 09 09 09 09 09 61 66 2e 69 6e 66 2e 73  ........af.inf.s
2120: 7a 46 69 6c 65 4e 61 6d 65 5b 69 2b 2b 5d 20 3d  zFileName[i++] =
2130: 20 2a 6c 73 2b 2b 3b 0d 0a 2f 2f 09 09 09 09 09   *ls++;..//.....
2140: 09 66 69 6c 65 73 5b 63 74 5d 2e 69 6e 66 2e 73  .files[ct].inf.s
2150: 7a 46 69 6c 65 4e 61 6d 65 5b 69 2b 2b 5d 20 3d  zFileName[i++] =
2160: 20 2a 6c 73 2b 2b 3b 0d 0a 09 09 09 09 09 7d 0d   *ls++;.......}.
2170: 0a 09 09 09 09 09 69 66 28 20 70 72 65 76 5f 69  ......if( prev_i
2180: 73 5f 73 70 61 63 65 20 29 0d 0a 09 09 09 09 09  s_space ).......
2190: 09 2d 2d 69 3b 0d 0a 09 09 09 09 09 69 66 28 20  .--i;.......if( 
21a0: 69 20 29 0d 0a 09 09 09 09 09 7b 0d 0a 2f 2a 0d  i ).......{../*.
21b0: 0a 09 09 09 09 09 09 66 69 6c 65 73 5b 63 74 5d  .......files[ct]
21c0: 2e 69 6e 66 2e 73 7a 46 69 6c 65 4e 61 6d 65 5b  .inf.szFileName[
21d0: 69 5d 20 3d 20 27 5c 30 27 3b 0d 0a 09 09 09 09  i] = '\0';......
21e0: 09 09 66 69 6c 65 73 5b 63 74 5d 2e 69 73 66 69  ..files[ct].isfi
21f0: 6c 65 20 3d 20 74 72 75 65 3b 0d 0a 09 09 09 09  le = true;......
2200: 09 09 66 69 6c 65 73 2e 66 6f 72 63 65 6c 65 6e  ..files.forcelen
2210: 28 20 31 2b 28 2b 2b 63 74 29 20 29 3b 0d 0a 2a  ( 1+(++ct) );..*
2220: 2f 0d 0a 09 09 09 09 09 09 61 66 2e 69 6e 66 2e  /........af.inf.
2230: 73 7a 46 69 6c 65 4e 61 6d 65 5b 69 5d 20 3d 20  szFileName[i] = 
2240: 27 5c 30 27 3b 0d 0a 09 09 09 09 09 09 61 66 2e  '\0';........af.
2250: 69 73 66 69 6c 65 20 3d 20 74 72 75 65 3b 0d 0a  isfile = true;..
2260: 09 09 09 09 09 09 66 69 6c 65 73 2e 61 64 64 28  ......files.add(
2270: 61 66 29 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09  af);.......}....
2280: 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a  ..}.....}....}..
2290: 09 09 2f 2f 20 83 6f 83 62 83 74 83 40 83 56 83  ..// .o.b.t.@.V.
22a0: 74 83 67 0d 0a 09 09 69 66 28 20 6c 73 73 20 21  t.g....if( lss !
22b0: 3d 20 62 75 66 20 29 0d 0a 09 09 09 6b 69 5f 6d  = buf ).....ki_m
22c0: 65 6d 6d 6f 76 28 20 62 75 66 2c 20 6c 73 73 2c  emmov( buf, lss,
22d0: 20 65 6e 64 2d 6c 73 73 20 29 2c 20 65 6e 64 3d   end-lss ), end=
22e0: 62 75 66 2b 28 65 6e 64 2d 6c 73 73 29 3b 0d 0a  buf+(end-lss);..
22f0: 09 09 65 6c 73 65 20 69 66 28 20 65 6e 64 3d 3d  ..else if( end==
2300: 62 75 66 2b 73 69 7a 65 6f 66 28 62 75 66 29 20  buf+sizeof(buf) 
2310: 29 0d 0a 09 09 09 65 6e 64 20 3d 20 62 75 66 3b  ).....end = buf;
2320: 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 82 a8 8f 49  ...}.....// ...I
2330: 82 a2 0d 0a 09 3a 3a 43 6c 6f 73 65 48 61 6e 64  .....::CloseHand
2340: 6c 65 28 20 70 69 2e 68 50 72 6f 63 65 73 73 20  le( pi.hProcess 
2350: 29 3b 0d 0a 09 3a 3a 43 6c 6f 73 65 48 61 6e 64  );...::CloseHand
2360: 6c 65 28 20 72 70 20 29 3b 0d 0a 09 72 65 74 75  le( rp );...retu
2370: 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 2f  rn true;..}..../
2380: 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d  *=*=*=*=*=*=*=*=
2390: 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d  *=*=*=*=*=*=*=*=
23a0: 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d  *=*=*=*=*=*=*=*=
23b0: 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d 2a 3d  *=*=*=*=*=*=*=*=
23c0: 2a 3d 2a 3d 2a 3d 2a 2f 0d 0a 2f 2f 20 83 6f 81  *=*=*=*/..// .o.
23d0: 5b 83 57 83 87 83 93 8f ee 95 f1 83 8a 83 5c 81  [.W...........\.
23e0: 5b 83 58 8e e6 93 be 0d 0a 0d 0a 62 6f 6f 6c 20  [.X........bool 
23f0: 43 41 72 63 68 69 76 65 72 3a 3a 47 65 74 56 65  CArchiver::GetVe
2400: 72 73 69 6f 6e 49 6e 66 6f 53 74 72 28 20 63 68  rsionInfoStr( ch
2410: 61 72 2a 20 6e 61 6d 65 2c 20 63 68 61 72 2a 20  ar* name, char* 
2420: 62 75 66 2c 20 73 69 7a 65 5f 74 20 63 62 42 75  buf, size_t cbBu
2430: 66 20 29 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20  f )..{...static 
2440: 62 6f 6f 6c 20 6f 6c 64 20 3d 20 6d 79 63 6e 66  bool old = mycnf
2450: 28 29 2e 6f 6c 64 76 65 72 28 29 3b 0d 0a 09 69  ().oldver();...i
2460: 66 28 20 6f 6c 64 20 29 0d 0a 09 09 72 65 74 75  f( old )....retu
2470: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 44 57  rn false;.....DW
2480: 4f 52 44 20 64 75 6d 6d 79 20 3d 20 30 3b 0d 0a  ORD dummy = 0;..
2490: 09 44 57 4f 52 44 20 73 69 7a 20 3d 20 3a 3a 47  .DWORD siz = ::G
24a0: 65 74 46 69 6c 65 56 65 72 73 69 6f 6e 49 6e 66  etFileVersionInf
24b0: 6f 53 69 7a 65 28 20 6e 61 6d 65 2c 20 26 64 75  oSize( name, &du
24c0: 6d 6d 79 20 29 3b 0d 0a 09 69 66 28 20 73 69 7a  mmy );...if( siz
24d0: 20 3d 3d 20 30 20 29 0d 0a 09 09 72 65 74 75 72   == 0 )....retur
24e0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 62 6f 6f  n false;.....boo
24f0: 6c 20 67 6f 74 20 3d 20 66 61 6c 73 65 3b 0d 0a  l got = false;..
2500: 09 42 59 54 45 2a 20 76 62 75 66 20 3d 20 6e 65  .BYTE* vbuf = ne
2510: 77 20 42 59 54 45 5b 73 69 7a 5d 3b 0d 0a 09 69  w BYTE[siz];...i
2520: 66 28 20 30 20 21 3d 20 3a 3a 47 65 74 46 69 6c  f( 0 != ::GetFil
2530: 65 56 65 72 73 69 6f 6e 49 6e 66 6f 28 20 6e 61  eVersionInfo( na
2540: 6d 65 2c 20 30 2c 20 73 69 7a 2c 20 76 62 75 66  me, 0, siz, vbuf
2550: 20 29 20 29 0d 0a 09 7b 0d 0a 09 09 57 4f 52 44   ) )...{....WORD
2560: 2a 20 74 72 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 09  * tr = NULL;....
2570: 55 49 4e 54 20 63 62 54 72 20 3d 20 30 3b 0d 0a  UINT cbTr = 0;..
2580: 0d 0a 09 09 2f 2f 20 8d c5 8f 89 82 c9 8c a9 82  ....// .........
2590: c2 82 af 82 bd 8c be 8c ea 82 c6 83 52 81 5b 83  ............R.[.
25a0: 68 83 79 81 5b 83 57 82 c5 8f ee 95 f1 8e e6 93  h.y.[.W.........
25b0: be 0d 0a 09 09 69 66 28 20 3a 3a 56 65 72 51 75  .....if( ::VerQu
25c0: 65 72 79 56 61 6c 75 65 28 20 76 62 75 66 2c 0d  eryValue( vbuf,.
25d0: 0a 09 09 09 22 5c 5c 56 61 72 46 69 6c 65 49 6e  ...."\\VarFileIn
25e0: 66 6f 5c 5c 54 72 61 6e 73 6c 61 74 69 6f 6e 22  fo\\Translation"
25f0: 2c 20 28 76 6f 69 64 2a 2a 29 26 74 72 2c 20 26  , (void**)&tr, &
2600: 63 62 54 72 20 29 0d 0a 09 09 20 26 26 20 63 62  cbTr ).... && cb
2610: 54 72 20 3e 3d 20 34 20 29 0d 0a 09 09 7b 0d 0a  Tr >= 4 )....{..
2620: 09 09 09 63 68 61 72 20 62 6c 6f 63 6b 6e 61 6d  ...char blocknam
2630: 65 5b 35 30 30 5d 3d 22 22 3b 0d 0a 09 09 09 3a  e[500]="";.....:
2640: 3a 77 73 70 72 69 6e 74 66 28 20 62 6c 6f 63 6b  :wsprintf( block
2650: 6e 61 6d 65 2c 0d 0a 09 09 09 09 22 5c 5c 53 74  name,......"\\St
2660: 72 69 6e 67 46 69 6c 65 49 6e 66 6f 5c 5c 25 30  ringFileInfo\\%0
2670: 34 78 25 30 34 78 5c 5c 50 72 6f 64 75 63 74 56  4x%04x\\ProductV
2680: 65 72 73 69 6f 6e 22 2c 0d 0a 09 09 09 09 74 72  ersion",......tr
2690: 5b 30 5d 2c 20 74 72 5b 31 5d 20 29 3b 0d 0a 0d  [0], tr[1] );...
26a0: 0a 09 09 09 63 68 61 72 2a 20 69 6e 66 20 3d 20  ....char* inf = 
26b0: 4e 55 4c 4c 3b 0d 0a 09 09 09 55 49 4e 54 20 63  NULL;.....UINT c
26c0: 62 49 6e 66 20 3d 20 30 3b 0d 0a 09 09 09 69 66  bInf = 0;.....if
26d0: 28 20 3a 3a 56 65 72 51 75 65 72 79 56 61 6c 75  ( ::VerQueryValu
26e0: 65 28 20 76 62 75 66 2c 20 62 6c 6f 63 6b 6e 61  e( vbuf, blockna
26f0: 6d 65 2c 20 28 76 6f 69 64 2a 2a 29 26 69 6e 66  me, (void**)&inf
2700: 2c 20 26 63 62 49 6e 66 20 29 0d 0a 09 09 09 20  , &cbInf )..... 
2710: 26 26 20 63 62 49 6e 66 20 3c 20 63 62 42 75 66  && cbInf < cbBuf
2720: 2d 31 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09  -1 ).....{......
2730: 66 6f 72 28 20 63 68 61 72 2a 20 76 3d 62 75 66  for( char* v=buf
2740: 3b 20 2a 69 6e 66 20 26 26 20 63 62 49 6e 66 3b  ; *inf && cbInf;
2750: 20 2b 2b 69 6e 66 2c 2d 2d 63 62 49 6e 66 20 29   ++inf,--cbInf )
2760: 0d 0a 09 09 09 09 09 69 66 28 20 2a 69 6e 66 20  .......if( *inf 
2770: 21 3d 20 27 20 27 20 29 0d 0a 09 09 09 09 09 09  != ' ' )........
2780: 2a 76 2b 2b 20 3d 20 28 2a 69 6e 66 3d 3d 27 2c  *v++ = (*inf==',
2790: 27 20 3f 20 27 2e 27 20 3a 20 2a 69 6e 66 29 3b  ' ? '.' : *inf);
27a0: 0d 0a 09 09 09 09 2a 76 20 3d 20 27 5c 30 27 3b  ......*v = '\0';
27b0: 0d 0a 09 09 09 09 67 6f 74 20 3d 20 74 72 75 65  ......got = true
27c0: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09  ;.....}....}....
27d0: 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 76 6f  else....{.....vo
27e0: 69 64 2a 20 66 69 20 3d 20 4e 55 4c 4c 3b 0d 0a  id* fi = NULL;..
27f0: 09 09 09 55 49 4e 54 20 63 62 46 69 20 3d 20 30  ...UINT cbFi = 0
2800: 3b 0d 0a 09 09 09 56 53 5f 46 49 58 45 44 46 49  ;.....VS_FIXEDFI
2810: 4c 45 49 4e 46 4f 20 76 66 66 69 3b 0d 0a 09 09  LEINFO vffi;....
2820: 09 69 66 28 20 3a 3a 56 65 72 51 75 65 72 79 56  .if( ::VerQueryV
2830: 61 6c 75 65 28 20 76 62 75 66 2c 20 22 5c 5c 22  alue( vbuf, "\\"
2840: 2c 20 26 66 69 2c 20 26 63 62 46 69 20 29 0d 0a  , &fi, &cbFi )..
2850: 09 09 09 20 26 26 20 73 69 7a 65 6f 66 28 76 66  ... && sizeof(vf
2860: 66 69 29 3c 3d 63 62 46 69 20 29 0d 0a 09 09 09  fi)<=cbFi ).....
2870: 7b 0d 0a 09 09 09 09 6b 69 5f 6d 65 6d 63 70 79  {......ki_memcpy
2880: 28 20 26 76 66 66 69 2c 20 66 69 2c 20 73 69 7a  ( &vffi, fi, siz
2890: 65 6f 66 28 76 66 66 69 29 20 29 3b 0d 0a 09 09  eof(vffi) );....
28a0: 09 09 69 66 28 20 76 66 66 69 2e 64 77 46 69 6c  ..if( vffi.dwFil
28b0: 65 56 65 72 73 69 6f 6e 4c 53 20 3e 3d 20 30 78  eVersionLS >= 0x
28c0: 31 30 30 30 30 20 29 0d 0a 09 09 09 09 09 3a 3a  10000 ).......::
28d0: 77 73 70 72 69 6e 74 66 28 20 62 75 66 2c 20 22  wsprintf( buf, "
28e0: 25 64 2e 25 64 2e 25 64 22 2c 20 76 66 66 69 2e  %d.%d.%d", vffi.
28f0: 64 77 46 69 6c 65 56 65 72 73 69 6f 6e 4d 53 3e  dwFileVersionMS>
2900: 3e 31 36 2c 0d 0a 09 09 09 09 09 09 76 66 66 69  >16,........vffi
2910: 2e 64 77 46 69 6c 65 56 65 72 73 69 6f 6e 4d 53  .dwFileVersionMS
2920: 26 30 78 66 66 66 66 2c 20 76 66 66 69 2e 64 77  &0xffff, vffi.dw
2930: 46 69 6c 65 56 65 72 73 69 6f 6e 4c 53 3e 3e 31  FileVersionLS>>1
2940: 36 20 29 3b 0d 0a 09 09 09 09 65 6c 73 65 0d 0a  6 );......else..
2950: 09 09 09 09 09 3a 3a 77 73 70 72 69 6e 74 66 28  .....::wsprintf(
2960: 20 62 75 66 2c 20 22 25 64 2e 25 64 22 2c 20 76   buf, "%d.%d", v
2970: 66 66 69 2e 64 77 46 69 6c 65 56 65 72 73 69 6f  ffi.dwFileVersio
2980: 6e 4d 53 3e 3e 31 36 2c 0d 0a 09 09 09 09 09 09  nMS>>16,........
2990: 76 66 66 69 2e 64 77 46 69 6c 65 56 65 72 73 69  vffi.dwFileVersi
29a0: 6f 6e 4d 53 26 30 78 66 66 66 66 20 29 3b 0d 0a  onMS&0xffff );..
29b0: 09 09 09 09 67 6f 74 20 3d 20 74 72 75 65 3b 0d  ....got = true;.
29c0: 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a  ....}....}...}..
29d0: 0d 0a 09 64 65 6c 65 74 65 20 5b 5d 20 76 62 75  ...delete [] vbu
29e0: 66 3b 0d 0a 09 72 65 74 75 72 6e 20 67 6f 74 3b  f;...return got;
29f0: 0d 0a 7d 0d 0a                                   ..}..