home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d5xx
/
d535
/
format.lha
/
Format
/
Find.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-26
|
2KB
|
107 lines
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);
}
}