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

/*
** alias.c -- alias daemon
**
** Records the system wide aliases
**
** 960114, Deathblade: created
*/

#include <classes.h>
#include <commands.h>	/* for CMD_OB_ADMTOOL */
#include <security.h>

inherit M_DAEMON_DATA;
inherit CLASS_ALIAS;

private mapping  defaults = ([ ]);
private string * xdefaults = ({ });
private mapping  wizdefaults = ([ ]);
private string * wizxdefaults = ({ });


mixed query_default_aliases()
{
    return ({ defaults, xdefaults, wizdefaults, wizxdefaults });
}

private varargs void add_alias_to_mapping(mapping m,
					  string a,
					  string template,
					  int global_status,
					  string * defaults)
{
    m[a] = new(class alias);
    if(strsrch(template,"$*") == -1)
	template += " $*";
    ((class alias) m[a])->template = template;
    ((class alias) m[a])->defaults = arrayp(defaults) ? defaults : ({""});
    ((class alias) m[a])->num_args = sizeof(((class alias) m[a])->defaults) - 1;
    ((class alias) m[a])->global_alias_status = global_status;
}

varargs void add_default_alias(string name,
			       string expansion,
			       int xalias,
			       int devalias)
{
    if (!check_privilege("Mudlib:daemons"))
	return;

    if(devalias)
    {
	add_alias_to_mapping(wizdefaults, name, expansion, 2);
	if(xalias)
	    wizxdefaults = clean_array(wizxdefaults + ({name}));
    }
    else
    {
	add_alias_to_mapping(defaults, name, expansion, 1);
	if(xalias)
	    xdefaults = clean_array(xdefaults + ({ name }));
    }
    save_me();
}

varargs void remove_default_alias(string name, int devalias)
{
    if (!check_privilege("Mudlib:daemons"))
	return;

    if(devalias)
    {
	map_delete(wizdefaults, name);
	wizxdefaults -= ({ name });
    }
    else
    {
	map_delete(defaults,name);
	xdefaults -= ({ name });
    }
    save_me();
}

void clean_up() {
    destruct(this_object());
}
