pgplus/bin/
pgplus/help_files/
pgplus/port_redirector/
pgplus/src/configure/makefiles/
/*
 * Playground+ - player.h
 * Player defines
 * ---------------------------------------------------------------------------
 */

#include <sys/time.h>

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

/* #define align(p)	p=(void *)(((int)p+3)&-4) */

#define SIZEOFVOIDSTAR	(sizeof(void *))
#define align(p)	p=(void *)(((unsigned long)p+(SIZEOFVOIDSTAR-1))&-SIZEOFVOIDSTAR)
#define CHECK_DUTY(p)	if (!(check_duty((p)))) return;
#define FORMAT(ck,s)	if (!(*(ck)))  { tell_player(current_player, (s)); return; }
#define HAS_PRIV(p,r)	((p)->residency & (r))
#define RES_BIT_HEAD	"Sys |Ressie|MiscRes |Misc|Staff"

#ifdef ROBOTS
#define CHECKROBOT(p)   if (!p->residency & ROBOT_PRIV) \
                        { tell_player(p," This is a command for robots only.\n"); \
                        return; }
#ifdef INTELLIBOTS
#define IR_PRIVATE	1
#define IR_ROOM		2
#define IR_SHOUT	4

/* Number of inteligent robots */

#define NUM_IROBOTS 1

/* Max number of intelligent robots phrases to catch */

#define MAX_IROBOT_PHRASES 20
#endif
#endif

/* modes that players can be in */

#define NONE		0
#define PASSWORD	(1<<0)
#define CONV		(1<<1)
#define ROOMEDIT	(1<<2)
#define MAILEDIT	(1<<3)
#define NEWSEDIT	(1<<4)
#define SUNEWSEDIT	(1<<5)

/* gender types */

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

/* residency types */

#define BANISHED	-1
#define NON_RESIDENT	0
#define BASE		1
#define NO_SYNC		(1<<1)  /* will not save */
#define ECHO_PRIV	(1<<2)  /* can use echo command */
#define NO_TIMEOUT	(1<<3)  /* will not timeout */
#define BANISHD		(1<<4)  /* cannot login */
#define SYSTEM_ROOM	(1<<5)  /* not real player, a system room owner */
#define MAIL		(1<<6)  /* can use mail commands */
#define LIST		(1<<7)  /* can use list commands */
#define BUILD		(1<<8)  /* can use room commands */
#define SESSION		(1<<9)  /* can set the session */
#define SPOD		(1<<10) /* spod channel access */
#define SPECIALK	(1<<11) /* can create socials */
#define DEBUG		(1<<12) /* can view the debug channel */
#define NONCLERGY	(1<<13) /* unused, left for backward compatiblity */
#define PSU		(1<<14) /* can use su channel commands */
#define WARN		(1<<15) /* can use 'warn' */
#define ADC		(1<<16) /* can use admin channel commands */
#define HOUSE		(1<<17) /* extra 'fun' priv */
#define ASU		(1<<18) /* advanced su, can use advanced su commands */
#define MINISTER	(1<<19) /* can do marriages and such */
#define DUMB		(1<<20) /* can use dumb (frog) commands */
#define ROBOT_PRIV	(1<<21) /* is a robot */
#define SCRIPT		(1<<22) /* can use extended scripting */
#define TRACE		(1<<23) /* can see sites and use site type commands */
#define CODER		(1<<24) /* not really used, backward compatiblity */
#define BUILDER		(1<<25) /* can create items */
#define LOWER_ADMIN	(1<<26) /* lower admin, can use minor admin commands */
#define HCADMIN		(1<<27) /* hard coded admin, not Truly, highest priv */
#define PROTECT		(1<<28) /* protected from su commands */
#define SU		(1<<29) /* superuser, can use normal su commands */
#define ADMIN		(1<<30) /* administrator, can use admin commands */
#define GIT		(1<<31) /* gitgitgit, bad player */

/* Inform bits and bobs */

#define INFORM_SU	(1<<1)
#define INFORM_ROBOT	(1<<2)
#define INFORM_NEWBIE	(1<<3)
#define INFORM_FRIEND	(1<<4)


 /* these are the privs that arent counted when privs are compared */
