mud/lib/secure/cmds/creators/findfun.c
2020-09-06 05:43:07 -07:00

86 lines
2.9 KiB
C

#include <lib.h>
#include <daemons.h>
inherit LIB_DAEMON;
string funcname;
string *sourcefiles = ({});
mixed cmd(string args) {
string ret, where, lcargs, tmp;
int Efun, SEfun, subs;
string *ret_arr, *lc_hits = ({}), *lc_tmp;
if(!args || args == ""){
write("You'll need to be more specific. Try: help findfun");
return 1;
}
if(!strsrch(args, "-s ")){
args = replace_string(args, "-s ", "");
subs = 1;
}
if(!args || args == ""){
write("You'll need to be more specific. Try: help findfun");
return 1;
}
if(subs){
ret_arr = FUNCTION_D->GetLCFunctions(args, 1);
if(!sizeof(ret_arr)){
write("No matches found.");
return 1;
}
ret_arr = explode(format_page(ret_arr, 2), "\n");
this_player()->eventPage(ret_arr);
return 1;
}
lcargs = lower_case(args);
lc_hits = FUNCTION_D->GetLCFunctions(lcargs);
if(!strsrch(lcargs,"query")) tmp = replace_string(lcargs,"query","get");
if(!strsrch(lcargs,"set_")) tmp = replace_string(lcargs,"set_","set");
if(tmp) lc_tmp = FUNCTION_D->GetLCFunctions(tmp);
if(!lc_hits) lc_hits = ({});
if(sizeof(lc_tmp)) lc_hits += lc_tmp;
if(!strsrch(lcargs,"get_")) tmp = replace_string(lcargs,"get_","get");
if(tmp && !strsrch(tmp,"get_")) tmp = replace_string(tmp,"get_","get");
if(tmp && !sizeof(lc_tmp)) lc_tmp = FUNCTION_D->GetLCFunctions(tmp);
if(sizeof(lc_tmp)) lc_hits += lc_tmp;
if(sizeof(lc_hits)) lc_hits -= ({ args });
if(grepp(args,"-a ")){
where = "/";
args = replace_string(args,"-a ","");
}
else where = "/lib";
funcname = args;
ret = FUNCTION_D->GetInstances(args, where);
write(ret);
Efun = efun_exists(args);
SEfun = sefun_exists(args);
if(Efun && SEfun){
write(args+" is an external driver function (efun) that is "+
"overridden as a simulated efun (sefun) in the lib.");
}
else {
if(Efun) write(args+" exists as an efun "+
"(external fun in the driver).");
if(SEfun) write(args+" exists as a sefun "
"(simulated efun in the lib).");
}
if(sizeof(lc_hits)){
write("\nSee also: "+
implode(sort_array(distinct_array(lc_hits), 1), ", ")+"\n");
}
return 1;
}
string GetHelp(){
return ("Syntax: findfun <FUNCTION_NAME>\n"
" findfun -s <SUBSTRING>\n\n"
"Tells you where a function is defined. With the "
"substring flag (-s) it lists possible matching lfuns, "
"efuns, and sefuns known to the command.\n"
"\nExamples: \nfindfun AddHP\nfindfun -s class\n\n"
"Note: When not doing a substring search, "
"this command is case-sensitive.\n"
"See also: showfuns, efun, efuns, sefun, sefuns, "
"lfun, lfuns");
}