/* externs.h */

/* Patched 12/1/90 by Michael Stanley (jstanley@uafhp.uark.edu) to */
/* add @search command.  details in file game.c                    */

/*
 * Patched 1/3/91 by Stan Lim aka Jin (stanl@zimmer.csufresno.edu) to add
 * do_hide and do_unhide.
 */

#include "copyright.h"

/* Prototypes for externs not defined elsewhere */
#include "db.h"
#include "attrib.h"

/* attrib.c */
extern ATTR *atr_str(char *s);
extern struct boolatr *alloc_atr(char *name, char *s);
extern void atr_clr(dbref thing, char *atr);
extern ALIST *AL_MAKE(char *type, ALIST *next, char *string, dbref owner, dbref flags);
extern void atr_new_add(dbref thing, char *atr, char *s, dbref player, dbref flags);
extern int atr_add(dbref thing, char *atr, char *s, dbref player, dbref flags);
extern ATTR *atr_get(dbref thing, char *atr);
extern void free_attrib(ATTR *thisattr);
extern void atr_free(dbref thing);
extern void atr_collect(dbref thing);
extern void atr_cpy(dbref dest, dbref source);
extern char *convert_atr(dbref oldatr);
extern ATTR *atr_match(char *string);
extern int atr_comm_match(dbref thing, dbref player, int type, int end, char *str);
extern void do_atrlock(dbref player, const char *arg1, const char *arg2);
extern void do_atrchown(dbref player, const char *arg1, const char *arg2);
extern ATTR *atr_complete_match(dbref player, char *atr, dbref privs);

/* boolexp.c */
extern int eval_boolexp(dbref player, struct boolexp *b, dbref privs, int nrecurs, int locktype);
extern struct boolexp *parse_boolexp(dbref player, const char *buf);

/* compress.c */
extern const char *compress(const char *s);
extern const char *uncompress(const char *s);
extern char *safe_uncompress(const char *s);

/* cque.c */
extern void parse_que(dbref player, char *command, dbref cause);
extern void do_second(void);
extern int test_top(void);
extern int do_top(void);
extern void do_queue(dbref player, const char *what);
extern void do_halt(dbref player, char *ncom);
extern void do_halt1(dbref player, const char *arg1, const char *arg2);
extern void do_allhalt(dbref player);
extern void wait_que (dbref player, int wait, char *command, dbref cause);

/* create.c */
extern void do_open(dbref player, const char *direction, char *links[]);
extern void do_link(dbref player, const char *name, const char *room_name);
extern void do_dig(dbref player, const char *name, char *argv[]);
extern void do_create(dbref player, char *name, int cost);
extern void do_clone(dbref player, char *name);

/* game.c */
extern int unsafe;
extern dbref speaker;

extern void do_dump(dbref player);
extern void report(void);
extern void dest_info(dbref thing, dbref tt);
extern void notify(dbref player, const char *msg);
extern void do_shutdown(dbref player);
extern void panic(const char *message);
extern void dump_database(void);
extern void fork_and_dump(void);
extern int init_game(const char *infile, const char *outfile);
extern void process_command(dbref player, char *command, dbref cause);
extern int Hearer(dbref thing);
extern int Commer(dbref thing);
extern int Listener(dbref thing);

/* help.c */
extern void spit_file(dbref player, const char *filename);
extern void do_news(dbref player, char *arg1);
extern void do_help(dbref player, char *arg1);

/* look.c */
extern void look_room(dbref player, dbref loc, int remote);
extern void do_look_around(dbref player);
extern void do_look_at(dbref player, const char *name);
extern void do_examine(dbref player, const char *name, int brief);
extern void do_score(dbref player);
extern void do_inventory(dbref player);
extern void do_find(dbref player, const char *name);
extern void do_sweep(dbref player, const char *arg1);
extern void do_whereis(dbref player, const char *name);
extern void do_entrances(dbref player, const char *where);
extern void do_decompile(dbref player, const char *name);

/* mail.c */
#ifdef USE_MAILER
extern struct mail *mdb;
extern mdbref mdb_top;

extern void do_mail(dbref player, char *list, char *obj);
extern void send_mail(dbref player, dbref to, char *msg);
extern mdbref search_mail(dbref player, mdbref number);
extern void check_mail(dbref player, int mode);
extern void clear_mail(dbref player, char *list);
extern void dump_mail(FILE *f);
extern void load_mail(FILE *f);
extern void mail_init(void);
#endif

/* move.c */
extern void moveto(dbref what, dbref where);
extern void moveit(dbref what, dbref where);
extern void enter_room(dbref player, dbref loc);
extern void safe_tel(dbref player, dbref dest);
extern int can_move(dbref player, const char *direction);
extern void do_move(dbref player, const char *direction, int type);
extern void do_get(dbref player, const char *what);
extern void do_drop(dbref player, const char *name);
extern void do_enter(dbref player, const char *what);
extern void do_leave(dbref player);
#ifdef DO_GLOBALS
extern int global_exit(dbref player, const char *direction);
#endif

/* player.c */
extern dbref connect_player(const char *name, const char *password);
extern dbref create_player(const char *name, const char *password);
extern void do_password(dbref player, const char *old, const char *newobj);

/* player_list.c */
extern void clear_players(void);
extern void add_player(dbref player);
extern dbref lookup_player(const char *name);
extern void delete_player(dbref player);