#define NONSU (BASE + ECHO_PRIV + NO_TIMEOUT + MAIL + LIST + BUILD + SESSION \
               + SCRIPT + TRACE + DUMB + HOUSE + SPOD + WARN + BUILDER + \
               MINISTER + SPECIALK + DEBUG + GIT)

 /* privs a hard coded (in admin.h) player gets on login */
 /* Note, CODER isnt here...to have hcadmins seperate from coders */
#define HCADMIN_INIT (HCADMIN + ADMIN + LOWER_ADMIN + ASU + SU + SPOD  \
                     + TRACE + SCRIPT + DUMB + WARN + PSU + SESSION + SPECIALK \
                     + BUILD + LIST + MAIL + NO_TIMEOUT + ECHO_PRIV + BASE \
                     + MINISTER + BUILDER)

/* #define lengths */

 /* safe to change these arbitilary */
#define MAX_HISTORY_LINES 	8
#define IBUFFER_LENGTH		512
#define MAX_REVIEW		1000
#define MAX_SESSION		60
#define MAX_COMMENT		59
#define MAX_ARTICLE_SIZE	5000
#define MAX_SUH_LEN		2048

/* dont change these less you know what and why you are doing */

#define MAX_NAME		20
#define MAX_INET_ADDR		40
#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_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_MQUIT		400
#define MAX_SWARN		400
#define MAX_LAST_NEWS_INTS	50
#define MAX_CHANNELS		50
#define MAX_REMOTE_USER		40

/* system flag definitions */

#define PANIC			(1<<0)
#define VERBOSE			(1<<1)
#define SHUTDOWN		(1<<2)
#define EVERYONE_TAG		(1<<3)
#define FAILED_COMMAND		(1<<4)
#define PIPE			(1<<5)
#define CLOSED_TO_NEWBIES	(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)
#define SCREENING_NEWBIES	(1<<24)

/* config type flags (as set in soft/config.msg) */

#define cfUSUK			(1<<0)    /* time_format */
#define cfNOSPAM		(1<<1)    /* nospam */
#define cfPRIVCHANGE		(1<<2)    /* privs_change */
#define cfNOSWEAR		(1<<3)    /* swear_filter */
#define cfFINGERLOGIN		(1<<4)    /* login_finger */
#define cfWALLPROPOSE		(1<<5)    /* wall_propose */
#define cfWALLMARRIGE		(1<<6)    /* wall_marriage */
#define cfWALLREJECT		(1<<7)    /* wall_reject */
#define cfWALLDIVORCE		(1<<8)    /* wall_divorce */
#define cfWALLACCEPT		(1<<9)    /* wall_accept */
#define cfVEGASLOTS		(1<<10)   /* vegas_style */
#define cfIDLEBAD		(1<<11)   /* idle_bad */
#define cfADMINIDLE		(1<<12)   /* admin_ok_idle */
#define cfFORCEABLE		(1<<13)   /* can_force */
#define cfMULTI_INFORM		(1<<14)   /* multi_inform */
#define cfNOSUNONEW		(1<<15)   /* no_sus_no_new */
#define cfMULTIVERBOSE		(1<<16)   /* verbose_multis */
#define cfSELFRES		(1<<17)   /* allow_selfres */
#define cfUSETRUESPOD		(1<<18)   /* use_truespod */
#define cfRECONNECTLOOK		(1<<19)   /* reconnect_look */
#define cfCANEDITFILES		(1<<20)   /* can_edit_files */
#define cfSHOWXED		(1<<21)   /* show_when_xd */
#define cfWELCOMEMAIL		(1<<22)   /* do_email_check */
#define cfCAPPEDNAMES		(1<<23)   /* capped_names */
#define cfSUSCANRECAP		(1<<24)   /* sus_can_recap */

/* player flag defs */

/* uses sys_flags #define PANIC (1<<0) */
#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)
/* uses sys_flag #define CLOSED_TO_NEWBIES (1<<6) */
#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 UNUSED			(1<<24)
#define UNUSED2			(1<<25)
#define WAITING_ENGAGE		(1<<26)
#define ROBOT			(1<<27)
#define IN_EDITOR		(1<<28)

