/* Copyright (c) 1993 Stephen F. White */
/*
* from builtins.c
*/
extern int bf_lookup(const char *name, int nargs);
extern const char *bf_id2name(int id);
/*
* from db/cache.c
*/
extern Object *cache_get(int oid);
extern int cache_put(Object *obj, int oid);
extern int cache_del(int oid, int flg);
extern int cache_check(int oid);
extern int cache_init(void);
extern int cache_sync(void);
extern void cache_reset(void);
extern int cacheconfig(const char *line, int lineno);
extern const char *cache_stats(void);
/*
* from code.c
*/
extern void code_copy(Method *m);
extern void code_init(void);
extern int code(Inst);
/*
* from cool.y
*/
extern int compile(Playerid player, int (*f_getc)(), void (*f_ungetc)(),
void (*f_perror)(), int expecting, Object *o, String *mname,
int is_cpp_output, int do_init);
/*
* from db/dbmchunk.c
*/
extern int dddb_init(int db_must_exist);
extern int dddb_setfile(const char *fil);
extern int dddb_close(void);
/*
* from perms.c
*/
extern int is_wizard(Objid player);
extern int owns(Objid player, Objid what);
extern int can_program(Objid player, Objid what);
extern int can_clone(Objid player, Objid what);
/*
* from dbsize.c
*/
extern int size_object(Object *o);
/*
* from decode.c
*/
extern String *decode_method(Object *o, Method *m, int level);
extern String *decompile_method(String *s, Object *o, Method *m,
int opt_lineno, int opt_brackets, int opt_indent,
int opt_indent_from, int opt_find_pc, int *pfound_lineno);
extern String *decompile_object(Object *o);
/*
* from dispatch.c
*/
extern Objid sys_obj;
extern Error sys_get_global(const char *name, Var *r);
extern Error sys_assign_global(const char *name, Var r);
/*
* from error.c
*/
extern int err_name2id(const char *name);
extern const char *err_id2name(Error);
extern const char *err_id2desc(Error);
/*
* from execute.c
*/
extern Error call_method(int msgid, int age, int ticks,
Objid player, Objid from, Objid to,
const char *message, List *args, Objid on);
extern String *psub(const char *source);
/*
* from hash.c
*/
extern int hash(const char *s);
extern HashT *hash_new(int htsize);
/*
* from list.c
*/
extern List *list_new(int size);
#ifdef INLINE
#define list_free(L) if (!--L->ref) { list__free(L); }
#define list_dup(L) (L->ref++, L)
extern void list__free(List *list);
#else
extern void list_free(List *list);
extern List *list_dup(List *list);
#endif
extern List *list_append(List *list, Var value, int pos);
extern List *list_insert(List *list, Var value, int pos);
extern List *list_delete(List *list, int pos);
extern List *list_assign(List *list, Var value, int pos);
extern int list_ismember(Var value, List *list);
extern List *list_setadd(List *list, Var value);
extern List *list_setremove(List *list, Var value);
extern List *list_subset(List *list, int lower, int upper);
extern String *list_tostring(String *st, List *l);
extern List *explode(const char *str, char sep, int nwords);
/*
* from message.c
*/
extern const char *parse_obj(const char *s, Objid *obj);
extern const char *parse_err(const char *s, Error *e);
extern List *ps(void);
extern int cmkill(int pid, Objid who);
/*
* from method.c
*/
extern Method *find_method(Object *o, const char *name);
extern Method *find_method_recursive(Object *o, const char *name,
Object **where);
extern void add_method(Object *o, Method *m);
extern Error rm_method(Object *o, const char *name);
/*
* from opcode.c
*/
extern Op_entry *opcodes[];
extern void opcode_init(void);
extern void opcode_free_symbols(Object *o, Method *m);
/*
* from storage.c
*/
extern GENPTR cool_malloc(unsigned size);
extern void cool_free(GENPTR mem);
extern const char *check_malloc(void);
#define retrieve(OID) (!(OID).server ? cache_get((OID).id) : 0)
#define valid(OID) (!(OID).server ? cache_check((OID).id) : 0)
extern Object *clone(Objid oid);
extern int destroy(Objid oid);
extern Object *new_object(void);
extern void assign_object(Objid oid, Object *o);
extern void free_object(Object *o);
extern void free_method(Object *o, Method *m);
/*
* from strings.c -- most of this is in string.h, but this one
* can't go there or it'll break the netio layer
*/
extern String *string_catobj(String *str, Objid obj, int full);
/*
* from symbol.c
*/
extern String *system_table[];
#define sym_get(O, N) ((N) < 0 ? string_dup(system_table[-(N) - 1]) \
: (O)->symbols[N].s)
#define sym_sys(N) (string_dup(system_table[N]))
extern void sym_init(Object *o);
extern void sym_init_sys(void);
extern void sym_free(Object *o, int symno);
extern int sym_add(Object *o, String *);
extern List *zero, *one, *empty_list;
/*
* from utils.c
*/
extern int hasparent(Object *o, Objid pid);
extern Error check_parents(Objid player, Object *o, List *newparents);
extern void ex_error(const char *s);
extern char *strjoin(const char *s1, const char *s2);
extern char *str_dup(const char *s);
extern char *strndup(const char *s, int n);
extern int match(const char *template, const char *tomatch, char marker);
extern int match_full(const char *template, const char *tomatch,
char marker);
extern int str_in(const char *s1, const char *s2);
extern String *strsub(const char *source, const char *what, const char *with,
int case_matters);
extern int verb_match(register const char *verb,
register const char *word);
extern int prep_match(const char *preplist, const char *argstr,
const char **dobj, const char **prep, const char **iobj,
int *dobjlen, int *preplen);
extern int valid_ident(const char *s);
extern const char *addr_htoa(unsigned long l);
extern int count_words(const char *s, char sep);
/*
* from var.c
*/
#ifdef INLINE
#define var_dup(V) ( (V).type == STR ? (V).v.str->ref++, (V) \
: (V).type == LIST ? (V).v.list->ref++, (V) \
: (V) )
#define var_free(V) { if ((V).type == STR) { string_free((V).v.str); } \
else if ((V).type == LIST) { list_free((V).v.list); } }
#else
extern Var var_dup(Var v);
extern void var_free(Var v);
#endif
extern int var_compare(Var v1, Var v2);
extern int var_eq(Var v1, Var v2);
extern Vardef *var_find(Vardef *top, int name, int *varno);
extern Vardef *var_find_local(Method *m, int varno);
extern Vardef *var_find_local_by_name(Object *o, Method *m, const char *name,
int namelen, int *varno);
extern void var_get_local(Var *vars, int name, Var *r);
extern Error var_get_global(Object *o, const char *name, Var *r);
extern void var_assign_local(Var *vars, int varno, Var value);
extern Error var_assign_global(Object *o, String *name, Var value);
extern String *var_tostring(String *st, Var v, int quotes);
extern int var_add_local(Method *m, int name, int *varno);
extern int var_add_global(Object *o, int name, Var init_value);
extern Error var_rm_global(Object *o, const char *name);
extern int var_count_local(Method *m);
extern Var var_init(int type);
extern void var_init_local(Object *on, Method *m, Var *vars);
extern void var_copy_vars(Object *source, Object *dest);
/*
* from verb.c
*/
extern void verb_add(Object *o, int verb, int prep, int method);
extern int verb_rm(Object *o, const char *verb);
/*
* from servers.c
*/
extern List *server_list;