/*    /lib/verb.c
 *    From the Dead Souls Object Library
 *    An inheritable for creating verbs
 *    Created by Descartes of Borg 960116
 *    Version: @(#) verb.c 1.2@(#)
 *    Last modified: 96/12/17
 */
#include <lib.h>
#include "include/verb.h"
inherit LIB_DAEMON;
inherit LIB_HELP;
private string Verb, ErrorMessage;
private string *Synonyms, *Rules;
static void create(){
    daemon::create();
    SetNoClean(1);
    parse_init();
    Verb = 0;
    ErrorMessage = 0;
    Rules = ({});
    Synonyms = ({});
}
static string SetErrorMessage(string str){ return (ErrorMessage = str); }
string GetErrorMessage(){ return ErrorMessage; }
varargs static string *SetRules(mixed *args...){
    if( sizeof(Rules) ) error("Cannot reset rules list.");
    foreach(mixed arg in args){
        if( stringp(arg) ) Rules += ({ arg });
        else Rules += arg;
    }
    if( Verb ){
        foreach(string rule in Rules) parse_add_rule(Verb, rule);
        if( sizeof(Synonyms) ) 
            foreach(string cmd in Synonyms) parse_add_synonym(cmd, Verb);
    }
    return Rules;
}
string *GetRules(){ return copy(Rules); }
varargs static string *SetSynonyms(mixed *args...){
    if( sizeof(Synonyms) ) error("Cannot reset synonym list.\n");
    foreach(mixed arg in args){
        if( stringp(arg) ) Synonyms += ({ arg });
        else Synonyms += arg;
    }
    if( Verb && sizeof(Rules) )
        foreach(string cmd in Synonyms) parse_add_synonym(cmd, Verb);
    return Synonyms;
}
string *GetSynonyms(){ return copy(Synonyms); }
static string SetVerb(string str){
    if( !stringp(str) ) error("Bad argument 1 to SetVerb().\n");
    Verb = str;
    if( sizeof(Rules) )
        foreach(string rule in Rules) parse_add_rule(Verb, rule);
    if( sizeof(Synonyms) )
        foreach(string cmd in Synonyms) parse_add_synonym(cmd, Verb);
    return Verb;
}
string GetVerb(){ return Verb; }
string *GetVerbs(){ return ({ Verb }); }