/* externs.h - Prototypes for externs not defined elsewhere */

#include "copyright.h"

#ifndef __EXTERNS__H
#define	__EXTERNS__H

#include "db.h"
#include "mudconf.h"

#define	ToLower(s) (isupper(s) ? tolower(s) : (s))
#define	ToUpper(s) (islower(s) ? toupper(s) : (s))
extern long random(void);

/* From cque.c */
extern int halt_que (dbref player, dbref object);
extern void wait_que (dbref player, dbref cause, int key, int wait, dbref sem,
	char *command, char *args[], int nargs);

/* From eval.c */
extern char *parse_to(char **dstr, char delim, int stripbrackets);
extern char *parse_arglist (dbref player, dbref cause, char *dstr, char delim,
	int eval, char *fargs[], int nfargs, char *cargs[], int ncargs);
extern char *exec(dbref player, dbref cause, int func_opt, char *dstr,
	char *cargs[], int ncargs);

/* From game.c */
#define	notify(p,m)			notify_check(p,p,m,0)
#define	notify_with_cause(p,c,m)	notify_check(p,c,m,0)
#define	notify_puppet(p,c,m)		notify_check(p,c,m,1)
extern void notify_check(dbref player, dbref enactor, const char *msg,
	int check_puppet);
extern int Hearer(dbref thing);
extern void report(void);
extern void panic(const char *message, int dump);
extern void do_rwho(dbref player, dbref cause, int key);
	
/* From help.c */
extern void spit_file(dbref player,const char *filename);
extern int helpindex_read (HASHTAB *htab, char *filename);
extern void helpindex_load (dbref player);
extern void helpindex_init (void);

/* From log.c */
extern int start_log(const char *primary, const char *secondary);
extern void end_log();
extern void log_text(char *text);
extern void log_number(int num);
extern void log_name(dbref target);
extern void log_name_and_loc(dbref target);
extern char *OBJTYP(dbref thing);
extern void log_type_and_name(dbref thing);
extern void log_type_and_num(dbref thing);

/* From look.c */
extern void look_in(dbref player,dbref loc, int show_exits);

/* From move.c */
extern void move_object (dbref thing, dbref dest);
extern void move_via_generic (dbref thing, dbref dest, dbref cause,
	int hush);
extern void move_via_exit (dbref thing, dbref dest, dbref cause, dbref exit,
	int hush);
extern int move_via_teleport (dbref thing, dbref dest, dbref cause,
	int hush);
extern void move_exit (dbref player, dbref exit, int divest,
	const char *failmsg, int hush);
extern void do_enter_internal (dbref player, dbref thing, int quiet);

/* From object.c */
extern dbref start_home(void);
extern dbref default_home(void);
extern int can_set_home (dbref player, dbref thing, dbref home);
extern dbref new_home (dbref player);
extern dbref clone_home (dbref player, dbref thing);
extern void divest_object (dbref thing);
extern dbref create_obj (dbref player, int objtype, char *name, int cost);
extern void destroy_obj (dbref player, dbref obj);
extern void empty_obj (dbref obj);

/* From player.c */
extern void record_login (dbref player, int isgood, char *ldate, char *lhost);
extern int check_pass(dbref player, const char *password);
extern dbref connect_player(char *name, char *password, char *host);
extern dbref create_player(char *name, char *password, dbref creator,
	int isrobot);
extern int add_player_name (dbref player, char *name);
extern int delete_player_name (dbref player, char *name);
extern dbref lookup_player (dbref doer, char *name, int check_who);
extern void load_player_names (void);
extern void badname_add (char *bad_name);
extern int badname_check (char *bad_name);
extern void badname_list (dbref player, const char *prefix);

