Hex Artifact Content

Not logged in

Artifact 16c2c7129051abe489be828e7179368640c67aa7:


0000: 2f 2f 2d 2d 2d 20 4b 2e 49 2e 4c 49 42 20 2d 2d  //--- K.I.LIB --
0010: 2d 0d 0a 2f 2f 20 6b 6c 5f 66 69 6e 64 2e 68 20  -..// kl_find.h 
0020: 3a 20 46 69 6e 64 46 69 72 73 74 46 69 6c 65 20  : FindFirstFile 
0030: 77 72 61 70 70 65 72 0d 0a 0d 0a 23 69 6e 63 6c  wrapper....#incl
0040: 75 64 65 20 22 73 74 64 61 66 78 2e 68 22 0d 0a  ude "stdafx.h"..
0050: 23 69 6e 63 6c 75 64 65 20 22 6b 69 6c 69 62 2e  #include "kilib.
0060: 68 22 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 69 73  h"....#define is
0070: 44 6f 74 73 28 70 29 20 28 2a 70 3d 3d 27 2e 27  Dots(p) (*p=='.'
0080: 20 26 26 20 28 70 5b 31 5d 3d 3d 27 5c 30 27 20   && (p[1]=='\0' 
0090: 7c 7c 20 28 70 5b 31 5d 3d 3d 27 2e 27 20 26 26  || (p[1]=='.' &&
00a0: 20 70 5b 32 5d 3d 3d 27 5c 30 27 29 29 29 0d 0a   p[2]=='\0')))..
00b0: 0d 0a 62 6f 6f 6c 20 6b 69 46 69 6e 64 46 69 6c  ..bool kiFindFil
00c0: 65 3a 3a 66 69 6e 64 66 69 72 73 74 28 20 63 6f  e::findfirst( co
00d0: 6e 73 74 20 63 68 61 72 2a 20 77 69 6c 64 2c 20  nst char* wild, 
00e0: 57 49 4e 33 32 5f 46 49 4e 44 5f 44 41 54 41 2a  WIN32_FIND_DATA*
00f0: 20 70 66 64 20 29 0d 0a 7b 0d 0a 09 48 41 4e 44   pfd )..{...HAND
0100: 4c 45 20 78 68 20 3d 20 3a 3a 46 69 6e 64 46 69  LE xh = ::FindFi
0110: 72 73 74 46 69 6c 65 28 20 77 69 6c 64 2c 20 70  rstFile( wild, p
0120: 66 64 20 29 3b 0d 0a 09 69 66 28 20 78 68 3d 3d  fd );...if( xh==
0130: 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56  INVALID_HANDLE_V
0140: 41 4c 55 45 20 29 0d 0a 09 09 72 65 74 75 72 6e  ALUE )....return
0150: 20 66 61 6c 73 65 3b 0d 0a 09 77 68 69 6c 65 28   false;...while(
0160: 20 69 73 44 6f 74 73 28 70 66 64 2d 3e 63 46 69   isDots(pfd->cFi
0170: 6c 65 4e 61 6d 65 29 20 29 0d 0a 09 09 69 66 28  leName) )....if(
0180: 20 21 3a 3a 46 69 6e 64 4e 65 78 74 46 69 6c 65   !::FindNextFile
0190: 28 20 78 68 2c 20 70 66 64 20 29 20 29 0d 0a 09  ( xh, pfd ) )...
01a0: 09 7b 0d 0a 09 09 09 3a 3a 46 69 6e 64 43 6c 6f  .{.....::FindClo
01b0: 73 65 28 20 78 68 20 29 3b 0d 0a 09 09 09 72 65  se( xh );.....re
01c0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 09 09 7d  turn false;....}
01d0: 0d 0a 09 3a 3a 46 69 6e 64 43 6c 6f 73 65 28 20  ...::FindClose( 
01e0: 78 68 20 29 3b 0d 0a 09 72 65 74 75 72 6e 20 74  xh );...return t
01f0: 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20  rue;..}....void 
0200: 6b 69 46 69 6e 64 46 69 6c 65 3a 3a 63 6c 6f 73  kiFindFile::clos
0210: 65 28 29 0d 0a 7b 0d 0a 09 66 69 72 73 74 3d 74  e()..{...first=t
0220: 72 75 65 3b 0d 0a 09 69 66 28 20 68 21 3d 49 4e  rue;...if( h!=IN
0230: 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c  VALID_HANDLE_VAL
0240: 55 45 20 29 0d 0a 09 7b 0d 0a 09 09 3a 3a 46 69  UE )...{....::Fi
0250: 6e 64 43 6c 6f 73 65 28 20 68 20 29 2c 20 68 3d  ndClose( h ), h=
0260: 49 4e 56 41 4c 49 44 5f 48 41 4e 44 4c 45 5f 56  INVALID_HANDLE_V
0270: 41 4c 55 45 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a  ALUE;...}..}....
0280: 62 6f 6f 6c 20 6b 69 46 69 6e 64 46 69 6c 65 3a  bool kiFindFile:
0290: 3a 62 65 67 69 6e 28 20 63 6f 6e 73 74 20 63 68  :begin( const ch
02a0: 61 72 2a 20 77 69 6c 64 20 29 0d 0a 7b 0d 0a 09  ar* wild )..{...
02b0: 63 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 09 68 20 3d  close();.....h =
02c0: 20 3a 3a 46 69 6e 64 46 69 72 73 74 46 69 6c 65   ::FindFirstFile
02d0: 28 20 77 69 6c 64 2c 20 26 66 64 20 29 3b 0d 0a  ( wild, &fd );..
02e0: 09 69 66 28 20 68 3d 3d 49 4e 56 41 4c 49 44 5f  .if( h==INVALID_
02f0: 48 41 4e 44 4c 45 5f 56 41 4c 55 45 20 29 0d 0a  HANDLE_VALUE )..
0300: 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ..return false;.
0310: 0a 09 77 68 69 6c 65 28 20 69 73 44 6f 74 73 28  ..while( isDots(
0320: 66 64 2e 63 46 69 6c 65 4e 61 6d 65 29 20 29 0d  fd.cFileName) ).
0330: 0a 09 09 69 66 28 20 21 3a 3a 46 69 6e 64 4e 65  ...if( !::FindNe
0340: 78 74 46 69 6c 65 28 20 68 2c 20 26 66 64 20 29  xtFile( h, &fd )
0350: 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 63 6c 6f 73   )....{.....clos
0360: 65 28 29 3b 0d 0a 09 09 09 72 65 74 75 72 6e 20  e();.....return 
0370: 66 61 6c 73 65 3b 0d 0a 09 09 7d 0d 0a 09 72 65  false;....}...re
0380: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d  turn true;..}...
0390: 0a 62 6f 6f 6c 20 6b 69 46 69 6e 64 46 69 6c 65  .bool kiFindFile
03a0: 3a 3a 6e 65 78 74 28 20 57 49 4e 33 32 5f 46 49  ::next( WIN32_FI
03b0: 4e 44 5f 44 41 54 41 2a 20 70 66 64 20 29 0d 0a  ND_DATA* pfd )..
03c0: 7b 0d 0a 09 69 66 28 20 68 3d 3d 49 4e 56 41 4c  {...if( h==INVAL
03d0: 49 44 5f 48 41 4e 44 4c 45 5f 56 41 4c 55 45 20  ID_HANDLE_VALUE 
03e0: 29 0d 0a 09 09 72 65 74 75 72 6e 20 66 61 6c 73  )....return fals
03f0: 65 3b 0d 0a 09 69 66 28 20 66 69 72 73 74 20 29  e;...if( first )
0400: 0d 0a 09 7b 0d 0a 09 09 66 69 72 73 74 20 3d 20  ...{....first = 
0410: 66 61 6c 73 65 3b 0d 0a 09 09 6b 69 5f 6d 65 6d  false;....ki_mem
0420: 63 70 79 28 20 70 66 64 2c 20 26 66 64 2c 20 73  cpy( pfd, &fd, s
0430: 69 7a 65 6f 66 28 66 64 29 20 29 3b 0d 0a 09 09  izeof(fd) );....
0440: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 09 7d  return true;...}
0450: 0d 0a 09 69 66 28 20 21 3a 3a 46 69 6e 64 4e 65  ...if( !::FindNe
0460: 78 74 46 69 6c 65 28 20 68 2c 20 70 66 64 20 29  xtFile( h, pfd )
0470: 20 29 0d 0a 09 09 72 65 74 75 72 6e 20 66 61 6c   )....return fal
0480: 73 65 3b 0d 0a 09 77 68 69 6c 65 28 20 69 73 44  se;...while( isD
0490: 6f 74 73 28 66 64 2e 63 46 69 6c 65 4e 61 6d 65  ots(fd.cFileName
04a0: 29 20 29 0d 0a 09 09 69 66 28 20 21 3a 3a 46 69  ) )....if( !::Fi
04b0: 6e 64 4e 65 78 74 46 69 6c 65 28 20 68 2c 20 70  ndNextFile( h, p
04c0: 66 64 20 29 20 29 0d 0a 09 09 09 72 65 74 75 72  fd ) ).....retur
04d0: 6e 20 66 61 6c 73 65 3b 0d 0a 09 72 65 74 75 72  n false;...retur
04e0: 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a 0d 0a 23 75  n true;..}....#u
04f0: 6e 64 65 66 20 69 73 44 6f 74 73 0d 0a           ndef isDots..