Hex Artifact Content

Not logged in

Artifact 1eab6b89a8a30aeecba5d04b34361cfdccec4f21:


0000: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61  ..#include "stda
0010: 66 78 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20  fx.h"..#include 
0020: 22 6b 69 75 74 69 6c 2e 68 22 0d 0a 0d 0a 2f 2f  "kiutil.h"....//
0030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0040: 0a 76 6f 69 64 20 6b 69 75 74 69 6c 3a 3a 74 69  .void kiutil::ti
0050: 6d 65 53 65 74 28 20 63 6f 6e 73 74 20 63 68 61  meSet( const cha
0060: 72 2a 20 66 6e 61 6d 65 2c 20 46 49 4c 45 54 49  r* fname, FILETI
0070: 4d 45 2a 20 70 66 74 20 29 0d 0a 7b 0d 0a 09 48  ME* pft )..{...H
0080: 41 4e 44 4c 45 20 68 61 6e 20 3d 20 43 72 65 61  ANDLE han = Crea
0090: 74 65 46 69 6c 65 28 20 66 6e 61 6d 65 2c 0d 0a  teFile( fname,..
00a0: 09 09 09 09 09 09 09 20 47 45 4e 45 52 49 43 5f  ....... GENERIC_
00b0: 52 45 41 44 20 7c 20 47 45 4e 45 52 49 43 5f 57  READ | GENERIC_W
00c0: 52 49 54 45 2c 0d 0a 09 09 09 09 09 09 09 20 46  RITE,......... F
00d0: 49 4c 45 5f 53 48 41 52 45 5f 52 45 41 44 2c 4e  ILE_SHARE_READ,N
00e0: 55 4c 4c 2c 0d 0a 09 09 09 09 09 09 09 20 4f 50  ULL,......... OP
00f0: 45 4e 5f 45 58 49 53 54 49 4e 47 2c 0d 0a 09 09  EN_EXISTING,....
0100: 09 09 09 09 09 20 46 49 4c 45 5f 41 54 54 52 49  ..... FILE_ATTRI
0110: 42 55 54 45 5f 4e 4f 52 4d 41 4c 2c 0d 0a 09 09  BUTE_NORMAL,....
0120: 09 09 09 09 09 20 4e 55 4c 4c 20 29 3b 0d 0a 09  ..... NULL );...
0130: 69 66 28 20 68 61 6e 3d 3d 49 4e 56 41 4c 49 44  if( han==INVALID
0140: 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d  _HANDLE_VALUE ).
0150: 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 0d 0a 09 53  ...return;.....S
0160: 65 74 46 69 6c 65 54 69 6d 65 28 20 68 61 6e 2c  etFileTime( han,
0170: 70 66 74 2c 4e 55 4c 4c 2c 70 66 74 20 29 3b 0d  pft,NULL,pft );.
0180: 0a 0d 0a 09 43 6c 6f 73 65 48 61 6e 64 6c 65 28  ....CloseHandle(
0190: 20 68 61 6e 20 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f   han );..}....vo
01a0: 69 64 20 6b 69 75 74 69 6c 3a 3a 74 69 6d 65 53  id kiutil::timeS
01b0: 65 74 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20  et( const char* 
01c0: 66 6e 61 6d 65 2c 20 44 57 4f 52 44 20 73 65 63  fname, DWORD sec
01d0: 20 29 0d 0a 7b 0d 0a 09 73 74 72 75 63 74 20 74   )..{...struct t
01e0: 6d 2a 20 74 69 6d 65 3d 67 6d 74 69 6d 65 28 28  m* time=gmtime((
01f0: 6c 6f 6e 67 2a 29 26 73 65 63 29 3b 0d 0a 09 69  long*)&sec);...i
0200: 66 28 20 74 69 6d 65 21 3d 4e 55 4c 4c 20 29 0d  f( time!=NULL ).
0210: 0a 09 7b 0d 0a 09 09 46 49 4c 45 54 49 4d 45 20  ..{....FILETIME 
0220: 66 74 3b 0d 0a 09 09 53 59 53 54 45 4d 54 49 4d  ft;....SYSTEMTIM
0230: 45 20 73 79 73 3b 0d 0a 0d 0a 09 09 73 79 73 2e  E sys;......sys.
0240: 77 59 65 61 72 20 3d 20 20 20 20 20 20 74 69 6d  wYear =      tim
0250: 65 2d 3e 74 6d 5f 79 65 61 72 2b 31 39 30 30 3b  e->tm_year+1900;
0260: 0d 0a 09 09 73 79 73 2e 77 4d 6f 6e 74 68 20 3d  ....sys.wMonth =
0270: 20 20 20 20 20 74 69 6d 65 2d 3e 74 6d 5f 6d 6f       time->tm_mo
0280: 6e 2b 31 3b 0d 0a 09 09 73 79 73 2e 77 44 61 79  n+1;....sys.wDay
0290: 4f 66 57 65 65 6b 20 3d 20 74 69 6d 65 2d 3e 74  OfWeek = time->t
02a0: 6d 5f 77 64 61 79 3b 0d 0a 09 09 73 79 73 2e 77  m_wday;....sys.w
02b0: 44 61 79 20 3d 20 20 20 20 20 20 20 74 69 6d 65  Day =       time
02c0: 2d 3e 74 6d 5f 6d 64 61 79 3b 0d 0a 09 09 73 79  ->tm_mday;....sy
02d0: 73 2e 77 48 6f 75 72 20 3d 20 20 20 20 20 20 74  s.wHour =      t
02e0: 69 6d 65 2d 3e 74 6d 5f 68 6f 75 72 3b 0d 0a 09  ime->tm_hour;...
02f0: 09 73 79 73 2e 77 4d 69 6e 75 74 65 20 3d 20 20  .sys.wMinute =  
0300: 20 20 74 69 6d 65 2d 3e 74 6d 5f 6d 69 6e 3b 0d    time->tm_min;.
0310: 0a 09 09 73 79 73 2e 77 53 65 63 6f 6e 64 20 3d  ...sys.wSecond =
0320: 20 20 20 20 74 69 6d 65 2d 3e 74 6d 5f 73 65 63      time->tm_sec
0330: 3b 0d 0a 09 09 73 79 73 2e 77 4d 69 6c 6c 69 73  ;....sys.wMillis
0340: 65 63 6f 6e 64 73 20 3d 20 30 3b 0d 0a 09 09 53  econds = 0;....S
0350: 79 73 74 65 6d 54 69 6d 65 54 6f 46 69 6c 65 54  ystemTimeToFileT
0360: 69 6d 65 28 26 73 79 73 2c 26 66 74 29 3b 0d 0a  ime(&sys,&ft);..
0370: 09 09 74 69 6d 65 53 65 74 28 20 66 6e 61 6d 65  ..timeSet( fname
0380: 2c 26 66 74 20 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a  ,&ft );...}..}..
0390: 0d 0a 76 6f 69 64 20 6b 69 75 74 69 6c 3a 3a 74  ..void kiutil::t
03a0: 69 6d 65 53 65 74 28 20 63 6f 6e 73 74 20 63 68  imeSet( const ch
03b0: 61 72 2a 20 66 6e 61 6d 65 2c 57 4f 52 44 20 64  ar* fname,WORD d
03c0: 61 74 65 2c 57 4f 52 44 20 74 69 6d 65 20 29 0d  ate,WORD time ).
03d0: 0a 7b 0d 0a 09 46 49 4c 45 54 49 4d 45 20 66 74  .{...FILETIME ft
03e0: 2c 6c 63 3b 0d 0a 09 69 66 28 20 44 6f 73 44 61  ,lc;...if( DosDa
03f0: 74 65 54 69 6d 65 54 6f 46 69 6c 65 54 69 6d 65  teTimeToFileTime
0400: 28 20 64 61 74 65 2c 20 74 69 6d 65 2c 20 26 6c  ( date, time, &l
0410: 63 20 29 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28  c ) )...{....if(
0420: 20 4c 6f 63 61 6c 46 69 6c 65 54 69 6d 65 54 6f   LocalFileTimeTo
0430: 46 69 6c 65 54 69 6d 65 28 20 26 6c 63 2c 20 26  FileTime( &lc, &
0440: 66 74 20 29 20 29 0d 0a 09 09 09 74 69 6d 65 53  ft ) ).....timeS
0450: 65 74 28 20 66 6e 61 6d 65 2c 26 66 74 20 29 3b  et( fname,&ft );
0460: 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 2f 2f  ...}..}..../////
0470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 76 6f 69  /////////....voi
0480: 64 20 6b 69 75 74 69 6c 3a 3a 77 6e 64 46 72 6f  d kiutil::wndFro
0490: 6e 74 28 20 48 57 4e 44 20 77 6e 64 20 29 0d 0a  nt( HWND wnd )..
04a0: 7b 0d 0a 09 73 74 61 74 69 63 20 44 57 4f 52 44  {...static DWORD
04b0: 20 56 65 72 20 3d 20 47 65 74 56 65 72 73 69 6f   Ver = GetVersio
04c0: 6e 28 29 3b 0d 0a 0d 0a 09 69 66 28 20 28 20 28  n();.....if( ( (
04d0: 56 65 72 26 30 78 38 30 30 30 30 30 30 30 29 20  Ver&0x80000000) 
04e0: 26 26 20 4c 4f 42 59 54 45 28 4c 4f 57 4f 52 44  && LOBYTE(LOWORD
04f0: 28 56 65 72 29 29 3e 3d 34 20 26 26 20 48 49 42  (Ver))>=4 && HIB
0500: 59 54 45 28 4c 4f 57 4f 52 44 28 56 65 72 29 29  YTE(LOWORD(Ver))
0510: 3e 3d 31 30 20 29 20 7c 7c 0d 0a 09 20 20 20 20  >=10 ) ||...    
0520: 28 21 28 56 65 72 26 30 78 38 30 30 30 30 30 30  (!(Ver&0x8000000
0530: 30 29 20 26 26 20 4c 4f 42 59 54 45 28 4c 4f 57  0) && LOBYTE(LOW
0540: 4f 52 44 28 56 65 72 29 29 3e 3d 35 20 29 29 20  ORD(Ver))>=5 )) 
0550: 2f 2f 20 90 56 82 b5 82 a2 57 69 6e 64 6f 77 73  // .V....Windows
0560: 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44 20 70 69  ...{....DWORD pi
0570: 64 3b 0d 0a 09 09 44 57 4f 52 44 20 74 68 72 65  d;....DWORD thre
0580: 61 64 31 20 3d 20 47 65 74 57 69 6e 64 6f 77 54  ad1 = GetWindowT
0590: 68 72 65 61 64 50 72 6f 63 65 73 73 49 64 28 20  hreadProcessId( 
05a0: 47 65 74 46 6f 72 65 67 72 6f 75 6e 64 57 69 6e  GetForegroundWin
05b0: 64 6f 77 28 29 2c 26 70 69 64 20 29 3b 0d 0a 09  dow(),&pid );...
05c0: 09 44 57 4f 52 44 20 74 68 72 65 61 64 32 20 3d  .DWORD thread2 =
05d0: 20 47 65 74 43 75 72 72 65 6e 74 54 68 72 65 61   GetCurrentThrea
05e0: 64 49 64 28 29 3b 0d 0a 09 09 41 74 74 61 63 68  dId();....Attach
05f0: 54 68 72 65 61 64 49 6e 70 75 74 28 20 74 68 72  ThreadInput( thr
0600: 65 61 64 32 2c 20 74 68 72 65 61 64 31 2c 20 54  ead2, thread1, T
0610: 52 55 45 20 29 3b 0d 0a 09 09 53 65 74 46 6f 72  RUE );....SetFor
0620: 65 67 72 6f 75 6e 64 57 69 6e 64 6f 77 28 20 77  egroundWindow( w
0630: 6e 64 20 29 3b 0d 0a 09 09 41 74 74 61 63 68 54  nd );....AttachT
0640: 68 72 65 61 64 49 6e 70 75 74 28 20 74 68 72 65  hreadInput( thre
0650: 61 64 32 2c 20 74 68 72 65 61 64 31 2c 20 46 41  ad2, thread1, FA
0660: 4c 53 45 20 29 3b 0d 0a 09 09 42 72 69 6e 67 57  LSE );....BringW
0670: 69 6e 64 6f 77 54 6f 54 6f 70 28 20 77 6e 64 20  indowToTop( wnd 
0680: 29 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20 20 2f  );...}...else  /
0690: 2f 20 8c c3 82 a2 57 69 6e 64 6f 77 73 0d 0a 09  / ....Windows...
06a0: 09 53 65 74 46 6f 72 65 67 72 6f 75 6e 64 57 69  .SetForegroundWi
06b0: 6e 64 6f 77 28 20 77 6e 64 20 29 3b 0d 0a 7d 0d  ndow( wnd );..}.
06c0: 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .../////////////
06d0: 2f 2f 0d 0a 0d 0a 63 68 61 72 20 6b 69 75 74 69  //....char kiuti
06e0: 6c 3a 3a 6c 62 5b 32 35 36 5d 3b 0d 0a 0d 0a 76  l::lb[256];....v
06f0: 6f 69 64 20 6b 69 75 74 69 6c 3a 3a 70 61 74 68  oid kiutil::path
0700: 49 6e 69 74 28 29 0d 0a 7b 0d 0a 09 6c 62 5b 30  Init()..{...lb[0
0710: 5d 20 3d 20 30 3b 0d 0a 09 66 6f 72 28 20 69 6e  ] = 0;...for( in
0720: 74 20 63 3d 31 3b 20 63 21 3d 32 35 36 3b 20 63  t c=1; c!=256; c
0730: 2b 2b 20 29 0d 0a 09 09 6c 62 5b 63 5d 20 3d 20  ++ )....lb[c] = 
0740: 28 49 73 44 42 43 53 4c 65 61 64 42 79 74 65 28  (IsDBCSLeadByte(
0750: 63 29 20 3f 20 32 20 3a 20 31 29 3b 0d 0a 7d 0d  c) ? 2 : 1);..}.
0760: 0a 0d 0a 23 64 65 66 69 6e 65 20 69 73 64 62 6c  ...#define isdbl
0770: 62 28 63 29 20 28 6c 62 5b 28 75 6e 73 69 67 6e  b(c) (lb[(unsign
0780: 65 64 20 63 68 61 72 29 28 63 29 5d 3d 3d 32 29  ed char)(c)]==2)
0790: 0d 0a 23 64 65 66 69 6e 65 20 73 74 65 70 28 70  ..#define step(p
07a0: 29 20 28 70 2b 3d 6c 62 5b 28 75 6e 73 69 67 6e  ) (p+=lb[(unsign
07b0: 65 64 20 63 68 61 72 29 2a 28 70 29 5d 29 0d 0a  ed char)*(p)])..
07c0: 0d 0a 63 68 61 72 2a 20 6b 69 75 74 69 6c 3a 3a  ..char* kiutil::
07d0: 70 61 74 68 4d 61 6b 65 28 20 63 68 61 72 2a 20  pathMake( char* 
07e0: 70 61 74 68 20 29 0d 0a 7b 0d 0a 09 63 68 61 72  path )..{...char
07f0: 2a 20 73 74 20 3d 20 70 61 74 68 3b 0d 0a 0d 0a  * st = path;....
0800: 09 77 68 69 6c 65 28 20 2a 73 74 3d 3d 27 2f 27  .while( *st=='/'
0810: 20 7c 7c 20 2a 73 74 3d 3d 27 5c 5c 27 20 7c 7c   || *st=='\\' ||
0820: 20 2a 73 74 3d 3d 27 3f 27 20 29 0d 0a 09 09 73   *st=='?' )....s
0830: 74 2b 2b 3b 0d 0a 09 69 66 28 20 73 74 5b 30 5d  t++;...if( st[0]
0840: 21 3d 27 5c 30 27 20 26 26 20 73 74 5b 31 5d 3d  !='\0' && st[1]=
0850: 3d 27 3a 27 20 29 0d 0a 09 09 73 74 2b 3d 32 3b  =':' )....st+=2;
0860: 0d 0a 09 77 68 69 6c 65 28 20 2a 73 74 3d 3d 27  ...while( *st=='
0870: 2f 27 20 7c 7c 20 2a 73 74 3d 3d 27 5c 5c 27 20  /' || *st=='\\' 
0880: 7c 7c 20 2a 73 74 3d 3d 27 3f 27 20 29 0d 0a 09  || *st=='?' )...
0890: 09 73 74 2b 2b 3b 0d 0a 0d 0a 09 66 6f 72 28 20  .st++;.....for( 
08a0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70  unsigned char *p
08b0: 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  =(unsigned char*
08c0: 29 73 74 3b 20 2a 70 21 3d 27 5c 30 27 3b 20 73  )st; *p!='\0'; s
08d0: 74 65 70 28 70 29 20 29 0d 0a 09 7b 0d 0a 09 09  tep(p) )...{....
08e0: 69 66 28 20 69 73 64 62 6c 62 28 2a 70 29 20 29  if( isdblb(*p) )
08f0: 0d 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a  .....continue;..
0900: 0d 0a 09 09 69 66 28 20 2a 70 3d 3d 27 5c 5c 27  ....if( *p=='\\'
0910: 20 7c 7c 20 2a 70 3d 3d 27 2f 27 20 29 0d 0a 09   || *p=='/' )...
0920: 09 7b 0d 0a 09 09 09 2a 70 3d 27 5c 30 27 3b 0d  .{.....*p='\0';.
0930: 0a 09 09 09 43 72 65 61 74 65 44 69 72 65 63 74  ....CreateDirect
0940: 6f 72 79 28 20 73 74 2c 20 4e 55 4c 4c 20 29 3b  ory( st, NULL );
0950: 0d 0a 09 09 09 2a 70 3d 27 5c 5c 27 3b 0d 0a 09  .....*p='\\';...
0960: 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 20 2a  .}....else if( *
0970: 70 3c 27 20 27 20 7c 7c 20 28 20 2a 70 3e 27 7e  p<' ' || ( *p>'~
0980: 27 20 26 26 20 21 28 20 30 78 61 30 3c 3d 2a 70  ' && !( 0xa0<=*p
0990: 20 26 26 20 2a 70 3c 3d 30 78 64 66 20 29 20 29   && *p<=0xdf ) )
09a0: 20 7c 7c 20 73 74 72 63 68 72 28 22 3a 2a 3f 5c   || strchr(":*?\
09b0: 22 3c 3e 7c 22 2c 2a 70 29 20 29 0d 0a 09 09 09  "<>|",*p) ).....
09c0: 2a 70 20 3d 20 27 5f 27 3b 0d 0a 09 7d 0d 0a 0d  *p = '_';...}...
09d0: 0a 09 72 65 74 75 72 6e 20 73 74 3b 0d 0a 7d 0d  ..return st;..}.
09e0: 0a 0d 0a 76 6f 69 64 20 6b 69 75 74 69 6c 3a 3a  ...void kiutil::
09f0: 70 61 74 68 4d 61 6b 65 41 62 73 28 20 63 68 61  pathMakeAbs( cha
0a00: 72 2a 20 70 61 74 68 20 29 0d 0a 7b 0d 0a 09 69  r* path )..{...i
0a10: 6e 74 20 69 3d 30 3b 0d 0a 09 66 6f 72 28 20 63  nt i=0;...for( c
0a20: 68 61 72 2a 20 70 3d 70 61 74 68 3b 20 2a 70 21  har* p=path; *p!
0a30: 3d 27 5c 30 27 3b 20 73 74 65 70 28 70 29 20 29  ='\0'; step(p) )
0a40: 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 69 2b 2b 20  ...{....if( i++ 
0a50: 3c 20 34 20 29 20 2f 2f 20 8d c5 8f 89 82 cc 82  < 4 ) // .......
0a60: 53 95 b6 8e 9a 88 c8 93 e0 82 cc 20 5c 20 82 cd  S.......... \ ..
0a70: 83 68 83 89 83 43 83 75 82 f0 95 5c 82 b7 81 41  .h...C.u...\...A
0a80: 82 c6 82 a2 82 a4 82 b1 82 c6 82 c9 82 b5 82 c4  ................
0a90: 82 a8 82 ad 81 42 0d 0a 09 09 09 63 6f 6e 74 69  .....B.....conti
0aa0: 6e 75 65 3b 0d 0a 0d 0a 09 09 69 66 28 20 2a 70  nue;......if( *p
0ab0: 3d 3d 27 5c 5c 27 20 29 0d 0a 09 09 7b 0d 0a 09  =='\\' )....{...
0ac0: 09 09 2a 70 3d 27 5c 30 27 3b 0d 0a 09 09 09 43  ..*p='\0';.....C
0ad0: 72 65 61 74 65 44 69 72 65 63 74 6f 72 79 28 20  reateDirectory( 
0ae0: 70 61 74 68 2c 20 4e 55 4c 4c 20 29 3b 0d 0a 09  path, NULL );...
0af0: 09 09 2a 70 3d 27 5c 5c 27 3b 0d 0a 09 09 7d 0d  ..*p='\\';....}.
0b00: 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 6b  ..}..}....void k
0b10: 69 75 74 69 6c 3a 3a 70 61 74 68 53 70 6c 69 74  iutil::pathSplit
0b20: 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 70 61  ( const char* pa
0b30: 74 68 2c 20 69 6e 74 2a 20 79 2c 20 69 6e 74 2a  th, int* y, int*
0b40: 20 64 20 29 0d 0a 7b 0d 0a 09 2a 79 3d 2d 31 2c   d )..{...*y=-1,
0b50: 20 2a 64 3d 2d 31 3b 0d 0a 09 66 6f 72 28 20 63   *d=-1;...for( c
0b60: 6f 6e 73 74 20 63 68 61 72 2a 20 78 3d 70 61 74  onst char* x=pat
0b70: 68 3b 20 2a 78 21 3d 27 5c 30 27 3b 20 73 74 65  h; *x!='\0'; ste
0b80: 70 28 78 29 20 29 20 0d 0a 09 7b 0d 0a 09 09 69  p(x) ) ...{....i
0b90: 66 28 20 2a 78 3d 3d 27 5c 5c 27 20 7c 7c 20 2a  f( *x=='\\' || *
0ba0: 78 3d 3d 27 2f 27 20 29 09 2a 79 3d 78 2d 70 61  x=='/' ).*y=x-pa
0bb0: 74 68 2c 2a 64 3d 2d 31 3b 0d 0a 09 09 65 6c 73  th,*d=-1;....els
0bc0: 65 20 69 66 28 20 2a 78 3d 3d 27 2e 27 20 29 09  e if( *x=='.' ).
0bd0: 09 09 2a 64 3d 78 2d 70 61 74 68 3b 0d 0a 09 7d  ..*d=x-path;...}
0be0: 0d 0a 7d 0d 0a 0d 0a 63 6f 6e 73 74 20 63 68 61  ..}....const cha
0bf0: 72 2a 20 6b 69 75 74 69 6c 3a 3a 70 61 74 68 45  r* kiutil::pathE
0c00: 78 74 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20  xt( const char* 
0c10: 70 61 74 68 20 29 0d 0a 7b 0d 0a 09 69 6e 74 20  path )..{...int 
0c20: 79 2c 64 3b 0d 0a 09 6b 69 75 74 69 6c 3a 3a 70  y,d;...kiutil::p
0c30: 61 74 68 53 70 6c 69 74 28 20 70 61 74 68 2c 26  athSplit( path,&
0c40: 79 2c 26 64 20 29 3b 0d 0a 09 72 65 74 75 72 6e  y,&d );...return
0c50: 20 28 64 21 3d 2d 31 29 20 3f 20 70 61 74 68 2b   (d!=-1) ? path+
0c60: 64 2b 31 20 3a 20 70 61 74 68 2b 73 74 72 6c 65  d+1 : path+strle
0c70: 6e 28 70 61 74 68 29 3b 0d 0a 7d 0d 0a 0d 0a 63  n(path);..}....c
0c80: 6f 6e 73 74 20 63 68 61 72 2a 20 6b 69 75 74 69  onst char* kiuti
0c90: 6c 3a 3a 70 61 74 68 4e 61 6d 65 28 20 63 6f 6e  l::pathName( con
0ca0: 73 74 20 63 68 61 72 2a 20 70 61 74 68 20 29 0d  st char* path ).
0cb0: 0a 7b 0d 0a 09 69 6e 74 20 79 2c 64 3b 0d 0a 09  .{...int y,d;...
0cc0: 6b 69 75 74 69 6c 3a 3a 70 61 74 68 53 70 6c 69  kiutil::pathSpli
0cd0: 74 28 20 70 61 74 68 2c 26 79 2c 26 64 20 29 3b  t( path,&y,&d );
0ce0: 0d 0a 09 72 65 74 75 72 6e 20 70 61 74 68 2b 79  ...return path+y
0cf0: 2b 31 3b 0d 0a 7d 0d 0a 0d 0a 23 75 6e 64 65 66  +1;..}....#undef
0d00: 20 73 74 65 70 0d 0a 23 75 6e 64 65 66 20 69 73   step..#undef is
0d10: 64 62 6c 62 0d 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f  dblb....////////
0d20: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 63 68 61 72 2a 20  //////....char* 
0d30: 6b 69 75 74 69 6c 3a 3a 67 65 74 6c 69 6e 65 28  kiutil::getline(
0d40: 20 63 68 61 72 2a 20 73 74 72 2c 20 69 6e 74 20   char* str, int 
0d50: 73 69 7a 65 2c 20 46 49 4c 45 2a 20 66 70 20 29  size, FILE* fp )
0d60: 0d 0a 7b 0d 0a 09 69 66 28 20 73 69 7a 65 3e 30  ..{...if( size>0
0d70: 20 29 0d 0a 09 7b 0d 0a 09 09 63 68 61 72 2a 20   )...{....char* 
0d80: 70 3d 73 74 72 3b 0d 0a 0d 0a 09 09 77 68 69 6c  p=str;......whil
0d90: 65 28 20 2d 2d 73 69 7a 65 20 29 0d 0a 09 09 7b  e( --size )....{
0da0: 0d 0a 09 09 09 69 6e 74 20 63 20 3d 20 66 67 65  .....int c = fge
0db0: 74 63 28 66 70 29 3b 0d 0a 0d 0a 09 09 09 69 66  tc(fp);.......if
0dc0: 28 20 63 3c 3d 30 20 29 20 2f 2f 20 45 4f 46 20  ( c<=0 ) // EOF 
0dd0: 7c 7c 20 27 5c 30 27 0d 0a 09 09 09 09 62 72 65  || '\0'......bre
0de0: 61 6b 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28  ak;.....else if(
0df0: 20 63 3d 3d 27 5c 6e 27 20 29 0d 0a 09 09 09 09   c=='\n' )......
0e00: 62 72 65 61 6b 3b 0d 0a 09 09 09 65 6c 73 65 20  break;.....else 
0e10: 69 66 28 20 63 3d 3d 27 5c 72 27 20 29 0d 0a 09  if( c=='\r' )...
0e20: 09 09 7b 0d 0a 09 09 09 09 63 20 3d 20 66 67 65  ..{......c = fge
0e30: 74 63 28 66 70 29 3b 0d 0a 09 09 09 09 69 66 28  tc(fp);......if(
0e40: 20 63 21 3d 45 4f 46 20 26 26 20 63 21 3d 27 5c   c!=EOF && c!='\
0e50: 6e 27 20 29 0d 0a 09 09 09 09 09 75 6e 67 65 74  n' ).......unget
0e60: 63 28 20 63 2c 66 70 20 29 3b 0d 0a 09 09 09 09  c( c,fp );......
0e70: 62 72 65 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09  break;.....}....
0e80: 09 65 6c 73 65 0d 0a 09 09 09 09 2a 28 70 2b 2b  .else......*(p++
0e90: 29 20 3d 20 63 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09  ) = c;....}.....
0ea0: 09 2a 70 3d 27 5c 30 27 3b 0d 0a 09 7d 0d 0a 0d  .*p='\0';...}...
0eb0: 0a 09 72 65 74 75 72 6e 20 66 65 6f 66 28 66 70  ..return feof(fp
0ec0: 29 20 3f 20 4e 55 4c 4c 20 3a 20 73 74 72 3b 0d  ) ? NULL : str;.
0ed0: 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 6b 69 75 74 69  .}....void kiuti
0ee0: 6c 3a 3a 67 65 74 4f 72 69 67 69 6e 61 6c 4e 61  l::getOriginalNa
0ef0: 6d 65 28 20 63 68 61 72 2a 20 6e 77 2c 20 63 6f  me( char* nw, co
0f00: 6e 73 74 20 63 68 61 72 2a 20 6f 64 2c 20 63 68  nst char* od, ch
0f10: 61 72 2a 20 65 78 74 20 29 0d 0a 7b 0d 0a 09 69  ar* ext )..{...i
0f20: 6e 74 20 79 2c 64 3b 0d 0a 09 6b 69 75 74 69 6c  nt y,d;...kiutil
0f30: 3a 3a 70 61 74 68 53 70 6c 69 74 28 20 6f 64 2c  ::pathSplit( od,
0f40: 26 79 2c 26 64 20 29 3b 0d 0a 09 73 74 72 63 70  &y,&d );...strcp
0f50: 79 28 20 6e 77 2c 6f 64 2b 79 2b 31 20 29 3b 0d  y( nw,od+y+1 );.
0f60: 0a 0d 0a 09 69 66 28 20 65 78 74 20 29 0d 0a 09  ....if( ext )...
0f70: 7b 0d 0a 09 09 73 74 72 63 61 74 28 20 6e 77 2c  {....strcat( nw,
0f80: 22 2e 22 20 29 3b 0d 0a 09 09 73 74 72 63 61 74  "." );....strcat
0f90: 28 20 6e 77 2c 65 78 74 20 29 3b 0d 0a 09 7d 0d  ( nw,ext );...}.
0fa0: 0a 09 65 6c 73 65 0d 0a 09 09 6e 77 5b 64 2d 79  ..else....nw[d-y
0fb0: 2d 31 5d 3d 27 5c 30 27 3b 0d 0a 7d 0d 0a 0d 0a  -1]='\0';..}....