/* From predicates.c */
extern char *tprintf();
extern dbref insert_first (dbref head, dbref thing);
extern dbref remove_first (dbref head, dbref thing);
extern dbref reverse_list(dbref list);
extern int member(dbref thing,dbref list);
extern int is_number (char *str);
extern int could_doit(dbref player, dbref thing, int locknum);
extern int can_see(dbref player,dbref thing,int can_see_loc);
extern void add_quota(dbref who, int payment);
extern int canpayfees(dbref player, dbref who, int pennies, int quota);
extern void giveto(dbref who,int 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_attr_name(const char *attr_name);
extern int ok_password(const char *password);
extern void handle_ears (dbref thing, int could_hear, int can_hear);
extern dbref is_possess(dbref player, char *arg1);
extern dbref where_is (dbref what);
extern int nearby (dbref player, dbref thing);
extern dbref next_exit(dbref player,dbref this, int exam_here);
extern void did_it(dbref player,dbref thing,int what,const char *def,int owhat,
	    const char *odef,int awhat, char *args[], int nargs);
extern void pool_init(POOL *poolp, int poolsize);
extern void pool_check(const char *tag);
extern char *pool_alloc(POOL *poolp, const char *tag);
extern void pool_free(POOL *poolp, char **buf);
extern void list_bufstats(dbref player);
extern void list_buftrace(dbref player);

/* From set.c */
extern int parse_attrib(dbref player, char *str, dbref *thing, int *atr);
extern int parse_attrib_wild(dbref player, char *str, dbref *thing,
	int get_locks);
extern void edit_string (char *src, char **dst, char *from, char *to);
extern dbref match_controlled(dbref player,const char *name);
extern dbref match_affected(dbref player,const char *name);
extern dbref match_examinable(dbref player,const char *name);

/* From speech.c */
extern void notify_all(dbref loc, dbref player,
	const char *msg, const int forward);
extern void notify_except(dbref loc, dbref player, dbref exception,
	const char *msg, const int forward);
extern void notify_except2(dbref loc, dbref player, dbref exc1, dbref exc2,
	const char *msg, const int forward);
extern int check_filter(dbref object, dbref player, int filter,
	const char *msg);
extern char *add_prefix(dbref object, dbref player, int prefix,
	const char *msg, const char *dflt);

/* From stringutil.c */
extern char *munge_space(char *string);
extern char *trim_spaces(char *string);
extern char *grabto (char **str, char targ);
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 *dollar_to_space(const char *dollars);
extern char *replace_string(const char *old,
			    const char *new,const char *string);
extern char *replace_string_inplace(const char *old, 
				    const char *new, char *string);
extern char *skip_space(const char *s);
extern char *seek_char(const char *s, char c);
extern int prefix_match(const char *s1, const char *s2);
extern int minmatch (char *str, char *target, int min);
extern char* strsave(const char *s);
extern int safe_copy_str(char *src, char *buff, char **bufp, int max);
extern int safe_copy_chr(char src, char *buff, char **bufp, int max);
extern int matches_exit_from_list (char *str, char *pattern);

/* From boolexp.c */
extern int eval_boolexp(dbref player, dbref thing, struct boolexp *b);
struct boolexp *parse_boolexp(dbref player,const char *buf);
int eval_boolexp_atr(dbref player, dbref thing, char *key);

/* From unparse.c */
extern char *unparse_boolexp(dbref player,struct boolexp *b);
extern char *unparse_boolexp_quiet(dbref player,struct boolexp *b);
extern char *unparse_boolexp_decompile(dbref player,struct boolexp *b);
extern char *unparse_boolexp_function(dbref player,struct boolexp *b);

/* From walkdb.c */
extern int chown_all (dbref from_player, dbref to_player);
extern void olist_init (void);
extern void olist_add (dbref item);
extern dbref olist_first (void);
extern dbref olist_next (void);

/* From wild.c */
extern int wild(char *tstr, char *dstr, char *args[], int nargs);
extern int wild_match(char *tstr, char *dstr, char *args[], int nargs);
extern int quick_wild(char *s, char *d);

/* From match.c */
dbref pref_match(dbref player,dbref list,const char *string);

/* From compress.c */
const char *uncompress(const char *s);
extern const char *compress();
char *uncompress_str(char *dest, const char *s);

/* from db.c */
extern int Commer(dbref thing);
void s_Pass(dbref thing, const char *s);
void s_Pennies(dbref thing, int p);
void s_Flags(dbref thing, FLAG f);
void s_Owner(dbref thing, dbref new);
void s_Name(dbref thing, const char *s);
void s_Exits(dbref thing, dbref new);
void s_Next(dbref thing, dbref new);
void s_Location(dbref thing, dbref new);
void s_Contents(dbref thing, dbref new);
void s_Zone(dbref thing, dbref new);
void s_Link(dbref thing, dbref new);
void s_Parent(dbref thing, dbref new);
#define	s_Home(x,h) s_Link(x,h)
#define	s_Dropto(x,h) s_Location(x,h)

char *Name(dbref thing);
int Pennies(dbref thing);
FLAG Flags(dbref thing);
dbref Owner(dbref thing);
dbref Exits(dbref thing);
dbref Next(dbref thing);
dbref Location(dbref thing);
dbref Contents(dbref thing);
dbref Zone(dbref thing);
dbref Link(dbref thing);
dbref Parent(dbref thing);
#define	Home(x) Link(x)
#define	Dropto(x) Location(x)

extern void clone_object(dbref a, dbref b);
extern void init_min_db(void);
extern void atr_push(void);
extern void atr_pop(void);
extern int atr_head(dbref thing, char **attrp);
extern int atr_next(char **attrp);
extern int init_gdbm_db(char *gdbmfile);
extern void atr_cpy (dbref dest, dbref source);
extern void atr_chown (dbref obj);
extern void atr_clr (dbref thing, int atr);
extern void atr_add_raw (dbref thing, int atr, char *buff);
extern void atr_add (dbref thing, int atr, char *buff, dbref owner, int flags);
extern void atr_set_owner(dbref thing, int atr, dbref owner);
extern void atr_set_flags(dbref thing, int atr, int flags);
extern char *atr_get_raw(dbref thing, int atr);
extern char *atr_get(dbref thing, int atr, dbref *owner, int *flags);
extern char *atr_pget(dbref thing, int atr, dbref *owner, int *flags);
extern char *atr_get_str(char *buff, dbref thing, int atr,
	dbref *owner, int *flags);
extern char *atr_pget_str(char *buff, dbref thing, int atr,
	dbref *owner, int *flags);
extern int atr_get_info(dbref thing, int atr, dbref *owner, int *flags);
extern int atr_pget_info(dbref thing, int atr, dbref *owner, int *flags);
extern void atr_free (dbref thing);
extern VATTR *define_vattr (char *aname, int anum, int aflags);
extern VATTR *alloc_vattr (char *aname, int aflags);
extern void free_vattr (int anum);

#ifdef notdef

/* From cque.c */
extern void parse_que ();
extern int halt_que ();
extern void wait_que ();

/* From create.c */
extern int can_set_home ();

/* From destroy.c */
extern dbref free_get();
extern void destroy_object ();

/* From eval.c */
extern char *parse_to();
extern char *parse_arglist ();
extern char *exec();

/* From game.c */
extern void notify();
extern void notify_check();
extern int Hearer();
extern void report();
extern void panic();
extern int list_check(dbref thing, dbref player, char type, char *str,
	int check_parents);
extern int atr_match(dbref thing, dbref player, char type, char *str,
	int check_parents);
extern void do_rwho();
	
/* From help.c */
extern void spit_file();
extern int helpindex_read ();
extern void helpindex_load ();
extern void helpindex_init ();

/* From log.c */
extern int start_log();
extern void end_log();
extern void log_text();
extern void log_name();
extern void log_name_and_loc();

/* From look.c */
extern void look_room();
extern void do_look_around();

/* From move.c */
extern void safe_tel();
extern void do_move_internal();
extern void enter_room();

/* From player.c */
extern void record_login();
extern int check_pass();
extern dbref connect_player();
extern dbref create_player();

/* From player_list.c */
extern dbref lookup_player();
extern void delete_player();
extern void clear_players();
void add_player();

/* From predicates.c */
extern dbref where_is ();
extern int nearby ();
extern int could_doit();
extern void did_it();
extern int is_number ();
extern int can_see();
extern int payfor();
extern void giveto();
extern int ok_name();
extern int ok_attr_name();
extern int ok_password();
extern int ok_player_name();
extern char *tprintf();
extern void pronoun_substitute();
extern int canpayfees();
extern dbref is_possess();
extern dbref next_exit();
extern void pool_init();
extern char *pool_alloc();
extern void pool_free();
extern char *pool_stats();
extern void pool_trace();
extern void list_bufstats();
extern void list_buftrace();

/* From set.c */
extern int parse_attrib();
extern dbref match_controlled();
extern dbref match_affected();
extern dbref match_examinable();

/* From speech.c */
extern void notify_all();
extern void notify_except();
extern void notify_except2();

/* From stringutil.c */
extern char *munge_space();
extern char *grabto();
extern int string_compare();
extern int string_prefix();
extern const char *string_match();
extern char *dollar_to_space();
extern char *replace_string();
extern char *replace_string_inplace();
extern char *skip_space();
extern char *seek_char();
extern int prefix_match();
extern int minmatch ();
extern char* strsave();
extern int safe_copy_str();
extern int safe_copy_chr();

/* From utils.c */
extern int member();
extern dbref remove_first();
extern dbref reverse();
extern dbref find_entrance();

/* From boolexp.c */
extern int eval_boolexp();
struct boolexp *parse_boolexp();
int eval_boolexp_atr();

/* From unparse.c */
extern char *unparse_boolexp();
extern char *unparse_boolexp_quiet();
extern char *unparse_boolexp_decompile();
extern char *unparse_boolexp_function();

/* From walkdb.c */
extern int chown_all ();
extern void olist_init ();
extern void olist_add ();
extern dbref olist_first ();
extern dbref olist_next ();

/* From wild.c */
extern int wild();
extern int wild_match();
extern int quick_wild();

/* From match.c */
extern dbref pref_match();

/* From compress.c */
extern const char *uncompress();
extern const char *compress();
extern void init_compress();
extern char *uncompress_str();

/* from db.c */
extern int Commer();
void s_Pass();
void s_Pennies();
void s_Flags();
void s_Owner();
void s_Name();
void s_Exits();
void s_Next();
void s_Location();
void s_Contents();
void s_Zone();
void s_Link();
void s_Parent();
char *Name();
int Pennies();
FLAG Flags();
dbref Owner();
dbref Exits();
dbref Next();
dbref Location();
dbref Contents();
dbref Zone();
dbref Link();
dbref Parent();
void clone_object();
void init_min_db();
int atr_head();
int atr_nexet();
extern int init_gdbm_db();
extern void atr_cpy ();
extern void atr_chown ();
extern void atr_clr ();
extern void atr_add_raw ();
extern void atr_add ();
extern void atr_set_owner();
extern void atr_set_flags();
extern char *atr_get_raw();
extern char *atr_get();
extern char *atr_get_str();
extern int atr_get_info();
extern void atr_free ();
extern VATTR *define_vattr ();
extern VATTR *alloc_vattr ();
extern void free_vattr ();

#endif /* notdef */

/* Powers keys */

/* IMPORTANT -- Keep this table in sync with the powers table in command.c
 * The constants are used as array indexes into the powers table.
 */

#define	POW_CHG_QUOTAS	0	/* May change quotas of controlled players */
#define	POW_CHOWN_ANY	1	/* Ignore loc/holding restrictions on @chown */
#define	POW_CHOWN_ME	2	/* May @chown things to me */
#define	POW_CHOWN_OTHER	3	/* May @chown things to others */
#define	POW_CHOWN_PLYR	4	/* May @chown players */
#define	POW_CONTROL_ALL	5	/* I control everything */
#define	POW_WIZARD_WHO	6	/* See extra WHO information */
#define	POW_EXAM_ALL	7	/* I can examine everything */
#define	POW_FIND_UNFIND	8	/* Can find unfindable players */
#define	POW_FREE_MONEY	9	/* I have infinite money */
#define	POW_FREE_QUOTA	10	/* I have infinite quota */
#define	POW_GRAB_PLAYER	11	/* Can @tel players to me */
#define	POW_IGNORE_RST	12	/* Ignore penalty flags in access checks */
#define	POW_JOIN_PLAYER	13	/* Can @tel to loc of player */
#define	POW_LONGFINGERS	14	/* Can get/whisper/etc from a distance */
#define	POW_NO_BOOT	15	/* Player is immune from @booting */
#define	POW_NO_TOAD	16	/* Player is immune from @toading/@destroying */
#define	POW_RENAME_ME	17	/* Player can change name or password */
#define	POW_SEE_AFLAGS	18	/* Player can see admin (hidden) flags */
#define	POW_SEE_QUEUE	19	/* Player can see the entire queue */
#define	POW_SEE_HIDDEN	20	/* Player can see hidden players on WHO list */
#define	POW_SEE_IATTRS	21	/* Player can see invisible attributes */
#define	POW_SEE_MFLAGS	22	/* Player can see game maintenance flags */
#define	POW_SEE_AATTRS	23	/* Player can set administration attributes */
#define	POW_SET_AFLAGS	24	/* Player can set admin flags */
#define	POW_SET_MATTRS	25	/* Player can set maintenance attributes */
#define	POW_SET_MFLAGS	26	/* Player can set game maintenance flags */
#define	POW_STAT_ANY	27	/* Can @stat anyone */
#define	POW_STEAL	28	/* Can give negative money */
#define	POW_TEL_ANYWHR	29	/* Ignore control/JUMP_OK on @tel */
#define	POW_TEL_UNRST	30	/* Ignore object type restrictions on @tel */
#define	POW_UNKILLABLE	31	/* Can't be killed */

/* Command handler keys */

#define	ATTRIB_ACCESS	1	/* Change access to attribute */
#define	ATTRIB_RENAME	2	/* Rename attribute */
#define	ATTRIB_DELETE	4	/* Delete attribute */
#define	BOOT_QUIET	1	/* Inhibit boot message to victim */
#define	BOOT_PORT	2	/* Boot by port number */
#define	CHOWN_ONE	1	/* item = new_owner */
#define	CHOWN_ALL	2	/* old_owner = new_owner */
#define	CLONE_LOCATION	0	/* Create cloned object in my location */
#define	CLONE_INHERIT	1	/* Keep INHERIT bit if set */
#define	CLONE_PRESERVE	2	/* Preserve the owner of the object */
#define	CLONE_INVENTORY	4	/* Create cloned object in my inventory */
#define	CLONE_SET_COST	8	/* ARG2 is cost of cloned object */
#define	CLONE_SET_LOC	16	/* ARG2 is location of cloned object */
#define	CLONE_SET_NAME	32	/* ARG2 is alternate name of cloned object */
#define	CLONE_PARENT	64	/* Set parent on obj instd of cloning attrs */
#define	CRE_INVENTORY	0	/* Create object in my inventory */
#define	CRE_LOCATION	1	/* Create object in my location */
#define	CRE_SET_LOC	2	/* ARG2 is location of new object */
#define	DBCK_DEFAULT	1	/* Get default tests too */
#define	DBCK_REPORT	2	/* Report info to invoker */
#define	DBCK_FULL	4	/* Do all tests */
#define	DBCK_FLOATING	8	/* Look for floating rooms */
#define	DBCK_PURGE	16	/* Purge the db of refs to going objects */
#define	DBCK_LINKS	32	/* Validate exit and object chains */
#define	DBCK_WEALTH	64	/* Validate object value/wealth */
#define	DBCK_OWNER	128	/* Do more extensive owner checking */
#define	DBCK_OWN_EXIT	256	/* Check exit owner owns src or dest */
#define	DBCK_WIZARD	512	/* Check for wizards/wiz objects */
#define	DBCK_TYPES	1024	/* Check for valid & appropriate types */
#define	DBCK_SPARE	2048	/* Make sure spare header fields are NOTHING */
#define	DBCK_HOMES	4096	/* Make sure homes and droptos are valid */
#define	DEST_ONE	1	/* object */
#define	DEST_ALL	2	/* owner */
#define	DEST_OVERRIDE	4	/* override Safe() */
#define	DIG_TELEPORT	1	/* teleport to room after @digging */
#define	DOING_MESSAGE	0	/* Set my DOING message */
#define	DOING_HEADER	1	/* Set the DOING header */
#define	DOING_POLL	2	/* List DOING header */
#define	DROP_QUIET	1	/* Don't do odrop/adrop if control */
#define	DUMP_STRUCT	1	/* Dump flat structure file */
#define	DUMP_TEXT	2	/* Dump text (gdbm) file */
#define	EXAM_DEFAULT	0	/* Default */
#define	EXAM_BRIEF	1	/* Nonowner sees just owner */
#define	EXAM_LONG	2	/* Nonowner sees public attrs too */
#define	EXAM_DEBUG	4	/* Display more info for finding db problems */
#define	EXAM_PARENT	8	/* Get attr from parent when exam obj/attr */
#define	FIXDB_OWNER	1	/* Fix OWNER field */
#define	FIXDB_LOC	2	/* Fix LOCATION field */
#define	FIXDB_CON	4	/* Fix CONTENTS field */
#define	FIXDB_EXITS	8	/* Fix EXITS field */
#define	FIXDB_NEXT	16	/* Fix NEXT field */
#define	FIXDB_PENNIES	32	/* Fix PENNIES field */
#define	FIXDB_ZONE	64	/* Fix ZONE field */
#define	FIXDB_LINK	128	/* Fix LINK field */
#define	FIXDB_PARENT	256	/* Fix PARENT field */
#define	FIXDB_DEL_PN	512	/* Remove player name from player name index */
#define	FIXDB_ADD_PN	1024	/* Add player name to player name index */
#define	FIXDB_NAME	2048	/* Set NAME attribute */
#define	FRC_PREFIX	0	/* #num command */
#define	FRC_COMMAND	1	/* what=command */
#define	GET_QUIET	1	/* Don't do osucc/asucc if control */
#define	GLOB_ENABLE	1	/* key to enable */
#define	GLOB_DISABLE	2	/* key to disable */
#define	GLOB_LIST	3	/* key to list */
#define	HALT_ALL	1	/* halt everything */
#define	HELP_HELP	1	/* get data from help file */
#define	HELP_NEWS	2	/* get data from news file */
#define	HELP_WIZHELP	3	/* get data from wizard help file */
#define	KILL_KILL	1	/* gives victim insurance */
#define	KILL_SLAY	2	/* no insurance */
#define	LOOK_LOOK	1	/* list desc (and succ/fail if room) */
#define	LOOK_EXAM	2	/* full listing of object */
#define	LOOK_DEXAM	3	/* debug listing of object */
#define	LOOK_INVENTORY	4	/* list inventory of object */
#define	LOOK_SCORE	5	/* list score (# coins) */
#define	MARK_SET	0	/* Set mark bits */
#define	MARK_CLEAR	1	/* Clear mark bits */
#define	MOTD_ALL	0	/* login message for all */
#define	MOTD_WIZ	1	/* login message for wizards */
#define	MOTD_DOWN	2	/* login message when logins disabled */
#define	MOTD_FULL	4	/* login message when too many players on */
#define	MOTD_LIST	8	/* Display current login messages */
#define	MOVE_QUIET	1	/* Dont do osucc/ofail/asucc/afail if ctrl */
#define	NFY_NFY		0	/* Notify first waiting command */
#define	NFY_NFYALL	1	/* Notify all waiting commands */
#define	NFY_DRAIN	2	/* Delete waiting commands */
#define	OPEN_LOCATION	0	/* Open exit in my location */
#define	OPEN_INVENTORY	1	/* Open exit in me */
#define	PASS_ANY	1	/* name=newpass */
#define	PASS_MINE	2	/* oldpass=newpass */
#define	PCRE_PLAYER	1	/* create new player */
#define	PCRE_ROBOT	2	/* create robot player */
#define	PEMIT_PEMIT	1	/* emit to named player */
#define	PEMIT_OEMIT	2	/* emit to all in current room except named */
#define	PEMIT_WHISPER	3	/* whisper to player in current room */
#define	PEMIT_FSAY	4	/* force controlled obj to say */
#define	PEMIT_FEMIT	5	/* force controlled obj to emit */
#define	PEMIT_FPOSE	6	/* force controlled obj to pose */
#define	PEMIT_FPOSE_NS	7	/* force controlled obj to pose w/o space */
#define	PEMIT_CONTENTS	8	/* Send to contents (additive) */
#define	PS_BRIEF	0	/* Short PS report */
#define	PS_LONG		1	/* Long PS report */
#define	PS_SUMM		2	/* Queue counts only */
#define	PS_ALL		4	/* List entire queue */
#define	QUEUE_KICK	1	/* Process commands from queue */
#define	QUEUE_WARP	2	/* Advance or set back wait queue clock */
#define	QUOTA_SET	1	/* Set a quota */
#define	QUOTA_FIX	2	/* Repair a quota */
#define	QUOTA_TOT	4	/* Operate on total quota */
#define	QUOTA_REM	8	/* Operate on remaining quota */
#define	QUOTA_ALL	16	/* Operate on all players */
#define	RWHO_START	1	/* Start transmitting to remote RWHO srvr */
#define	RWHO_STOP	2	/* Close connection to remote RWHO srvr */
#define	SAY_SAY		1	/* say in current room */
#define	SAY_NOSPACE	1	/* OR with xx_EMIT to get nospace form */
#define	SAY_POSE	2	/* pose in current room */
#define	SAY_POSE_NOSPC	3	/* pose w/o space in current room */
#define	SAY_PREFIX	4	/* first char indicates foratting */
#define	SAY_EMIT	5	/* emit in current room */
#define	SAY_SHOUT	8	/* shout to all logged-in players */
#define	SAY_WALLPOSE	9	/* Pose to all logged-in players */
#define	SAY_WALLEMIT	10	/* Emit to all logged-in players */
#define	SAY_WIZSHOUT	12	/* shout to all logged-in wizards */
#define	SAY_WIZPOSE	13	/* Pose to all logged-in wizards */
#define	SAY_WIZEMIT	14	/* Emit to all logged-in wizards */
#define	SAY_GRIPE	16	/* Complain to management */
#define	SAY_NOTE	17	/* Comment to log for wizards */
#define	SAY_NOTAG	32	/* Don't put Broadcast: in front (additive) */
#define	SAY_HERE	64	/* Output to current location */
#define	SAY_ROOM	128	/* Output to containing room */
#define	SRCH_SEARCH	1	/* Do a normal search */
#define	SRCH_MARK	2	/* Set mark bit for matches */
#define	SRCH_UNMARK	3	/* Clear mark bit for matches */
#define	STAT_PLAYER	0	/* Display stats for one player or tot objs */
#define	STAT_ALL	1	/* Display global stats */
#define	STAT_ME		2	/* Display stats for me */
#define	SWITCH_DEFAULT	0	/* Use the configured default for switch */
#define	SWITCH_ANY	1	/* Execute all cases that match */
#define	SWITCH_ONE	2	/* Execute only first case that matches */
#define	SWEEP_ME	1	/* Check my inventory */
#define	SWEEP_HERE	2	/* Check my location */
#define	SWEEP_COMMANDS	4	/* Check for $-commands */
#define	SWEEP_LISTEN	8	/* Check for @listen-ers */
#define	SWEEP_PLAYER	16	/* Check for players and puppets */
#define	SWEEP_CONNECT	32	/* Search for connected players/puppets */
#define	SWEEP_EXITS	64	/* Search the exits for audible flags */
#define	TOAD_NO_CHOWN	1	/* Don't change ownership */
#define	TWARP_QUEUE	1	/* Warp the wait and sem queues */
#define	TWARP_DUMP	2	/* Warp the dump interval */
#define	TWARP_CLEAN	4	/* Warp the cleaning interval */
#define	TWARP_IDLE	8	/* Warp the idle check interval */
#define	TWARP_RWHO	16	/* Warp the RWHO dump interval */

/* Hush codes for movement messages */

#define	HUSH_ENTER	1	/* xENTER/xEFAIL */
#define	HUSH_LEAVE	2	/* xLEAVE/xLFAIL */
#define	HUSH_EXIT	4	/* xSUCC/xDROP/xFAIL from exits */

/* Evaluation directives */

#define	EV_FMASK	0x0300	/* Mask for function type check */
#define	EV_FIGNORE	0x0000	/* Don't treat text before () as func name */
#define	EV_FMAND	0x0100	/* Text before () must be a function name */
#define	EV_FCHECK	0x0200	/* Check text before () for function */
#define	EV_STRIP	0x0400	/* Strip one level of brackets */
#define	EV_EVAL		0x0800	/* Evaluate results before returning */
#define	EV_STRIP_TS	0x1000	/* Strip trailing spaces */
#define	EV_STRIP_LS	0x2000	/* Strip leading spaces */

/* Buffer reuse directives */

#define	RU_ARG1_COPY	0x0000	/* Callee makes its own copy of arg1 */
#define	RU_ARG1_TAKE	0x0100	/* Callee uses and disposes of arg1 lbuf */
#define	RU_ARG1_TMPL	0x0200	/* Callee uses but does not dispose of arg1 */
#define	RU_ARG2_COPY	0x0000	/* Callee makes its own copy of arg1 */
#define	RU_ARG2_TAKE	0x0400	/* Callee uses and disposes of arg2 lbuf */
#define	RU_ARG2_TMPL	0x0800	/* Callee uses but does not dispose of arg2 */

#define	STARTLOG(key,p,s) \
	if ((((key) & mudconf.log_options) != 0) && start_log(p, s)) {
#define	ENDLOG \
	end_log(); }
#define	LOG_SIMPLE(key,p,s,m) \
	STARTLOG(key,p,s) \
		log_text(m); \
	ENDLOG

#define	test_top()		((mudstate.qfirst != NULL) ? 1 : 0)
#define	controls(p,x)		Controls(p,x)

#ifndef STANDALONE
#define	alloc_lbuf(s)	pool_alloc(&mudstate.lbuf_pool,s)
#define	free_lbuf(b)	pool_free(&mudstate.lbuf_pool,((char **)&(b)))
#define	alloc_mbuf(s)	pool_alloc(&mudstate.mbuf_pool,s)
#define	free_mbuf(b)	pool_free(&mudstate.mbuf_pool,((char **)&(b)))
#define	alloc_sbuf(s)	pool_alloc(&mudstate.sbuf_pool,s)
#define	free_sbuf(b)	pool_free(&mudstate.sbuf_pool,((char **)&(b)))
#define	alloc_bool(s)	(struct boolexp *)pool_alloc(&mudstate.bool_pool,s)
#define	free_bool(b)	pool_free(&mudstate.bool_pool,((char **)&(b)))
#define	alloc_qentry(s)	(BQUE *)pool_alloc(&mudstate.qentry_pool,s)
#define	free_qentry(b)	pool_free(&mudstate.qentry_pool,((char **)&(b)))
#else
#define	alloc_lbuf(s)	(char *)malloc(LBUF_SIZE)
#define	free_lbuf(b)	if (b) free(b)
#define	alloc_mbuf(s)	(char *)malloc(MBUF_SIZE)
#define	free_mbuf(b)	if (b) free(b)
#define	alloc_sbuf(s)	(char *)malloc(SBUF_SIZE)
#define	free_sbuf(b)	if (b) free(b)
#define	alloc_bool(s)	(struct boolexp *)malloc(sizeof(struct boolexp))
#define	free_bool(b)	if (b) free(b)
#define	alloc_qentry(s)	(BQUE *)malloc(sizeof(BQUE));
#define	free_qentry(b)	if (b) free(b)
#endif

#define	safe_str(s,b,p)		safe_copy_str(s,b,p,(LBUF_SIZE-1))
#define	safe_chr(c,b,p)		safe_copy_chr(c,b,p,(LBUF_SIZE-1))
#define	safe_sb_str(s,b,p)	safe_copy_str(s,b,p,(SBUF_SIZE-1))
#define	safe_sb_chr(c,b,p)	safe_copy_chr(c,b,p,(SBUF_SIZE-1))
#define	safe_mb_str(s,b,p)	safe_copy_str(s,b,p,(MBUF_SIZE-1))
#define	safe_mb_chr(c,b,p)	safe_copy_chr(c,b,p,(MBUF_SIZE-1))

#endif	/* __EXTERNS_H */