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