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

#include <mudlib.h>
#include <daemons.h>
#include <security.h>

string base_name(mixed val);

nomask object *bodies()
{
    return users()->query_body() - ({ 0 });
}

nomask object this_body()
{
    object u = this_user();

    return u ? u->query_body() : 0;
}


varargs nomask object find_user(string str, int even_linkdead)
{
    object *choices;

    if ( even_linkdead )
	choices = children(USER_OB);
    else
	choices = users();
    choices = filter(choices, (: $1->query_userid() == $(str) :));

    if ( sizeof(choices) )
	return choices[0];

    return 0;
}


varargs nomask object find_body(string str, int even_linkdead)
{
    object u = find_user(str, even_linkdead);

  if(!str || str==""){return 0;}
    if (u && (u = u->query_body())) return u;
    
    foreach (object b in bodies()) {
	if (b->query_nickname() == str)
	    return b;
    }
    
    return 0;
}


nomask int wizardp(mixed m)
{
    if ( objectp(m) )
	m = m->query_userid();

    if ( stringp(m) )
	return SECURE_D->query_is_wizard(m);

    return 0;
}

nomask int adminp(mixed m)
{
    if ( !m )
	m = this_user()->query_userid();
    else if ( objectp(m) )
	m = m->query_userid();

    return member_array(m, SECURE_D->query_domain_members("admin")) != -1;
}


nomask int user_exists(string user)
{
    return USER_D->user_exists(user);
}


//:FUNCTION get_user_variable
// Get a variable value from the current user's shell object.
nomask mixed get_user_variable(string varname)
{
    object shell;

#define UNDEFINED_VALUE	([])[0]

    if ( !this_user() )
	return UNDEFINED_VALUE;
    shell = this_user()->query_shell_ob();
    if ( !shell )
	return UNDEFINED_VALUE;
    return shell->get_variable(varname);
}

//:FUNCTION set_this_user
//Works like set_this_player().  It was added for consistancies sake.
nomask void set_this_user(object ob)
{
  set_this_player(ob);
}
