/* config.h */
#ifndef __CONFIG_H
#define __CONFIG_H
#include "copyrite.h"
#include "options.h"
#ifdef __GNUC__
#define INLINE inline
#else
#define INLINE
#endif
/*----- Miscellaneous other stuff -----*/
#define God(x) ((x) == GOD)
/* limit on player name length */
#define PLAYER_NAME_LIMIT 16
/* magic cookies */
#define LOOKUP_TOKEN '*'
#define NUMBER_TOKEN '#'
#define ARG_DELIMITER '='
/* magic command cookies */
#define SAY_TOKEN '"'
#define POSE_TOKEN ':'
#define SEMI_POSE_TOKEN ';'
#define EMIT_TOKEN '\\'
#define CHAT_TOKEN '+'
/* delimiter for lists of exit aliases */
#define EXIT_DELIMITER ';'
#define OBJECT_ENDOWMENT(cost) (((cost)-5)/5)
/* added for recycling, return value of object */
#define OBJECT_DEPOSIT(pennies) ((pennies)*5+5)
#define QUIT_COMMAND "QUIT"
#define WHO_COMMAND "WHO"
#define LOGOUT_COMMAND "LOGOUT"
#define INFO_COMMAND "INFO"
#define INFO_VERSION "1"
#define DOING_COMMAND "DOING"
#define PREFIX_COMMAND "OUTPUTPREFIX"
#define SUFFIX_COMMAND "OUTPUTSUFFIX"
#define PUEBLO_COMMAND "PUEBLOCLIENT "
/* These CAN be modified, but it's heavily NOT suggested */
#define PUEBLO_SEND "</xch_mudtext><img xch_mode=purehtml><xch_page clear=text><body bgcolor=#000000 fgcolor=#C0C0C0>\n"
#define PUEBLO_HELLO "This world is Pueblo 1.10 Enhanced. See http://www.chaco.com/pueblo/\r\n"
/*----- intrface.c stuff -----*/
#define MAX_OUTPUT 16384
/* How much output buffer space must be left before we flush the
* buffer? Reportedly, using '0' fixes problems with Win32 port,
* and may be more efficient in network use. Using (MAX_OUTPUT / 2)
* is how it's been done in the past. You get to pick.
*/
#define SPILLOVER_THRESHOLD 0
/* #define SPILLOVER_THRESHOLD (MAX_OUTPUT / 2) */
#define COMMAND_TIME_MSEC 1000 /* time slice length in milliseconds */
#define COMMAND_BURST_SIZE 100 /* commands allowed per user in a burst */
#define COMMANDS_PER_TIME 1 /* commands per time slice after burst */
/* --- DO NOT CHANGE ANYTHING BELOW THIS LINE --- */
typedef struct fblock_header FBLKHDR;
typedef struct filecache_block FBLOCK;
#define FBLOCK_SIZE (256 - sizeof(FBLKHDR))
struct fblock_header {
FBLOCK *nxt;
int nchars;
};
struct filecache_block {
FBLKHDR hdr;
char data[FBLOCK_SIZE];
};
typedef struct options_table OPTTAB;
struct options_table {
char mud_name[128];
int port;
char input_db[256];
char output_db[256];
char crash_db[256];
char mail_db[256];
int player_start;
int master_room;
int idle_timeout;
int dump_interval;
char dump_message[256];
char dump_complete[256];
long dump_counter;
int ident_timeout;
int max_logins;
int whisper_loudness;
int blind_page;
int paycheck;
int starting_money;
int starting_quota;
int player_queue_limit;
int queue_chunk;
int active_q_chunk;
int func_nest_lim;
int func_invk_lim;
char log_wipe_passwd[256];
char money_singular[32];
char money_plural[32];
char compressprog[256];
char uncompressprog[256];
char compresssuff[256];
char help_file[256];
char help_index[256];
char news_file[256];
char news_index[256];
char events_file[256];
char events_index[256];
#ifdef CHAT_SYSTEM
char chatdb[256];
int max_player_chans;
int max_channels;
int chan_cost;
#endif
char connect_file[2][256];
char motd_file[2][256];
char wizmotd_file[2][256];
char newuser_file[2][256];
char register_file[2][256];
char quit_file[2][256];
char down_file[2][256];
char full_file[2][256];
char guest_file[2][256];
FBLOCK *connect_fcache[2];
FBLOCK *motd_fcache[2];
FBLOCK *wizmotd_fcache[2];
FBLOCK *newuser_fcache[2];
FBLOCK *register_fcache[2];
FBLOCK *quit_fcache[2];
FBLOCK *down_fcache[2];
FBLOCK *full_fcache[2];
FBLOCK *guest_fcache[2];
int log_commands;
int log_huhs;
int log_forces;
int log_walls;
int support_pueblo;
int login_allow;
int guest_allow;
int create_allow;
int daytime;
int player_flags;
int room_flags;
int exit_flags;
int thing_flags;
int player_toggles;
int room_toggles;
int exit_toggles;
int thing_toggles;
int use_rwho;
int rwho_interval;
long rwho_counter;
int rwho_port;
char rwho_host[64];
char rwho_pass[64];
#ifdef USE_WARNINGS
int warn_interval;
long warn_counter;
#endif
int base_room;
int use_dns;
int haspower_restricted;
int safer_ufun;
char dump_warning_1min[256];
char dump_warning_5min[256];
char index_file[256];
char index_index[256];
char rules_file[256];
char rules_index[256];
int hate_dest;
int noisy_whisper;
int possessive_get;
int possessive_get_d;
int really_safe;
int destroy_possessions;
int null_eq_zero;
int tiny_booleans;
int tiny_trim_fun;
int tiny_math;
int adestroy;
int amail;
int player_listen;
int player_ahear;
int room_connects;
int ansi_names;
int ansi_justify;
int comma_exit_list;
int count_all;
int exits_connect_rooms;
int link_to_object;
int owner_queues;
int wiz_noaenter;
int use_ident;
char ip_addr[64];
int player_name_spaces;
int forking_dump;
int military_time;
int restrict_building;
int free_objects;
int flags_on_examine;
int ex_public_attribs;
int tiny_attrs;
int full_invis;
int silent_pemit;
int player_locate;
int globals;
int global_connects;
int paranoid_nospoof;
int max_dbref;
char wizwall_prefix[256];
char rwall_prefix[256];
char wall_prefix[256];
char access_file[256];
char names_file[256];
int object_cost;
int exit_cost;
int link_cost;
int room_cost;
int queue_cost;
int quota_cost;
int find_cost;
int page_cost;
int kill_default_cost;
int kill_min_cost;
int kill_bonus;
int queue_loss;
int max_obj_value;
int max_wiz_obj_value;
int max_pennies;
int max_depth;
int max_parents;
int purge_interval;
int dbck_interval;
};
extern OPTTAB options;
typedef struct confparm CONF;
struct confparm {
const char *name; /* name of option */
/* the function handler */
void (*handler) ();
/* This should be:
* void (*handler) _((char *opt, char *val, int *loc, int maxval));
* but some compilers (ultrix 4.2, for example) totally barf, *sigh*
*/
int *loc; /* place to put this option */
int max; /* max: string length, integer value */
int overridden; /* Has the default been overridden? */
const char *group; /* The option's group name */
};
/* Config group viewing permissions */
#define CGP_GOD 0x1
#define CGP_WIZARD 0x3
#define CGP_ADMIN 0x7
#define Can_View_Config_Group(p,g) \
(!(g->viewperms) || (God(p) && (g->viewperms & CGP_GOD)) || \
(Wizard(p) && (g->viewperms & CGP_WIZARD)) || \
(Hasprivs(p) && (g->viewperms & CGP_ADMIN)))
#define DUMP_INTERVAL (options.dump_interval)
#define DUMP_NOFORK_MESSAGE (options.dump_message)
#define DUMP_NOFORK_COMPLETE (options.dump_complete)
#define INACTIVITY_LIMIT (options.idle_timeout)
#define MAX_LOGINS (options.max_logins)
#define HELPTEXT (options.help_file)
#define HELPINDX (options.help_index)
#define NEWS_FILE (options.news_file)
#define NEWSINDX (options.news_index)
#define EVENT_FILE (options.events_file)
#define EVENTINDX (options.events_index)
/* dbrefs are in the conf file */
#define TINYPORT (options.port)
#define PLAYER_START (options.player_start)
#define MASTER_ROOM (options.master_room)
#define MONEY (options.money_singular)
#define MONIES (options.money_plural)
#define WHISPER_LOUDNESS (options.whisper_loudness)
#define BLIND_PAGE (options.blind_page)
#define START_BONUS (options.starting_money)
#define PAY_CHECK (options.paycheck)
#define START_QUOTA (options.starting_quota)
#define LOG_WIPE_PASSWD (options.log_wipe_passwd)
#define SUPPORT_PUEBLO (options.support_pueblo)
#define QUEUE_QUOTA (options.player_queue_limit)
#define MUDNAME (options.mud_name)
#define DEF_DB_IN (options.input_db)
#define DEF_DB_OUT (options.output_db)
#define BASE_ROOM (options.base_room)
#define USE_RWHO (options.use_rwho)
#define RWHO_INTERVAL (options.rwho_interval)
#define RWHOSERV (options.rwho_host)
#define RWHOPORT (options.rwho_port)
#define RWHOPASS (options.rwho_pass)
#define PURGE_INTERVAL (options.purge_interval)
#define DBCK_INTERVAL (options.dbck_interval)
#define MAX_PARENTS (options.max_parents)
#define MAX_DEPTH (options.max_depth)
#define MAX_PENNIES (options.max_pennies)
#define MAX_OBJECT_ENDOWMENT (options.max_obj_value)
#define MAX_WIZ_OBJECT_ENDOWMENT (options.max_wiz_obj_value)
#define DBTOP_MAX (options.max_dbref)
#define QUEUE_LOSS (options.queue_loss)
#define MAX_ARG 63
#define KILL_BONUS (options.kill_bonus)
#define KILL_MIN_COST (options.kill_min_cost)
#define KILL_BASE_COST (options.kill_default_cost)
#define FIND_COST (options.find_cost)
#define PAGE_COST (options.page_cost)
#define QUOTA_COST (options.quota_cost)
#define QUEUE_COST (options.queue_cost)
#define ROOM_COST (options.room_cost)
#define LINK_COST (options.link_cost)
#define EXIT_COST (options.exit_cost)
#define OBJECT_COST (options.object_cost)
#define GOD ((dbref) 1)
#define ACCESS_FILE (options.access_file)
#define NAMES_FILE (options.names_file)
#define PARANOID_NOSPOOF (options.paranoid_nospoof)
#define GLOBAL_CONNECTS (options.global_connects)
#define DO_GLOBALS (options.globals)
#define PLAYER_LOCATE (options.player_locate)
#define SILENT_PEMIT (options.silent_pemit)
#define PLAYER_LISTEN (options.player_listen)
#define PLAYER_AHEAR (options.player_ahear)
#define FULL_INVIS (options.full_invis)
#define TINY_ATTRS (options.tiny_attrs)
#define EX_PUBLIC_ATTRIBS (options.ex_public_attribs)
#define FLAGS_ON_EXAMINE (options.flags_on_examine)
#define FREE_OBJECTS (options.free_objects)
#define RESTRICTED_BUILDING (options.restrict_building)
#define MILITARY_TIME (options.military_time)
#define NO_FORK (!options.forking_dump)
#define PLAYER_NAME_SPACES (options.player_name_spaces)
#define ANSI_JUSTIFY (options.ansi_justify)
#define HASPOWER_RESTRICTED (options.haspower_restricted)
#define SAFER_UFUN (options.safer_ufun)
#define INDEX_FILE (options.index_file)
#define INDEXINDX (options.index_index)
#define RULES_FILE (options.rules_file)
#define RULESINDX (options.rules_index)
#define HATE_DEST (options.hate_dest)
#define NOISY_WHISPER (options.noisy_whisper)
#define POSSESSIVE_GET (options.possessive_get)
#define POSSGET_ON_DISCONNECTED (options.possessive_get_d)
#define REALLY_SAFE (options.really_safe)
#define DESTROY_POSSESSIONS (options.destroy_possessions)
#define NULL_EQ_ZERO (options.null_eq_zero)
#define TINY_BOOLEANS (options.tiny_booleans)
#define TINY_TRIM_FUN (options.tiny_trim_fun)
#define ADESTROY_ATTR (options.adestroy)
#define AMAIL_ATTR (options.amail)
#define ROOM_CONNECTS (options.room_connects)
#define ANSI_NAMES (options.ansi_names)
#define COMMA_EXIT_LIST (options.comma_exit_list)
#define COUNT_ALL (options.count_all)
#define EXITS_CONNECT_ROOMS (options.exits_connect_rooms)
#define WIZWALL_PREFIX (options.wizwall_prefix)
#define RWALL_PREFIX (options.rwall_prefix)
#define WALL_PREFIX (options.wall_prefix)
#define NO_LINK_TO_OBJECT (!options.link_to_object)
#define QUEUE_PER_OWNER (options.owner_queues)
#define WIZ_NOAENTER (options.wiz_noaenter)
#define USE_IDENT (options.use_ident)
#define MUSH_IP_ADDR (options.ip_addr)
#ifdef WIN32
/* --------------- Stuff for Win32 services ------------------ */
/*
NJG:
When "exit" is called to handle an error condition, we really want to
terminate the game thread, not the whole process.
*/
#define exit(arg) Win32_Exit (arg)
void Win32_Exit(int exit_code);
#endif /* WIN32 */
#endif /* __OPTIONS_H */