home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 58 / pcpp58a.iso / extras / quake 3 source / Q3A_ToolSource.exe / Main / FNMATCH.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-02  |  1.1 KB  |  67 lines

  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3.  
  4. #define Reg1 register
  5. int match(char *mask, char *name)
  6. {
  7.     Reg1    unsigned char    *m = (unsigned char *)mask, *n = (unsigned char *)name;
  8.     char    *ma = mask, *na = name;
  9.     int    wild = 0, q = 0;
  10.  
  11.     while (1)
  12.         {
  13.         if (*m == '*')
  14.            {
  15.             while (*m == '*')
  16.                 m++;
  17.             wild = 1;
  18.             ma = (char *)m;
  19.             na = (char *)n;
  20.             }
  21.  
  22.         if (!*m)
  23.             {
  24.               if (!*n)
  25.                 return 0;
  26.               for (m--; (m > (unsigned char *)mask) && (*m == '?'); m--)
  27.                 ;
  28.             if ((*m == '*') && (m > (unsigned char *)mask) &&
  29.                 (m[-1] != '\\'))
  30.                 return 0;
  31.             if (!wild) 
  32.                 return 1;
  33.             m = (unsigned char *)ma;
  34.             n = (unsigned char *)++na;
  35.             }
  36.         else if (!*n)
  37.             {
  38.             while(*m == '*')
  39.                 m++;
  40.             return (*m != 0);
  41.             }
  42.         if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?')))
  43.             {
  44.             m++;
  45.             q = 1;
  46.             }
  47.         else
  48.             q = 0;
  49.  
  50.         if ((tolower(*m) != tolower(*n)) && ((*m != '?') || q))
  51.             {
  52.             if (!wild)
  53.                 return 1;
  54.             m = (unsigned char *)ma;
  55.             n = (unsigned char *)++na;
  56.             }
  57.         else
  58.             {
  59.             if (*m)
  60.                 m++;
  61.             if (*n)
  62.                 n++;
  63.             }
  64.         }
  65. }
  66.  
  67.