#ifndef _verbreg_h_
#define _verbreg_h_

typedef struct AlVerbReg_st *AlVerbReg;

#include "sysdep.h"
#include "bool.h"
#include "verb.h"

#ifdef __STDC__
extern NORET AlVerbReg_init(NOARGS);
extern Bool AlVerbReg_register(const char *, AlVerb);
extern AlVerb AlVerbReg_get_obj(const char *);
extern const char *AlVerbReg_get_name(AlVerb);
NORET AlVerbReg_get_verbs(Darray, Darray);
#else
extern NORET AlVerbReg_init();
extern Bool AlVerbReg_register();
extern AlVerb AlVerbReg_get_obj();
extern char *AlVerbReg_get_name();
NORET AlVerbReg_get_verbs();
#endif /* __STDC__ */

/* Registry for verb objects.  Very limited functionality; user-defined
 * verbs might require more support here.
 *
 * AlVerbReg_init()
 * Defines all the predefined actions, as defined in verbs.h
 * 
 * AlVerbReg_register(name, verb_object)
 * Adds a new verb object called name to the verb registry.  Neither
 * the name nor the verb_object should be modified or deallocated/destroyed
 * anytime after this call.  The name must be unique within the verb 
 * registry (case insensitive).  Returns Bool_FALSE and does not add
 * the verb if the name is not unique, Bool_TRUE otheriwse (on successful
 * completion)
 * 
 * AlVerbReg_get_obj(name)
 * Returns the verb object called name (previously registered with 
 * AlVerbReg_register).  Returns NULL if no such verb exists.
 * 
 * AlVerbReg_get_verb(verb_object)
 * Returns the name of the verb object.  Returns NULL if no verb exists.
 * The returned string should be treated as read-only and temporary.
 * 
 * AlVerbReg_get_verbs(name_darray, object_darray)
 * Stores the names and objects of the verbs in the verb registry, in a
 * manner similar to Registry_fetch_contents.  If a Darray is passed as 
 * NULL, the corresponding data is not returned.
 */

#endif /* ifndef _verbreg_h_ */
