talker/
talker/bin/
talker/files/whois/
talker/update/
talker/update/bin/
/*
 *  player.h
 */

/* kludgy macros, there must be a better way to do this */

#define align(p) p=(void *)(((int)p+3)&-4)
#define GET_BACK_ON_DUTY   " You cannot do that unless you are on duty...\n"
#define CHECK_DUTY(p) if ((p)->flags & BLOCK_SU && !((p)->residency & ADMIN)) \
                            { tell_player(p, GET_BACK_ON_DUTY); return; }
#define FORMAT(ck,s)    if (!(*(ck)))  { tell_player(current_player, (s)); return; }



/* modes that players can be in */
#define NONE 0
#define PASSWORD 1
#define CONV 2
#define ROOMEDIT 4
#define MAILEDIT 8
#define NEWSEDIT 16
#define SUNEWSEDIT 32
/* gender types */

#define MALE 1
#define FEMALE 2
#define PLURAL 3
#define OTHER 0
#define VOID_GENDER -1

/* residency types */

#define STANDARD_ROOMS -2
#define BANISHED -1
#define NON_RESIDENT 0
#define BASE 1
#define NO_SYNC (1<<1)
#define ECHO_PRIV (1<<2)
#define NO_TIMEOUT (1<<3)
#define BANISHD (1<<4)
#define SYSTEM_ROOM (1<<5)
#define MAIL (1<<6)
#define LIST (1<<7)
#define BUILD (1<<8)
#define SESSION (1<<9)
#define SPOD (1<<10)
#define FOREST_STYLE_CHAN (1<<11)
#define SPARR (1<<11)
#define REGULAR_STYLE_CHAN (1<<12)
#define MINISTEROLD (1<<12)
#define NONCLERGY (1<<13)
#define PSU (1<<14)
#define WARN (1<<15)
#define TESTCHAR (1<<16)
#define HOUSE (1<<17)
#define ASU (1<<18)
#define SPARE10 (1<<19)
#define DUMB (1<<20)
#define SPARE11 (1<<21)
#define SCRIPT (1<<22)
#define TRACE (1<<23)
#define CODER (1<<24)
#define SPARE15 (1<<25)
#define LOWER_ADMIN (1<<26)
#define HCADMIN (1<<27)
#define PROTECT (1<<28)
#define SU (1<<29)
#define ADMIN (1<<30)
#define GIT (1<<31)

#define NONSU (BASE + ECHO_PRIV + NO_TIMEOUT + MAIL + LIST + BUILD + SESSION \
               + SCRIPT + TRACE + DUMB + HOUSE + SPOD + REGULAR_STYLE_CHAN \
		+ WARN + FOREST_STYLE_CHAN)

#define HCADMIN_INIT (HCADMIN + ADMIN + LOWER_ADMIN + SU + SPOD \
                     + TRACE + SCRIPT + DUMB + WARN + PSU + SESSION \
                     + BUILD + LIST + MAIL + NO_TIMEOUT + ECHO_PRIV + BASE )

/* #define lengths */

#define MAX_HISTORY_LINES 8
#define MAX_NAME 20
#define MAX_INET_ADDR 40
#define IBUFFER_LENGTH 512
#define MAX_REVIEW 1000
#define MAX_PROMPT 15
#define MAX_ID 15
#define MAX_EMAIL 60
#define MAX_PASSWORD 20
#define MAX_TITLE 65
#define MAX_DESC 300
#define MAX_ALIAS 300
#define MAX_PLAN 300
#define MAX_PRETITLE 19 
#define MAX_ENTER_MSG 65
#define MAX_IGNOREMSG 65
#define MAX_SESSION 60
#define MAX_COMMENT 59
/* an un-subtle size, but... */
#define MAX_REPLY 200
#define MAX_ROOM_CONNECT 35
#define MAX_SPODCLASS 45
#define MAX_ROOM_NAME 50
#define MAX_AUTOMESSAGE 300
#define MAX_ROOM_SIZE 1500
#define MAX_ARTICLE_SIZE 5000
#define MAX_SNEWS 200

/* system flag definitiosn */

