home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d169 / dillonstuff.lha / src / suplib / scandir.c < prev    next >
C/C++ Source or Header  |  1988-11-22  |  1KB  |  77 lines

  1.  
  2. /*
  3.  *  SCANDIR.C
  4.  *
  5.  *  SD {
  6.  *    SD *next;
  7.  *    char buf[];
  8.  *  };
  9.  *
  10.  *  SD *sd;
  11.  *
  12.  *  sd = ScanDir(dir, match)
  13.  *     FreeDirScan(sd)
  14.  */
  15.  
  16. #include <local/typedefs.h>
  17.  
  18. #define SD  struct _SD
  19. #define DBLK    32
  20. #define ALIGNL(ptr) (void *)(((long)ptr + 3) & ~3)
  21.  
  22. SD {
  23.     SD        *next;
  24.     char    buf[4];
  25. };
  26.  
  27. /*BREAKUP   ScanDir.c    */
  28. SD *
  29. ScanDir(dir, match, abortflag)
  30. char *dir, *match;
  31. char *abortflag;
  32. {
  33.     char buf[sizeof(FIB)+3];
  34.     register FIB *fib = ALIGNL(buf);
  35.     register SD  *sd;
  36.     SD    *sbase;
  37.     long lock;
  38.     char ok = 0;
  39.  
  40.     geta4();
  41.     sd = (SD *)&sbase;
  42.     lock = Lock(dir, SHARED_LOCK);
  43.     if (lock && Examine(lock, fib) && fib->fib_DirEntryType > 0) {
  44.     while (ExNext(lock, fib)) {
  45.         if (*abortflag)
  46.         break;
  47.         if (wildcmp(match, fib->fib_FileName)) {
  48.         sd->next = AllocMem(sizeof(SD) - 3 + strlen(fib->fib_FileName), MEMF_PUBLIC);
  49.         sd = sd->next;
  50.         strcpy(sd->buf, fib->fib_FileName);
  51.         }
  52.     }
  53.     UnLock(lock);
  54.     sd->next = NULL;
  55.     return(sbase);
  56.     }
  57.     if (lock)
  58.     UnLock(lock);
  59.     return(NULL);
  60. }
  61.  
  62. /*BREAKUP   FreeDirScan.c   */
  63. void
  64. FreeDirScan(sd)
  65. register SD *sd;
  66. {
  67.     register SD *nextsd;
  68.  
  69.     geta4();
  70.     while (sd) {
  71.     nextsd = sd->next;
  72.     FreeMem(sd, sizeof(SD) - 3 + strlen(sd->buf));
  73.     sd = nextsd;
  74.     }
  75. }
  76.  
  77.