// externs.h -- Prototypes for externs not defined elsewhere.
//
// $Id: externs.h,v 1.42 2005/10/16 20:48:14 sdennis Exp $
//
#ifndef EXTERNS_H
#define EXTERNS_H
#include "db.h"
#include "match.h"
#include "mudconf.h"
#include "svdrand.h"
/* From bsd.cpp */
void CleanUpSlaveSocket(void);
void CleanUpSlaveProcess(void);
/* From conf.cpp */
extern void cf_log_notfound(dbref, char *, const char *, char *);
extern int cf_modify_bits(int *, char *, void *, UINT32, dbref, char *);
/* From local.cpp */
extern void local_startup(void);
extern void local_dump_database(int);
extern void local_shutdown(void);
extern void local_dbck(void);
extern void local_connect(dbref, int, int);
extern void local_disconnect(dbref, int);
extern void local_data_create(dbref);
extern void local_data_clone(dbref, dbref);
extern void local_data_free(dbref);
/* From mail.cpp */
extern void load_mail(FILE *);
extern int dump_mail(FILE *);
extern struct mail *mail_fetch(dbref, int);
/* From netcommon.cpp */
extern void DCL_CDECL raw_broadcast(int, char *, ...);
/* From cque.cpp */
extern int nfy_que(dbref, int, int, int);
extern int halt_que(dbref, dbref);
extern void wait_que(dbref executor, dbref caller, dbref enactor, bool,
CLinearTimeAbsolute&, dbref, int, char *, char *[],int, char *[]);
#ifdef WIN32
#include "crypt/crypt.h"
#else // WIN32
extern "C" char *crypt(const char *inptr, const char *inkey);
#endif // WIN32
/* From eval.cpp */
void tcache_init(void);
char *parse_to(char **, char, int);
char *parse_arglist(dbref executor, dbref caller, dbref enactor, char *,
char, int, char *[], int, char*[], int, int *);
int get_gender(dbref);
void mux_exec(char *buff, char **bufc, dbref executor, dbref caller,
dbref enactor, int eval, char **dstr, char *cargs[],
int ncargs);
extern void save_global_regs(const char *, char *[], int []);
extern void save_and_clear_global_regs(const char *, char *[], int[]);
extern void restore_global_regs(const char *, char *[], int []);
extern char **PushPointers(int nNeeded);
extern void PopPointers(char **p, int nNeeded);
extern int *PushIntegers(int nNeeded);
extern void PopIntegers(int *pi, int nNeeded);
extern const signed char mux_RegisterSet[256];
/* From game.cpp */
#define notify(p,m) notify_check(p,p,m, MSG_PUP_ALWAYS|MSG_ME_ALL|MSG_F_DOWN)
#define notify_saypose(p,m) notify_check(p,p,m, MSG_PUP_ALWAYS|MSG_ME_ALL|MSG_F_DOWN|MSG_SAYPOSE)
#define notify_html(p,m) notify_check(p,p,m, MSG_PUP_ALWAYS|MSG_ME_ALL|MSG_F_DOWN|MSG_HTML)
#define notify_quiet(p,m) notify_check(p,p,m, MSG_PUP_ALWAYS|MSG_ME)
#define notify_with_cause(p,c,m) notify_check(p,c,m, MSG_PUP_ALWAYS|MSG_ME_ALL|MSG_F_DOWN)
#define notify_with_cause_ooc(p,c,m) notify_check(p,c,m, MSG_PUP_ALWAYS|MSG_ME_ALL|MSG_F_DOWN|MSG_OOC)
#define notify_with_cause_html(p,c,m) notify_check(p,c,m, MSG_PUP_ALWAYS|MSG_ME_ALL|MSG_F_DOWN|MSG_HTML)
#define notify_quiet_with_cause(p,c,m) notify_check(p,c,m, MSG_PUP_ALWAYS|MSG_ME)
//#define notify_puppet(p,c,m) notify_check(p,c,m, MSG_ME_ALL|MSG_F_DOWN)
//#define notify_quiet_puppet(p,c,m) notify_check(p,c,m, MSG_ME)
#define notify_all(p,c,m) notify_check(p,c,m, MSG_ME_ALL|MSG_NBR_EXITS|MSG_F_UP|MSG_F_CONTENTS)
#define notify_all_from_inside(p,c,m) notify_check(p,c,m, MSG_ME_ALL|MSG_NBR_EXITS_A|MSG_F_UP|MSG_F_CONTENTS|MSG_S_INSIDE)
#define notify_all_from_inside_saypose(p,c,m) notify_check(p,c,m, MSG_ME_ALL|MSG_NBR_EXITS_A|MSG_F_UP|MSG_F_CONTENTS|MSG_S_INSIDE|MSG_SAYPOSE)
#define notify_all_from_inside_html(p,c,m) notify_check(p,c,m, MSG_ME_ALL|MSG_NBR_EXITS_A|MSG_F_UP|MSG_F_CONTENTS|MSG_S_INSIDE|MSG_HTML)
//#define notify_all_from_outside(p,c,m) notify_check(p,c,m, MSG_ME_ALL|MSG_NBR_EXITS|MSG_F_UP|MSG_F_CONTENTS|MSG_S_OUTSIDE)
extern void notify_except(dbref, dbref, dbref, const char *, int key);
extern void notify_except2(dbref, dbref, dbref, dbref, const char *);
extern void notify_check(dbref, dbref, const char *, int);
extern bool Hearer(dbref);
extern void report(void);
bool atr_match
(
dbref thing,
dbref player,
char type,
char *str,
char *raw_str,
bool check_parents
);
bool list_check
(
dbref thing,
dbref player,
char type,
char *str,
char *raw_str,
bool check_parent
);
extern bool html_escape(const char *src, char *dest, char **destp);
#define DUMP_I_NORMAL 0 // OUTPUT to the outdb through a temporary file.
#define DUMP_I_PANIC 1 // UNLOAD to a crashdb
#define DUMP_I_RESTART 2 // OUTPUT to the inputdb
#define DUMP_I_FLAT 3 // UNLOAD to a .FLAT file
#define DUMP_I_SIGNAL 4 // UNLOAD to a .FLAT file from signal.
#define NUM_DUMP_TYPES 5
extern void dump_database_internal(int);
/* From help.cpp */
extern void helpindex_clean(int);
extern void helpindex_load(dbref);
extern void helpindex_init(void);
extern void help_helper(dbref executor, int iHelpfile, char *topic_arg, char *buff, char **bufc);
/* From htab.cpp */
extern int cf_ntab_access(int *, char *, void *, UINT32, dbref, char *);
/* From log.cpp */
#ifdef WIN32
#define ENDLINE "\r\n"
#else // WIN32
#define ENDLINE "\n"
#endif // WIN32
extern bool start_log(const char *primary, const char *secondary);
extern void end_log(void);
extern void log_perror(const char *, const char *,const char *,
const char *);
extern void log_text(const char *);
extern void log_number(int);
extern void log_name(dbref);
extern void log_name_and_loc(dbref);
extern void log_type_and_name(dbref);
/* From look.cpp */
extern void look_in(dbref,dbref, int);
extern void show_vrml_url(dbref, dbref);
size_t decode_attr_flags(int aflags, char *buff);
/* From move.cpp */
extern void move_object(dbref, dbref);
extern void move_via_generic(dbref, dbref, dbref, int);
extern bool move_via_teleport(dbref, dbref, dbref, int);
extern void move_exit(dbref, dbref, bool, const char *, int);
extern void do_enter_internal(dbref, dbref, bool);
/* From object.cpp */
extern dbref start_home(void);
extern dbref default_home(void);
extern bool can_set_home(dbref, dbref, dbref);
extern dbref new_home(dbref);
extern dbref clone_home(dbref, dbref);
extern void divest_object(dbref);
extern dbref create_obj(dbref, int, const char *, int);
extern void destroy_obj(dbref);
extern void empty_obj(dbref);
/* From player.cpp */
extern dbref create_player(char *name, char *pass, dbref executor, bool isrobot, const char **pmsg);
extern void AddToPublicChannel(dbref player);
extern bool add_player_name(dbref, const char *);
extern bool delete_player_name(dbref, const char *);
extern dbref lookup_player(dbref, char *, bool);
extern void load_player_names(void);
extern void badname_add(char *);
extern void badname_remove(char *);
extern bool badname_check(char *);
extern void badname_list(dbref, const char *);
extern void ChangePassword(dbref player, const char *szPassword);
extern const char *mux_crypt(const char *szPassword, const char *szSalt, int *piType);
/* From predicates.cpp */
extern char * DCL_CDECL tprintf(const char *, ...);
extern void DCL_CDECL safe_tprintf_str(char *, char **, const char *, ...);
extern dbref insert_first(dbref, dbref);
extern dbref remove_first(dbref, dbref);
extern dbref reverse_list(dbref);
extern bool member(dbref, dbref);
extern bool could_doit(dbref, dbref, int);
extern bool can_see(dbref, dbref, bool);
extern void add_quota(dbref, int);
extern bool canpayfees(dbref, dbref, int, int);
extern void giveto(dbref,int);
extern bool payfor(dbref,int);
extern char *MakeCanonicalObjectName(const char *pName, int *pnName, bool *pbValid);
extern char *MakeCanonicalExitName(const char *pName, int *pnName, bool *pbValid);
extern bool ValidatePlayerName(const char *pName);
extern bool ok_password(const char *szPassword, const char **pmsg);
extern void handle_ears(dbref, bool, bool);
extern dbref match_possessed(dbref, dbref, char *, dbref, bool);
extern void parse_range(char **, dbref *, dbref *);
extern bool parse_thing_slash(dbref, char *, char **, dbref *);
extern bool get_obj_and_lock(dbref, char *, dbref *, ATTR **, char *, char **);
extern dbref where_is(dbref);
extern dbref where_room(dbref);
extern bool locatable(dbref, dbref, dbref);
extern bool nearby(dbref, dbref);
extern bool exit_visible(dbref, dbref, int);
extern bool exit_displayable(dbref, dbref, int);
extern void did_it(dbref, dbref, int, const char *, int, const char *, int, char *[], int);
extern bool bCanReadAttr(dbref executor, dbref target, ATTR *tattr, bool bParentCheck);
extern bool bCanSetAttr(dbref executor, dbref target, ATTR *tattr);
extern bool bCanLockAttr(dbref executor, dbref target, ATTR *tattr);
/* From set.cpp */
extern bool parse_attrib(dbref, char *, dbref *, ATTR **);
extern bool parse_attrib_wild(dbref, char *, dbref *, bool, bool, bool);
extern void edit_string(char *, char **, char *, char *);
extern dbref match_controlled_handler(dbref player, const char *name, bool bQuiet);
#define match_controlled(player,name) match_controlled_handler(player, name, false)
#define match_controlled_quiet(player,name) match_controlled_handler(player, name, true)
extern void set_modified(dbref thing);
/* From boolexp.cpp */
extern bool eval_boolexp(dbref, dbref, dbref, BOOLEXP *);
extern BOOLEXP *parse_boolexp(dbref, const char *, bool);
extern bool eval_boolexp_atr(dbref, dbref, dbref, char *);
/* From functions.cpp */
extern bool xlate(char *);
#define IEEE_MAKE_NAN 1
#define IEEE_MAKE_IND 2
#define IEEE_MAKE_PINF 3
#define IEEE_MAKE_NINF 4
double MakeSpecialFloat(int iWhich);
/* From unparse.cpp */
extern char *unparse_boolexp(dbref, BOOLEXP *);
extern char *unparse_boolexp_quiet(dbref, BOOLEXP *);
extern char *unparse_boolexp_decompile(dbref, BOOLEXP *);
extern char *unparse_boolexp_function(dbref, BOOLEXP *);
/* From walkdb.cpp */
int chown_all(dbref from_player, dbref to_player, dbref acting_player, int key);
extern void olist_push(void);
extern void olist_pop(void);
extern void olist_add(dbref);
extern dbref olist_first(void);
extern dbref olist_next(void);
/* From wild.cpp */
extern bool wild(char *, char *, char *[], int);
extern bool wild_match(char *, const char *);
extern bool quick_wild(const char *, const char *);
/* From command.cpp */
extern bool check_access(dbref player, int mask);
extern void set_prefix_cmds(void);
extern char *process_command(dbref executor, dbref caller, dbref enactor, bool,
char *, char *[], int);
#define Protect(f) (cmdp->perms & f)
#define Invalid_Objtype(x) \
((Protect(CA_LOCATION) && !Has_location(x)) || \
(Protect(CA_CONTENTS) && !Has_contents(x)) || \
(Protect(CA_PLAYER) && !isPlayer(x)))
/* from db.cpp */
extern bool Commer(dbref);
extern void s_Pass(dbref, const char *);
extern void s_Name(dbref, const char *);
extern void s_Moniker(dbref thing, const char *s);
extern const char *Name(dbref thing);
extern const char *PureName(dbref thing);
extern const char *Moniker(dbref thing);
extern int fwdlist_load(FWDLIST *, dbref, char *);
extern void fwdlist_set(dbref, FWDLIST *);
extern void fwdlist_clr(dbref);
extern int fwdlist_rewrite(FWDLIST *, char *);
extern FWDLIST *fwdlist_get(dbref);
extern void atr_push(void);
extern void atr_pop(void);
extern int atr_head(dbref, char **);
extern int atr_next(char **);
extern int init_dbfile(char *game_dir_file, char *game_pag_file, int nCachePages);
extern void atr_cpy(dbref dest, dbref source);
extern void atr_chown(dbref);
extern void atr_clr(dbref, int);
extern void atr_add_raw_LEN(dbref, int, const char *, int);
extern void atr_add_raw(dbref, int, const char *);
extern void atr_add(dbref, int, char *, dbref, int);
extern void atr_set_flags(dbref, int, int);
extern const char *atr_get_raw_LEN(dbref, int, size_t *);
extern const char *atr_get_raw(dbref, int);
extern char *atr_get_LEN(dbref, int, dbref *, int *, size_t *);
extern char *atr_get_real(dbref, int, dbref *, int *, const char *, const int);
#define atr_get(t,a,o,f) atr_get_real(t,a,o,f, __FILE__, __LINE__)
extern char *atr_pget_LEN(dbref, int, dbref *, int *, size_t *);
extern char *atr_pget_real(dbref, int, dbref *, int *, const char *, const int);
#define atr_pget(t,a,o,f) atr_pget_real(t,a,o,f, __FILE__, __LINE__)
extern char *atr_get_str_LEN(char *s, dbref, int, dbref *, int *, size_t *);
extern char *atr_get_str(char *, dbref, int, dbref *, int *);
extern char *atr_pget_str_LEN(char *, dbref, int, dbref *, int *, size_t *);
extern char *atr_pget_str(char *, dbref, int, dbref *, int *);
extern bool atr_get_info(dbref, int, dbref *, int *);
extern bool atr_pget_info(dbref, int, dbref *, int *);
extern void atr_free(dbref);
extern bool check_zone_handler(dbref player, dbref thing, bool bPlayerCheck);
#define check_zone(player, thing) check_zone_handler(player, thing, false)
extern void ReleaseAllResources(dbref obj);
extern bool fwdlist_ck(dbref player, dbref thing, int anum, char *atext);
/* Command handler keys */
#define ATTRIB_ACCESS 1 /* Change access to attribute */
#define ATTRIB_RENAME 2 /* Rename attribute */
#define ATTRIB_DELETE 4 /* Delete attribute */
#define ATTRIB_INFO 8 /* Info (number, flags) about attribute */
#define BOOT_QUIET 1 /* Inhibit boot message to victim */
#define BOOT_PORT 2 /* Boot by port number */
#define CEMIT_NOHEADER 1 /* Channel emit without header */
#define CHOWN_ONE 1 /* item = new_owner */
#define CHOWN_ALL 2 /* old_owner = new_owner */
//#define CHOWN_NOSTRIP 4 /* Don't strip (most) flags from object */
#define CHOWN_NOZONE 8 /* Strip zones from objects */
#define CLIST_FULL 1 /* Full listing of channels */
#define CLIST_HEADERS 2 /* Lists channel headers, like "[Public]" */
#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 CBOOT_QUIET 1 // Cboot without a message
#define COMTITLE_ON 1 // Turn Comtitles on.
#define COMTITLE_OFF 2 // Turn Comtitles off.
#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 CSET_PUBLIC 0 /* Sets a channel public */
#define CSET_PRIVATE 1 /* Sets a channel private (default) */
#define CSET_LOUD 2 /* Channel shows connects and disconnects */
#define CSET_QUIET 3 /* Channel doesn't show connects/disconnects */
#define CSET_LIST 4 /* Lists channels */
#define CSET_OBJECT 5 /* Sets the channel object for the channel */
#define CSET_SPOOF 6 /* Sets the channel spoofable */
#define CSET_NOSPOOF 7 /* Sets the channel non-spoofable */
#define CSET_HEADER 8 /* Sets the channel header, like "[Public]" */
#define CSET_LOG 9 // Set maximum number of messages to log.
#define DBCK_DEFAULT 1 /* Get default tests too */
#define DBCK_FULL 2 /* Do all tests */
#define DECOMP_DBREF 1 /* decompile by dbref */
//#define DECOMP_PRETTY 2 /* pretty-format output */
#define DEST_ONE 1 /* object */
#define DEST_OVERRIDE 4 /* override Safe() */
#define DEST_INSTANT 8 /* instantly destroy */
#define DIG_TELEPORT 1 /* teleport to room after @digging */
#define DOLIST_SPACE 0 /* expect spaces as delimiter */
#define DOLIST_DELIMIT 1 /* expect custom delimiter */
#define DOLIST_NOTIFY 2 /* Send an @notify after the @dolist is completed */
#define DOING_MESSAGE 0 /* Set my DOING message */
#define DOING_HEADER 1 /* Set the DOING header */
#define DOING_POLL 2 /* List DOING header */
#define DOING_UNIQUE 3 // Set DOING message for current port only
#define DOING_MASK 15 // Lower four bits form non-SW_MULTIPLE part.
#define DOING_QUIET 16 // Set DOING messages without 'Set.' message.
#define DROP_QUIET 1 /* Don't do odrop/adrop if control */
#define DUMP_STRUCT 1 /* Dump flat structure file */
#define DUMP_TEXT 2 /* Dump to external attribute database. */
#define DUMP_FLATFILE 4 /* Dump .FLAT 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 EXAM_PRETTY 16 /* Pretty-format output */
//#define EXAM_PAIRS 32 /* Print paren matches in color */
#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_NAME 2048 /* Set NAME attribute */
#define FLAG_REMOVE 1 // Remove a flag alias
#define GET_QUIET 1 /* Don't do osucc/asucc if control */
#define GIVE_QUIET 64 /* Inhibit give messages */
#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 HOOK_BEFORE 1 /* BEFORE hook */
#define HOOK_AFTER 2 /* AFTER hook */
#define HOOK_PERMIT 4 /* PERMIT hook */
#define HOOK_IGNORE 8 /* IGNORE hook */
#define HOOK_IGSWITCH 16 /* BFAIL hook */
#define HOOK_AFAIL 32 /* AFAIL hook */
#define HOOK_CLEAR 64 /* CLEAR hook */
#define HOOK_LIST 128 /* LIST hooks */
#define ICMD_DISABLE 0
#define ICMD_IGNORE 1
#define ICMD_ON 2
#define ICMD_OFF 4
#define ICMD_CLEAR 8
#define ICMD_CHECK 16
#define ICMD_DROOM 32
#define ICMD_IROOM 64
#define ICMD_CROOM 128
#define ICMD_LROOM 256
#define ICMD_LALLROOM 512
#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_OUTSIDE 8 /* look for object in container of player */
#define MAIL_STATS 1 /* Mail stats */
#define MAIL_DSTATS 2 /* More mail stats */
#define MAIL_FSTATS 3 /* Even more mail stats */
#define MAIL_DEBUG 4 /* Various debugging options */
#define MAIL_NUKE 5 /* Nuke the post office */
#define MAIL_FOLDER 6 /* Do folder stuff */
#define MAIL_LIST 7 /* List @mail by time */
#define MAIL_READ 8 /* Read @mail message */
#define MAIL_CLEAR 9 /* Clear @mail message */
#define MAIL_UNCLEAR 10 /* Unclear @mail message */
#define MAIL_PURGE 11 /* Purge cleared @mail messages */
#define MAIL_FILE 12 /* File @mail in folders */
#define MAIL_TAG 13 /* Tag @mail messages */
#define MAIL_UNTAG 14 /* Untag @mail messages */
#define MAIL_FORWARD 15 /* Forward @mail messages */
#define MAIL_SEND 16 /* Send @mail messages in progress */
#define MAIL_EDIT 17 /* Edit @mail messages in progress */
#define MAIL_URGENT 18 /* Sends a @mail message as URGENT */
#define MAIL_ALIAS 19 /* Creates an @mail alias */
#define MAIL_ALIST 20 /* Lists @mail aliases */
#define MAIL_PROOF 21 /* Proofs @mail messages in progress */
#define MAIL_ABORT 22 /* Aborts @mail messages in progress */
#define MAIL_QUICK 23 /* Sends a quick @mail message */
#define MAIL_REVIEW 24 /* Reviews @mail sent to a player */
#define MAIL_RETRACT 25 /* Retracts @mail sent to a player */
#define MAIL_CC 26 /* Carbon copy */
#define MAIL_SAFE 27 /* Defines a piece of mail as safe. */
#define MAIL_REPLY 28 /* Replies to a message. */
#define MAIL_REPLYALL 29 /* Replies to all recipients of msg */
#define MAIL_BCC 30 // Blind Carbon Copy. Don't show the recipient list to these.
#define MAIL_QUOTE 0x100 /* Quote back original in the reply? */
#define MALIAS_DESC 1 /* Describes a mail alias */
#define MALIAS_CHOWN 2 /* Changes a mail alias's owner */
#define MALIAS_ADD 3 /* Adds a player to an alias */
#define MALIAS_REMOVE 4 /* Removes a player from an alias */
#define MALIAS_DELETE 5 /* Deletes a mail alias */
#define MALIAS_RENAME 6 /* Renames a mail alias */
#define MALIAS_LIST 8 /* Lists mail aliases */
#define MALIAS_STATUS 9 /* Status of mail aliases */
#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 MOTD_BRIEF 16 /* Suppress motd file display for wizards */
#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 NFY_QUIET 3 /* Suppress "Notified." message */
#define OPEN_LOCATION 0 /* Open exit in my location */
#define OPEN_INVENTORY 1 /* Open exit in me */
#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 PEMIT_HERE 16 /* Send to location (@femit, additive) */
#define PEMIT_ROOM 32 /* Send to containing rm (@femit, additive) */
#define PEMIT_LIST 64 /* Send to a list */
#define PEMIT_HTML 128 /* HTML escape, and no newline */
#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 QUERY_SQL 1 /* SQL query */
#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 QUOTA_ROOM 32 /* Room quota set */
//#define QUOTA_EXIT 64 /* Exit quota set */
//#define QUOTA_THING 128 /* Thing quota set */
//#define QUOTA_PLAYER 256 /* Player quota set */
#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 formatting */
#define SAY_EMIT 5 /* emit in current room */
#define SAY_NOEVAL 8 // Don't eval message
#define SHOUT_SHOUT 1 /* shout to all logged-in players */
#define SHOUT_WALLPOSE 2 /* Pose to all logged-in players */
#define SHOUT_WALLEMIT 3 /* Emit to all logged-in players */
#define SHOUT_WIZSHOUT 4 /* shout to all logged-in wizards */
#define SHOUT_WIZPOSE 5 /* Pose to all logged-in wizards */
#define SHOUT_WIZEMIT 6 /* Emit to all logged-in wizards */
#define SHOUT_ADMINSHOUT 7 /* Emit to all wizards or royalty */
//#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 SAY_HTML 256 /* Don't output a newline */
#define SET_QUIET 1 /* Don't display 'Set.' message. */
#define SHOUT_DEFAULT 0 /* Default @wall message */
#define SHOUT_WIZARD 1 /* @wizwall */
#define SHOUT_ADMIN 2 /* @wall/admin */
#define SHUTDN_NORMAL 0 /* Normal shutdown */
#define SHUTDN_PANIC 1 /* Write a panic dump file */
#define SHUTDN_EXIT 2 /* Exit from shutdown code */
#define SHUTDN_COREDUMP 4 /* Produce a coredump */
#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 SWEEP_SCAN 128 /* Scan for pattern matching */
#define SWEEP_VERBOSE 256 /* Display what pattern matches */
#define TELEPORT_DEFAULT 1 /* Emit all messages */
#define TELEPORT_QUIET 2 /* Teleport in quietly */
#define TELEPORT_LIST 4 /* Teleport a list of items */
#define TIMECHK_RESET 1 /* Reset all counters to zero */
#define TIMECHK_SCREEN 2 /* Write info to screen */
#define TIMECHK_LOG 4 /* Write info to log */
#define TOAD_NO_CHOWN 1 /* Don't change ownership */
#define TRIG_QUIET 1 /* Don't display 'Triggered.' message. */
#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 */
/* empty 16 */
#define TWARP_EVENTS 32 /* Warp the events checking interval */
#define WAIT_UNTIL 1 // Absolute UTC seconds instead of delta.
/* 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_FIGNORE 0x00000000 /* Don't look for func if () found */
#define EV_FMAND 0x00000100 /* Text before () must be func name */
#define EV_FCHECK 0x00000200 /* Check text before () for function */
#define EV_STRIP_CURLY 0x00000400 /* Strip one level of brackets */
#define EV_EVAL 0x00000800 /* Evaluate results before returning */
#define EV_STRIP_TS 0x00001000 /* Strip trailing spaces */
#define EV_STRIP_LS 0x00002000 /* Strip leading spaces */
#define EV_STRIP_ESC 0x00004000 /* Strip one level of \ characters */
#define EV_STRIP_AROUND 0x00008000 /* Strip {} only at ends of string */
#define EV_TOP 0x00010000 /* This is a toplevel call to eval() */
#define EV_NOTRACE 0x00020000 /* Don't trace this call to eval */
#define EV_NO_COMPRESS 0x00040000 /* Don't compress spaces. */
#define EV_NO_LOCATION 0x00080000 /* Supresses %l */
#define EV_NOFCHECK 0x00100000 /* Do not evaluate functions! */
/* Message forwarding directives */
#define MSG_PUP_ALWAYS 0x00000001UL /* Always forward msg to puppet owner */
#define MSG_INV 0x00000002UL /* Forward msg to contents */
#define MSG_INV_L 0x00000004UL /* ... only if msg passes my @listen */
#define MSG_INV_EXITS 0x00000008UL /* Forward through my audible exits */
#define MSG_NBR 0x00000010UL /* Forward msg to neighbors */
#define MSG_NBR_A 0x00000020UL /* ... only if I am audible */
#define MSG_NBR_EXITS 0x00000040UL /* Also forward to neighbor exits */
#define MSG_NBR_EXITS_A 0x00000080UL /* ... only if I am audible */
#define MSG_LOC 0x00000100UL /* Send to my location */
#define MSG_LOC_A 0x00000200UL /* ... only if I am audible */
#define MSG_FWDLIST 0x00000400UL /* Forward to my fwdlist members if aud */
#define MSG_ME 0x00000800UL /* Send to me */
#define MSG_S_INSIDE 0x00001000UL /* Originator is inside target */
#define MSG_S_OUTSIDE 0x00002000UL /* Originator is outside target */
#define MSG_HTML 0x00004000UL /* Don't send \r\n */
#define MSG_OOC 0x00008000UL /* Overide visibility rules because it's OOC */
#define MSG_SAYPOSE 0x00010000UL /* Indicates that the message is speech. */
#define MSG_ME_ALL (MSG_ME|MSG_INV_EXITS|MSG_FWDLIST)
#define MSG_F_CONTENTS (MSG_INV)
#define MSG_F_UP (MSG_NBR_A|MSG_LOC_A)
#define MSG_F_DOWN (MSG_INV_L)
/* Look primitive directives */
#define LK_IDESC 0x0001
#define LK_OBEYTERSE 0x0002
#define LK_SHOWATTR 0x0004
#define LK_SHOWEXIT 0x0008
#define LK_SHOWVRML 0x0010
/* Quota types */
//#define QTYPE_ALL 0
//#define QTYPE_ROOM 1
//#define QTYPE_EXIT 2
//#define QTYPE_THING 3
//#define QTYPE_PLAYER 4
/* Exit visibility precalculation codes */
#define VE_LOC_XAM 0x01 /* Location is examinable */
#define VE_LOC_DARK 0x02 /* Location is dark */
#define VE_LOC_LIGHT 0x04 /* Location is light */
//#define VE_BASE_XAM 0x08 /* Base location (pre-parent) is examinable */
#define VE_BASE_DARK 0x10 /* Base location (pre-parent) is dark */
//#define VE_BASE_LIGHT 0x20 /* Base location (pre-parent) is light */
/* Signal handling directives */
#define SA_EXIT 1 /* Exit, and dump core */
#define SA_DFLT 2 /* Try to restart on a fatal error */
#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
extern const char *NOMATCH_MESSAGE;
extern const char *AMBIGUOUS_MESSAGE;
extern const char *NOPERM_MESSAGE;
extern const char *FUNC_FAIL_MESSAGE;
extern const char *FUNC_NOMATCH_MESSAGE;
extern const char *OUT_OF_RANGE;
extern const char *FUNC_NOT_FOUND;
extern const char *FUNC_AMBIGUOUS;
extern const char *FUNC_NOPERM_MESSAGE;
#define safe_nothing(b,p) safe_copy_buf(FUNC_FAIL_MESSAGE,3,(b),(p))
#define safe_noperm(b,p) safe_copy_buf(FUNC_NOPERM_MESSAGE,21,(b),(p))
#define safe_nomatch(b,p) safe_copy_buf(FUNC_NOMATCH_MESSAGE,12,(b),(p))
#define safe_range(b,p) safe_copy_buf(OUT_OF_RANGE,16,(b),(p))
#define safe_ambiguous(b,p) safe_copy_buf(FUNC_AMBIGUOUS,13,(b),(p))
#define safe_notfound(b,p) safe_copy_buf(FUNC_NOT_FOUND,13,(b),(p))
extern int ReplaceFile(char *old_name, char *new_name);
extern void RemoveFile(char *name);
extern void destroy_player(dbref agent, dbref victim);
extern void do_pemit_list
(
dbref player,
int key,
bool bDoContents,
int pemit_flags,
char *list,
int chPoseType,
char *message
);
extern void do_pemit_single
(
dbref player,
int key,
bool bDoContents,
int pemit_flags,
char *recipient,
int chPoseType,
char *message
);
extern void do_say(dbref executor, dbref caller, dbref enactor, int key,
char *message);
extern int boot_off(dbref player, const char *message);
extern void do_mail_clear(dbref player, char *msglist);
extern void do_mail_purge(dbref player);
extern void malias_cleanup(dbref player);
extern void count_mail(dbref player, int folder, int *rcount, int *ucount, int *ccount);
extern void check_mail_expiration(void);
extern void check_mail(dbref player, int folder, bool silent);
extern const char *mail_fetch_message(dbref player, int num);
extern int mail_fetch_from(dbref player, int num);
extern void raw_notify_html(dbref player, const char *msg);
extern void do_lock(dbref executor, dbref caller, dbref enactor, int key,
int nargs, char *name, char *keytext);
extern void check_events(void);
extern void list_system_resources(dbref player);
#if defined(WOD_REALMS) || defined(REALITY_LVLS)
#define ACTION_IS_STATIONARY 0
#define ACTION_IS_MOVING 1
#define ACTION_IS_TALKING 2
#define NUMBER_OF_ACTIONS 3 // A count, n, of the number of possible actions 0...n-1
#define REALM_DO_NORMALLY_SEEN 1
#define REALM_DO_HIDDEN_FROM_YOU 2
#define REALM_DO_SHOW_OBFDESC 3
#define REALM_DO_SHOW_WRAITHDESC 4
#define REALM_DO_SHOW_UMBRADESC 5
#define REALM_DO_SHOW_MATRIXDESC 6
#define REALM_DO_SHOW_FAEDESC 7
#define REALM_DO_MASK 7
#define REALM_DISABLE_ADESC 0x00000008L
extern int DoThingToThingVisibility(dbref looker, dbref lookee, int action_state);
#endif // WOD_REALMS
typedef struct
{
int port;
SOCKET socket;
} PortInfo;
#define MAX_LISTEN_PORTS 10
extern PortInfo aMainGamePorts[MAX_LISTEN_PORTS];
extern int nMainGamePorts;
#ifdef WIN32
extern DWORD platform;
#else // WIN32
extern int maxd;
#endif // WIN32
extern unsigned int ndescriptors;
extern long DebugTotalFiles;
extern long DebugTotalSockets;
#ifdef WIN32
extern int game_pid;
extern long DebugTotalThreads;
extern long DebugTotalSemaphores;
extern HANDLE hGameProcess;
typedef BOOL __stdcall FCANCELIO(HANDLE hFile);
typedef BOOL __stdcall FGETPROCESSTIMES(HANDLE hProcess,
LPFILETIME pftCreate, LPFILETIME pftExit, LPFILETIME pftKernel,
LPFILETIME pftUser);
extern FCANCELIO *fpCancelIo;
extern FGETPROCESSTIMES *fpGetProcessTimes;
#else // WIN32
extern pid_t game_pid;
#endif // WIN32
extern void init_timer(void);
// Using a heap as the data structure for representing this priority
// has some attributes which we depend on:
//
// 1. Most importantly, actions scheduled for the same time (i.e.,
// immediately) keep the order that they were inserted into the
// heap.
//
// If you ever re-implement this object using another data structure,
// please remember to maintain the properties properties.
//
typedef void FTASK(void *, int);
typedef struct
{
CLinearTimeAbsolute ltaWhen;
int iPriority;
int m_Ticket; // This is the order in which the task was scheduled.
FTASK *fpTask;
void *arg_voidptr;
int arg_Integer;
int m_iVisitedMark;
} TASK_RECORD, *PTASK_RECORD;
#define PRIORITY_SYSTEM 100
#define PRIORITY_PLAYER 200
#define PRIORITY_OBJECT 300
#define PRIORITY_SUSPEND 400
// CF_DEQUEUE driven minimum priority levels.
//
#define PRIORITY_CF_DEQUEUE_ENABLED PRIORITY_OBJECT
#define PRIORITY_CF_DEQUEUE_DISABLED (PRIORITY_PLAYER-1)
typedef int SCHCMP(PTASK_RECORD, PTASK_RECORD);
typedef int SCHLOOK(PTASK_RECORD);
class CTaskHeap
{
private:
int m_nAllocated;
int m_nCurrent;
PTASK_RECORD *m_pHeap;
int m_iVisitedMark;
bool Grow(void);
void SiftDown(int, SCHCMP *);
void SiftUp(int, SCHCMP *);
PTASK_RECORD Remove(int, SCHCMP *);
void Update(int iNode, SCHCMP *pfCompare);
void Sort(SCHCMP *pfCompare);
void Remake(SCHCMP *pfCompare);
public:
CTaskHeap();
~CTaskHeap();
void Insert(PTASK_RECORD, SCHCMP *);
PTASK_RECORD PeekAtTopmost(void);
PTASK_RECORD RemoveTopmost(SCHCMP *);
void CancelTask(FTASK *fpTask, void *arg_voidptr, int arg_Integer);
#define IU_DONE 0
#define IU_NEXT_TASK 1
#define IU_REMOVE_TASK 2
#define IU_UPDATE_TASK 3
int TraverseUnordered(SCHLOOK *pfLook, SCHCMP *pfCompare);
int TraverseOrdered(SCHLOOK *pfLook, SCHCMP *pfCompare);
};
class CScheduler
{
private:
CTaskHeap m_WhenHeap;
CTaskHeap m_PriorityHeap;
int m_Ticket;
int m_minPriority;
public:
void TraverseUnordered(SCHLOOK *pfLook);
void TraverseOrdered(SCHLOOK *pfLook);
CScheduler(void) { m_Ticket = 0; m_minPriority = PRIORITY_CF_DEQUEUE_ENABLED; }
void DeferTask(const CLinearTimeAbsolute& ltWhen, int iPriority, FTASK *fpTask, void *arg_voidptr, int arg_Integer);
void DeferImmediateTask(int iPriority, FTASK *fpTask, void *arg_voidptr, int arg_Integer);
bool WhenNext(CLinearTimeAbsolute *);
int RunTasks(int iCount);
int RunAllTasks(void);
int RunTasks(const CLinearTimeAbsolute& tNow);
void ReadyTasks(const CLinearTimeAbsolute& tNow);
void CancelTask(FTASK *fpTask, void *arg_voidptr, int arg_Integer);
void SetMinPriority(int arg_minPriority);
int GetMinPriority(void) { return m_minPriority; }
};
extern CScheduler scheduler;
extern int fetch_cmds(dbref target);
void fetch_ConnectionInfoFields(dbref target, long anFields[4]);
long fetch_ConnectionInfoField(dbref target, int iField);
void put_ConnectionInfoFields
(
dbref target,
long anFields[4],
CLinearTimeAbsolute <aLogout
);
// Added by D.Piper (del@doofer.org) 2000-APR
//
// In order:
//
// Total online time
// Longest connection duration
// Duration of last connection
// Total number of connections.
// time (time_t) of last logout.
//
#define CIF_TOTALTIME 0
#define CIF_LONGESTCONNECT 1
#define CIF_LASTCONNECT 2
#define CIF_NUMCONNECTS 3
#define fetch_totaltime(t) (fetch_ConnectionInfoField((t), CIF_TOTALTIME))
#define fetch_longestconnect(t) (fetch_ConnectionInfoField((t), CIF_LONGESTCONNECT))
#define fetch_lastconnect(t) (fetch_ConnectionInfoField((t), CIF_LASTCONNECT))
#define fetch_numconnections(t) (fetch_ConnectionInfoField((t), CIF_NUMCONNECTS))
CLinearTimeAbsolute fetch_logouttime(dbref target);
// From strtod.cpp
//
extern void FLOAT_Initialize(void);
void mux_FPInit();
void mux_FPSet();
void mux_FPRestore();
double ulp(double);
double mux_strtod(const char *s00, char **se);
char *mux_dtoa(double d, int mode, int ndigits, int *decpt, int *sign,
char **rve);
#endif // EXTERNS_H