home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * SCANDIR.C
- *
- * SD {
- * SD *next;
- * char buf[];
- * };
- *
- * SD *sd;
- *
- * sd = ScanDir(dir, match)
- * FreeDirScan(sd)
- */
-
- #include <local/typedefs.h>
-
- #define SD struct _SD
- #define DBLK 32
- #define ALIGNL(ptr) (void *)(((long)ptr + 3) & ~3)
-
- SD {
- SD *next;
- char buf[4];
- };
-
- /*BREAKUP ScanDir.c */
- SD *
- ScanDir(dir, match, abortflag)
- char *dir, *match;
- char *abortflag;
- {
- char buf[sizeof(FIB)+3];
- register FIB *fib = ALIGNL(buf);
- register SD *sd;
- SD *sbase;
- long lock;
- char ok = 0;
-
- geta4();
- sd = (SD *)&sbase;
- lock = Lock(dir, SHARED_LOCK);
- if (lock && Examine(lock, fib) && fib->fib_DirEntryType > 0) {
- while (ExNext(lock, fib)) {
- if (*abortflag)
- break;
- if (wildcmp(match, fib->fib_FileName)) {
- sd->next = AllocMem(sizeof(SD) - 3 + strlen(fib->fib_FileName), MEMF_PUBLIC);
- sd = sd->next;
- strcpy(sd->buf, fib->fib_FileName);
- }
- }
- UnLock(lock);
- sd->next = NULL;
- return(sbase);
- }
- if (lock)
- UnLock(lock);
- return(NULL);
- }
-
- /*BREAKUP FreeDirScan.c */
- void
- FreeDirScan(sd)
- register SD *sd;
- {
- register SD *nextsd;
-
- geta4();
- while (sd) {
- nextsd = sd->next;
- FreeMem(sd, sizeof(SD) - 3 + strlen(sd->buf));
- sd = nextsd;
- }
- }
-
-