/**************************************************************************** * * * strext.c (c) by Georg Essl in 1992 * * * ****************************************************************************/ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "strext.h" /**************************************************************************** * * * int strpcmp(char * , char *) * * * * Author : Georg Essl * * Date : 19.3.1992 * * * * Usage: * * Argument 2 (String 2) is compared with a WILDCARD-patterned string * * in Arument 1 (String 1). * * * * Wildcards: * * * .... (GREP-Like) Representing any amount of chars including zero. * * ? .... (Like '.' in GREP) Representing exactly one char. * * [AB].. (GREP-Like) Compare with A and B for match * * ! .... Next char is NOT a Wildcard. * * * * Any other Char will be compared like with strcmp() from STRING.H * * * * Bugs: None. * * * * Note: Not Wildcardchar-cmp possibility given yet. * * strpcmp == 0 if String1 Wildcard-equal to String2 * * strpcmp != 0 if not. * * This is same as strcmp() does, but strpcmp does NOT a * * greater/lesser-compare! * * * ****************************************************************************/ int strpcmp(char *wstr1 , char *wstr2) { for(;;) { switch(*wstr1) { case '\0' : if(*wstr2=='\0') return(SPC_EQUAL); else return(SPC_NOTEQUAL); case SPC_WILDSCHAR : if((*wstr2)!='\0') { wstr1++; wstr2++; } else return(SPC_NOTEQUAL); break; case SPC_WILDMCHAR : if ((*(wstr1+1))=='\0') return(SPC_EQUAL); while(strpcmp(wstr1+1,wstr2)) { wstr2++; if(*wstr2=='\0') return(SPC_NOTEQUAL); } return(SPC_EQUAL); case SPC_WILDOBRA : wstr1++; while((*wstr1!='\0')&&(*wstr1!=SPC_WILDCBRA)&&(*wstr1!=*wstr2)) wstr1++; if(*wstr1==*wstr2) { do wstr1++; while((*wstr1!='\0')&&(*wstr1!=']')); if(*wstr1==']') wstr1++; wstr2++; break; } else return(SPC_NOTEQUAL); case SPC_WILDIGNORE : wstr1++; default : if(*wstr1 == *wstr2) { wstr1++; wstr2++; } else return(SPC_NOTEQUAL); } } }