bool CheckWildcards (const char *pattern, const char *text) { if (pattern == NULL || text == NULL) return true; while (*pattern) { if (*pattern == '*') { char stop = tolower (*++pattern); while (*text && tolower(*text) != stop) { text++; } if (*text && tolower(*text) == stop) { if (CheckWildcards (pattern, text++)) { return true; } pattern--; } } else if (*pattern == '?' || tolower(*pattern) == tolower(*text)) { pattern++; text++; } else { return false; } } return (*pattern | *text) == 0; }
void FBaseCVar::ListVars (const char *filter, bool plain) { FBaseCVar *var = CVars; int count = 0; while (var) { if (CheckWildcards (filter, var->GetName())) { DWORD flags = var->GetFlags(); UCVarValue val; val = var->GetGenericRep (CVAR_String); if (plain) { // plain formatting does not include user-defined cvars if (!(flags & CVAR_UNSETTABLE)) { ++count; Printf ("%s : %s\n", var->GetName(), var->GetGenericRep(CVAR_String).String); } } else { ++count; Printf ("%c%c%c%c%c %s = %s\n", flags & CVAR_ARCHIVE ? 'A' : ' ', flags & CVAR_USERINFO ? 'U' : flags & CVAR_SERVERINFO ? 'S' : flags & CVAR_AUTO ? 'C' : ' ', flags & CVAR_NOSET ? '-' : flags & CVAR_LATCH ? 'L' : flags & CVAR_UNSETTABLE ? '*' : ' ', flags & CVAR_MOD ? 'M' : ' ', flags & CVAR_IGNORE ? 'X' : ' ', var->GetName(), var->GetGenericRep (CVAR_String).String); } } var = var->m_Next; } Printf ("%d cvars\n", count); }