#define PANIC (1<<0)
#define VERBOSE (1<<1)
#define SHUTDOWN (1<<2)
/* missing flag 8 */
#define EVERYONE_TAG (1<<3)
#define FAILED_COMMAND (1<<4)
#define CLOSED_TO_NEWBIES (1<<5)
#define PIPE (1<<6)
#define ROOM_TAG (1<<7)
#define FRIEND_TAG (1<<8)
#define DO_TIMER (1<<9)
#define UPDATE (1<<10)
#define NO_PRINT_LOG (1<<11)
#define NO_PRETITLES (1<<12)
#define UPDATEROOMS (1<<13)
#define UPDATEFLAGS (1<<14)
#define NEWBIE_TAG (1<<15)
#define REPLY_TAG (1<<16)
#define SECURE_DYNAMIC (1<<17)
#define UPDATE_SPODLIST (1<<18)
#define ITEM_TAG (1<<19)
#define OFRIEND_TAG (1<<20)
#define UPDATE_URLS (1<<21)
#define CLOSED_TO_RESSIES (1<<22)
#define UPDATE_INT_DATA (1<<23)
/* player flag defs */

/* keep PANIC as 1 */
#define INPUT_READY (1<<1)
#define LAST_CHAR_WAS_N (1<<2)
#define LAST_CHAR_WAS_R (1<<3)
#define DO_LOCAL_ECHO (1<<4)
#define PASSWORD_MODE (1<<5)
/* keep closed to newbies at 64 */
#define PROMPT (1<<7)
#define TAGGED (1<<8)
#define LOGIN (1<<9)
#define CHUCKOUT (1<<10)
#define EOR_ON (1<<11)
#define IAC_GA_DO (1<<12)
#define SITE_LOG (1<<13)
#define DONT_CHECK_PIPE (1<<14)
#define RECONNECTION (1<<15)
#define NO_UPDATE_L_ON (1<<16)
#define BLOCK_SU (1<<17)
#define NO_SAVE_LAST_ON (1<<18)
#define NO_SU_WALL (1<<19)
#define ASSISTED (1<<20)
#define FROGGED (1<<21)
#define SCRIPTING (1<<22)
#define OFF_LSU (1<<23)
#define CHANNEL_BAN (1<<24)
#define CHANNEL_FOUNDER (1<<25)
#define WAITING_ENGAGE (1<<26)
#define BAN18 (1<<27)

/* ones that get saved */
/* lower block, system flags */
#define SAVENOSHOUT (1<<0)
#define SAVEDFROGGED (1<<1)
#define SAVE_NO_SING (1<<2)
#define SAVE_LAGGED (1<<3)
#define DECAPPED (1<<4)
#define SAVEDJAIL (1<<5)
#define NO_MSGS (1<<6)
/* how'd this get lost? */
#define SAVED_RM_MOVE (1<<7)   
/* upper block, system flags */
#define FLIRT_BACHELOR (1<<10)
#define BACHELOR_HIDE (1<<11)
#define ENGAGED (1<<12)
#define MARRIED (1<<13)
#define MINISTER (1<<14)
#define NEW_MAIL (1<<15)
#define COMPRESSED_LIST (1<<16)
#define COMPRESSED_ALIAS (1<<17)
#define COMPRESSED_ITEMS (1<<18) 
#define IAC_GA_ON (1<<19)
#define AGREED_DISCLAIMER (1<<20)
#define NEW_SITE (1<<21)
#define BUILDER (1<<22)

/* lower tag flags */
#define TAG_PERSONAL (1<<0)
#define TAG_ROOM (1<<1)
#define TAG_SHOUT (1<<2)
#define TAG_LOGINS (1<<3)
#define TAG_ECHO (1<<4)
#define SEEECHO (1<<5)
#define TAG_AUTOS (1<<6)
#define TAG_ITEMS (1<<7)
/* upper tag flags */
#define BLOCK_SHOUT (1<<10)
#define BLOCK_TELLS (1<<11)
#define BLOCK_FRIENDS (1<<12)
#define BLOCK_ECHOS (1<<13)
#define BLOCK_ROOM_DESC (1<<14)
#define BLOCK_FRIEND_MAIL (1<<15)
#define SINGBLOCK (1<<16)
#define BLOCKCHANS (1<<17)
#define NO_FACCESS (1<<18)
#define NOBEEPS (1<<19)
#define BLOCK_AUTOS (1<<20) 
#define NO_ANONYMOUS (1<<21)
#define NO_PROPOSE (1<<22)
#define BLOCK_ITEMS (1<<23)
#define BLOCK_LOGINS (1<<24)
#define BLOCK_BOPS (1<<25)

