/
umud/DOC/
umud/DOC/U/
umud/DOC/U/U-examples/
umud/DOC/internals/
umud/DOC/wizard/
umud/MISC/
umud/MISC/dbchk/
umud/RWHO/rwhod/
/*
	Copyright (C) 1991, Marcus J. Ranum. All rights reserved.
*/

#ifndef	lint
static	char	RCSid[] = "$Header: /home/mjr/hacks/umud/CMD/RCS/use.c,v 1.1 92/02/09 22:59:29 mjr Exp $";
#endif


#include	"config.h"


#include	"mud.h"
#include	"match.h"
#include	"vars.h"

static	int
stop_using(who,ud)
char	*who;
char	*ud;
{
	if(ut_listadd(who,who,var_cont,ud))
		return(UERR_FATAL);
	if(ut_unset(who,who,var_using))
		return(UERR_FATAL);

	say(who,"You stop holding ",ut_name(ud),".\n",(char *)0);
	return(UERR_NONE);
}


/* ARGSUSED */
cmd_use(ac,av,who,aswho)
int	ac;
char	*av[];
char	*who;
char	*aswho;
{
	char	*ud;

	ud = ut_getatt(who,0,typ_obj,var_using,(char *)0);

	/* no args stop using */
	if(ac <= 1) {
		if(ud == (char *)0) {
			say(who,"You aren't holding anything.\n",(char *)0);
			return(UERR_NONE);
		}
		return(stop_using(who,ud));
	} else
	if(ac == 2) {
		char	ob[MAXOID];
		int	xx;

		if(ud != (char *)0 && (xx = stop_using(who,ud)) != UERR_NONE)
			return(xx);
		if(matchinv(who,av[1],0,MTCH_UNIQ|MTCH_QUIET,ob) &&
				matchinv(who,av[1],0,MTCH_FRST|MTCH_QUIET,ob)) {
			if((xx = cmd_take(ac,av,who,aswho)) != UERR_NONE)
				return(xx);
			if(matchinv(who,av[1],0,MTCH_UNIQ|MTCH_QUIET,ob) &&
					matchinv(who,av[1],0,MTCH_FRST|MTCH_QUIET,ob))
				return(UERR_NOMATCH);
		}
		if(ut_listdel(who,who,var_cont,ob))
			return(UERR_FATAL);
		if(ut_set(who,who,typ_obj,var_using,ob))
			return(UERR_FATAL);
		say(who,"You are now holding ",ut_name(ob),".\n",(char *)0);
		return(UERR_NONE);
	}

	say(who,"You can only use one thing at a time.\n",(char *)0);
	return(UERR_NONE);
}