extern struct DosLibrary *DOSBase; UBYTE Pattern[1024],Name[1024]; LONG Matches = 0; struct FileInfoBlock __aligned FileInfo; int CXBRK(VOID) { return(0); } VOID __regargs FindFile(BPTR Dir) { if(Examine(Dir,&FileInfo)) { while(ExNext(Dir,&FileInfo)) { if(SetSignal(0,0) & SIGBREAKF_CTRL_C) break; if(FileInfo . fib_DirEntryType > 0) { BPTR FileLock; if(FileLock = Lock(FileInfo . fib_FileName,ACCESS_READ)) { BPTR OldDir = CurrentDir(FileLock); FindFile(FileLock); CurrentDir(OldDir); UnLock(FileLock); } } else { if(MatchPatternNoCase(Pattern,FileInfo . fib_FileName)) { if(NameFromLock(Dir,Name,1024)) { AddPart(Name,FileInfo . fib_FileName,1024); Printf("%s\n",Name); Matches++; } } } } } } VOID main(int argc,char **argv) { LONG Result = RETURN_FAIL; UBYTE **Arg; if(DOSBase -> dl_lib . lib_Version < 37) exit(RETURN_FAIL); if(Arg = (UBYTE **)AllocVec(sizeof(UBYTE *) * 2,MEMF_PUBLIC|MEMF_CLEAR)) { struct RDArgs *ArgsPtr; if(ArgsPtr = ReadArgs("DIR/A,PATTERN/A",(LONG *)Arg,NULL)) { BPTR OldDir,FileLock; if(FileLock = Lock(Arg[0],ACCESS_READ)) { if(ParsePatternNoCase(Arg[1],Pattern,1024) != -1) { OldDir = CurrentDir(FileLock); FindFile(FileLock); if(SetSignal(0,0) & SIGBREAKF_CTRL_C) { SetSignal(0,SIGBREAKF_CTRL_C); Printf("\n*** BREAK: Find\a\n\n"); } if(!Matches) Result = RETURN_WARN; else Result = RETURN_OK; CurrentDir(OldDir); } else Printf("Find: error parsing pattern \"%s\".\a\n",Arg[1]); UnLock(FileLock); } else Printf("Find: unable to find directory \"%s\".\a\n",Arg[0]); FreeArgs(ArgsPtr); } else PrintFault(IoErr(),"Find\a"); FreeVec(Arg); } }