Hex Artifact Content

Not logged in

Artifact ccf31ef10ed8e4be7a1c2902a7c683ee99347252:


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: 74 69 6d 65 5f 74 2a 29 26 73 65 63 29 3b 0d 0a  time_t*)&sec);..
0200: 09 69 66 28 20 74 69 6d 65 21 3d 4e 55 4c 4c 20  .if( time!=NULL 
0210: 29 0d 0a 09 7b 0d 0a 09 09 46 49 4c 45 54 49 4d  )...{....FILETIM
0220: 45 20 66 74 3b 0d 0a 09 09 53 59 53 54 45 4d 54  E ft;....SYSTEMT
0230: 49 4d 45 20 73 79 73 3b 0d 0a 0d 0a 09 09 73 79  IME sys;......sy
0240: 73 2e 77 59 65 61 72 20 3d 20 20 20 20 20 20 74  s.wYear =      t
0250: 69 6d 65 2d 3e 74 6d 5f 79 65 61 72 2b 31 39 30  ime->tm_year+190
0260: 30 3b 0d 0a 09 09 73 79 73 2e 77 4d 6f 6e 74 68  0;....sys.wMonth
0270: 20 3d 20 20 20 20 20 74 69 6d 65 2d 3e 74 6d 5f   =     time->tm_
0280: 6d 6f 6e 2b 31 3b 0d 0a 09 09 73 79 73 2e 77 44  mon+1;....sys.wD
0290: 61 79 4f 66 57 65 65 6b 20 3d 20 74 69 6d 65 2d  ayOfWeek = time-
02a0: 3e 74 6d 5f 77 64 61 79 3b 0d 0a 09 09 73 79 73  >tm_wday;....sys
02b0: 2e 77 44 61 79 20 3d 20 20 20 20 20 20 20 74 69  .wDay =       ti
02c0: 6d 65 2d 3e 74 6d 5f 6d 64 61 79 3b 0d 0a 09 09  me->tm_mday;....
02d0: 73 79 73 2e 77 48 6f 75 72 20 3d 20 20 20 20 20  sys.wHour =     
02e0: 20 74 69 6d 65 2d 3e 74 6d 5f 68 6f 75 72 3b 0d   time->tm_hour;.
02f0: 0a 09 09 73 79 73 2e 77 4d 69 6e 75 74 65 20 3d  ...sys.wMinute =
0300: 20 20 20 20 74 69 6d 65 2d 3e 74 6d 5f 6d 69 6e      time->tm_min
0310: 3b 0d 0a 09 09 73 79 73 2e 77 53 65 63 6f 6e 64  ;....sys.wSecond
0320: 20 3d 20 20 20 20 74 69 6d 65 2d 3e 74 6d 5f 73   =    time->tm_s
0330: 65 63 3b 0d 0a 09 09 73 79 73 2e 77 4d 69 6c 6c  ec;....sys.wMill
0340: 69 73 65 63 6f 6e 64 73 20 3d 20 30 3b 0d 0a 09  iseconds = 0;...
0350: 09 53 79 73 74 65 6d 54 69 6d 65 54 6f 46 69 6c  .SystemTimeToFil
0360: 65 54 69 6d 65 28 26 73 79 73 2c 26 66 74 29 3b  eTime(&sys,&ft);
0370: 0d 0a 09 09 74 69 6d 65 53 65 74 28 20 66 6e 61  ....timeSet( fna
0380: 6d 65 2c 26 66 74 20 29 3b 0d 0a 09 7d 0d 0a 7d  me,&ft );...}..}
0390: 0d 0a 0d 0a 76 6f 69 64 20 6b 69 75 74 69 6c 3a  ....void kiutil:
03a0: 3a 74 69 6d 65 53 65 74 28 20 63 6f 6e 73 74 20  :timeSet( const 
03b0: 63 68 61 72 2a 20 66 6e 61 6d 65 2c 57 4f 52 44  char* fname,WORD
03c0: 20 64 61 74 65 2c 57 4f 52 44 20 74 69 6d 65 20   date,WORD time 
03d0: 29 0d 0a 7b 0d 0a 09 46 49 4c 45 54 49 4d 45 20  )..{...FILETIME 
03e0: 66 74 2c 6c 63 3b 0d 0a 09 69 66 28 20 44 6f 73  ft,lc;...if( Dos
03f0: 44 61 74 65 54 69 6d 65 54 6f 46 69 6c 65 54 69  DateTimeToFileTi
0400: 6d 65 28 20 64 61 74 65 2c 20 74 69 6d 65 2c 20  me( date, time, 
0410: 26 6c 63 20 29 20 29 0d 0a 09 7b 0d 0a 09 09 69  &lc ) )...{....i
0420: 66 28 20 4c 6f 63 61 6c 46 69 6c 65 54 69 6d 65  f( LocalFileTime
0430: 54 6f 46 69 6c 65 54 69 6d 65 28 20 26 6c 63 2c  ToFileTime( &lc,
0440: 20 26 66 74 20 29 20 29 0d 0a 09 09 09 74 69 6d   &ft ) ).....tim
0450: 65 53 65 74 28 20 66 6e 61 6d 65 2c 26 66 74 20  eSet( fname,&ft 
0460: 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f  );...}..}....///
0470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 76  ///////////....v
0480: 6f 69 64 20 6b 69 75 74 69 6c 3a 3a 77 6e 64 46  oid kiutil::wndF
0490: 72 6f 6e 74 28 20 48 57 4e 44 20 77 6e 64 20 29  ront( HWND wnd )
04a0: 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20 44 57 4f  ..{...static DWO
04b0: 52 44 20 56 65 72 20 3d 20 47 65 74 56 65 72 73  RD Ver = GetVers
04c0: 69 6f 6e 28 29 3b 0d 0a 0d 0a 09 69 66 28 20 28  ion();.....if( (
04d0: 20 28 56 65 72 26 30 78 38 30 30 30 30 30 30 30   (Ver&0x80000000
04e0: 29 20 26 26 20 4c 4f 42 59 54 45 28 4c 4f 57 4f  ) && LOBYTE(LOWO
04f0: 52 44 28 56 65 72 29 29 3e 3d 34 20 26 26 20 48  RD(Ver))>=4 && H
0500: 49 42 59 54 45 28 4c 4f 57 4f 52 44 28 56 65 72  IBYTE(LOWORD(Ver
0510: 29 29 3e 3d 31 30 20 29 20 7c 7c 0d 0a 09 20 20  ))>=10 ) ||...  
0520: 20 20 28 21 28 56 65 72 26 30 78 38 30 30 30 30    (!(Ver&0x80000
0530: 30 30 30 29 20 26 26 20 4c 4f 42 59 54 45 28 4c  000) && LOBYTE(L
0540: 4f 57 4f 52 44 28 56 65 72 29 29 3e 3d 35 20 29  OWORD(Ver))>=5 )
0550: 29 20 2f 2f 20 90 56 82 b5 82 a2 57 69 6e 64 6f  ) // .V....Windo
0560: 77 73 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44 20  ws...{....DWORD 
0570: 70 69 64 3b 0d 0a 09 09 44 57 4f 52 44 20 74 68  pid;....DWORD th
0580: 72 65 61 64 31 20 3d 20 47 65 74 57 69 6e 64 6f  read1 = GetWindo
0590: 77 54 68 72 65 61 64 50 72 6f 63 65 73 73 49 64  wThreadProcessId
05a0: 28 20 47 65 74 46 6f 72 65 67 72 6f 75 6e 64 57  ( GetForegroundW
05b0: 69 6e 64 6f 77 28 29 2c 26 70 69 64 20 29 3b 0d  indow(),&pid );.
05c0: 0a 09 09 44 57 4f 52 44 20 74 68 72 65 61 64 32  ...DWORD thread2
05d0: 20 3d 20 47 65 74 43 75 72 72 65 6e 74 54 68 72   = GetCurrentThr
05e0: 65 61 64 49 64 28 29 3b 0d 0a 09 09 41 74 74 61  eadId();....Atta
05f0: 63 68 54 68 72 65 61 64 49 6e 70 75 74 28 20 74  chThreadInput( t
0600: 68 72 65 61 64 32 2c 20 74 68 72 65 61 64 31 2c  hread2, thread1,
0610: 20 54 52 55 45 20 29 3b 0d 0a 09 09 53 65 74 46   TRUE );....SetF
0620: 6f 72 65 67 72 6f 75 6e 64 57 69 6e 64 6f 77 28  oregroundWindow(
0630: 20 77 6e 64 20 29 3b 0d 0a 09 09 41 74 74 61 63   wnd );....Attac
0640: 68 54 68 72 65 61 64 49 6e 70 75 74 28 20 74 68  hThreadInput( th
0650: 72 65 61 64 32 2c 20 74 68 72 65 61 64 31 2c 20  read2, thread1, 
0660: 46 41 4c 53 45 20 29 3b 0d 0a 09 09 42 72 69 6e  FALSE );....Brin
0670: 67 57 69 6e 64 6f 77 54 6f 54 6f 70 28 20 77 6e  gWindowToTop( wn
0680: 64 20 29 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20  d );...}...else 
0690: 20 2f 2f 20 8c c3 82 a2 57 69 6e 64 6f 77 73 0d   // ....Windows.
06a0: 0a 09 09 53 65 74 46 6f 72 65 67 72 6f 75 6e 64  ...SetForeground
06b0: 57 69 6e 64 6f 77 28 20 77 6e 64 20 29 3b 0d 0a  Window( wnd );..
06c0: 7d 0d 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  }....///////////
06d0: 2f 2f 2f 2f 0d 0a 0d 0a 63 68 61 72 20 6b 69 75  ////....char kiu
06e0: 74 69 6c 3a 3a 6c 62 5b 32 35 36 5d 3b 0d 0a 0d  til::lb[256];...
06f0: 0a 76 6f 69 64 20 6b 69 75 74 69 6c 3a 3a 70 61  .void kiutil::pa
0700: 74 68 49 6e 69 74 28 29 0d 0a 7b 0d 0a 09 6c 62  thInit()..{...lb
0710: 5b 30 5d 20 3d 20 30 3b 0d 0a 09 66 6f 72 28 20  [0] = 0;...for( 
0720: 69 6e 74 20 63 3d 31 3b 20 63 21 3d 32 35 36 3b  int c=1; c!=256;
0730: 20 63 2b 2b 20 29 0d 0a 09 09 6c 62 5b 63 5d 20   c++ )....lb[c] 
0740: 3d 20 28 49 73 44 42 43 53 4c 65 61 64 42 79 74  = (IsDBCSLeadByt
0750: 65 28 63 29 20 3f 20 32 20 3a 20 31 29 3b 0d 0a  e(c) ? 2 : 1);..
0760: 7d 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 69 73 64  }....#define isd
0770: 62 6c 62 28 63 29 20 28 6c 62 5b 28 75 6e 73 69  blb(c) (lb[(unsi
0780: 67 6e 65 64 20 63 68 61 72 29 28 63 29 5d 3d 3d  gned char)(c)]==
0790: 32 29 0d 0a 23 64 65 66 69 6e 65 20 73 74 65 70  2)..#define step
07a0: 28 70 29 20 28 70 2b 3d 6c 62 5b 28 75 6e 73 69  (p) (p+=lb[(unsi
07b0: 67 6e 65 64 20 63 68 61 72 29 2a 28 70 29 5d 29  gned char)*(p)])
07c0: 0d 0a 0d 0a 63 68 61 72 2a 20 6b 69 75 74 69 6c  ....char* kiutil
07d0: 3a 3a 70 61 74 68 4d 61 6b 65 28 20 63 68 61 72  ::pathMake( char
07e0: 2a 20 70 61 74 68 20 29 0d 0a 7b 0d 0a 09 63 68  * path )..{...ch
07f0: 61 72 2a 20 73 74 20 3d 20 70 61 74 68 3b 0d 0a  ar* st = path;..
0800: 0d 0a 09 77 68 69 6c 65 28 20 2a 73 74 3d 3d 27  ...while( *st=='
0810: 2f 27 20 7c 7c 20 2a 73 74 3d 3d 27 5c 5c 27 20  /' || *st=='\\' 
0820: 7c 7c 20 2a 73 74 3d 3d 27 3f 27 20 29 0d 0a 09  || *st=='?' )...
0830: 09 73 74 2b 2b 3b 0d 0a 09 69 66 28 20 73 74 5b  .st++;...if( st[
0840: 30 5d 21 3d 27 5c 30 27 20 26 26 20 73 74 5b 31  0]!='\0' && st[1
0850: 5d 3d 3d 27 3a 27 20 29 0d 0a 09 09 73 74 2b 3d  ]==':' )....st+=
0860: 32 3b 0d 0a 09 77 68 69 6c 65 28 20 2a 73 74 3d  2;...while( *st=
0870: 3d 27 2f 27 20 7c 7c 20 2a 73 74 3d 3d 27 5c 5c  ='/' || *st=='\\
0880: 27 20 7c 7c 20 2a 73 74 3d 3d 27 3f 27 20 29 0d  ' || *st=='?' ).
0890: 0a 09 09 73 74 2b 2b 3b 0d 0a 0d 0a 09 66 6f 72  ...st++;.....for
08a0: 28 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  ( unsigned char 
08b0: 2a 70 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  *p=(unsigned cha
08c0: 72 2a 29 73 74 3b 20 2a 70 21 3d 27 5c 30 27 3b  r*)st; *p!='\0';
08d0: 20 73 74 65 70 28 70 29 20 29 0d 0a 09 7b 0d 0a   step(p) )...{..
08e0: 09 09 69 66 28 20 69 73 64 62 6c 62 28 2a 70 29  ..if( isdblb(*p)
08f0: 20 29 0d 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b   ).....continue;
0900: 0d 0a 0d 0a 09 09 69 66 28 20 2a 70 3d 3d 27 5c  ......if( *p=='\
0910: 5c 27 20 7c 7c 20 2a 70 3d 3d 27 2f 27 20 29 0d  \' || *p=='/' ).
0920: 0a 09 09 7b 0d 0a 09 09 09 2a 70 3d 27 5c 30 27  ...{.....*p='\0'
0930: 3b 0d 0a 09 09 09 43 72 65 61 74 65 44 69 72 65  ;.....CreateDire
0940: 63 74 6f 72 79 28 20 73 74 2c 20 4e 55 4c 4c 20  ctory( st, NULL 
0950: 29 3b 0d 0a 09 09 09 2a 70 3d 27 5c 5c 27 3b 0d  );.....*p='\\';.
0960: 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28  ...}....else if(
0970: 20 2a 70 3c 27 20 27 20 7c 7c 20 28 20 2a 70 3e   *p<' ' || ( *p>
0980: 27 7e 27 20 26 26 20 21 28 20 30 78 61 30 3c 3d  '~' && !( 0xa0<=
0990: 2a 70 20 26 26 20 2a 70 3c 3d 30 78 64 66 20 29  *p && *p<=0xdf )
09a0: 20 29 20 7c 7c 20 73 74 72 63 68 72 28 22 3a 2a   ) || strchr(":*
09b0: 3f 5c 22 3c 3e 7c 22 2c 2a 70 29 20 29 0d 0a 09  ?\"<>|",*p) )...
09c0: 09 09 2a 70 20 3d 20 27 5f 27 3b 0d 0a 09 7d 0d  ..*p = '_';...}.
09d0: 0a 0d 0a 09 72 65 74 75 72 6e 20 73 74 3b 0d 0a  ....return st;..
09e0: 7d 0d 0a 0d 0a 76 6f 69 64 20 6b 69 75 74 69 6c  }....void kiutil
09f0: 3a 3a 70 61 74 68 4d 61 6b 65 41 62 73 28 20 63  ::pathMakeAbs( c
0a00: 68 61 72 2a 20 70 61 74 68 20 29 0d 0a 7b 0d 0a  har* path )..{..
0a10: 09 69 6e 74 20 69 3d 30 3b 0d 0a 09 66 6f 72 28  .int i=0;...for(
0a20: 20 63 68 61 72 2a 20 70 3d 70 61 74 68 3b 20 2a   char* p=path; *
0a30: 70 21 3d 27 5c 30 27 3b 20 73 74 65 70 28 70 29  p!='\0'; step(p)
0a40: 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 69 2b   )...{....if( i+
0a50: 2b 20 3c 20 34 20 29 20 2f 2f 20 8d c5 8f 89 82  + < 4 ) // .....
0a60: cc 82 53 95 b6 8e 9a 88 c8 93 e0 82 cc 20 5c 20  ..S.......... \ 
0a70: 82 cd 83 68 83 89 83 43 83 75 82 f0 95 5c 82 b7  ...h...C.u...\..
0a80: 81 41 82 c6 82 a2 82 a4 82 b1 82 c6 82 c9 82 b5  .A..............
0a90: 82 c4 82 a8 82 ad 81 42 0d 0a 09 09 09 63 6f 6e  .......B.....con
0aa0: 74 69 6e 75 65 3b 0d 0a 0d 0a 09 09 69 66 28 20  tinue;......if( 
0ab0: 2a 70 3d 3d 27 5c 5c 27 20 29 0d 0a 09 09 7b 0d  *p=='\\' )....{.
0ac0: 0a 09 09 09 2a 70 3d 27 5c 30 27 3b 0d 0a 09 09  ....*p='\0';....
0ad0: 09 43 72 65 61 74 65 44 69 72 65 63 74 6f 72 79  .CreateDirectory
0ae0: 28 20 70 61 74 68 2c 20 4e 55 4c 4c 20 29 3b 0d  ( path, NULL );.
0af0: 0a 09 09 09 2a 70 3d 27 5c 5c 27 3b 0d 0a 09 09  ....*p='\\';....
0b00: 7d 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64  }...}..}....void
0b10: 20 6b 69 75 74 69 6c 3a 3a 70 61 74 68 53 70 6c   kiutil::pathSpl
0b20: 69 74 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20  it( const char* 
0b30: 70 61 74 68 2c 20 69 6e 74 2a 20 79 2c 20 69 6e  path, int* y, in
0b40: 74 2a 20 64 20 29 0d 0a 7b 0d 0a 09 2a 79 3d 2d  t* d )..{...*y=-
0b50: 31 2c 20 2a 64 3d 2d 31 3b 0d 0a 09 66 6f 72 28  1, *d=-1;...for(
0b60: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 78 3d 70   const char* x=p
0b70: 61 74 68 3b 20 2a 78 21 3d 27 5c 30 27 3b 20 73  ath; *x!='\0'; s
0b80: 74 65 70 28 78 29 20 29 20 0d 0a 09 7b 0d 0a 09  tep(x) ) ...{...
0b90: 09 69 66 28 20 2a 78 3d 3d 27 5c 5c 27 20 7c 7c  .if( *x=='\\' ||
0ba0: 20 2a 78 3d 3d 27 2f 27 20 29 09 2a 79 3d 78 2d   *x=='/' ).*y=x-
0bb0: 70 61 74 68 2c 2a 64 3d 2d 31 3b 0d 0a 09 09 65  path,*d=-1;....e
0bc0: 6c 73 65 20 69 66 28 20 2a 78 3d 3d 27 2e 27 20  lse if( *x=='.' 
0bd0: 29 09 09 09 2a 64 3d 78 2d 70 61 74 68 3b 0d 0a  )...*d=x-path;..
0be0: 09 7d 0d 0a 7d 0d 0a 0d 0a 63 6f 6e 73 74 20 63  .}..}....const c
0bf0: 68 61 72 2a 20 6b 69 75 74 69 6c 3a 3a 70 61 74  har* kiutil::pat
0c00: 68 45 78 74 28 20 63 6f 6e 73 74 20 63 68 61 72  hExt( const char
0c10: 2a 20 70 61 74 68 20 29 0d 0a 7b 0d 0a 09 69 6e  * path )..{...in
0c20: 74 20 79 2c 64 3b 0d 0a 09 6b 69 75 74 69 6c 3a  t y,d;...kiutil:
0c30: 3a 70 61 74 68 53 70 6c 69 74 28 20 70 61 74 68  :pathSplit( path
0c40: 2c 26 79 2c 26 64 20 29 3b 0d 0a 09 72 65 74 75  ,&y,&d );...retu
0c50: 72 6e 20 28 64 21 3d 2d 31 29 20 3f 20 70 61 74  rn (d!=-1) ? pat
0c60: 68 2b 64 2b 31 20 3a 20 70 61 74 68 2b 73 74 72  h+d+1 : path+str
0c70: 6c 65 6e 28 70 61 74 68 29 3b 0d 0a 7d 0d 0a 0d  len(path);..}...
0c80: 0a 63 6f 6e 73 74 20 63 68 61 72 2a 20 6b 69 75  .const char* kiu
0c90: 74 69 6c 3a 3a 70 61 74 68 4e 61 6d 65 28 20 63  til::pathName( c
0ca0: 6f 6e 73 74 20 63 68 61 72 2a 20 70 61 74 68 20  onst char* path 
0cb0: 29 0d 0a 7b 0d 0a 09 69 6e 74 20 79 2c 64 3b 0d  )..{...int y,d;.
0cc0: 0a 09 6b 69 75 74 69 6c 3a 3a 70 61 74 68 53 70  ..kiutil::pathSp
0cd0: 6c 69 74 28 20 70 61 74 68 2c 26 79 2c 26 64 20  lit( path,&y,&d 
0ce0: 29 3b 0d 0a 09 72 65 74 75 72 6e 20 70 61 74 68  );...return path
0cf0: 2b 79 2b 31 3b 0d 0a 7d 0d 0a 0d 0a 23 75 6e 64  +y+1;..}....#und
0d00: 65 66 20 73 74 65 70 0d 0a 23 75 6e 64 65 66 20  ef step..#undef 
0d10: 69 73 64 62 6c 62 0d 0a 0d 0a 2f 2f 2f 2f 2f 2f  isdblb....//////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 63 68 61 72  ////////....char
0d30: 2a 20 6b 69 75 74 69 6c 3a 3a 67 65 74 6c 69 6e  * kiutil::getlin
0d40: 65 28 20 63 68 61 72 2a 20 73 74 72 2c 20 69 6e  e( char* str, in
0d50: 74 20 73 69 7a 65 2c 20 46 49 4c 45 2a 20 66 70  t size, FILE* fp
0d60: 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 73 69 7a 65   )..{...if( size
0d70: 3e 30 20 29 0d 0a 09 7b 0d 0a 09 09 63 68 61 72  >0 )...{....char
0d80: 2a 20 70 3d 73 74 72 3b 0d 0a 0d 0a 09 09 77 68  * p=str;......wh
0d90: 69 6c 65 28 20 2d 2d 73 69 7a 65 20 29 0d 0a 09  ile( --size )...
0da0: 09 7b 0d 0a 09 09 09 69 6e 74 20 63 20 3d 20 66  .{.....int c = f
0db0: 67 65 74 63 28 66 70 29 3b 0d 0a 0d 0a 09 09 09  getc(fp);.......
0dc0: 69 66 28 20 63 3c 3d 30 20 29 20 2f 2f 20 45 4f  if( c<=0 ) // EO
0dd0: 46 20 7c 7c 20 27 5c 30 27 0d 0a 09 09 09 09 62  F || '\0'......b
0de0: 72 65 61 6b 3b 0d 0a 09 09 09 65 6c 73 65 20 69  reak;.....else i
0df0: 66 28 20 63 3d 3d 27 5c 6e 27 20 29 0d 0a 09 09  f( c=='\n' )....
0e00: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 65 6c 73  ..break;.....els
0e10: 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20 29 0d  e if( c=='\r' ).
0e20: 0a 09 09 09 7b 0d 0a 09 09 09 09 63 20 3d 20 66  ....{......c = f
0e30: 67 65 74 63 28 66 70 29 3b 0d 0a 09 09 09 09 69  getc(fp);......i
0e40: 66 28 20 63 21 3d 45 4f 46 20 26 26 20 63 21 3d  f( c!=EOF && c!=
0e50: 27 5c 6e 27 20 29 0d 0a 09 09 09 09 09 75 6e 67  '\n' ).......ung
0e60: 65 74 63 28 20 63 2c 66 70 20 29 3b 0d 0a 09 09  etc( c,fp );....
0e70: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 7d 0d 0a  ..break;.....}..
0e80: 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 2a 28 70  ...else......*(p
0e90: 2b 2b 29 20 3d 20 63 3b 0d 0a 09 09 7d 0d 0a 0d  ++) = c;....}...
0ea0: 0a 09 09 2a 70 3d 27 5c 30 27 3b 0d 0a 09 7d 0d  ...*p='\0';...}.
0eb0: 0a 0d 0a 09 72 65 74 75 72 6e 20 66 65 6f 66 28  ....return feof(
0ec0: 66 70 29 20 3f 20 4e 55 4c 4c 20 3a 20 73 74 72  fp) ? NULL : str
0ed0: 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 6b 69 75  ;..}....void kiu
0ee0: 74 69 6c 3a 3a 67 65 74 4f 72 69 67 69 6e 61 6c  til::getOriginal
0ef0: 4e 61 6d 65 28 20 63 68 61 72 2a 20 6e 77 2c 20  Name( char* nw, 
0f00: 63 6f 6e 73 74 20 63 68 61 72 2a 20 6f 64 2c 20  const char* od, 
0f10: 63 68 61 72 2a 20 65 78 74 20 29 0d 0a 7b 0d 0a  char* ext )..{..
0f20: 09 69 6e 74 20 79 2c 64 3b 0d 0a 09 6b 69 75 74  .int y,d;...kiut
0f30: 69 6c 3a 3a 70 61 74 68 53 70 6c 69 74 28 20 6f  il::pathSplit( o
0f40: 64 2c 26 79 2c 26 64 20 29 3b 0d 0a 09 73 74 72  d,&y,&d );...str
0f50: 63 70 79 28 20 6e 77 2c 6f 64 2b 79 2b 31 20 29  cpy( nw,od+y+1 )
0f60: 3b 0d 0a 0d 0a 09 69 66 28 20 65 78 74 20 29 0d  ;.....if( ext ).
0f70: 0a 09 7b 0d 0a 09 09 73 74 72 63 61 74 28 20 6e  ..{....strcat( n
0f80: 77 2c 22 2e 22 20 29 3b 0d 0a 09 09 73 74 72 63  w,"." );....strc
0f90: 61 74 28 20 6e 77 2c 65 78 74 20 29 3b 0d 0a 09  at( nw,ext );...
0fa0: 7d 0d 0a 09 65 6c 73 65 0d 0a 09 09 6e 77 5b 64  }...else....nw[d
0fb0: 2d 79 2d 31 5d 3d 27 5c 30 27 3b 0d 0a 7d 0d 0a  -y-1]='\0';..}..
0fc0: 0d 0a                                            ..