/*
* Copyright (C) 1995-1997 Christopher D. Granz
*
* This header may not be removed.
*
* Refer to the file "License" included in this package for further
* information and before using any of the following.
*/
#ifndef __SAPPHIRE_H__
#define __SAPPHIRE_H__
#include <stdio.h>
#include <stdarg.h>
#include <signal.h>
#include <setjmp.h>
#include <time.h>
#include <limits.h>
#include <errno.h>
/*
* Defines
*/
#define COPYRIGHT_NOTICE "\n\r" \
" Sapphire MUD Server v0.3\n\r" \
" Copyright (C) 1995-1997 Christopher D. Granz\n\r\n\r" \
#ifdef DEBUG
#define TEMP_ALLOC( p, s ) \
if ( ( p = alloca( s ) ) == NULL ) \
{ \
lprintf( "**** [SYSTEM]:\n " \
"Cannot allocate %ld bytes of stack memory.\n", \
(long) s ); \
abort( ); \
} \
else \
zero_out( p, s );
#else
#define TEMP_ALLOC( p, s ) \
if ( ( p = alloca( s ) ) == NULL ) \
{ \
lprintf( "**** [SYSTEM]:\n " \
"Cannot allocate %ld bytes of stack memory.\n", \
(long) s ); \
exit( 1 ); \
} \
else \
zero_out( p, s );
#endif
#define VA_START va_start
#define VA_END va_end
#define VA_ARG va_arg
#ifndef MAX
#define MAX( a, b ) ( ( (a) > (b) ) ? (a) : (b) )
#endif
#ifndef MIN
#define MIN( a, b ) ( ( (a) < (b) ) ? (a) : (b) )
#endif
#define UPPER( c ) ( (c) >= 'a' && (c) <= 'z' ? (c) - 'a' + 'A' : (c) )
#define LOWER( c ) ( (c) >= 'A' && (c) <= 'Z' ? (c) - 'A' + 'a' : (c) )
#define IS_SET( v, f ) ( (v) & (f) )
#define SET_FLAG( v, f ) ( (v) |= (f) )
#define REMOVE_FLAG( v, f ) ( (v) &= ~(f) )
#define KEY( match, field, value ) \
if ( str_compare( pBuf, (match) ) == TRUE ) \
{ \
(field) = (value); \
bFoundMatch = TRUE; \
}
#define SDKEY( match, field, value ) \
if ( str_compare( pBuf, (match) ) == TRUE ) \
{ \
if ( (field) != NULL && (field) != EMPTY_STRING ) \
free_mem( (void **) &(field) ); \
\
(field) = str_dup( (value) ); \
bFoundMatch = TRUE; \
}
#define SSKEY( match, field, value ) \
if ( str_compare( pBuf, (match) ) == TRUE ) \
{ \
free_string( &(field) ); \
(field) = save_string( (value) ); \
bFoundMatch = TRUE; \
}
#ifdef MAX_INPUT
#undef MAX_INPUT
#endif
#ifdef MAX_STRING
#undef MAX_STRING
#endif
#define MAX_INPUT 256
#define MAX_STRING 8192
#define MAX_INDEX_NUMBER (INT_MAX - 1)
#define MESSAGE_DEST_CHAR 1
#define MESSAGE_DEST_VICTOM 2
#define MESSAGE_DEST_ROOM 3
#define SAPPHIRE_IDENT_CODE "SapphireClient"
#define MODE_ALL /* Only used by process_cmd(). */ 0
#define MODE_GENERIC 1
#define MODE_RPG 2
#define EMPTY_STRING &cNullChar
#define str_free( s ) \
if ( (s) != NULL && (s) != EMPTY_STRING ) \
free_mem( (void **) &(s) );
#define MEMORY_MODE_DISK 1
#define MEMORY_MODE_COMPACT 2
#define MEMORY_MODE_NORMAL 3
#define MEMORY_MODE_LARGE 4
#define MEMORY_FILE "memory.tmp"
#define CLIENT_UNDEFINED 1
#define CLIENT_GENERIC 2
#define CLIENT_ANSI_COMPATIBLE 3
#define CLIENT_SAPPHIRE_COMPATIBLE 4
/*
* Used in calls to write_ansi_code().
*/
#define ANSI_CODEREF_CC_SET 1
#define ANSI_CODEREF_CC_UP 2
#define ANSI_CODEREF_CC_DOWN 3
#define ANSI_CODEREF_CC_FORWARD 4
#define ANSI_CODEREF_CC_BACK 5
#define ANSI_CODEREF_EF_CSCREEN 6
#define ANSI_CODEREF_EF_CLINE 7
#define ANSI_CODEREF_SGR_DSET 8
#define ANSI_CODEREF_SGR_SSET 9
#define ANSI_CODEREF_SGR_SRSET 10
#define ANSI_CODEREF_KR_REASSIGN 11
#define ANSI_CODEREF_OTHER 12
#define CCNP /* Use up to this from the creation code table. */ 26
#define MAX_OUTBUF_SIZE 32768
#define CON_SAPPHIRE_IDENT 1
#define CON_SYSTEM_SHELL 2
#define CON_NPC_EDITOR 3
#define CON_OBJECT_EDITOR 4
#define CON_ROOM_EDITOR 5
#define CON_RUNNING_CHILD 6
#define CON_PLAYING 7
#define CON_GET_LOCAL_ECHO_ON 8
#define CON_GET_CLIENT_TYPE 9
#define CON_MAIN_MENU 10
#define CON_GET_NAME 11
#define CON_GET_CREATION_CODE 12
#define CON_GET_PASSWORD 13
#define CON_CREATION_MENU 14
#define CON_GET_RACE 15
#define CON_ROLL_STATS 16
#define CON_GET_SEX 17
#define CON_GET_HAIR_COLOR 18
#define CON_GET_EYE_COLOR 19
#define CON_GET_HEIGHT 20
#define CON_GET_WEIGHT 21
#define CON_READ_MOTD 22
#define CON_RECONNECT 23
#define MUD_COMM_CON_IDENT 1
#define MUD_COMM_CON_READY 2
#define MUD_COMM_CMD_WIZ_CHANNEL 1
#define MUD_COMM_CMD_CHAT_CHANNEL 2
#define MUD_COMM_CMD_TELL_CHANNEL 3
#define MUD_COMM_CMD_MAIL 4
#define MUD_COMM_CMD_WHO 5
#define MUD_COMM_CMD_USERS 6
#define MUD_COMM_CMD_REPLY_MAIL 7
#define MUD_COMM_CMD_REPLY_TELL 8
#define MUD_COMM_CMD_REPLY_WHO 9
#define MUD_COMM_CMD_REPLY_USERS 10
#define MAX_BIN_TRANSFER_BLOCK 512
#define BIN_MODE_FILENAME 1
#define BIN_MODE_FILE 2
#define BIN_CMD_SENDING_FILENAME 1
#define BIN_CMD_SENDING_FILE 2
#define BIN_CMD_FILENAME_MODE 3
#define BIN_CMD_FILE_MODE 4
#define FILE_TYPE_TEXT 1
#define FILE_TYPE_GIF 2
#define FILE_TYPE_JPEG 3
#define FILE_TYPE_AUDIO 4
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define STRUCT_BOOL( v ) unsigned int v:1
#define DECLARE_GAME_CMD( func ) GAME_CMD_FUNC func
#define DECLARE_OLC_CMD( func ) OLC_CMD_FUNC func
#define DECLARE_SHELL_CMD( func ) SHELL_CMD_FUNC func
#define DECLARE_NPC_LOAD( func ) NPC_LOAD_FUNC func
#define DECLARE_OBJ_LOAD( func ) OBJ_LOAD_FUNC func
#define DECLARE_ROOM_LOAD( func ) ROOM_LOAD_FUNC func
#define DECLARE_ZONE_LOAD( func ) ZONE_LOAD_FUNC func
#define DECLARE_SCRIPT_FUNC( func ) SCRIPT_FUNC func
#define CHAR_PC 1
#define CHAR_NPC 2
#define IS_NPC( ch ) ( (ch)->iCharType == CHAR_NPC )
#define IS_GUEST( ch ) \
( !IS_NPC( (ch) ) && (ch)->pPCData->bGuest == TRUE )
#define MAX_LEVEL 101
#define MAX_PLAYER_LEVEL ( MAX_LEVEL - 2 )
#define BUILDER_LEVEL ( MAX_LEVEL - 1 )
#define IMP_LEVEL MAX_LEVEL
#define PULSE_HEART_BEAT /* Call updates every # seconds. */ 1
#define NUMBER_POSITION_DYING 1
#define NUMBER_POSITION_SLEEPING 2
#define NUMBER_POSITION_RESTING 3
#define NUMBER_POSITION_SITTING 4
#define NUMBER_POSITION_STANDING 5
#define NUMBER_SECTOR_UNDEFINED 1
#define NUMBER_SECTOR_VOID 2
#define NUMBER_SECTOR_AIR 3
#define NUMBER_SECTOR_WATER 4
#define NUMBER_SECTOR_WATER_NO_SWIM 5
#define NUMBER_SECTOR_UNDERGROUND 6
#define NUMBER_SECTOR_INSIDE 7
#define NUMBER_SECTOR_CITY 8
#define NUMBER_EXIT_STANDARD 1
#define NUMBER_EXIT_DOOR 2
#define NUMBER_SEX_MALE 1
#define NUMBER_SEX_FEMALE 2
#define NUMBER_SEX_RANDOM 3
#define NUMBER_HAIR_COLOR_BLACK 1
#define NUMBER_HAIR_COLOR_BROWN 2
#define NUMBER_HAIR_COLOR_BLONDE 3
#define NUMBER_HAIR_COLOR_RED 4
#define NUMBER_HAIR_COLOR_GREEN 5
#define NUMBER_HAIR_COLOR_BLUE 6
#define NUMBER_EYE_COLOR_BROWN 1
#define NUMBER_EYE_COLOR_GREEN 2
#define NUMBER_EYE_COLOR_BLUE 3
#define NUMBER_EYE_COLOR_RED 4
#define NUMBER_RACE_UNDEFINED 1
#define NUMBER_RACE_HUMAN 2
#define NUMBER_RACE_ELF 3
#define NUMBER_RACE_HALF_ELF 4
#define NUMBER_RACE_DWARF 5
#define NUMBER_RACE_ORC 6
#define NUMBER_RACE_HALF_ORC 7
#define NUMBER_RACE_GNOME 8
#define NUMBER_RACE_HORSE 9
#define NUMBER_NPC_TRIGGER_CREATED 1
#define NUMBER_NPC_TRIGGER_RANDOM 2
#define NUMBER_NPC_TRIGGER_MESSAGE 3
#define NUMBER_NPC_TRIGGER_EMOTE 4
#define NUMBER_NPC_TRIGGER_SAY 5
#define NUMBER_NPC_TRIGGER_TELL 6
#define NUMBER_NPC_TRIGGER_YELL 7
#define NUMBER_OBJ_TRIGGER_RANDOM 1
#define NUMBER_OBJ_TRIGGER_SAY 2
#define NUMBER_OBJ_TRIGGER_GET 3
#define NUMBER_ROOM_TRIGGER_RANDOM 1
#define NUMBER_ROOM_TRIGGER_MESSAGE 2
#define NUMBER_ROOM_TRIGGER_EMOTE 3
#define NUMBER_ROOM_TRIGGER_SAY 4
#define NUMBER_ROOM_TRIGGER_YELL 5
#define NUMBER_SCRIPT_CMP_EQUAL 1
#define NUMBER_SCRIPT_CMP_NOT_EQUAL 2
#define NUMBER_SCRIPT_CMP_GREATER 3
#define NUMBER_SCRIPT_CMP_LESS 4
#define NUMBER_SCRIPT_CMP_GREATER_EQUAL 5
#define NUMBER_SCRIPT_CMP_LESS_EQUAL 6
#define NUMBER_NPC_COMMAND_END 0
#define NUMBER_NPC_COMMAND_IF 1
#define NUMBER_NPC_COMMAND_GOTO 2
#define NUMBER_NPC_COMMAND_ENABLE 3
#define NUMBER_NPC_COMMAND_DISABLE 4
#define NUMBER_NPC_COMMAND_WAIT 5
#define NUMBER_NPC_COMMAND_SET 6
#define NUMBER_NPC_COMMAND_GAME_CMD 7
#define NUMBER_OBJ_COMMAND_END 0
#define NUMBER_OBJ_COMMAND_IF 1
#define NUMBER_OBJ_COMMAND_GOTO 2
#define NUMBER_OBJ_COMMAND_ENABLE 3
#define NUMBER_OBJ_COMMAND_DISABLE 4
#define NUMBER_OBJ_COMMAND_WAIT 5
#define NUMBER_OBJ_COMMAND_SET 6
#define NUMBER_ROOM_COMMAND_END 0
#define NUMBER_ROOM_COMMAND_IF 1
#define NUMBER_ROOM_COMMAND_GOTO 2
#define NUMBER_ROOM_COMMAND_ENABLE 3
#define NUMBER_ROOM_COMMAND_DISABLE 4
#define NUMBER_ROOM_COMMAND_WAIT 5
#define NUMBER_ROOM_COMMAND_SET 6
#define NUMBER_ROOM_COMMAND_CREATE_NPC 7
#define NUMBER_ROOM_COMMAND_CREATE_OBJ 8
#define NUMBER_ITEM_UNDEFINED 1
#define NUMBER_ITEM_GOLD 2
#define NUMBER_ITEM_CORPSE 3
#define NUMBER_ITEM_CONTAINER 4
#define NUMBER_ITEM_DRINK_CONTAINER 5
#define NUMBER_ITEM_PAPER 6
#define NUMBER_ITEM_PENCIL 7
#define NUMBER_ITEM_COMMUNICATOR 8
#define NUMBER_ITEM_LIGHT 9
#define NUMBER_ITEM_LIGHTER 10
#define NUMBER_ITEM_KEY 11
#define NUMBER_ITEM_STONE 12
#define NUMBER_ITEM_CHAIR 13
#define NUMBER_ITEM_BED 14
#define NUMBER_ITEM_DAGGER 15
#define NUMBER_ITEM_SWORD 16
#define NUMBER_ITEM_MACE 17
#define NUMBER_ITEM_AXE 18
#define NUMBER_ITEM_SPEAR 19
#define NUMBER_ITEM_FLAIL 20
#define NUMBER_ITEM_BOW 21
#define NUMBER_ITEM_ARMOR 22
#define NUMBER_ITEM_ARM_GUARDS 23
#define NUMBER_ITEM_BOOTS 24
#define NUMBER_ITEM_LEGGINGS 25
#define NUMBER_ITEM_HELMET 26
#define NUMBER_ITEM_CLOAK 27
#define NUMBER_ITEM_SHIELD 28
#define NUMBER_ITEM_RING 29
#define NUMBER_WEAR_LHAND 1
#define NUMBER_WEAR_RHAND 2
#define NUMBER_WEAR_ARMS 3
#define NUMBER_WEAR_LEGS 4
#define NUMBER_WEAR_BODY 5
#define NUMBER_WEAR_ABOUT_BODY 6
#define NUMBER_WEAR_HEAD 7
#define NUMBER_WEAR_FEET 8
#define NUMBER_WEAR_FINGER 9
#define NUMBER_SIZE_TINY 1
#define NUMBER_SIZE_SMALL 2
#define NUMBER_SIZE_MEDIUM 3
#define NUMBER_SIZE_LARGE 4
#define NUMBER_SIZE_HUGE 5
#define NUMBER_MATERIAL_UNDEFINED 1
#define NUMBER_MATERIAL_ICE 2
#define NUMBER_MATERIAL_FIRE 3
#define NUMBER_MATERIAL_CLOTH 4
#define NUMBER_MATERIAL_LEATHER 5
#define NUMBER_MATERIAL_BRONZE 6
#define NUMBER_MATERIAL_IRON 7
#define NUMBER_MATERIAL_STEEL 8
#define NUMBER_MATERIAL_GLASS 9
#define NUMBER_MATERIAL_SILVER 10
#define NUMBER_MATERIAL_GOLD 11
#define NUMBER_MATERIAL_DIAMOND 12
#define NUMBER_MATERIAL_EMERALD 13
#define NUMBER_VAR_NUMBER 1
#define NUMBER_VAR_STRING 2
#define NUMBER_VAR_POINTER_CHAR 3
#define NUMBER_VAR_POINTER_OBJ 4
#define NUMBER_VAR_POINTER_ROOM 5
/* Numbers for objects that are created internally. */
#define OBJECT_NUMBER_GOLD 1
#define OBJECT_NUMBER_CORPSE 2
#define FLAG_A 1
#define FLAG_B 2
#define FLAG_C 4
#define FLAG_D 8
#define FLAG_E 16
#define FLAG_F 32
#define FLAG_G 64
#define FLAG_H 128
#define FLAG_I 256
#define FLAG_J 512
#define FLAG_K 1024
#define FLAG_L 2048
#define FLAG_M 4096
#define FLAG_N 8192
#define FLAG_O 16384
#define FLAG_P 32768
#define FLAG_Q 65536
#define FLAG_R 131072
#define FLAG_S 262144
#define FLAG_T 524288
#define FLAG_U 1048576
#define FLAG_V 2097152
#define FLAG_W 4194304
#define FLAG_X 8388608
#define FLAG_Y 16777216
#define FLAG_Z 33554432
#define FLAG_CHANNEL_NO_LOCAL_WIZCOMM (FLAG_A)
#define FLAG_CHANNEL_NO_WIZCOMM (FLAG_B)
#define FLAG_CHANNEL_NO_CHAT (FLAG_C)
#define FLAG_CHANNEL_NO_LOCAL_TELL (FLAG_D)
#define FLAG_CHANNEL_NO_REMOTE_TELL (FLAG_E)
#define FLAG_DOOR_CLOSED (FLAG_A)
#define FLAG_DOOR_LOCKED (FLAG_B)
#define FLAG_DOOR_HIDDEN (FLAG_C)
#define FLAG_OBJECT_SPECIAL (FLAG_A)
#define FLAG_OBJECT_UNTAKEABLE (FLAG_B)
#define FLAG_OBJECT_CLOSABLE (FLAG_C)
#define FLAG_OBJECT_CLOSED (FLAG_D)
#define FLAG_OBJECT_LOCKED (FLAG_E)
#define FLAG_OBJECT_LIT (FLAG_F)
#define FLAG_OBJECT_MAGIC (FLAG_G)
#define FLAG_OBJECT_INVIS (FLAG_H)
#define FLAG_NPC_SPECIAL (FLAG_A)
#define FLAG_NPC_MOUNTABLE (FLAG_B)
#define FLAG_NPC_STAY_INSIDE (FLAG_C)
#define FLAG_NPC_STAY_OUTSIDE (FLAG_D)
#define FLAG_NPC_NO_KILL (FLAG_E)
#define FLAG_NPC_AGGRESSIVE (FLAG_F)
#define FLAG_NPC_CRAZED (FLAG_G)
#define FLAG_NPC_TEACHER (FLAG_H)
#define FLAG_ACT_INVIS (FLAG_A)
#define FLAG_ACT_SEE_INVIS (FLAG_B)
#define FLAG_ACT_DETECT_HIDDEN (FLAG_C)
#define FLAG_ACT_DETECT_MAGIC (FLAG_D)
#define FLAG_ACT_NIGHTVISION (FLAG_E)
#define FLAG_ROOM_DARK (FLAG_A)
#define FLAG_ROOM_INVIS (FLAG_B)
#define FLAG_ROOM_NO_NPCS (FLAG_C)
#define FLAG_ROOM_PRIVATE (FLAG_D)
#define FLAG_ROOM_IMMORTAL (FLAG_E)
#define FLAG_ROOM_UNSAFE (FLAG_F)
#define FLAG_ROOM_NO_WEATHER (FLAG_G)
/*
* Type Defines
*/
typedef char * string;
typedef unsigned char byte;
typedef unsigned char bool;
typedef signed char /* intt = integer, tiny (1 byte.) */ intt;
typedef unsigned char uintt;
typedef signed short int /* ints = integer, short (2 bytes.) */ ints;
typedef unsigned short int uints;
typedef signed long int /* intl = integer, long (3 bytes.) */ intl;
typedef unsigned long int uintl;
typedef unsigned long int flags;
typedef int sapsocket;
typedef struct generic_data GENERIC_DATA;
typedef struct xword_data XWORD_DATA;
typedef struct term_data TERM_DATA;
typedef struct mud_comm_data MUD_COMM_DATA;
typedef struct extra_desc_data EXTRA_DESC_DATA;
typedef struct stat_data STAT_DATA;
typedef struct exit_data EXIT_DATA;
typedef struct program_data PROGRAM_DATA;
typedef struct script_data SCRIPT_DATA;
typedef struct trigger_data TRIGGER_DATA;
typedef struct trigger_arg_data TRIGGER_ARG_DATA;
typedef struct running_script_data RUNNING_SCRIPT_DATA;
typedef struct npc_reset_data NPC_RESET_DATA;
typedef struct obj_reset_data OBJ_RESET_DATA;
typedef struct help_data HELP_DATA;
typedef struct npc_index_data NPC_INDEX_DATA;
typedef struct obj_index_data OBJ_INDEX_DATA;
typedef struct room_index_data ROOM_INDEX_DATA;
typedef struct zone_data ZONE_DATA;
typedef struct quest_data QUEST_DATA;
typedef struct quest_var_data QUEST_VAR_DATA;
typedef struct char_data CHAR_DATA;
typedef struct pc_data PC_DATA;
typedef struct known_person_data KNOWN_PERSON_DATA;
typedef struct known_exit_data KNOWN_EXIT_DATA;
typedef struct npc_data NPC_DATA;
typedef struct obj_data OBJ_DATA;
typedef struct childp_data CHILDP_DATA;
typedef void GAME_CMD_FUNC ( CHAR_DATA *, char * );
typedef void OLC_CMD_FUNC ( TERM_DATA *, char * );
typedef void SHELL_CMD_FUNC ( TERM_DATA *, char * );
typedef bool NPC_LOAD_FUNC ( NPC_INDEX_DATA *, FILE * );
typedef bool OBJ_LOAD_FUNC ( OBJ_INDEX_DATA *, FILE * );
typedef bool ROOM_LOAD_FUNC ( ROOM_INDEX_DATA *, FILE * );
typedef bool ZONE_LOAD_FUNC ( ZONE_DATA *, FILE * );
typedef void SCRIPT_FUNC ( char * );
/*
* Structures
*/
struct generic_data
{
GENERIC_DATA * pNext;
void * pData;
};
struct xword_data
{
XWORD_DATA * /* Next in linked list. */ pNext;
char * /* "Bad" word. */ pWord;
};
/*
* Data for one connected terminal.
*/
struct term_data
{
TERM_DATA * /* Next in linked list. */ pNext;
CHAR_DATA * /* Associated character. */ pChar;
CHAR_DATA * /* NPC Being controlled. */ pControlled;
char * /* Remote hostname. */ pHostname;
sapsocket /* Telnet socket descriptor. */ sTelnetSocket;
sapsocket /* Binary socket descriptor. */ sBinarySocket;
intt /* Remote terminal type. */ iTermType;
intt /* Connected state. */ iConState;
intt /* Old connected state. */ iConStateOld;
char * /* Input buffer. */ pInBuffer;
char * /* Pending command; if any. */ pInCommand;
char * /* Waiting output. */ pOutBuffer;
char * /* Last output. */ pOutLast;
intl /* Size of the output buffer. */ iOutBufferSize;
intl /* Size of the input buffer. */ iInBufferSize;
intt /* Transfer mode. */ iBinaryMode;
long /* Remaining binary size. */ lBinRemainSize;
byte * /* Offset in binary data. */ pBinTransfering;
byte * /* Binary data being transfered. */ pBinData;
STRUCT_BOOL /* Was a command just recived? */ ( bFoundCmd );
STRUCT_BOOL /* Does this terminal have it? */ ( bLocalEcho );
intt /* Lines before paging. */ iPageLines;
char * /* Used for paging strings. */ pPageString;
char * /* Used for paging strings. */ pPagePos;
intl /* Size of string pager buffer. */ iPageMemSize;
char * /* Used when in the text editor. */ pEditString;
char ** /* Used when in the text editor. */ ppEditString;
intl /* Used when in the text editor. */ iEditLine;
STRUCT_BOOL /* Used when in the text editor. */ ( bEditAppend );
CHILDP_DATA * /* Data for a running child. */ pChildP;
flags /* Communication flags. */ fCommFlags;
/*
* OLC editing data.
*/
union
{
NPC_INDEX_DATA * pEditNPC;
OBJ_INDEX_DATA * pEditObject;
ROOM_INDEX_DATA * pEditRoom;
} uEdit;
char * /* Used by the system shell. */ pCurrentDir;
};
struct mud_comm_data
{
MUD_COMM_DATA * pNext;
sapsocket sMUDCommSocket;
char * /* Connected MUD's hostname */ pHostname;
char * /* Connected MUD's name. */ pMUDName;
int /* MUD-Comm connected state. */ iConState;
char * /* Input buffer. */ pInBuffer;
char * /* Waiting output. */ pOutBuffer;
intl /* Max input buffer size. */ iMaxInBufSize;
intl /* Max output buffer size. */ iMaxOutBufSize;
intl /* Size of the input buffer. */ iInBufSize;
intl /* Size of the output buffer. */ iOutBufSize;
GENERIC_DATA * /* Players waiting for data. */ pWaitList;
};
struct extra_desc_data
{
EXTRA_DESC_DATA * /* Next in linked list. */ pNext;
string * /* List of keywords. */ pKeywordList;
string /* Actual text. */ sText;
};
struct stat_data
{
intt /* Strength. */ iStatStr;
intt /* Intellgence. */ iStatInt;
intt /* Wisdom. */ iStatWis;
intt /* Dexterity. */ iStatDex;
intt /* Constitution. */ iStatCon;
intt /* Charisma. */ iStatCha;
intt /* Luck. */ iStatLuc;
ints /* Hit points. */ iStatHP;
ints /* Magic points. */ iStatMP;
ints /* Movement points. */ iStatMV;
};
struct exit_data
{
union
{
intl /* Room number (to.) */ iNumber;
ROOM_INDEX_DATA * /* Actual room (to.) */ pRoom;
} uRoom;
union
{
intl /* Object number (key.) */ iNumber;
OBJ_INDEX_DATA * /* Actual object (key.) */ pObjKey;
} uKey;
intt /* Exit type. */ iExitType;
intl /* Reset time. */ iResetTime;
intl /* Reset timer. */ iResetTimer;
string * /* Door names. */ pDoorNames;
flags /* Original door flags. */ fOrigFlags;
flags /* Current door flags. */ fCurrFlags;
string /* Shown when exit is found. */ sFound;
ints /* Level required to use. */ iLevel;
STRUCT_BOOL /* Is this a shared exit? (boot) */ ( bShared );
};
struct program_data
{
GENERIC_DATA * /* List of quest data. */ pQuestDataList;
QUEST_VAR_DATA * /* Quest variables. */ pQuestVars;
SCRIPT_DATA * /* Scripts in this program. */ pScripts;
};
struct script_data
{
SCRIPT_DATA * /* Next in linked list. */ pNext;
TRIGGER_DATA * /* Trigger list for this script. */ pTriggers;
byte * /* Actual script. */ pScript;
intl /* Script code size. */ iCodeSize;
char * /* Script name. */ pName;
STRUCT_BOOL /* Is this script disabled? */ ( bDisabled );
STRUCT_BOOL /* Is this script running? */ ( bRunning );
};
struct trigger_data
{
TRIGGER_DATA * pNext;
TRIGGER_ARG_DATA * pArgs;
intt /* Trigger for this script. */ iTrigger;
};
struct trigger_arg_data
{
TRIGGER_ARG_DATA * pNext;
intt iType;
char * pArg;
};
struct running_script_data
{
RUNNING_SCRIPT_DATA * /* Next in linked list. */ pNext;
PROGRAM_DATA * /* Program data. */ pProgram;
SCRIPT_DATA * /* Script data. */ pScript;
byte * /* Position in the script. */ pScriptPos;
intl /* Wait time. */ iWaitTime;
intl /* Wait timer. */ iWaitTimer;
intt /* NPC, object, or room? */ iThisType;
void * /* NPC/object/room. */ pThis;
CHAR_DATA * /* Character who triggered this. */ pActor;
CHAR_DATA * /* An uninvolved third person. */ pThird;
};
struct npc_reset_data
{
NPC_RESET_DATA * pNext;
OBJ_RESET_DATA * pInvenResets;
OBJ_RESET_DATA * pEqResets;
STRUCT_BOOL /* Does the NPC still exist? */ ( bAlive );
union
{
intl /* Number of NPC to load. (boot) */ iNumber;
NPC_INDEX_DATA * pNPCIndex;
} u1;
ints /* Wait before reseting. */ iResetTime;
ints /* When = iResetTime, reset. */ iResetTimer;
};
struct obj_reset_data
{
OBJ_RESET_DATA * pNext;
OBJ_RESET_DATA * pContentResets;
STRUCT_BOOL /* Does the object still exist? */ ( bAlive );
union
{
intl iNumber;
OBJ_INDEX_DATA * pObjIndex;
} u1;
ints /* Wait before reseting. */ iResetTime;
ints /* When = iResetTime, reset. */ iResetTimer;
};
struct help_data
{
HELP_DATA * /* Next in linked list. */ pNext;
string * /* List of keywords. */ pKeywords;
string /* Text to be printed. */ sText;
ints /* Level required to read. */ iLevel;
};
struct npc_index_data
{
NPC_INDEX_DATA * /* Next in linked list. */ pNext;
ZONE_DATA * /* Zone this NPC is part of. */ pZone;
PROGRAM_DATA * /* Associated program; if any. */ pProgram;
struct
{
intt iStatStr[3];
intt iStatInt[3];
intt iStatWis[3];
intt iStatDex[3];
intt iStatCon[3];
intt iStatCha[3];
intt iStatLuc[3];
ints iStatHP[3];
ints iStatMP[3];
ints iStatMV[3];
} VarStats;
intl /* Unique NPC number. */ iNumber;
intl /* Inherit from... (boot) */ iInherit;
string * /* Keywords used by players. */ pNameList;
string /* Short description. */ sShortDesc;
string /* Descriptions. */ sDescs[5];
string /* Seen when looked at. */ sLongDesc;
flags /* NPC flags. */ fNPCFlags;
flags /* Part flags. */ fPartFlags;
flags /* Action flags. */ fActFlags;
ints /* Level. */ iLevel;
ints /* Experience for killing. */ iExp[3];
ints /* Alignment. */ iAlignment;
intt /* Race. */ iRace;
intt /* Sex. */ iSex;
intt /* Hair color. (not important) */ iHairColor;
intt /* Eye color. (not important) */ iEyeColor;
ints /* Height. (not important) */ iHeight;
ints /* Weight. */ iWeight;
ints /* Max carry weight. */ iMaxCarry;
intt /* Starting position. */ iPosition;
intl /* Starting gold. */ iGold;
ints /* Hit roll. */ iHitRoll;
ints /* Damage dice. */ iDamage[3];
intt /* Damage type. */ iDamType;
ints /* Armor class. */ iAC[4];
intt /* Chance of wandering. */ iWander;
STRUCT_BOOL /* NPC created after boot? */ ( bNew );
STRUCT_BOOL /* NPC need to be saved? */ ( bEdited );
};
struct obj_index_data
{
OBJ_INDEX_DATA * /* Next in linked list. */ pNext;
ZONE_DATA * /* Zone this object is part of. */ pZone;
PROGRAM_DATA * /* Associated program; if any. */ pProgram;
intl /* Unique object number. */ iNumber;
intl /* Inherit from... (boot) */ iInherit;
string * /* Keywords used by players. */ pNameList;
string /* Short description. */ sShortDesc;
string /* Description. */ sDesc;
string /* Seen when looked at. */ sLongDesc;
flags /* Object flags. */ fObjFlags;
intt /* Object/Item type. */ iItemType;
ints /* Level. */ iLevel;
ints /* Weight. */ iWeight;
intt /* Size. */ iSize;
ints /* Price; if bought. */ iCost;
intt /* Starting condition. */ iCondition;
intt /* Made from... */ iMaterial;
intl /* Item type dependant values. */ iValues[6];
string /* Item type depentant value. */ sValue;
STRUCT_BOOL /* Object created after boot? */ ( bNew );
STRUCT_BOOL /* Object need to be saved? */ ( bEdited );
};
struct room_index_data
{
ROOM_INDEX_DATA * /* Next in linked list. */ pNext;
ZONE_DATA * /* Zone this room is part of. */ pZone;
EXTRA_DESC_DATA * /* Extra description list. */ pExtraDesc;
NPC_RESET_DATA * /* List of NPC resets. */ pNPCResets;
OBJ_RESET_DATA * /* List of object resets. */ pObjResets;
PROGRAM_DATA * /* Associated program; if any. */ pProgram;
CHAR_DATA * /* People in this room. */ pPeople;
OBJ_DATA * /* Objects in this room. */ pContents;
EXIT_DATA /* Exits for this room. */ eExits[10];
intl /* Unique room number. */ iNumber;
intl /* Inherit from... (boot) */ iInherit;
string /* Scene filename for this room. */ sImageFilename;
string /* Direction descriptions. */ sDirDescs[10];
string /* Title. */ sTitle;
string /* Description. */ sDesc;
flags /* Room flags. */ fRoomFlags;
intt /* Sector type. */ iSectorType;
ints /* Temperature in this room. */ iTemperature;
STRUCT_BOOL /* Room created after boot? */ ( bNew );
STRUCT_BOOL /* Room need to be saved? */ ( bEdited );
};
struct zone_data
{
ZONE_DATA * /* Next in linked list. */ pNext;
string /* Zone name. */ sName;
string /* Author of this zone. */ sAuthor;
intl /* Use NPCs between these. */ iNPCNumbers[2];
intl /* Use objects between these. */ iObjNumbers[2];
intl /* Use rooms between these. */ iRoomNumbers[2];
STRUCT_BOOL /* Override normal resets? */ ( bROverride );
ints /* Reset time, with players. */ iNormalReset;
ints /* Reset time, without players. */ iNoPlrReset;
ints /* Reset timer. */ iResetTimer;
ints /* Player count in this zone. */ iPlayers;
STRUCT_BOOL /* Zone created after boot? */ ( bNew );
STRUCT_BOOL /* Zone need to be saved? */ ( bEdited );
};
struct quest_data
{
QUEST_DATA * /* Next in linked list. */ pNext;
QUEST_VAR_DATA * /* Variables. */ pVars;
string /* Quest data name. */ sName;
STRUCT_BOOL /* Created after boot? */ ( bNew );
STRUCT_BOOL /* Need to be saved? */ ( bEdited );
};
struct quest_var_data
{
QUEST_VAR_DATA * /* Next in linked list. */ pNext;
string /* Quest data name. */ sName;
intt /* Quest variable type. */ iType;
/*
* Actual data.
*/
union
{
intl i;
string s;
void * p;
} uData;
};
struct char_data
{
CHAR_DATA * /* Next in linked list. */ pNext;
TERM_DATA * /* Terminal connected. */ pTerm;
STAT_DATA * /* Character stats. */ pStats;
ROOM_INDEX_DATA * /* In room... */ pInRoom;
OBJ_DATA * /* Character's inventory. */ pInven;
CHAR_DATA * /* Next in room linked list. */ pNextInRoom;
CHAR_DATA * /* Following... */ pLeader;
CHAR_DATA * /* Next in group; if any. */ pParty;
CHAR_DATA * /* Currently fighting... */ pFighting;
PC_DATA * /* Data only PCs have. */ pPCData;
NPC_DATA * /* Data only NPCs have. */ pNPCData;
string /* Seen when looked at. */ sLongDesc;
flags /* Part flags. */ fPartFlags;
flags /* Action flags. */ fActFlags;
intt /* PC of NPC? */ iCharType;
intt /* Current position. */ iPosition;
ints /* Level. */ iLevel;
ints /* Experience. */ iExp;
ints /* Magic level. */ iMagicLevel;
ints /* Alignment. */ iAlignment;
intt /* Race. */ iRace;
intt /* Sex. */ iSex;
intt /* Hair color. (not important) */ iHairColor;
intt /* Eye color. (not important) */ iEyeColor;
ints /* Height. */ iHeight;
ints /* Weight. */ iWeight;
ints /* Max carry weight. */ iMaxCarry;
ints /* Current number of HP. */ iHP;
ints /* Current number of MP. */ iMP;
ints /* Current movement remaining. */ iMV;
intl /* Gold. */ iGold;
ints /* Hit roll. */ iHitRoll;
ints /* Armor class. */ iAC[4];
ints /* Wait timer. */ iWaitTimer;
};
struct pc_data
{
time_t /* Last Login time. */ tLastLogin;
string /* Password. */ sPassword;
string /* Name. */ sName;
string /* Game prompt string. */ sPrompt;
STRUCT_BOOL /* Is this player a guest? */ ( bGuest );
string /* Guild. */ sGuild;
flags /* Channel flags. */ fChanFlags;
KNOWN_PERSON_DATA * /* Known people. */ pKnownPeople;
KNOWN_EXIT_DATA * /* Known hidden exits. */ pKnownExits;
};
struct known_person_data
{
KNOWN_PERSON_DATA * pNext;
string sName;
time_t tIntroduced;
};
struct known_exit_data
{
KNOWN_EXIT_DATA * pNext;
ROOM_INDEX_DATA * pRoom;
intt iDir;
time_t tDiscovered;
};
struct npc_data
{
NPC_INDEX_DATA * /* NPC index data. */ pNPCIndex;
NPC_RESET_DATA * /* Reset NPC was loaded from. */ pReset;
PROGRAM_DATA * /* Associated program; if any. */ pProgram;
string * /* Names (keywords.) */ pNameList;
string /* Short description. */ sShortDesc;
string /* Descriptions. */ sDescs[5];
flags /* NPC flags. */ fNPCFlags;
ints /* Damage dice. */ iDamage[3];
intt /* Damage type. */ iDamType;
intt /* Chance of wandering. */ iWander;
};
struct obj_data
{
OBJ_DATA * pNext;
OBJ_DATA * pNextContent;
OBJ_INDEX_DATA * pObjIndex;
OBJ_RESET_DATA * pReset;
PROGRAM_DATA * /* Associated program; if any. */ pProgram;
ROOM_INDEX_DATA * pInRoom;
CHAR_DATA * pCarriedBy;
OBJ_DATA * pInObj;
OBJ_DATA * pContains;
string * pNameList;
string sShortDesc;
string sDesc;
string sLongDesc;
flags fObjFlags;
intt iItemType;
intt iWearLoc;
intt iCondition;
ints iLevel;
ints iCost;
ints iWeight;
intt iSize;
intt iMaterial;
intl /* Item type dependant values. */ iValues[6];
string /* Item type depentant value. */ sValue;
};
struct childp_data
{
CHILDP_DATA * pNext;
pid_t pPid;
intl iStdin[2];
intl iStdout[2];
intl iStderr[2];
char * pCmdLine;
};
/*
* General purpose structure. Mostly used to save values at boot time.
*/
struct number
{
struct number * pNext;
struct number * pAList[2];
intl iNumber;
};
struct cmd_type
{
char * /* Type this to invoke. */ pName;
GAME_CMD_FUNC * /* Command function. */ pCmdFunc;
ints /* Level required to use. */ iLevel;
intt /* Position required to use. */ iPosition;
intt /* Only works in game mode... */ iMode;
STRUCT_BOOL /* Are prefixes allowed? */ ( bNoPrefix );
};
struct olc_cmd_type
{
char * /* Type this to invoke. */ pName;
OLC_CMD_FUNC * /* Command function. */ pCmdFunc;
};
struct shell_cmd_type
{
char * /* Type this to invoke. */ pName;
SHELL_CMD_FUNC * /* Command function. */ pCmdFunc;
};
struct str_number_type
{
char * /* Name. */ pName;
intl /* Number. */ iNumber;
};
struct number_number_type
{
intl /* First Number. */ iNumber1;
intl /* Second Number. */ iNumber2;
};
struct race_type
{
char * pConj;
char * pName;
intt iNumber;
STRUCT_BOOL ( bPCRace );
flags fActFlags;
ints iMagicLevel;
intt iHairColors[16];
intt iEyeColors[16];
ints iUpperLowerHeights[2];
ints iUpperLowerWeights[2];
intt iStatModifiers[7];
};
struct npc_load_type
{
char * pField;
NPC_LOAD_FUNC * pFunc;
};
struct obj_load_type
{
char * pField;
OBJ_LOAD_FUNC * pFunc;
};
struct room_load_type
{
char * pField;
ROOM_LOAD_FUNC * pFunc;
};
struct zone_load_type
{
char * pField;
ZONE_LOAD_FUNC * pFunc;
};
struct script_func_type
{
char * pName;
SCRIPT_FUNC * pFunc;
};
#ifdef SERVER
/*
* Prototypes
*/
#define TD TERM_DATA
#define MUDCD MUD_COMM_DATA
#define SD STAT_DATA
#define HD HELP_DATA
#define PD PROGRAM_DATA
#define SCD SCRIPT_DATA
#define RSD RUNNING_SCRIPT_DATA
#define NPCID NPC_INDEX_DATA
#define OID OBJ_INDEX_DATA
#define RID ROOM_INDEX_DATA
#define NPCRD NPC_RESET_DATA
#define ORD OBJ_RESET_DATA
#define CD CHAR_DATA
#define NPCD NPC_DATA
#define PCD PC_DATA
#define OD OBJ_DATA
char * strncpy ( char *, const char *, size_t );
/*
* main.c
*/
int main ( int, char *[], char *[] );
void process_mucs_cmd ( void );
void load_config ( char * );
void load_mudcomm_file ( char * );
void load_database ( void );
void load_em_objects ( char * );
void load_helps ( char * );
void load_npcs ( char * );
void load_objects ( char * );
void load_rooms ( char * );
void load_zones ( char * );
void load_quest_data ( char * );
/*
* signal.c
*/
void init_signal_handlers ( void );
void sigint_handler ( int, int, struct sigcontext * );
void sigint_handler_2 ( int, int, struct sigcontext * );
void sigill_handler ( int, int, struct sigcontext * );
void sigsegv_handler ( int, int, struct sigcontext * );
void sigbus_handler ( int, int, struct sigcontext * );
void sigsys_handler ( int, int, struct sigcontext * );
void sigterm_handler ( int, int, struct sigcontext * );
void sigprof_handler ( int, int, struct sigcontext * );
bool valid_address ( void * );
/*
* comm.c
*/
void init_telnet_socket ( int );
void init_binary_socket ( int );
void accept_connection ( void );
void accept_binary_connection ( void );
void close_connection ( TD ** );
bool read_string ( TD * );
bool read_binary_data ( TD * );
void read_string_buffer ( TD * );
bool write_string ( TD *, char * );
bool write_binary_data ( TD * );
void clear_binary_transfer ( TD * );
void write_string_buffer ( TD *, char * );
void write_file ( TD *, intt, char * );
void rewrite_string_buffer ( TD * );
void flush_buffer ( TD * );
#define tflush flush_buffer
void term_send_string ( TD *, char *, ... );
void send_string ( CD *, char *, ... );
void send_game_message ( char *, long, ... );
void expand_game_symbols ( char *, char *, CD *, va_list );
bool process_output ( TD * );
void process_login ( TD *, char * );
char * make_ansi_code ( int, char *, char *, TD * );
/*
* mud_comm.c
*/
void init_mudcomm_socket ( int );
void accept_mudcomm_connection ( void );
int make_mudcomm_connection ( char *, char *, int );
void close_mudcomm_connection ( MUDCD ** );
bool read_mudcomm_data ( MUDCD * );
int read_mudcomm_data_buffer ( MUDCD *, byte *, long );
bool write_mudcomm_data ( MUDCD * );
void write_mudcomm_data_buffer ( MUDCD *, byte *, long );
bool process_mudcomm_output ( MUDCD * );
void mudcomm_cmd_wiz_channel ( MUDCD * );
void mudcomm_cmd_chat_channel ( MUDCD * );
void mudcomm_cmd_tell_channel ( MUDCD * );
void mudcomm_cmd_mail ( MUDCD * );
void mudcomm_cmd_who ( MUDCD * );
void mudcomm_cmd_users ( MUDCD * );
void mudcomm_cmd_reply_mail ( MUDCD * );
void mudcomm_cmd_reply_tell ( MUDCD * );
void mudcomm_cmd_reply_who ( MUDCD * );
void mudcomm_cmd_reply_users ( MUDCD * );
/*
* memory.c
*/
void mem_init ( void );
void mem_clean_up ( void );
void * alloc_mem ( register size_t );
void * realloc_mem ( register void *, register size_t );
void free_mem ( register void ** );
void zero_out ( register void *, register size_t );
char * str_dup ( register char * );
string save_string ( register char * );
void free_string ( register string * );
void defrag_string_space ( void );
void free_buffers ( void );
char * new_buffer ( void );
CD * new_pc ( void );
CD * new_npc ( NPCID *, CD * );
OD * new_object ( OID *, CD * );
void free_char ( CD ** );
void free_obj ( OD ** );
/*
* fileio.c
*/
FILE * open_file ( char *, char *, bool );
void close_file ( FILE * );
char fget_letter ( FILE * );
char * fget_word ( FILE * );
char * sfget_word ( FILE * );
char * fget_word_2 ( FILE * );
void fput_string ( FILE *, char *, ... );
char * fget_string ( FILE * );
char * sfget_string ( FILE * );
char * fget_string_2 ( FILE *, char, char );
char * fget_string_3 ( FILE *, char, char );
long fget_number ( FILE * );
long fget_number_2 ( FILE * );
/*
* log.c
*/
void log_init ( void );
void lprintf ( char *, ... );
void sap_warning ( char *, ... );
#define wcwarning sap_warning
void sap_error ( char *, ... );
#define wcerror sap_error
void sap_fatal ( char *, ... );
#define wcfatal sap_fatal
#ifdef DEBUG
void sap_debug ( char *, ... );
#define wcdebug sap_debug
#endif
/*
* text.c
*/
void process_text_editor_string ( TD *, char * );
void process_page_string ( TD *, char * );
void setup_text_editor ( TD *, char **, bool );
void setup_string_pager ( TD * );
void page_string ( TD *, char * );
void finish_string_pager ( TD * );
/*
* random.c
*/
void init_random ( void );
int random_number ( void );
int random_range ( int, int );
int random_percent ( void );
int random_bits ( int );
int random_door ( void );
int roll_dice ( int, int );
long round ( register long, register int );
/*
* parse.c
*/
char ** asort ( char **, int );
char * sone_arg ( char *, char * );
char * one_arg ( char *, char * );
char * one_arg_2 ( char *, char * );
char * sedit_str ( char *, char *, char, char * );
char * edit_str ( char *, char *, char, char * );
char * edit_str_2 ( char *, char *, char, char * );
char * sedit_str_plus ( char *, char *, char, char );
char * edit_str_plus ( char *, char *, char, char );
char * edit_str_plus_2 ( char *, char *, char, char );
char * smake_string ( char *, char * );
char * make_string ( char *, char * );
char * make_string_2 ( char *, char * );
char * flip_string ( char * );
char next_char ( char * );
char * remove_char ( char * );
char * remove_char_2 ( char * );
char * remove_spaces ( char * );
char * remove_nls ( char * );
char * capit ( char * );
char * uncapit ( char * );
char * cap_first ( char * );
/*
* compare.c
*/
bool is_number ( char * );
bool str_compare ( char *, char * );
bool multi_compare ( char *, char * );
bool multi_compare_2 ( char *, string * );
bool str_prefix ( char *, char * );
bool str_infix ( char *, char * );
bool str_suffix ( char *, char * );
/*
* load.c
*/
DECLARE_NPC_LOAD ( npc_load_inherit );
DECLARE_NPC_LOAD ( npc_load_imagefilename );
DECLARE_NPC_LOAD ( npc_load_names );
DECLARE_NPC_LOAD ( npc_load_shortdesc );
DECLARE_NPC_LOAD ( npc_load_desc );
DECLARE_NPC_LOAD ( npc_load_desc1 );
DECLARE_NPC_LOAD ( npc_load_desc2 );
DECLARE_NPC_LOAD ( npc_load_desc3 );
DECLARE_NPC_LOAD ( npc_load_desc4 );
DECLARE_NPC_LOAD ( npc_load_desc5 );
DECLARE_NPC_LOAD ( npc_load_longdesc );
DECLARE_NPC_LOAD ( npc_load_npcflags );
DECLARE_NPC_LOAD ( npc_load_partflags );
DECLARE_NPC_LOAD ( npc_load_actflags );
DECLARE_NPC_LOAD ( npc_load_race );
DECLARE_NPC_LOAD ( npc_load_sex );
DECLARE_NPC_LOAD ( npc_load_haircolor );
DECLARE_NPC_LOAD ( npc_load_eyecolor );
DECLARE_NPC_LOAD ( npc_load_height );
DECLARE_NPC_LOAD ( npc_load_weight );
DECLARE_NPC_LOAD ( npc_load_maxcarry );
DECLARE_NPC_LOAD ( npc_load_level );
DECLARE_NPC_LOAD ( npc_load_experience );
DECLARE_NPC_LOAD ( npc_load_alignment );
DECLARE_NPC_LOAD ( npc_load_position );
DECLARE_NPC_LOAD ( npc_load_gold );
DECLARE_NPC_LOAD ( npc_load_wander );
DECLARE_NPC_LOAD ( npc_load_stats );
DECLARE_NPC_LOAD ( npc_load_program );
DECLARE_OBJ_LOAD ( obj_load_inherit );
DECLARE_OBJ_LOAD ( obj_load_imagefilename );
DECLARE_OBJ_LOAD ( obj_load_names );
DECLARE_OBJ_LOAD ( obj_load_shortdesc );
DECLARE_OBJ_LOAD ( obj_load_desc );
DECLARE_OBJ_LOAD ( obj_load_longdesc );
DECLARE_OBJ_LOAD ( obj_load_itemtype );
DECLARE_OBJ_LOAD ( obj_load_objectflags );
DECLARE_OBJ_LOAD ( obj_load_level );
DECLARE_OBJ_LOAD ( obj_load_weight );
DECLARE_OBJ_LOAD ( obj_load_size );
DECLARE_OBJ_LOAD ( obj_load_cost );
DECLARE_OBJ_LOAD ( obj_load_condition );
DECLARE_OBJ_LOAD ( obj_load_material );
DECLARE_OBJ_LOAD ( obj_load_values );
DECLARE_OBJ_LOAD ( obj_load_stringvalue );
DECLARE_OBJ_LOAD ( obj_load_program );
DECLARE_ROOM_LOAD ( room_load_imagefilename );
DECLARE_ROOM_LOAD ( room_load_title );
DECLARE_ROOM_LOAD ( room_load_desc );
DECLARE_ROOM_LOAD ( room_load_roomflags );
DECLARE_ROOM_LOAD ( room_load_sector );
DECLARE_ROOM_LOAD ( room_load_temperature );
DECLARE_ROOM_LOAD ( room_load_northdesc );
DECLARE_ROOM_LOAD ( room_load_southdesc );
DECLARE_ROOM_LOAD ( room_load_eastdesc );
DECLARE_ROOM_LOAD ( room_load_westdesc );
DECLARE_ROOM_LOAD ( room_load_updesc );
DECLARE_ROOM_LOAD ( room_load_downdesc );
DECLARE_ROOM_LOAD ( room_load_northeastdesc );
DECLARE_ROOM_LOAD ( room_load_southwestdesc );
DECLARE_ROOM_LOAD ( room_load_northwestdesc );
DECLARE_ROOM_LOAD ( room_load_southeastdesc );
DECLARE_ROOM_LOAD ( room_load_exitnorth );
DECLARE_ROOM_LOAD ( room_load_exitsouth );
DECLARE_ROOM_LOAD ( room_load_exiteast );
DECLARE_ROOM_LOAD ( room_load_exitwest );
DECLARE_ROOM_LOAD ( room_load_exitup );
DECLARE_ROOM_LOAD ( room_load_exitdown );
DECLARE_ROOM_LOAD ( room_load_exitnortheast );
DECLARE_ROOM_LOAD ( room_load_exitsouthwest );
DECLARE_ROOM_LOAD ( room_load_exitnorthwest );
DECLARE_ROOM_LOAD ( room_load_exitsoutheast );
DECLARE_ROOM_LOAD ( room_load_npcs );
DECLARE_ROOM_LOAD ( room_load_objects );
DECLARE_ROOM_LOAD ( room_load_program );
DECLARE_ZONE_LOAD ( zone_load_author );
DECLARE_ZONE_LOAD ( zone_load_npcs );
DECLARE_ZONE_LOAD ( zone_load_objects );
DECLARE_ZONE_LOAD ( zone_load_rooms );
DECLARE_ZONE_LOAD ( zone_load_reset );
/*
* update.c
*/
void game_update ( void );
void reset_rooms ( void );
OD * reset_objects ( ORD * );
/*
* lookup.c
*/
int get_file_type ( char * );
HD * get_help ( char * );
NPCID * get_npc_index ( int );
OID * get_object_index ( int );
RID * get_room_index ( int );
ZONE_DATA * get_zone ( char * );
int get_sex_number ( char * );
char * get_sex_string ( int );
int get_hair_color_number ( char * );
char * get_hair_color_string ( int );
int get_eye_color_number ( char * );
char * get_eye_color_string ( int );
int get_race_number ( char * );
char * get_race_string ( int );
char * get_race_string_2 ( int );
int get_race_index ( int );
int get_position_number ( char * );
char * get_position_string ( int );
int get_sector_number ( char * );
char * get_sector_string ( int );
/*
* misc.c
*/
void char_to_list ( CD * );
void char_to_room ( CD *, RID * );
void char_from_list ( CD * );
void char_from_room ( CD * );
void obj_to_list ( OD * );
void obj_to_room ( OD *, RID * );
void obj_to_char ( OD *, CD * );
void obj_from_list ( OD * );
void obj_from_room ( OD * );
void obj_from_char ( OD * );
void obj_from_obj ( OD * );
void roll_stats ( SD * );
void modify_stats ( SD *, int );
char * format_string ( char * );
bool sp_legal_string ( char * );
bool visable_object ( OD *, CD * );
bool visable_char ( CD *, CD * );
bool has_light ( CD * );
int carry_weight ( CD * );
char * format_prompt ( CD *, char * );
int count_race ( RID *, intt );
int count_npcs ( RID *, NPCD * );
void introduce_char ( CD *, CD * );
bool knows_char ( CD *, CD * );
void find_exit ( CD *, RID *, intt );
bool knows_exit ( CD *, RID *, intt );
char * npc_flags_string ( flags );
char * part_flags_string ( flags );
char * act_flags_string ( flags );
char * obj_flags_string ( flags );
char * room_flags_string ( flags );
char * door_flags_string ( flags );
/*
* script.c
*/
long npc_script_translate ( SCD *, char * );
long obj_script_translate ( SCD *, char * );
long room_script_translate ( SCD *, char * );
void execute_npc_script ( PD *, SCD *, RSD *, CD *, CD *,
CD * );
void execute_obj_script ( PD *, SCD *, OD * );
void execute_room_script ( PD *, SCD *, RSD *, RID *, CD *,
CD * );
void check_char_trigger ( int, CD *, RID *, CD *, char * );
void check_room_trigger ( int, CD *, RID *, char * );
DECLARE_SCRIPT_FUNC ( script_func_capitialize );
DECLARE_SCRIPT_FUNC ( script_func_uncapitialize );
DECLARE_SCRIPT_FUNC ( script_func_capitialize_first );
DECLARE_SCRIPT_FUNC ( script_func_is_npc );
DECLARE_SCRIPT_FUNC ( script_func_is_guest );
DECLARE_SCRIPT_FUNC ( script_func_get_char );
DECLARE_SCRIPT_FUNC ( script_func_get_pc );
DECLARE_SCRIPT_FUNC ( script_func_get_npc );
DECLARE_SCRIPT_FUNC ( script_func_get_char_in_room );
DECLARE_SCRIPT_FUNC ( script_func_get_pc_in_room );
DECLARE_SCRIPT_FUNC ( script_func_get_npc_in_room );
DECLARE_SCRIPT_FUNC ( script_func_get_room );
/*
* std_cmd.c
*/
void process_cmd ( CD *, char * );
void _iadd_game_cmd ( void );
void move_char ( CD *, int );
DECLARE_GAME_CMD ( cmd_north );
DECLARE_GAME_CMD ( cmd_south );
DECLARE_GAME_CMD ( cmd_east );
DECLARE_GAME_CMD ( cmd_west );
DECLARE_GAME_CMD ( cmd_up );
DECLARE_GAME_CMD ( cmd_down );
DECLARE_GAME_CMD ( cmd_northeast );
DECLARE_GAME_CMD ( cmd_southwest );
DECLARE_GAME_CMD ( cmd_northwest );
DECLARE_GAME_CMD ( cmd_southeast );
DECLARE_GAME_CMD ( cmd_credits );
DECLARE_GAME_CMD ( cmd_help );
DECLARE_GAME_CMD ( cmd_quit );
DECLARE_GAME_CMD ( cmd_who );
DECLARE_GAME_CMD ( cmd_rwho );
DECLARE_GAME_CMD ( cmd_muds );
DECLARE_GAME_CMD ( cmd_save );
DECLARE_GAME_CMD ( cmd_commands );
DECLARE_GAME_CMD ( cmd_prompt );
DECLARE_GAME_CMD ( cmd_look );
DECLARE_GAME_CMD ( cmd_read );
DECLARE_GAME_CMD ( cmd_write );
DECLARE_GAME_CMD ( cmd_search );
DECLARE_GAME_CMD ( cmd_exits );
DECLARE_GAME_CMD ( cmd_emote );
DECLARE_GAME_CMD ( cmd_say );
DECLARE_GAME_CMD ( cmd_tell );
DECLARE_GAME_CMD ( cmd_yell );
DECLARE_GAME_CMD ( cmd_get );
DECLARE_GAME_CMD ( cmd_put );
DECLARE_GAME_CMD ( cmd_drop );
DECLARE_GAME_CMD ( cmd_give );
DECLARE_GAME_CMD ( cmd_equip );
DECLARE_GAME_CMD ( cmd_use );
DECLARE_GAME_CMD ( cmd_lock );
DECLARE_GAME_CMD ( cmd_unlock );
DECLARE_GAME_CMD ( cmd_light );
DECLARE_GAME_CMD ( cmd_kill );
DECLARE_GAME_CMD ( cmd_flee );
DECLARE_GAME_CMD ( cmd_stand );
DECLARE_GAME_CMD ( cmd_sit );
DECLARE_GAME_CMD ( cmd_rest );
DECLARE_GAME_CMD ( cmd_sleep );
DECLARE_GAME_CMD ( cmd_wake );
DECLARE_GAME_CMD ( cmd_practice );
DECLARE_GAME_CMD ( cmd_follow );
DECLARE_GAME_CMD ( cmd_add );
DECLARE_GAME_CMD ( cmd_remove );
DECLARE_GAME_CMD ( cmd_introduce );
DECLARE_GAME_CMD ( cmd_inventory );
DECLARE_GAME_CMD ( cmd_equipment );
DECLARE_GAME_CMD ( cmd_condition );
DECLARE_GAME_CMD ( cmd_compare );
DECLARE_GAME_CMD ( cmd_consider );
DECLARE_GAME_CMD ( cmd_open );
DECLARE_GAME_CMD ( cmd_close );
DECLARE_GAME_CMD ( cmd_eat );
DECLARE_GAME_CMD ( cmd_drink );
DECLARE_GAME_CMD ( cmd_fill );
DECLARE_GAME_CMD ( cmd_empty );
DECLARE_GAME_CMD ( cmd_list );
DECLARE_GAME_CMD ( cmd_buy );
DECLARE_GAME_CMD ( cmd_sell );
/*
* blr_cmd.c
*/
/* Builder commands. */
DECLARE_GAME_CMD ( cmd_control );
DECLARE_GAME_CMD ( cmd_return );
DECLARE_GAME_CMD ( cmd_users );
DECLARE_GAME_CMD ( cmd_servers );
char * state_string ( int );
char * mstate_string ( int );
DECLARE_GAME_CMD ( cmd_disconnect );
DECLARE_GAME_CMD ( cmd_ccode );
DECLARE_GAME_CMD ( cmd_create );
DECLARE_GAME_CMD ( cmd_destroy );
DECLARE_GAME_CMD ( cmd_lookup );
DECLARE_GAME_CMD ( cmd_stat );
DECLARE_GAME_CMD ( cmd_set );
DECLARE_GAME_CMD ( cmd_goto );
DECLARE_GAME_CMD ( cmd_transfer );
DECLARE_GAME_CMD ( cmd_ltell );
DECLARE_GAME_CMD ( cmd_rtell );
DECLARE_GAME_CMD ( cmd_chat );
DECLARE_GAME_CMD ( cmd_lwizcomm );
DECLARE_GAME_CMD ( cmd_wizcomm );
/*
* imp_cmd.c
*/
/* Implementor commands. */
DECLARE_GAME_CMD ( cmd_delete );
#ifdef DEBUG
DECLARE_GAME_CMD ( cmd_coredump );
#endif
DECLARE_GAME_CMD ( cmd_reboot );
DECLARE_GAME_CMD ( cmd_memory );
DECLARE_GAME_CMD ( cmd_fwrite );
DECLARE_GAME_CMD ( cmd_lset );
/*
* olc_save.c
*/
void fwrite_npc_reset_list ( FILE *, NPCRD * );
void fwrite_obj_reset_list ( FILE *, ORD * );
bool save_room ( RID *, char * );
/*
* olc_cmd.c
*/
void process_npc_editor_cmd ( TD *, char * );
void process_object_editor_cmd ( TD *, char * );
void process_room_editor_cmd ( TD *, char * );
DECLARE_GAME_CMD ( cmd_edit );
DECLARE_OLC_CMD ( olc_cmd_who );
DECLARE_OLC_CMD ( olc_cmd_rwho );
DECLARE_OLC_CMD ( olc_cmd_ltell );
DECLARE_OLC_CMD ( olc_cmd_rtell );
DECLARE_OLC_CMD ( olc_cmd_chat );
DECLARE_OLC_CMD ( olc_cmd_lwizcomm );
DECLARE_OLC_CMD ( olc_cmd_wizcomm );
DECLARE_OLC_CMD ( olc_cmd_done );
DECLARE_OLC_CMD ( olc_cmd_room_new );
DECLARE_OLC_CMD ( olc_cmd_room_save );
DECLARE_OLC_CMD ( olc_cmd_room_list );
DECLARE_OLC_CMD ( olc_cmd_room_title );
DECLARE_OLC_CMD ( olc_cmd_room_description );
DECLARE_OLC_CMD ( olc_cmd_room_sector );
DECLARE_OLC_CMD ( olc_cmd_room_flag );
/*
* shell.c
*/
void process_shell_cmd ( TD *, char * );
DECLARE_GAME_CMD ( cmd_shell );
DECLARE_SHELL_CMD ( shell_cmd_exit );
DECLARE_SHELL_CMD ( shell_cmd_cd );
DECLARE_SHELL_CMD ( shell_cmd_rm );
DECLARE_SHELL_CMD ( shell_cmd_mkdir );
DECLARE_SHELL_CMD ( shell_cmd_rmdir );
DECLARE_SHELL_CMD ( shell_cmd_ls );
DECLARE_SHELL_CMD ( shell_cmd_cat );
DECLARE_SHELL_CMD ( shell_cmd_users );
DECLARE_SHELL_CMD ( shell_cmd_who );
DECLARE_SHELL_CMD ( shell_cmd_tell );
/*
* child.c
*/
CHILDP_DATA * new_child ( pid_t, int *, int *, int *, char * );
bool die_child ( CHILDP_DATA *, int * );
/*
* plr_save.c
*/
void save_pc ( CD * );
CD * load_pc ( char * );
#ifndef _sysBSD
/*
* snprintf.c
*/
int snprintf ( char *, size_t, char *, ... );
int vsnprintf ( char *, size_t, char *, va_list );
#endif
#undef TD
#undef MUDCD
#undef SD
#undef HD
#undef PD
#undef SCD
#undef RSD
#undef NPCID
#undef OID
#undef RID
#undef NPCRD
#undef ORD
#undef CD
#undef NPCD
#undef PCD
#undef OD
/*
* Externals
*/
extern int errno;
extern char * pProgramName;
extern jmp_buf jbReboot;
extern int iTelnetPort;
extern int iBinaryPort;
extern int iMUDCommPort;
extern sapsocket sTelnetControl;
extern sapsocket sBinaryControl;
extern sapsocket sMUDCommControl;
extern int iMaxPlayers;
extern int iNumberPlayers;
extern char * pLoginScreenFilename;
extern time_t tCurrentTime;
extern char cNullChar;
extern char * pStrings;
extern char * pStringsEnd;
extern char * pStringsPos;
extern long lStringSpace;
extern CHILDP_DATA * pChildren;
extern bool bStrComparing;
extern char * pCOFilename;
extern long lCurrentLine;
extern bool bErrorsFound;
extern bool bWarningsFound;
extern FILE * pLogFile;
extern char * pBootFilename;
extern char * pMUDCommFilename;
extern char * pTempDir;
extern char * pShellProgramName;
extern char * pLogDir;
extern char * pPlayerDir;
extern char * pShellDir;
extern char * pXWordFilename;
extern char * pGreetingFilename;
extern char * pGoodbyeFilename;
extern char * pMOTDFilename;
extern char * pEmDir;
extern char * pImageDir;
extern char * pHelpDir;
extern char * pNPCDir;
extern char * pObjectDir;
extern char * pRoomDir;
extern char * pZoneDir;
extern char * pQuestDataDir;
extern char * pEmUsageFilename;
extern char * pGreeting;
extern char * pGoodbye;
extern char * pMOTD;
extern char * pMUDName;
extern long lLoopStallTime;
extern long lEmMaxTime;
extern int iHashListSize;
extern bool bEmFuncUsage;
extern int iEmInterpStackSize;
extern int iEmVarStackSize;
extern char cCreationCode[];
extern int iCreationCodeTimer;
extern bool bRunning;
extern int iMode;
extern int iMemoryMode;
extern TERM_DATA * pTermFree;
extern CHAR_DATA * pCharFree;
extern OBJ_DATA * pObjFree;
extern XWORD_DATA * pXWordList;
extern MUD_COMM_DATA * pMUDCommList;
extern TERM_DATA * pTermList;
extern HELP_DATA * pHelpList;
extern NPC_INDEX_DATA ** ppNPCIndexList;
extern OBJ_INDEX_DATA ** ppObjIndexList;
extern ROOM_INDEX_DATA ** ppRoomIndexList;
extern ZONE_DATA * pZoneList;
extern QUEST_DATA * pQuestDataList;
extern CHAR_DATA ** ppCharList;
extern OBJ_DATA ** ppObjList;
extern RUNNING_SCRIPT_DATA * pRunningScriptList;
extern int iMaxShowCount;
union
{
intl iNumber;
ROOM_INDEX_DATA * pRoom;
} uDefaultRoom;
extern const char cLetterTable[];
extern const char * pWordNumberTable[];
extern const char * pCreationCodeTable[];
extern const struct str_number_type snFileTypeTable[];
extern const struct str_number_type snDirTable[];
extern struct cmd_type cCmdTable[];
extern struct cmd_type cSysCmdTable[];
extern struct olc_cmd_type olccNPCTable[];
extern struct olc_cmd_type olccObjectTable[];
extern struct olc_cmd_type olccRoomTable[];
extern struct shell_cmd_type scShellCmdTable[];
extern const struct str_number_type snPositionTable[];
extern const struct str_number_type snSectorTable[];
extern const struct str_number_type snSexTable[];
extern const struct str_number_type snHairColorTable[];
extern const struct str_number_type snEyeColorTable[];
extern const struct race_type rRaceTable[];
extern const struct str_number_type snNPCScriptTriggerTable[];
extern const struct str_number_type snObjScriptTriggerTable[];
extern const struct str_number_type snRoomScriptTriggerTable[];
extern const struct str_number_type snNPCScriptCommandTable[];
extern const struct str_number_type snObjScriptCommandTable[];
extern const struct str_number_type snRoomScriptCommandTable[];
extern const struct script_func_type sfScriptFunctionTable[];
extern const struct str_number_type snItemTypeTable[];
extern const struct number_number_type nnItemEquipTable[];
extern const struct str_number_type snSizeTable[];
extern const struct str_number_type snMaterialTable[];
extern const struct str_number_type snNPCFlagsTable[];
extern const struct str_number_type snPartFlagsTable[];
extern const struct str_number_type snActFlagsTable[];
extern const struct str_number_type snObjectFlagsTable[];
extern const struct str_number_type snRoomFlagsTable[];
extern struct npc_load_type npclLoadTable[];
extern struct obj_load_type olLoadTable[];
extern struct room_load_type rlLoadTable[];
extern struct zone_load_type zlLoadTable[];
#endif /* SERVER */
#endif /* __SAPPHIRE_H__ */
/*
* End of sapphire.h
*/