diff --git a/engine/client/sys_morphos.c b/engine/client/sys_morphos.c index 308e7cf11..46860c58d 100755 --- a/engine/client/sys_morphos.c +++ b/engine/client/sys_morphos.c @@ -181,7 +181,72 @@ int Sys_FileTime(char *path) int Sys_EnumerateFiles(char *gpath, char *match, int (*func)(char *, int, void *), void *parm) { - return true; + char *pattern; + char pattrans[256]; + char finddir[256]; + char findpattern[514]; + char filename[256]; + int i, j; + BPTR lock; + struct FileInfoBlock fib; + int ret = false; + + snprintf(finddir, sizeof(finddir), "%s/%s", gpath, match); + + pattern = strrchr(finddir, '/'); + if (pattern) + { + finddir[((unsigned int)(pattern-finddir))] = 0; + pattern++; + } + + for(i=0,j=0;i<sizeof(pattrans)-1 && *pattern;i++,j++) + { + if (pattern[j] == '*') + { + if (i < sizeof(pattrans)-2) + { + pattrans[i] = '#'; + pattrans[i+1] = '?'; + i++; + } + else + pattrans[i] = 0; + } + else + pattrans[i] = pattern[j]; + } + + pattrans[i] = 0; + + lock = Lock(finddir, ACCESS_READ); + if (lock) + { + if (Examine(lock, &fib)) + { + if (ParsePatternNoCase(pattrans, findpattern, sizeof(findpattern)) >= 0) + { + ret = true; + + while(ExNext(lock, &fib)) + { + if (MatchPatternNoCase(findpattern, fib.fib_FileName)) + { + snprintf(filename, sizeof(filename), "%s%s", fib.fib_FileName, fib.fib_DirEntryType>=0?"/":""); + if (func(filename, fib.fib_Size, parm) == 0) + { + ret = false; + break; + } + } + } + } + } + + UnLock(lock); + } + + return ret; } void Sys_mkdir(char *path)