/* 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)
#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 OLD_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 OLD_BUILDER		(1<<22)
#define TIMEPROMPT		(1<<23)

/* 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)
#define TAG_DYNATEXT		(1<<8)
#define TAG_SOCIAL              (1<<9)

/* 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)
#ifdef ALLOW_MULTIS
#define BLOCK_MULTIS		(1<<26)
#endif

/* 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)
#define NO_CLOCK		(1<<22)
#define NO_DYNATEXT		(1<<23)
#define NO_NEW_NEWS_INFORM	(1<<24)

/* 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)
#define NO_MAIN_CHANNEL		(1<<16)
#define NO_SPOD_CHANNEL		(1<<17)
#define SEE_DEBUG_CHANNEL	(1<<18)
#ifdef INTERCOM
#define NO_INTERCOM_CHANNEL     (1<<19)
#endif
/* EWE */
#define edPARAGRAPH_MODE 	(1<<20)		/* off=off, on=on ;-) */
#define edPARAGRAPH_STYLE 	(1<<21)		/* off=ew2, on=correct */
#define edAUTOTRUNCATE 		(1<<22)		/* whether we scroll included text */
#define edAUTOTRUNCATE_ALL 	(1<<23)		/* off - included, on - anything */
#define edPRETTY_OUTPUT 	(1<<24)		/* on gives space before output */
#define edFORMAT_OUTPUT 	(1<<25)		/* just nav, or all */
#define edPADBIT1 		(1<<26)		/* no more saved int needed */
#define edPADBIT2 		(1<<27)		/* as above */
#define edPADBIT3 		(1<<28)
#define edINSERT_BEFORE		(1<<29)		/* obvious really */

/* list flags */

#define NOISY			(1<<0)
#define IGNORE			(1<<1)
#define INFORM			(1<<2)
#define GRAB			(1<<3)
#define FRIEND			(1<<4)
#define BAR			(1<<5)
#define INVITE			(1<<6)
#define BEEP			(1<<7)
#define BLOCK			(1<<8)
#define KEY			(1<<9)
#define FIND			(1<<10)
#define FRIENDBLOCK		(1<<11)
#define MAILBLOCK		(1<<12)
#define SHARE_ROOM		(1<<13)
#define NO_FACCESS_LIST		(1<<14)
#define PREFERRED		(1<<15)

/* 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)
#ifdef ALLOW_MULTIS
#define MULTI_COM		(1<<20)
#endif
#define BLOCK_ALL_CHANS		(1<<21)
#define HI_CHANS		(1<<22)
#ifdef ALLOW_MULTIS
#define REMOVE_COM		(1<<23)
#endif
#define SOCIAL			(1<<24)


/* 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
#define ZCHsc			9

/* For TTT */

#define TTT_MY_MOVE (1<<18)
#define TTT_AM_NOUGHT (1<<19)

/* definitions and structures needed by the multi code */

#ifdef ALLOW_MULTIS
#define MULTI_FRIENDSLIST	(1<<0)
#define MULTI_NOIDLEOUT		(1<<1)
#define MULTI_WARNED		(1<<2)
#endif

/* room bits */

#define HOME_ROOM		(1<<0)
#define COMPRESSED		(1<<1)
#define AUTO_MESSAGE		(1<<2)
#define AUTOS_TAG		(1<<3)
#define LOCKABLE		(1<<4)
#define LOCKED			(1<<5)
#define OPEN			(1<<6)
#define LINKABLE		(1<<7)
#define KEYLOCKED		(1<<8)
#define CONFERENCE		(1<<9)
#define ROOM_UPDATED		(1<<10)
#define EXITMSGS_OK		(1<<11)
#define SOUNDPROOF		(1<<12)
#define ISOLATED_ROOM		(1<<13)
#define ANTISING		(1<<14)

/* note bits */

#define NEWS_ARTICLE		(1<<0)
#define ANONYMOUS		(1<<1)
#define NOT_READY		(1<<2)
#define SUPRESS_NAME		(1<<3)
#define STICKY_ARTICLE		(1<<4)
#define NOTE_FRIEND_TAG		(1<<5)
#define SUNEWS_ARTICLE		(1<<6)
#define DELETE_ME		(1<<7)

/* command bits */

#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)
#define INVISc			(1<<14) /* invis on 'all' or not */
#define SPAMc			(1<<15) /* command causes spam */
#define TAGGEDc			(1<<16) /* command tagged as a match */
#define NOMATCHc		(1<<17) /* command cant be matched */
#define F_SWEARc		(1<<18) /* swear catch anywhere */
#define M_SWEARc		(1<<19) /* swear catch only in main rooms */

/* Function passing */

struct p_struct;
typedef void        player_func (struct p_struct *);
typedef void        command_func (struct p_struct *, char *);


