/* Copyright (c) 1993 Stephen F. White */
#include "cool.h"
#include "proto.h"
void verb_add (Object * o, int verb, int prep, int method)
{
Verbdef *v, *newv, *prev;
if (!o) {
return;
}
newv = MALLOC (Verbdef, 1);
newv->verb = verb;
newv->prep = prep;
newv->method = method;
for (v = o->verbs, prev = 0; v; prev = v, v = v->next) {
if (prep >= 0 && v->verb == verb) {
break;
}
}
if (prev) {
newv->next = prev->next;
prev->next = newv;
} else {
newv->next = o->verbs;
o->verbs = newv;
}
}
int verb_rm (Object * o, const char *verb)
{
Verbdef *prev = 0, *v;
int i, verbno=-1;
if (!o) {
return 0;
}
if (isdigit ((int)verb[0])) {
verbno = atoi (verb);
}
for (v = o->verbs, i = 0; v; prev = v, v = v->next, i++) {
if (verb_match (sym_get (o, v->verb)->str, verb) || i == verbno) {
if (prev) {
prev->next = v->next;
} else {
o->verbs = v->next;
}
sym_free (o, v->verb);
if (v->prep >= 0) {
sym_free (o, v->prep);
}
sym_free (o, v->method);
FREE (v);
return 1;
}
}
return 0;
}