/* Copyright 1989, 1990 by James Aspnes, David Applegate, and Bennet Yee */
/* See the file COPYING for distribution information */
#ifndef _CONFIG_H
#define _CONFIG_H

typedef long datum;		/* must be big enough to hold struct * */

#define RESERVED_TOKENS	(64)	/* number of reserved words  */

/* special flag names */
#define MIN_FLAGNAME (64)
#define MAX_FLAGNAME (96)

/* special variables which C code knows about */
#define OWNER_NAME (96)
#define PARENT_NAME (97)
#define PASSWORD_NAME (98)
#define PLAYER_SET_NAME (99)	/* list of players that can connect */
#define CONNECTED_SET_NAME (100) /* list of players that are connected */
#define ALIASES_NAME (101)
#define CONTENTS_NAME (102)

/* magic action names */
#define DEFAULT_ACTION (112)
#define BEFORE_ACTION (113)
#define AFTER_ACTION (114)
#define INVOKE_ACTION (115)
#define STARTUP_ACTION (116)
#define CONNECT_ACTION (117)
#define DISCONNECT_ACTION (118)
#define TICK_ACTION (119)

#define FIXED_STRINGS (128)	/* these strings can never be gc'd */

#define MAX_NAMELEN (32)	/* max length of variable name */
#define MAX_STRLEN (4096)	/* max length of a string */

#define BOOL_MARKER '?'		/* character that indicates boolean var */
#define NUM_MARKER '%'		/* numeric variable */
#define STRING_MARKER '$'	/* string variable */
#define ACTION_MARKER '&'	/* action name */
#define SET_MARKER '@'		/* set variable */
#define TIME_MARKER '~'		/* time variable */

/* internal action delimiters */
#define LEFT_ACTION '<'
#define RIGHT_ACTION '>'
#define DOUBLE_ACTION '^'

/* special single-character commands */
#define RUN_CODE_COMMAND '@'
#define SAY_COMMAND '\"'
#define POSE_COMMAND ':'

#define ALIAS_SEPARATOR '|'	/* separates alternative names */

/* magic names for parser */
#define ME_STRING "me"
#define HERE_STRING "here"
#define NUMERIC_NAME_TOKEN '#'

/* something that will return non-negative datum's */
#define RAND() (random() & 0x7ffffff)

#define TELL_BUFFER_SIZE 32768	/* make it too big, and Sun-3 stacks blow */

/* code fragment to run instead of a broken action */
/* this get passed to sprintf with the error message */
#define LOSE_CODE "if $name then tell $name [ shorts out:] to you else tell [The nameless object ] %%id [ shorts out:] to you endif tell [ZzZt! %s] to you"

/* message when parse fails completely */
#define DEFAULT_HUH_MESSAGE "Huh?"

/* maximum number of commands for a full incremental GC */
#define GC_RATE (1024)

/* top-level object from whom all others can be found */
#define TOP_OBJECT (1)
#define TOP_INIT_COMMAND "Initialize" /* sent to TOP_OBJECT at startup */

/* interface information */
#define TINYPORT (4201)		/* default port for network interface */
#define QUIT_COMMAND "QUIT"	/* command to disconnect */

/* timing stuff */
#define COMMAND_TIME_MSEC 1000	/* time slice length in milliseconds */
#define COMMAND_BURST_SIZE 100	/* commands allowed per user in a burst */
#define COMMANDS_PER_TIME 10	/* commands per time slice after burst */
#define TICKS_PER_SLICE 20	/* max number of events per slice */
#endif /* _CONFIG_H */