home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD 45 / SuperCD45.iso / talleres / vayuda / helpscrn / script / TEST.C < prev    next >
C/C++ Source or Header  |  1998-10-08  |  2KB  |  108 lines

  1. #include <stdio.h>
  2.      
  3. #define TRUE -1
  4. #define FALSE 0
  5. /*
  6. *       This routine does a string compare of s1 to s 
  7. *       it differs from the standard library lookup
  8. *       in that it supports wildcard characters (?, *) 
  9. *       and it returns a boolean result, not a pointer. 
  10. *       ? is a single character wildcard and will match 
  11. *       any character in the same position.
  12. *       * is a 0-n character wildcard 
  13. */
  14. int gstrcmp(unsigned char *s, unsigned char *s1, int first) 
  15. {
  16. //    int first = TRUE;
  17.  
  18.     while (*s && *s1)
  19.     {
  20.     if (*s1 == '*')
  21.     {
  22.         s1++;
  23.         if (*s1)
  24.         return gstrcmp(s, s1, TRUE);
  25.         else
  26.         return TRUE;
  27.     }
  28.     else
  29.         if (first)
  30.         {
  31.         if (*s == *s1 || *s1 == '?')
  32.         {
  33.             first = FALSE;
  34.             s1++;
  35.         }
  36.         }
  37.         else
  38.         if (*s != *s1 && *s1 != '?')
  39.             return FALSE;
  40.         else
  41.             s1++;
  42.     s++;
  43.     }
  44.     if (!*s && *s1 == '*')
  45.         return TRUE;
  46.     if (*s || *s1)
  47.     return FALSE;
  48.     return TRUE;
  49. }
  50.      
  51. /*
  52. *       This routine does a substring search of s1 in s 
  53. *       it differs from the standard library lookup
  54. *       in that it supports wildcard characters (?, *) 
  55. *       and it returns a boolean result, not a pointer. 
  56. *       ? is a single character wildcard and will match 
  57. *       any character in the same position.
  58. *       * is a 0-n character wildcard 
  59. */
  60. int gstrscn(unsigned char *s, unsigned char *s1) 
  61. {
  62.     int first = TRUE;
  63.      
  64.     while (*s && *s1)
  65.     {
  66.     if (*s1 == '*')
  67.     {
  68.         s1++;
  69.         if (*s1)
  70.             return gstrscn(s, s1);
  71.         else
  72.         return TRUE;
  73.     }
  74.     else
  75.         if (first)
  76.         {
  77.         if (*s == *s1 || *s1 == '?')
  78.         {
  79.             first = FALSE;
  80.             s1++;
  81.         }
  82.         }
  83.         else
  84.         if (*s != *s1 && *s1 != '?')
  85.             return FALSE;
  86.         else
  87.             s1++;
  88.     s++;
  89.     }
  90.     if (!*s && *s1 == '*')
  91.         return TRUE;
  92.     if (!*s && *s1)
  93.     return FALSE;
  94.     return TRUE;
  95. }
  96.  
  97. void main(int argc, char **argv)
  98. {
  99.     if (gstrscn(argv[1], argv[2]))
  100.     printf("%s is contained in %s\n", argv[2], argv[1]);
  101.     else
  102.     printf("%s is not contained in %s\n", argv[2], argv[1]);
  103.     if (gstrcmp(argv[1], argv[2], FALSE))
  104.     printf("%s is equivalent to %s\n", argv[2], argv[1]);
  105.     else
  106.     printf("%s is not equivalent to %s\n", argv[2], argv[1]);
  107. }
  108.