home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 171.lha / SupLib / wildcmp.c < prev    next >
C/C++ Source or Header  |  1988-04-28  |  1KB  |  66 lines

  1.  
  2. /*
  3.  * Compare a wild card name with a normal name
  4.  */
  5.  
  6. #define MAXB   8
  7.  
  8.  
  9. wildcmp(wild, name)
  10. char *wild, *name;
  11. {
  12.     register char *w = wild;
  13.     register char *n = name;
  14.     char *back[MAXB][2];
  15.     register short bi = 0;
  16.     register char c1, c2;
  17.  
  18.     while (*n || *w) {
  19.         switch (*w) {
  20.         case '*':
  21.             if (bi == MAXB) {
  22.                 puts ("Too many levels of '*'");
  23.                 return (0);
  24.             }
  25.             back[bi][0] = w;
  26.             back[bi][1] = n;
  27.             ++bi;
  28.             ++w;
  29.             continue;
  30. goback:
  31.             --bi;
  32.             while (bi >= 0 && *back[bi][1] == '\0')
  33.                 --bi;
  34.             if (bi < 0)
  35.                 return (0);
  36.             w = back[bi][0] + 1;
  37.             n = ++back[bi][1];
  38.             ++bi;
  39.             continue;
  40.         case '?':
  41.             if (!*n) {
  42.                 if (bi)
  43.                     goto goback;
  44.                 return (0);
  45.             }
  46.             break;
  47.         default:
  48.             if ((c1 = *n) >= 'A' && c1 <= 'Z')
  49.                 c1 |= 0x20;
  50.             if ((c2 = *w) >= 'A' && c2 <= 'Z')
  51.                 c2 |= 0x20;
  52.             if (c1 != c2) {
  53.                 if (bi)
  54.                     goto goback;
  55.                 return (0);
  56.             }
  57.             break;
  58.         }
  59.         if (*n)  ++n;
  60.         if (*w)  ++w;
  61.     }
  62.     return (1);
  63. }
  64.  
  65.  
  66.