int istrcmp(const char *str1, const char *str2) { while(*str1) { if(chrlower(*str1) != chrlower(*str2)) break; str1++, str2++; } return (int)chrlower(*str1) - (int)chrlower(*str2); }
char* strlower(char* str) { if(!str) return nullptr; int i = 0; while(str[i]) { str[i] = chrlower(str[i]); i++; } return str; }
bool iwildcard(const char *s, const char *p) { const char *cp = 0, *mp = 0; while(*s && *p != '*') { if(*p != '?' && chrlower(*s) != chrlower(*p)) return false; p++, s++; } while(*s) { if(*p == '*') { if(!*++p) return true; mp = p, cp = s + 1; } else if(*p == '?' || chrlower(*p) == chrlower(*s)) { p++, s++; } else { p = mp, s = cp++; } } while(*p == '*') p++; return !*p; }
bool chrequal(char x, char y) { if(Insensitive) return chrlower(x) == chrlower(y); return x == y; }