/
Sapphire/bin/
Sapphire/db/
Sapphire/db/OLC_rooms/
Sapphire/db/abi/
Sapphire/db/em_src/
Sapphire/db/helps/
Sapphire/db/helps/emman/ifunc/
Sapphire/db/npcs/Tatt/
Sapphire/db/objects/Tatt/
Sapphire/db/q_data/
Sapphire/db/rooms/Tatt/
Sapphire/doc/
Sapphire/doc/em/
Sapphire/etc/
Sapphire/src/abic/
Sapphire/src/areacon/
Sapphire/src/client/
Sapphire/src/embc/
Sapphire/src/emi/
Sapphire/src/emi/test/
Sapphire/src/include/
Sapphire/src/sapphire/em/
Sapphire/src/tcon/
/*
 * 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
 */