/* custom flags, lower */
#define HIDING (1<<0)
#define PRIVATE_EMAIL (1<<1)
#define PUBLIC_SITE (1<<2)
#define FRIEND_SITE (1<<3)
#define FRIEND_EMAIL (1<<4)
/* upper custom flags */
#define TRANS_TO_HOME (1<<10)
#define MAIL_INFORM (1<<11)
#define NEWS_INFORM (1<<12)
#define NOPREFIX (1<<13)
#define NOEPREFIX (1<<14)
#define YES_SESSION (1<<15)
#define NO_PAGER (1<<16)
#define ROOM_ENTER (1<<17)
#define YES_QWHO_LOGIN (1<<18)
#define SHOW_EXITS (1<<19)
#define CONVERSE (1<<20)
#define QUIET_EDIT (1<<21)

/* misc flags, lower */
#define NO_PRS (1<<0)
#define NO_GIFT (1<<1)
/* misc flags, upper */
#define CHAN_HI (1<<10)
#define SU_HILITED (1<<11)
#define NOCOLOR (1<<12)
#define SYSTEM_COLOR (1<<13)
#define GAME_HI (1<<14)
#define STOP_BAD_COLORS (1<<15)

/* list flags */

#define NOISY 1
#define IGNORE 2
#define INFORM 4
#define GRAB 8
#define FRIEND 16
#define BAR 32
#define INVITE 64
#define BEEP 128
#define BLOCK 256
#define KEY 512
#define FIND 1024
#define FRIENDBLOCK 2048
#define MAILBLOCK 4096
#define SHARE_ROOM 8192
#define NO_FACCESS_LIST 16384

/* command types */

#define VOID 0
#define SEE_ERROR (1<<0)
#define PERSONAL (1<<1)
#define ROOM (1<<2)
#define EVERYONE (1<<3)
#define ECHO_COM (1<<4)
#define EMERGENCY (1<<5)
#define AUTO (1<<6)
#define HIGHLIGHT (1<<7)
#define NO_P_MATCH (1<<8)
#define TAG_INFORM (1<<9)
#define LIST_EVERYONE (1<<10)
#define ADMIN_BARGE (1<<11)
#define SORE (1<<12)
#define WARNING (1<<13)
#define EXCLUDE (1<<14)
#define BAD_MUSIC (1<<15)
#define NO_HISTORY (1<<16)
#define LOGIN_TAG (1<<17)
#define LOGOUT_TAG (1<<18)
#define RECON_TAG (1<<19)

/* color modes */
#define TELsc 0
#define SUCsc 1
#define ADCsc 2
#define FRTsc 3
#define ROMsc 4
#define SHOsc 5
#define UCEsc 6
#define UCOsc 7
#define SYSsc 8

/* for Mantis' reportto and history shit */
struct rev_struct 
{
	char review[MAX_REVIEW];
};

/* files'n'things */

typedef struct
{
   char           *where;
   int             length;
}               file;

/* just simple struct to hold the super help pages */

struct super_n
{
   char            text[MAX_SNEWS];
   int             ident;
   struct super_n *next;
};

typedef struct super_n snews;

/* room definitions */

#define HOME_ROOM 1
#define COMPRESSED 2
#define AUTO_MESSAGE 4
#define AUTOS_TAG 8
#define LOCKABLE 16
#define LOCKED 32
#define OPEN 64
#define LINKABLE 128
#define KEYLOCKED 256
#define CONFERENCE 512
#define ROOM_UPDATED 1024
/* to be implemented at a later date... */
#define EXITMSGS_OK 2048 
#define SOUNDPROOF 4096 
#define ISOLATED_ROOM 8192 
#define ANTISING 16384

struct r_struct
{
   char            name[MAX_ROOM_NAME];
   char            id[MAX_ID];
   int             flags;
   int             data_key;
   int             auto_count;
   int             auto_base;
   file            text;
   file            exits;
   file            automessage;
   struct s_struct *owner;
   struct p_struct *players_top;
   struct r_struct *next;
   char            enter_msg[MAX_ENTER_MSG];
};

typedef struct r_struct room;

/* note defs */

#define NEWS_ARTICLE 1
#define ANONYMOUS 2
#define NOT_READY 4
#define SUPRESS_NAME 8
/* for later on... could be useful */
#define NEWS_NO_TIMEOUT 16
#define NOTE_FRIEND_TAG 32
#define SUNEWS_ARTICLE 64


