/
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/take.c,v 1.2 92/03/01 23:13:36 mjr Exp $";
#endif

/* configure all options BEFORE including system stuff. */
#include	"config.h"


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


/* ARGSUSED */
cmd_take(ac,av,who,aswho)
int	ac;
char	*av[];
char	*who;
char	*aswho;
{
	int	x;
	char	*loc;
	char	ob[MAXOID];

	loc = ut_loc(who);

	for(x = 1; x < ac; x++) {
		if(matchobjects(who,av[x],loc,MTCH_UNIQ|MTCH_QUIET,ob) &&
				matchobjects(who,av[x],loc,MTCH_FRST,ob))
			continue;

		/* check locks */
		if(bool_locked(who,ob,loc,var_lock,0)) {
			if(!activate(ACTIV_PONLY,who,ob,loc,var_fail,ac,av))
				say(who,"you can't take ",ut_name(ob),".\n",(char *)0);

			(void)activate(ACTIV_ECAST,who,ob,loc,var_ofail,ac,av);
			continue;
		}

		if(ut_listadd(who,who,var_cont,ob))
			return(UERR_FATAL);
		if(ut_listdel(who,loc,var_cont,ob))
			return(UERR_FATAL);
		if(ut_set(who,ob,typ_obj,var_loc,who))
			return(UERR_FATAL);

		if(!activate(ACTIV_PONLY,who,ob,loc,var_succ,ac,av))
			say(who,"took ",ut_name(ob),".\n",(char *)0);
		eval_cmd_returnstr(ob);
		(void)activate(ACTIV_ECAST,who,ob,loc,var_osucc,ac,av);
	}
	return(UERR_NONE);
}