home *** CD-ROM | disk | FTP | other *** search
- 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);
- }
- }
-