struct n_struct
{
   int             id;
   int             flags;
   int             date;
   file            text;
   int             next_sent;
   int             read_count;
   struct n_struct *hash_next;
   char            header[MAX_TITLE];
   char            name[MAX_NAME];
};

typedef struct n_struct note;

/* list defs */

struct l_struct
{
   char            name[MAX_NAME];
   int             flags;
   struct l_struct *next;
};

typedef struct l_struct list_ent;

struct al_struct
{
	char 	cmd[MAX_NAME];
	char    sub[MAX_DESC];
	struct al_struct *next;
};

typedef struct al_struct alias;

struct library_alias
{
	char *command;
	char *alias_string;
	char *description;
	char *author;
	int privs;
};

typedef struct library_alias alias_library;
/* saved player defs */

struct s_struct
{
   char            lower_name[MAX_NAME];
   char            last_host[MAX_INET_ADDR];
   char		   email[MAX_EMAIL];
   int             last_on;
   int             residency;
   int		   system_flags;
   int		   misc_flags;
   int		   custom_flags;
   int		   tag_flags;
   int 		   pennies;

   file            data;
   struct l_struct *list_top;
   struct r_struct *rooms;
   int             mail_sent;
   int            *mail_received;
   struct al_struct *alias_top;
   struct p_item  *item_top; 
   struct s_struct *next;
};

typedef struct s_struct saved_player;

/* editor info structure */

typedef struct
{
   char           *buffer;
   char           *current;
   int             max_size;
   int             size;
   void           *finish_func;
   void           *quit_func;
   int             flag_copy;
   int             sflag_copy;
   int             tflag_copy;
   int             cflag_copy;
   int             mflag_copy;
   void           *input_copy;
   void           *misc;
}               ed_info;


/* terminal defs */

struct terminal
{
   char           *name;
   char           *bold;
   char           *off;
   char           *cls;
};


/* the player structure */

struct p_struct
{
   int             fd;
   int             performance;
   int             hash_top;
   int             flags;
   int             term;
   int             anticrash;
   int             antipipe;
   int             residency;
   int             saved_residency;
   int             term_width;
   int             column;
   int             word_wrap;
   int             idle;
   int             gender;
   int             no_shout;
   int             shout_index;
   int             jail_timeout;
   int             no_move;
   int             lagged;
   int             script;
   int             jetlag;	/* This has just become time zone difference */
   int             sneezed;	/* wibble! */
   int             birthday;
   int             age;
   int             last_newsb;
   struct p_struct *hash_next;
   struct p_struct *flat_next;
   struct p_struct *flat_previous;
   struct p_struct *room_next;
   saved_player   *saved;
   room           *location;
   int             max_rooms;
   int             max_exits;
   int             max_autos;
   int             max_list;
   int             max_mail;
   int             on_since;
   int             total_login;
   ed_info        *edit_info;
   char            inet_addr[MAX_INET_ADDR];
   char            num_addr[MAX_INET_ADDR];
   char            name[MAX_NAME];
   char            title[MAX_TITLE];
   char            pretitle[MAX_PRETITLE];
   char            description[MAX_DESC];
   char            plan[MAX_PLAN];
   char            lower_name[MAX_NAME];
   char            idle_msg[MAX_TITLE];

   char            ignore_msg[MAX_IGNOREMSG];
   char            comment[MAX_COMMENT];
   char            reply[MAX_REPLY];
   char            room_connect[MAX_ROOM_CONNECT];
   int             reply_time;