/* the generic_social struct for kRad Soshuls */

typedef struct generic_social
{
   int
       flags,
       date;

   char
       creator[MAX_NAME],
       command[MAX_NAME],
      *format,
      *room_msg,
      *used_room_msg,
      *direct_msg,
      *used_direct_msg;

   struct generic_social
      *next,
      *prev;
} generic_social;


/* the multi structs for segtor's multis/chains */

#ifdef ALLOW_MULTIS
struct multi_player_struct
{
   struct p_struct            *the_player;
   struct multi_player_struct *next_player;
};
typedef struct multi_player_struct multiplayer;

struct multi_struct
{
   int                  number;
   int                  multi_flags;
   int                  multi_idle;
   multiplayer         *players_list;
   struct multi_struct *next_multi;
};
typedef struct multi_struct multi;
#endif


/* for Mantis' reportto and history shit */

struct rev_struct 
{
   char review[MAX_REVIEW];
};

/* files'n'things */

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

typedef struct r_struct
{
   char
     name[MAX_ROOM_NAME],
     id[MAX_ID],
     enter_msg[MAX_ENTER_MSG];

   int
     flags,
     data_key,
     auto_count,
     auto_base;
   file
     text,
     exits,
     automessage;

   struct s_struct *owner;
   struct p_struct *players_top;
   struct r_struct *next;
} room;

typedef struct n_struct
{
   char
     header[MAX_TITLE],
     name[MAX_NAME];
   int
     id,
     flags,
     date,
     next_sent,
     read_count;

   file            text;
   struct n_struct *hash_next;
} note;

/* NuNews defs */

typedef struct     newsgroup
{
   char                  *name;           /* name of group */
   int                    required_priv;  /* min priv if any to see group */
   int                    max;            /* max posts per non admin player */
   char                  *desc;           /* desc shown on   news groups */
   char                  *path;           /* path to the dir the group files */
   struct news_header    *top;            /* top of news_header list for group
                                                         (leave 0 in array) */
} newsgroup;


typedef struct    news_header
{
    int          id;                   /* unique id, file name for it */
    char         header[MAX_TITLE];    /* title of the news */
    char         name[MAX_NAME];       /* who posted it */
    char         lastreader[MAX_INET_ADDR];   /* site of who last read it */
    int          date;                 /* when it was posted */
    int          read_count;           /* how many times its been read */
    int          flags;                /* flags for it */
    struct news_header  *next;         /* next header in linked list */
    int          followups;            /* number of followups */
    newsgroup   *group;                /* needed for reference in posting */
}  news_header;


/* history struct */

typedef struct history
{
   char    **hist;
   int       max;
} history;


/* list struct */

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


/* alias struct */

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

/* library alias struct */

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


#ifdef ROBOTS
 #include "robot_player.h"
#endif

/* saved player struct */

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

   file              data;
   struct l_struct  *list_top;
   struct r_struct  *rooms;
   struct al_struct *alias_top;
   struct p_item    *item_top; 
   struct s_struct  *next;

} saved_player;

/* EWE */
/* editor line structure and flags */
#define edlineINCLUDED (1<<0)
#define edlineJUST_INSERTED (1<<1)
#define edlineMARKED1 (1<<2)
#define edlineMARKED2 (1<<3)
#define edlineINCLUDED_MATTERS (1<<4)

struct editor_line_struct
{
   int	number;
   char	text[76];
   int	flags;
   struct editor_line_struct *next;
};
typedef struct editor_line_struct editor_line;


/* editor info structure */
typedef struct
{
   char
     *buffer,
     *current;
   editor_line
     *first_line,
     *current_line;
   char
     last_search[75];
   int
     max_size,
     size,
     total_lines,
     flag_copy,
     sflag_copy,
     tflag_copy,
     cflag_copy,
     mflag_copy;

   player_func    *finish_func;
   player_func    *quit_func;
   command_func   *input_copy;
   void           *misc;
} ed_info;


/* terminal defs */

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

/* the player structure (ala phypor) */

