/
umud/DOC/
umud/DOC/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: /usr/users/mjr/hacks/umud/CMD/RCS/_ldel.c,v 1.1 91/07/04 17:33:23 mjr Rel $";
#endif

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


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

/*
drop the given item from the named list.
*/


/* ARGSUSED */
cmd__ldel(ac,av,who,aswho)
int	ac;
char	*av[];
char	*who;
char	*aswho;
{
	Obj	*op;
	char	*ap;
	char	*ins;
	char	ob[MAXOID];

	if(matchlocal(who,av[1],ut_loc(who),MTCH_UNIQ|MTCH_MEOK|MTCH_NONLOC,ob))
		return(1);

	if((op = cache_get(ob)) == (Obj *)0) {
		say(who,"cannot find object ",av[1],"\n",(char *)0);
		return(1);
	}

	if((ap = objattr(op,av[2],(int *)0)) == (char *)0) {
		say(who,"no such list #",av[1],".",av[2],"\n",(char *)0);
		return(1);
	}

	if(!attistype(ap,typ_list) || (ap = attdata(ap)) == (char *)0) {
		say(who,av[1],".",av[2]," is not a list.\n",(char *)0);
		return(1);
	}

	if(lstlook(ap,av[3]) == 0) {
		say(who,av[3]," isn't in #",av[1],".",av[2],"\n",(char *)0);
		return(1);
	}

	if((ins = lstdel(ap,av[3],(int *)0)) == (char *)0) {
		say(who,"error dropping #",av[3]," from list.\n",(char *)0);
		return(1);
	}

	if(objsetattr(op,typ_list,av[2],ins)) {
		say(who,"cannot modify object.\n",(char *)0);
		return(1);
	}

	if(cache_put(op,av[1])) {
		say(who,"cannot write object ",av[1],"\n",(char *)0);
		return(1);
	}

	return(0);
}