tfe-1.0/area/
tfe-1.0/files/
tfe-1.0/logs/
tfe-1.0/logs/immortal/
tfe-1.0/logs/mob/
tfe-1.0/logs/object/
tfe-1.0/logs/player/
tfe-1.0/logs/room/
tfe-1.0/notes/clans/
tfe-1.0/player/
tfe-1.0/prev/
tfe-1.0/prev/area/
tfe-1.0/prev/player/
tfe-1.0/prev/rooms/
tfe-1.0/rooms/
tfe-1.0/src-gc/
tfe-1.0/src-msvc/
tfe-1.0/src-unix/
tfe-1.0/www/
tfe-1.0/www/html/
/*
 *   HOST ROUTINES
 */


extern link_data*   host_stack;
extern int           read_pntr;


bool   init_daemon          ( void );
void   write_host           ( link_data*, char* );
void   read_host            ( void );     
void   recover_links        ( void );
void   restart_links        ( void );


/* 
 *   BAN ROUTINES
 */


bool   is_banned            ( const char* );
bool   is_banned            ( account_data*, link_data* );


/*
 *   NETWORK ROUTINES
 */


extern link_data* link_list;


class Link_Data
{
 public:
  link_data*          next;
  link_data*      snoop_by;
  char_data*     character;
  player_data*      player;
  pfile_data*        pfile;
  account_data*    account;
  char*               host;
  int              channel;
  int            connected;
  int                 idle;
  text_data*       receive;
  text_data*          send;
  text_data*         paged;
  char*        rec_pending;
  char*       send_pending;
  char*           rec_prev;
  bool             command;
     
  Link_Data( ) {
    record_new( sizeof( link_data ), -MEM_LINK );
    rec_pending   = empty_string;
    send_pending  = empty_string;
    rec_prev      = empty_string;
    receive       = NULL;
    send          = NULL;
    paged         = NULL;
    character     = NULL;
    player        = NULL;
    pfile         = NULL;
    snoop_by      = NULL;
    host          = NULL;
    next          = NULL;
    account       = NULL;
    channel       = -1;
    idle          = 0;
    }

  ~Link_Data( ) {
    channel = -1;
    record_delete( sizeof( link_data ), -MEM_LINK );
    delete_list( receive );
    delete_list( send ); 
    delete_list( paged );
    }
};


class Text_Data
{
 public:
  text_data*    next;
  string     message;

  Text_Data( const char* text ) : message( text ) {
    record_new( sizeof( text_data ), MEM_LINK );
    record_new( message.length+1, -MEM_LINK );
    return;
    }

  ~Text_Data( ) {
    record_delete( sizeof( text_data ), MEM_LINK );
    record_delete( message.length+1, -MEM_LINK );
    return;
    }

  friend void overwrite( text_data* receive, const char* msg ) {
    int    length  = strlen( msg );
    char*     tmp  = receive->message.text;
    record_new( length-receive->message.length, -MEM_LINK );
    receive->message.length = length;
    receive->message.text   = new char [ length+1 ];
    memcpy( receive->message.text, msg, length+1 );
    delete [] tmp;
    return;
    }
};


extern const char  echo_off_str  [];
extern const char  echo_on_str   [];
extern const char  go_ahead_str  [];


extern int socket_one;
extern int socket_two;
extern int       port  [ 3 ];


int    open_port            ( int );
void   new_player           ( player_data* );
bool   check_parse_name     ( link_data*, char* );
void   prompt_ansi          ( link_data* );
void   prompt_nml           ( link_data* );
void   write_greeting       ( link_data* );
void   send_to_status       ( char_data*, char* );
void   set_playing          ( link_data* );
void   close_socket         ( link_data*, bool = FALSE );
void   extract              ( link_data* );
void   open_link            ( int );


/*
 *   LOGIN ROUTINES
 */


