// // match_string // // simul_efun to do simple * and ? wildcarding. Written as a stopgap // by Zak 930221, for any mudlib which needs it until a driver with // the match_string() efun() interface to the function in file.c of // the same name is running. // // Based on the version in MudOS 0.9.15's file.c, except that it // had to be rewritten to not use `goto's'. static string *match, *src; static int mlen, slen; static int m_str2(int mp, int sp) { int i; while (1) { if (mp >= mlen) return (sp >= slen); switch ( match[ mp ] ) { case "?": if (sp >= slen) return 0; sp++; mp++; break; case "*": mp++; if (mp >= mlen) return 1; for ( i = sp; i < slen; i++ ) if ( m_str2( mp, i ) ) return 1; return 0; case "\\": mp++; if (mp >= mlen) return 0; // fall thru default: if (sp >= slen) return 0; // new check if (match[mp] != src[sp]) return 0; mp++; sp++; } // switch } // while } // m_str2 int match_string(string pattern, string source) { if (!pattern || !source) return 0; match = explode(pattern, ""); mlen = sizeof(match); src = explode(source, ""); slen = sizeof(src); return m_str2(0, 0); } // match_string