/*
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);
}