/* /lib/command.c * from the Nightmare IVr1 Object Library * handles commands of living objects * created by Descartes of Borg 950323 * Version: @(#) command.c 1.2@(#) * Last modified: 96/12/07 */ #include <lib.h> #include <daemons.h> #include "include/command.h" private static int Forced; private static string CommandFail; private static string *SearchPath; /* *************** /lib/command.c driver applies *************** */ static void create() { SearchPath = ({ DIR_PLAYER_CMDS, DIR_SECURE_PLAYER_CMDS, DIR_GUILD_CMDS, DIR_COMMON_CMDS, DIR_SECURE_COMMON_CMDS }); } static string process_input(string cmd) { return cmd; } /* *************** /lib/command.c command lfuns *************** */ static int cmdAll(string args) { object old_agent; mixed err; string verb, file; old_agent = this_agent(this_object()); verb = query_verb(); if( !(file = (string)CMD_D->GetCommand(verb, GetSearchPath())) ) { string cmd; int dbg; if( args ) cmd = verb + " " + args; else cmd = verb; if( (int)this_object()->GetProperty("parse debug") ) dbg = 1; else dbg = 0; if( (err = parse_sentence(cmd, dbg)) == 1 ) { this_agent(old_agent || 1); return 1; } if( err ) { if( err == -1 ) { if( !(err = (string)VERBS_D->GetErrorMessage(verb)) && !(err = (string)SOUL_D->GetErrorMessage(verb)) ) { err = "Such a command exists, but no default " "syntax is known."; } } if( intp(err) ) /* MudOS bug */ err = "What?"; SetCommandFail(err); } message("error", GetCommandFail(), this_object()); this_agent(old_agent || 1); return 1; } if( (err = (mixed)call_other(file, "cmd", args)) != 1 ) { string cmd; if( err ) SetCommandFail(err); if( !args || args == "" ) cmd = verb; else cmd = verb + " " + args; if( (err = parse_sentence(cmd)) == 1 ) { this_agent(old_agent || 1); return 1; } if( !err ) err = GetCommandFail(); message("error", err, this_object()); this_agent(old_agent || 1); return 1; } this_agent(old_agent || 1); return 1; } int cmdDebugAll(string args) { object old_agent; mixed err; string verb, file; old_agent = this_agent(this_object()); verb = query_verb(); if( !(file = (string)CMD_D->GetCommand(verb, GetSearchPath())) ) { string cmd; if( args ) cmd = verb + " " + args; else cmd = verb; if( (err = parse_sentence(cmd, 3)) == 1 ) { this_agent(old_agent || 1); return 1; } if( err ) SetCommandFail(err); message("error", GetCommandFail(), this_object()); this_agent(old_agent || 1); return 1; } if( (err = (mixed)call_other(file, "cmd", args)) != 1 ) { string cmd; if( err ) SetCommandFail(err); if( !args || args == "" ) cmd = verb; else cmd = verb + " " + args; if( (err = parse_sentence(cmd, 3)) == 1 ) { this_agent(old_agent || 1); return 1; } if( !err ) err = GetCommandFail(); message("error", err, this_object()); this_agent(old_agent || 1); return 1; } this_agent(old_agent || 1); return 1; } /* *************** /lib/command.c lfuns *************** */ int Setup() { enable_commands(); add_action( (: cmdAll :), "", 1); } int eventForce(string cmd) { string err; int res; cmd = process_input(cmd); Forced = 1; err = catch(res = command(cmd)); Forced = 0; if(err) error(err); return res; } /* ********** /lib/command.c data manipulation functions ********** */ string *AddSearchPath(mixed val) { if(stringp(val)) val = ({ val }); else if(!pointerp(val)) error("Bad argument 1 to AddSearchPath()\n"); return (SearchPath = distinct_array(SearchPath + val)); } string *RemoveSearchPath(mixed val) { if(stringp(val)) val = ({ val }); else if(!pointerp(val)) error("Bad argument 1 to RemoveSearchPath()\n"); return (SearchPath -= val); } string *GetSearchPath() { return SearchPath; } int GetForced() { return Forced; } string GetClient() { return 0; } string SetCommandFail(string str) { if( !str || str == "" ) return (CommandFail = "Try \"help index\" for a list of command types."); else return (CommandFail = str); } string GetCommandFail() { return CommandFail; }