   void           *input_to_fn;
   void           *timer_fn;
   int             timer_count;
   char            ibuffer[IBUFFER_LENGTH];
   int             ibuff_pointer;
   char            prompt[MAX_PROMPT];
   char            converse_prompt[MAX_PROMPT];
   char            email[MAX_EMAIL];
   char            password[MAX_PASSWORD];
   char            password_cpy[MAX_PASSWORD];
   char            enter_msg[MAX_ENTER_MSG];

/* start of any adding by Athanasius */
   char            script_file[MAX_NAME + 16];
   char            assisted_by[MAX_NAME];
   int             logged_in;
   int             mode;
/* stuff trap wants to add... */
	char logonmsg[MAX_ENTER_MSG];
	char logoffmsg[MAX_ENTER_MSG];
	char blockmsg[MAX_IGNOREMSG];
	char exitmsg[MAX_ENTER_MSG];
	int time_in_main;   /* used to be int last_motd, but thats useless */   
	int no_sing;     /*not saved*/
	char married_to[MAX_NAME];
	char irl_name[MAX_NAME];
	char alt_email[MAX_EMAIL];
	char hometown[MAX_SPODCLASS];   /*yes a spoon thing so what?*/
	char spod_class[MAX_SPODCLASS];
	char favorite1[MAX_SPODCLASS];
	char favorite2[MAX_SPODCLASS];
	char favorite3[MAX_SPODCLASS];
        int total_idle_time;       /* 
     Hopefully I can incorporate this correctly - I want spodsort to 
     only cound ACTIVE time on the program - total time - total_idle_time
     Just a spoony thing to try but Im a spoon so sue me  -- asty */
	int last_remote_command;	/*for repeat*/
	char last_remote_msg[MAX_REPLY];
	int idle_index; /* traP - for counting idleness checks */
        char slock_pw[MAX_PASSWORD];  /* for screenlock */
        int chanflags;
        int opflags;
        int c_invites;
/* hopefully we can get these in rather painlessly... */
	int max_alias;
	char colorset[10];
/* is this pstruct big enough? I guess not! :P */
	char ressied_by[MAX_NAME];
	char git_string[MAX_DESC];
	char git_by[MAX_NAME];
	/* bad ressie stats */
	int warn_count;
	int eject_count;
	int idled_out_count;
	int booted_count;
	/* su stats */
	int num_ressied;
	int num_warned;
	int num_ejected;
	int num_rmd;
	int num_booted;
	int first_login_date;
	struct rev_struct rev[MAX_HISTORY_LINES];
	unsigned int prs;
	struct gag_struct *gag_top;
	int max_items; 
	int prs_record;
   int		   system_flags;
   int		   misc_flags;
   int		   custom_flags;
   int		   tag_flags;
   char		   ingredients[MAX_SPODCLASS];
   int		   pennies;
};

typedef struct p_struct player;

/* flag list def */

typedef struct
{
   char           *text;
   int             change;
}               flag_list;

/* gag definition */
struct gag_struct 
{
   player            *gagged;
   struct gag_struct *next;
};

typedef struct gag_struct gag_entry;

struct s_item 
{
	int	id;
	int	sflags;
	int	value;
	char	desc[MAX_TITLE];
	char	name[MAX_NAME];
	char	author[MAX_NAME];
	struct s_item *next;
};

struct p_item
{
	int	id;
	int 	number;
	int 	flags;
	saved_player  *owner;
	struct p_item *loc_next;
	struct p_item *next;
	struct s_item *root;
};	

typedef struct p_item item;

/* flags for the commands section.. */

#define THE_EVIL_Q (1<<1)
#define COMMc (1<<2)
#define LISTc (1<<3)
#define ROOMc (1<<4)
#define MOVEc (1<<5)
#define INFOc (1<<6)
#define SYSc (1<<7)
#define DESCc (1<<8)
#define SOCIALc (1<<9)
#define MISCc (1<<10)
#define SUPERc (1<<11)
#define ADMINc (1<<12)
#define ITEMc (1<<13)
/* last one - determines if it's shown at all on list or not */
#define INVISc (1<<14)

/* structure for commands */

struct command
{
   char           *text;
   void           *function;
   int             level;
   int             andlevel;
   int             space;
   char           *help;
/* for the "smart" commandslist */
   int	     section; 

};

/* global definitions */

#ifndef GLOBAL_FILE

int            backup;
char           *action;
extern char    *stack, *stack_start;
extern int      sys_flags, max_players, current_players, command_type, up_time,
                up_date, logins, sys_color_atm, max_ppl_on_so_far;
extern player  *flatlist_start, *hashlist[], *current_player, *c_player, *stdout_player, *input_player;
extern room    *current_room, *entrance_room, *prison;
extern player **pipe_list;
extern int      pipe_matches;
extern int      splat1, splat2, splat_timeout;
extern int      soft_splat1, soft_splat2, soft_timeout;
extern player  *otherfriend;
#ifdef TRACK
extern char     functionin[100];
extern char     functionhist[20][100];
extern int      funcposition;
#endif
#endif


extern int      in_total, out_total, in_current, out_current, in_average,
                out_average, net_count, in_bps, out_bps, in_pack_total,
                out_pack_total, in_pack_current, out_pack_current, in_pps,
                out_pps, in_pack_average, out_pack_average;