home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * Compare a wild card name with a normal name
- */
-
- #define MAXB 8
-
-
- wildcmp(wild, name)
- char *wild, *name;
- {
- register char *w = wild;
- register char *n = name;
- char *back[MAXB][2];
- register short bi = 0;
- register char c1, c2;
-
- while (*n || *w) {
- switch (*w) {
- case '*':
- if (bi == MAXB) {
- puts ("Too many levels of '*'");
- return (0);
- }
- back[bi][0] = w;
- back[bi][1] = n;
- ++bi;
- ++w;
- continue;
- goback:
- --bi;
- while (bi >= 0 && *back[bi][1] == '\0')
- --bi;
- if (bi < 0)
- return (0);
- w = back[bi][0] + 1;
- n = ++back[bi][1];
- ++bi;
- continue;
- case '?':
- if (!*n) {
- if (bi)
- goto goback;
- return (0);
- }
- break;
- default:
- if ((c1 = *n) >= 'A' && c1 <= 'Z')
- c1 |= 0x20;
- if ((c2 = *w) >= 'A' && c2 <= 'Z')
- c2 |= 0x20;
- if (c1 != c2) {
- if (bi)
- goto goback;
- return (0);
- }
- break;
- }
- if (*n) ++n;
- if (*w) ++w;
- }
- return (1);
- }
-
-
-