/* Copyright (c) 1993 Stephen F. White */

#include <stdio.h>
#include <ctype.h>

#include "config.h"
#include "cool.h"
#include "proto.h"
#include "sys_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;

    if (!o) {
	return 0;
    }
    if (isdigit(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;
}