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 ..}..