#define CON_ACNT_REQUEST           -8
#define CON_ACNT_MENU              -9
#define CON_ACNT_NAME             -10
#define CON_ACNT_PWD              -11
#define CON_ACNT_EMAIL            -12
#define CON_ACNT_ENTER            -13
#define CON_ACNT_CONFIRM          -14
#define CON_ACNT_CHECK            -15
#define CON_ACNT_CHECK_PWD        -16
#define CON_DIGITALNATION          -4
#define CON_POLICIES               -3
#define CON_FEATURES               -2
#define CON_PAGE                   -1
#define CON_PLAYING                 0
#define CON_INTRO                   1 
#define CON_PASSWORD_ECHO           2
#define CON_PASSWORD_NOECHO         3
#define CON_DISC_OLD                4
#define CON_GET_NEW_NAME            5
#define CON_GET_NEW_PASSWORD        6
#define CON_CONFIRM_PASSWORD        7
#define CON_SET_TERM                8
#define CON_READ_GAME_RULES        10
#define CON_AGREE_GAME_RULES       11
#define CON_GET_EMAIL              12
#define CON_HELP_SEX               13
#define CON_GET_NEW_SEX            14 
#define CON_HELP_CLSS              15
#define CON_GET_NEW_CLSS           16
#define CON_HELP_RACE              17
#define CON_GET_NEW_RACE           18
#define CON_DECIDE_STATS           19
#define CON_GET_NEW_ALIGNMENT      20
#define CON_HELP_ALIGNMENT         21
#define CON_READ_IMOTD             22
#define CON_READ_MOTD              23
#define CON_CLOSING_LINK           24
#define CON_CE_ACCOUNT             25
#define CON_CE_PASSWORD            26
#define CON_CE_EMAIL               27
#define CON_VE_ACCOUNT             28
#define CON_VE_VALIDATE            29
#define CON_VE_CONFIRM             30


extern bool  wizlock;    


inline bool Char_Data :: In_Game( )
{
  return( Is_Valid( ) && ( link == NULL
    || link->connected == CON_PLAYING ) );
}


inline bool past_password( link_data* link )
{
  return( link->connected != CON_PASSWORD_ECHO 
    && link->connected != CON_PASSWORD_NOECHO 
    && link->connected != CON_INTRO );
} 


void   press_return             ( link_data* );
bool   no_input                 ( link_data*, char* );
void   nanny                    ( link_data*, char* );
void   nanny_intro              ( link_data*, char* );
void   nanny_acnt_name          ( link_data*, char* );
void   nanny_acnt_password      ( link_data*, char* );
void   nanny_acnt_email         ( link_data*, char* );
void   nanny_acnt_enter         ( link_data*, char* );
void   nanny_acnt_confirm       ( link_data*, char* );
void   nanny_acnt_check         ( link_data*, char* );
void   nanny_acnt_check_pwd     ( link_data*, char* );
void   nanny_old_password       ( link_data*, char* );
void   nanny_motd               ( link_data*, char* );
void   nanny_imotd              ( link_data*, char* );
void   nanny_new_name           ( link_data*, char* );
void   nanny_acnt_menu          ( link_data*, char* );
void   nanny_acnt_request       ( link_data*, char* );
void   nanny_new_password       ( link_data*, char* ); 
void   nanny_confirm_password   ( link_data*, char* );     
void   nanny_set_term           ( link_data*, char* );
void   nanny_agree_rules        ( link_data*, char* );
void   nanny_show_rules         ( link_data*, char* );
void   nanny_alignment          ( link_data*, char* );
void   nanny_help_alignment     ( link_data*, char* );
void   nanny_disc_old           ( link_data*, char* );
void   nanny_help_class         ( link_data*, char* );
void   nanny_class              ( link_data*, char* );
void   nanny_help_race          ( link_data*, char* );
void   nanny_race               ( link_data*, char* );
void   nanny_stats              ( link_data*, char* );
void   nanny_help_sex           ( link_data*, char* );
void   nanny_sex                ( link_data*, char* );
void   nanny_ve_validate        ( link_data*, char* );