/* Copyright (c) 1993 Stephen F. White */
#ifndef PROTO_H
#define PROTO_H
/*
* 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), void (*f_ungetc) (int),
void (*f_perror) (const char *), 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 int hash_var (Var v);
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 map.c
*/
#define map_new(size) hash_new(size)
void map_free (Map * map);
Map *map_copy (Map * map);
#define map_dup(M) ((M)->ref++, (M))
int map_find (Map * map, Var key, Var * returnval);
Map *map_add (Map * map, Var key, Var value);
Map *map_remove (Map * map, Var key);
String *map_tostring (String * st, Map * map);
/*
* 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 void *cool_malloc (unsigned size);
extern void cool_free (void *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 *str_ndup (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;
#endif /* !PROTO_H */