/* Do not remove the headers from this file! see /USAGE for more info. */

//:COMMAND
// See: dbxfuncs

// Beek

#include <mudlib.h>
#include <driver/type.h>

inherit CMD;

private void main(string str) {
    string obname, func;
    string *funcs;
    mixed *result;
    string where;
    object ob;
    string line;

    if (!str || sscanf(str, "%s %s", obname, func) != 2) {
        write("dbxfuncs <ob> <funcs>\n");
        return;
    }
    
    obname = evaluate_path(obname);

    if (!(ob = find_object(obname))) {
        write("Can't find object " + obname + "\n");
        return;
    }

    funcs = filter(functions(ob, 1), function(mixed *result, string func) {
        return (sizeof(regexp(({ result[0] }), func)));
    }, func);
    
    if (!sizeof(funcs)) {
        write("No matches\n");
        return;
    }

    write("Matches:\n");
    foreach (result in funcs) {
        line = result[2];
        line += (result[0]+"(");
        while (result[1]--) {
            line += ("x");
            if (result[1])
                line += (", ");
        }
        line += (")");

        if (where = function_exists(result[0], ob))
            outf("%-30s(defined in %s)\n", line, where);
        else
            outf("%s\n", line);
    }
    return;
}
