/* api.h - must be included by all dynamically loaded modules */
/* $Id: api.h,v 1.15 2002/10/27 07:38:18 rmg Exp $ */
#include "copyright.h"
#include "autoconf.h"
#include "config.h"
#ifndef __API_H
#define __API_H
#include "alloc.h" /* required by mudconf */
#include "flags.h" /* required by mudconf */
#include "htab.h" /* required by mudconf */
#include "mudconf.h" /* required by code */
#include "db.h" /* required by externs */
#include "externs.h" /* required by interface */
#include "interface.h" /* required by code */
#include "command.h" /* required by code */
#include "match.h" /* required by code */
#include "attrs.h" /* required by code */
#include "powers.h" /* required by code */
#include "ansi.h" /* required by code */
#include "functions.h" /* required by code */
/* ------------------------------------------------------------------------
* Command handler macros.
*/
#define DO_CMD_NO_ARG(name) \
void name (player, cause, key) \
dbref player, cause; \
int key;
#define DO_CMD_ONE_ARG(name) \
void name (player, cause, key, arg1) \
dbref player, cause; \
int key; \
char *arg1;
#define DO_CMD_TWO_ARG(name) \
void name (player, cause, key, arg1, arg2) \
dbref player, cause; \
int key; \
char *arg1, *arg2;
#define DO_CMD_TWO_ARG_ARGV(name) \
void name (player, cause, key, arg1, arg2_vector, vector_size) \
dbref player, cause; \
int key; \
char *arg1; \
char *arg2_vector[]; \
int vector_size;
/* ------------------------------------------------------------------------
* API interface macros.
*/
#define SIZE_HACK 1
#define DB_GROW_MODULE(old_db,new_size,new_top,proto) \
{ \
char *dg__cp; \
proto *dg__new_db; \
int dg__i; \
dg__new_db = (proto *) XMALLOC((new_size + SIZE_HACK) * sizeof(proto), "db_grow.mod_db"); \
if (!dg__new_db) { \
STARTLOG(LOG_ALWAYS, "ALC", "DB") \
log_printf("Could not allocate space for %d item module struct database.", new_size); \
ENDLOG \
abort(); \
} \
if (old_db) { \
old_db -= SIZE_HACK; \
memcpy((char *) dg__new_db, (char *) old_db, \
(mudstate.db_top + SIZE_HACK) * sizeof(proto)); \
dg__cp = (char *) old_db; \
XFREE(dg__cp, "db_grow.mod_db"); \
} else { \
old_db = dg__new_db; \
for (dg__i = 0; dg__i < SIZE_HACK; dg__i++) { /* 'NOTHING' fill */ \
OBJ_INIT_MODULE(dg__i); /* define macro in module file */ \
} \
} \
old_db = dg__new_db + SIZE_HACK; \
for (dg__i = mudstate.db_top; dg__i < new_size; dg__i++) { \
OBJ_INIT_MODULE(dg__i); \
} \
}
/* ------------------------------------------------------------------------
* API interface functions.
*/
extern void FDECL(register_api, (char *, char *, API_FUNCTION *));
extern void *FDECL(request_api_function, (char *, char *));
extern void FDECL(register_commands, (CMDENT *));
extern void FDECL(register_prefix_cmds, (const char *));
extern void FDECL(register_functions, (FUN *));
extern void FDECL(register_hashtables, (MODHASHES *, MODNHASHES *));
extern unsigned int FDECL(register_dbtype, (char *));
/* ------------------------------------------------------------------------
* External necessities.
*/
extern CF_HDCL(cf_alias);
extern CF_HDCL(cf_bool);
extern CF_HDCL(cf_const);
extern CF_HDCL(cf_dbref);
extern CF_HDCL(cf_int);
extern CF_HDCL(cf_int_factor);
extern CF_HDCL(cf_modify_bits);
extern CF_HDCL(cf_ntab_access);
extern CF_HDCL(cf_option);
extern CF_HDCL(cf_set_flags);
extern CF_HDCL(cf_string);
#endif /* __API_H */