/* 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;