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/
#include "ctype.h"
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "define.h"
#include "struct.h"


const char* He_She          [] = { "it",  "he",  "she" };
const char* Him_Her         [] = { "it",  "him", "her" };
const char* His_Her         [] = { "its", "his", "her" };


const char* scroll_line[] =
{
   "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\
=-=-=-=-\n\r",
   ">>>>==--------====--<>--====--------==<<<<\n\r",
   "+=-------------------------------------------------------------------\
-------=+\n\r"
};


/*
 *   LOW LEVEL ROUTINES
 */


void send( link_data* link, const char* message )
{
  text_data* text;

  if( link != NULL ) {
    text = new text_data( message );
    append( link->send, text );
    if( link->snoop_by != NULL )
      send( link->snoop_by, message );
    }

  return;
}


/*
 *   ACCEPT MESSAGE?
 */


bool Player_Data :: Accept_Msg( char_data* ch )
{
  if( msg_type == MSG_STANDARD )
    return TRUE;

  int level = level_setting( &pcdata->mess_settings, msg_type );

  if( level == 3 )
    return TRUE;

  if( level == 0 ) 
    return FALSE;

  if( Befriended( ch ) )
    return TRUE;

  if( level == 1 )
    return FALSE;

  return is_same_group( this, ch );
}


bool Mob_Data :: Accept_Msg( char_data* )
{
  return FALSE;
}


/* 
 *   PAGER ROUTINES
 */


void page( char_data* ch, const char* txt )
{
  char          tmp  [ MAX_STRING_LENGTH ];
  text_data*   send;
  link_data*   link;
  char*        line;

  if( ch == NULL || ( link = ch->link ) == NULL )
    return;

  for( ; ; ) {
    for( line = tmp; *txt != '\n' && *txt != '\0'; )
      *(line++) = *(txt++);

    if( *txt != '\0' ) {
      *(line++) = '\n';
      *(line++) = '\r';
      }

    *line     = '\0';

    if( *txt == '\n' )
      if( *(++txt) == '\r' )
        txt++;

    if( *tmp == '\0' )
      break;

    send = new text_data( tmp );
    append( link->paged, send );
    } 

  return;
}


void fpage( char_data* ch, const char *text )
{
  char buf [ MAX_STRING_LENGTH ];

  if( ch == NULL || ch->link == NULL )
    return;

  format( buf, text );
  strcat( buf, "\n\r" );
  corrupt( buf, MAX_STRING_LENGTH, "Fpage" );

  page( ch, buf );
}    


void clear_pager( char_data* ch )
{
  if( ch->link == NULL || ch->link->paged == NULL )
    return;

  delete_list( ch->link->paged );

  return;
}


void next_page( link_data* link )
{
  text_data*   next;
  text_data*   send;
  char*      letter;
  int         lines  = 0;

  if( link == NULL || ( send = link->paged ) == NULL )
    return;

  for( ; send->next != NULL; send = send->next ) { 
    for( letter = send->message.text; *letter != '\0'; letter++ )
      if( *letter == '\r' )
        lines++;
    if( lines > link->character->pcdata->lines-6 )
      break;
    }

  next        = send->next;
  send->next  = link->send;
  link->send  = link->paged;
  link->paged = next;

  return;
}


void page_centered( char_data* ch, const char* text )
{
  char  tmp1  [ TWO_LINES ];
  char  tmp2  [ TWO_LINES ];

  if( strlen( text ) > 80 ) {
    bug( "Page_Centered: Text > 80 Characters." );
    bug( text );
    return;
    }

  sprintf( tmp1, "%%%ds%%s\n\r", 40-strlen( text )/2 );
  sprintf( tmp2, tmp1, "", text );

  page( ch, tmp2 );

  return;
}


void page_underlined( char_data* ch, const char* text )
{
  char  tmp  [ TWO_LINES ];
  int     i;

  page( ch, text );

  for( i = 0; i < strlen( text ); i++ )
    if( text[i] == ' ' || text[i] == '\n' || text[i] == '\r' )
      tmp[i] = text[i];
    else
      tmp[i] = '-';

  tmp[i] = '\0';

  page( ch, tmp );
}  


/*
 *   SEND_TO_AREA
 */


void send_to_area( const char* string, area_data* area )
{
  char_data *rch;
  room_data *room;

  for( room = area->room_first; room != NULL; room = room->next )   
    for( int i = 0; i < room->contents; i++ )    
      if( ( rch = character( room->contents[i] ) ) != NULL
        && rch->link != NULL ) 
        send( rch, string );

  return;
}


/*
 *   FORMATTED SEND
 */


void fsend( char_data* ch, const char *text )
{
  char buf [ MAX_STRING_LENGTH ];

  if( ch == NULL || ch->link == NULL )
    return;

  format( buf, text );
  strcat( buf, "\n\r" );
  corrupt( buf, MAX_STRING_LENGTH, "Fsend" );

  send( ch->link, buf );

  return;
}    


void send_centered( char_data* ch, const char* text )
{
  char  tmp1  [ TWO_LINES ];
  char  tmp2  [ TWO_LINES ];

  if( strlen( text ) > 80 ) {
    bug( "Send_Centered: Text > 80 Characters." );
    bug( text );
    return;
    }

  sprintf( tmp1, "%%%ds%%s\n\r", 40-strlen( text )/2 );
  sprintf( tmp2, tmp1, "", text );

  send( tmp2, ch );

  return;
}


void send_underlined( char_data* ch, const char* text )
{
  char  tmp  [ TWO_LINES ];
  int     i;

  send( text, ch );

  for( i = 0; i < strlen( text ); i++ )
    if( text[i] == ' ' || text[i] == '\n' || text[i] == '\r' )
      tmp[i] = text[i];
    else
      tmp[i] = '-';

  tmp[i] = '\0';

  send( tmp, ch );

  return;
}