typedef struct p_struct
{
   int
             /* saved */
          term,                  /* terminal type of player */
          term_width,            /* width in chars of players terminal */
          word_wrap,             /* min length of word wrapped */
          max_rooms,             /* max rooms player may have */
          max_exits,             /* max exits per room of player */
          max_autos,             /* max autos per room of player */
          max_list,              /* max list entries */
          max_mail,              /* max mails player may send */
          max_alias,             /* max aliases a player may have */
          max_items,             /* max items player may create */
          gender,                /* gender int */
          no_shout,              /* seconds til player my shout */
          total_login,           /* total player login, in seconds */
          birthday,              /* birthday player sets for emself */
          age,                   /* age the player sets for emself */
          jetlag,                /* hours +/- of the player from talker time */
          sneezed,               /* timestamp of player sneezed */
          time_in_main,          /* seconds player has spent in main room */
          no_sing,               /* seconds til player my sing again */
          total_idle_time,       /* seconds player has spent idle */
          warn_count,            /* how many times player has been warned */
          eject_count,           /*                                removed */
          idled_out_count,       /*                                idled out */
          booted_count,          /*                                booted */
          num_ressied,           /* how many ressies player has done */
          num_warned,            /* how many warns */
          num_ejected,           /* how many ejections (sneeze,drag) */
          num_rmd,               /* how many rm_shout, sing, etc */
          num_booted,            /* how many ppl player has booted/jailed */
          first_login_date,      /* timestamp when player first logged on */
          prs_record,            /* record wins, loses, ties for prs */
          ttt_board,             /* tic tac toe board */
          ttt_win,               /* tic tac toe wins */
          ttt_loose,             /*             looses;) */
          ttt_draw,              /*             draws */
          icq,                   /* ICQ number */
          news_last[MAX_LAST_NEWS_INTS], /* int array of last read news */

             /* saved in saved_player */
          residency,             /* residency, privs and such */
          system_flags,          /* saved flags of misc system stuff */
          misc_flags,            /* saved flags of misc stuff */
          custom_flags,          /* saved flags for players customization */
          tag_flags,             /* saved flags for players show tags, etc */
          pennies,               /* players money */

             /* non saved */
          fd,                    /* players open file descriptor (socket) */
          hash_top,              /* for which running (not saved) hashlist */
          flags,                 /* nonsaved misc flags for player */
          saved_residency,       /* backup int for residency */
          column,                /* used in output, keeps up with coloumn */
          idle,                  /* seconds since input last recieved */
          shout_index,           /* used to keep up with shouts by player */
          jail_timeout,          /* seconds before player may leave jail */
          no_move,               /* seconds before player may change room */
          lagged,                /* seconds before input from player parsed */
          script,                /* time left for player emergency */
          on_since,              /* time stamp when player logged in */
          reply_time,            /* time til player may reply */
          timer_count,           /* seconds til timer_fn for player is used */
          ibuff_pointer,         /* where in p->ibuffer reading is */
          logged_in,             /* used as bool, if player is logged in */
          mode,                  /* news,mail,etc mode for player */
          last_remote_command,   /* type of commands last used, for repeat */
          idle_index,            /* used to calculate total_idle_time online */
          newbieinform,          /* player gets informed as a newbie to sus */
          password_fail,         /* used to track password attempts at login */
          antispam,              /* used to track player spamming */
          suh_seen,              /* parts of the su history seen by player */
          zchannellisted,        /* how many ppl are on the same zchannel? */
          zcidle,                /* how idle player is on zchannel */
          awaiting_residency,    /* how many seconds til player has res */
          validated_email,       /* player has validated email in res process */
          next_ping,             /* seconds til player gets next ping */
          social_index;          /* seconds player must wait to use a social */

   char
             /* saved */

          name[MAX_NAME],            /* players effective name */
          lower_name[MAX_NAME],      /* refrence name */
          prompt[MAX_PROMPT],        /* normal prompt */
          converse_prompt[MAX_PROMPT],    /* prompt for converse mode */
          email[MAX_EMAIL],          /* players email */
          password[MAX_PASSWORD],    /* crypted password */
          title[MAX_TITLE],          /* title, shown in examine, finger, etc */
          pretitle[MAX_PRETITLE],    /* prefix */
          description[MAX_DESC],     /* description, shown on examine */
          plan[MAX_PLAN],            /* plan, shown on finger */
          enter_msg[MAX_ENTER_MSG],  /* msg seen when entering a room */
          room_connect[MAX_ROOM_CONNECT], /* owner.id of room for login */
          logonmsg[MAX_ENTER_MSG],   /* msg seen in room when player logs in */
          logoffmsg[MAX_ENTER_MSG],  /* msg seen in room when player quits */
          blockmsg[MAX_IGNOREMSG],   /* uneffective, but setable */
          exitmsg[MAX_ENTER_MSG],    /* msg seen when player leaves a room */
          married_to[MAX_NAME],      /* spouse / fiencee */
          irl_name[MAX_NAME],        /* in real life name */
          alt_email[MAX_EMAIL],      /* url for players homepage */
          hometown[MAX_SPODCLASS],   /* location in the world */
          spod_class[MAX_SPODCLASS], /* spod class shown on lss */
          favorite1[MAX_SPODCLASS],  /* favorite for examine */
          favorite2[MAX_SPODCLASS],  /*   '       '     '    */
          favorite3[MAX_SPODCLASS],  /*   '       '     '    */
          colorset[10],              /* color settings for player */
          ressied_by[MAX_NAME],      /* whut su made this player a ressie */
          git_string[MAX_DESC],      /* nasty comments su sets about player */
          git_by[MAX_NAME],          /* su that made this player a git */
          ingredients[MAX_SPODCLASS],/* Made From on examine */
          finger_message[MAX_MQUIT + 2], /* mquit message, shown on finger */
          swarn_sender[MAX_NAME + 2],    /* su that made saved warn */
          swarn_message[MAX_SWARN + 2],  /* saved warn message */

             /* non saved */

          inet_addr[MAX_INET_ADDR],  /* alpha site (somewhere.onda.net) */
          num_addr[MAX_INET_ADDR],   /* ip site (123.45.67.89) */
          idle_msg[MAX_TITLE],       /* message set to show when idle */
          ignore_msg[MAX_IGNOREMSG], /* others see when ignored and try tells */
          comment[MAX_COMMENT],      /* comment on the session, shown on who */
          reply[MAX_REPLY],          /* players in reply list */
          ibuffer[IBUFFER_LENGTH],   /* buffer read from input socket */
          password_cpy[MAX_PASSWORD],/* used to enter password twice */
          script_file[MAX_NAME + 16],/* filename for extended scripting */
          assisted_by[MAX_NAME],     /* su that assisted this player */
          last_remote_msg[MAX_REPLY],/* last msg sent, for repeat */
          zchannel[15],              /* the z channel this player is on */
          proposed_by[MAX_NAME],     /* su making this player a res */
          current_file[MAX_DESC];    /* file that is currently being edited */


   unsigned int
          prs;                      /* current prs game info */

   long
          last_ping;                /* lag time registered by last ping */

   struct timeval
         ping_timer;                /* for ping, when the ping was sent */

   struct p_struct 
         *hash_next,                /* next player in haslist linked list */
         *flat_next,                /* next player in flatlist */
         *flat_previous,            /* previous player in flatlist */
         *room_next,                /* next player in room */
         *ttt_opponent;             /* tic tac toe opponent */

   saved_player
         *saved;                    /* pointer to saved_player of player */
   room
         *location;                 /* pointer to room where player is */

   ed_info
         *edit_info;                /* pointer to editor info struct */

   command_func
         *input_to_fn;              /* pointer to input func, logins etc */

   player_func
         *timer_fn;                 /* pointer to func executed on timer */

   struct rev_struct 
         rev[MAX_HISTORY_LINES];    /* review array for review and reportto */
   
   struct gag_struct 
        *gag_top;                   /* pointer to top of players gags */

   struct command 
        *command_used;              /* command currently executed */

   generic_social
        *social;                    /* social player is creating atm */
         


#ifdef SEAMLESS_REBOOT
    char 
         location_string[MAX_NAME + MAX_ID + 2]; /* For seemless rebooting */
#endif

#ifdef IDENT
    char     
         remote_user[MAX_REMOTE_USER + 2];       /* Return from ident */
    int      
         ident_id;                               /* Ident request id */
#endif

    char
         channels[MAX_CHANNELS][MAX_NAME];       /* channels array */
    int
         dsc_flags;                              /* flags for ds channels */

#ifdef INTELLIBOTS
    int
         robowarns;                              /* warnings from bots */
#endif

} player;


/* flag list struct */

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

/* gag struct */

typedef struct gag_struct 
{
   player            *gagged;
   struct gag_struct *next;
} gag_entry;

/* items structs */

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;
};

typedef 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;
} item;


/* structure for commands */

struct command
{
   char           *text;
   command_func   *function;
   int             level;
   int             andlevel;
   int             space;
   char           *help;
   int	           section; 

};