/* predicates.c */
extern char *tprintf(char *fmt, ...);
extern int can_link_to(dbref who, dbref where);
extern int could_doit(dbref player, dbref thing);
extern void did_it(dbref player, dbref thing, char *what, char *def, char *owhat, char *odef, char *awhat, dbref loc);
extern int can_see(dbref player, dbref thing, int can_see_loc);
extern int controls(dbref who, dbref what);
extern int can_link(dbref who, dbref what);
extern int can_pay_fees(dbref who, int pennies);
extern void giveto(dbref who, dbref pennies);
extern int payfor(dbref who, int cost);
extern int ok_name(const char *name);
extern int ok_player_name(const char *name);
extern int ok_password(const char *password);
extern char *pronoun_substitute(dbref player, const char *str, dbref privs);
extern void do_switch(dbref player, char *exp, char *argv[], dbref cause);
extern dbref is_possess(dbref player, char *arg1);
extern void page_return(dbref player, dbref target, char *type, char *message, char *def);
extern int nearby(dbref obj1, dbref obj2);
extern int find_flag(char *p, dbref thing);
#ifdef QUOTA
extern void add_quota (dbref who, int payment);
extern int pay_quota (dbref who, int cost);
#endif

/* rob.c */
extern void do_rob(dbref player, const char *what);
extern void do_kill(dbref player, const char *what, int cost, int slay);
extern void do_give(dbref player, char *recipient, char *amnt);

/* set.c */
extern void do_name(dbref player, const char *name, char *newname);
extern void do_lock(dbref player, const char *name, const char *keyname, int locktype);
extern void do_unlock(dbref player, const char *name, int locktype);
extern void do_unlink(dbref player, const char *name);
extern void do_chown(dbref player, const char *name, const char *newobj);
extern void do_chzone(dbref player, const char *name, const char *newobj);
extern void do_set(dbref player, const char *name, char *flag);
extern int test_set(dbref player, char *command, char *arg1, char *arg2);
extern void do_gedit(dbref player, char *it, char *argv[]);
extern void do_edit(dbref player, char *it, char *argv[]);
extern void do_trigger(dbref player, char *object, char *argv[]);
extern void do_use(dbref player, const char *what);

/* speech.c */
extern const char *reconstruct_message(const char *arg1, const char *arg2);
extern void do_say(dbref player, const char *arg1, const char *arg2);
extern void do_oemit(dbref player, const char *arg1, const char *arg2);
extern void do_whisper(dbref player, const char *arg1, const char *arg2);
extern void do_pemit(dbref player, const char *arg1, const char *arg2);
extern void do_pose(dbref player, const char *arg1, const char *arg2, int space);
extern void do_wall(dbref player, const char *arg1, const char *arg2, int key);
extern void do_wizwall(dbref player, const char *arg1, const char *arg2, int privs, int key);
extern void do_gripe(dbref player, const char *arg1, const char *arg2);
extern void do_page(dbref player, const char *arg1, const char *arg2);
extern void notify_except(dbref first, dbref exception, const char *msg);
extern void notify_except2(dbref first, dbref exc1, dbref exc2, const char *msg);
extern void do_emit(dbref player, const char *arg1, const char *arg2);
extern void do_remit(dbref player, const char *arg1, const char *arg2);
extern void do_lemit(dbref player, const char *arg1, const char *arg2);
extern void do_zemit(dbref player, const char *arg1, const char *arg2);

/* stringutil.c */
extern int string_compare(const char *s1, const char *s2);
extern int string_prefix(const char *string, const char *prefix);
extern const char *string_match(const char *src, const char *sub);
extern char *strupper(const char *s);

/* utils.c */
extern dbref find_entrance(dbref door);
extern dbref remove_first(dbref first, dbref what);
extern int member(dbref thing, dbref list);
extern int recursive_member(dbref disallow, dbref from, int count);
extern dbref reverse(dbref list);
extern struct dblist *listcreate(dbref ref);
extern void listadd(struct dblist *head, dbref ref);
extern void listfree(struct dblist *head);
extern int getrandom(int x);

/* wiz.c */
extern void do_search(dbref player, const char *arg1, const char *arg3);
extern void do_teleport(dbref player, const char *arg1, const char *arg2);
extern void do_force(dbref player, const char *what, char *command);
extern int try_force(dbref player, const char *command);
extern void do_stats(dbref player, const char *name);
extern void do_toad(dbref player, const char *name);
extern void do_newpassword(dbref player, const char *name, const char *password);
extern void do_boot(dbref player, const char *name);
extern void do_chownall(dbref player, const char *name, const char *target);
extern void do_chzoneall(dbref player, const char *name, const char *target);
extern void do_motd(dbref player, int key, const char *arg1, const char *arg2);
extern void do_login(dbref player, const char *state);
extern void fun_lsearch(char *buff, char *args[10], dbref privs, dbref dumm1);
#ifdef WCREAT
extern void do_pcreate (dbref creator, const char *player_name,  const char *player_password);
#endif
#ifdef QUOTA
extern void do_quota (dbref player, char *arg1, char *arg2);
extern void do_allquota (dbref player, char *arg1);
#endif

/* wild.c */
extern char *wptr[10];

extern int wild(char *s, char *d, int p, int os);
extern int wild_match(char *s, char *d);

/* eval.c */
extern void exec(char **str, char *buff, dbref privs, dbref doer, int coma);
extern char *parse_up(char **str, int delimit);

/* unparse.c */
extern const char *unparse_flags(dbref thing);
extern const char *unparse_object(dbref player, dbref loc);
extern const char *unparse_boolexp(dbref player, struct boolexp *b, int flag);

/* destroy.c */
extern void do_destroy(dbref player, char *name, int confirm);
extern void free_object(dbref obj);
extern dbref free_get(void);
extern void fix_free_list(void);
extern void do_dbck(dbref player);

/* timer.c */
extern void init_timer(void);
extern void dispatch(void);