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 "define.h"
#include "struct.h"


/*
 *   BUG, IDEA, TYPO FILE ROUTINES
 */


void panic( const char* text )
{
  bug( text );
  bug( "** MUD KILLED **" );

  exit( 1 );
}


void bug( int level, const char* str )
{
  FILE*    fp;

  if( str == NULL || str == empty_string )
    return;

  if( level != BUG_APHID ) {
    if( ( fp = fopen( BUG_FILE, "a" ) ) != NULL ) {
      fprintf( fp, "[%s] %s\n", ltime( current_time )+4, str );
      fclose( fp );
      }
    else {
      info( "", LEVEL_BUILDER, "Error opening bug file.", IFLAG_BUGS, 1 );
      printf( "[BUG] Error opening bug file.\n" );
      }
    }

  if( level != -1 ) {
    printf( "[BUG] %s\r\n", str );
    info( "", LEVEL_BUILDER, str, IFLAG_BUGS, level );
    }

  return;
}


/*
 *   DEFINE COMMAND
 */


const char* lookup( index_data* index, int number, bool plural )
{
  int i;

  for( i = 0; index[i].value < number && index[i].value != -1; i++ );

  return( plural ? index[i].plural : index[i].singular );
}


void do_define( char_data* ch, char* argument )
{
  char* name [] = { "Acid Damage", "Fire Damage", "Cold Damage",
    "Electrical Damage", "Physical Damage", "Fame", "Piety",
    "Reputation", "" };

  index_data* index [] = { acid_index, fire_index, cold_index,
    electric_index, physical_index, fame_index, piety_index,
    reputation_index };

  int           prev;
  int           i, j;

  if( *argument == '\0' ) {
    send_title( ch, "Defined Terms" );
    for( i = 0; *name[i] != '\0'; i++ ) 
      send( ch, "%20s%s", name[i], i%3 == 2 || *name[i+1] == '\0'
        ? "\r\n" : "" );
    return;
    }

  for( i = 0; *name[i] != '\0'; i++ ) {
    if( fmatches( argument, name[i] ) ) {
      page_title( ch, name[i] );
      prev = ( index[i][0].value < 0 ? -1000 : 0 );
      for( j = 0; ; j++ ) {
        if( j == 0 && index[i][0].value == 0 )
          continue;
        if( index[i][j].value == -1 ) {
          page( ch, "%39s   %d+\r\n", index[i][j].singular, prev );
          return;
          }
        if( index[i][j].value == prev )
          page( ch, "%39s   %d\r\n", index[i][j].singular, prev );
        else
          page( ch, "%39s   %d to %d\r\n",
            index[i][j].singular, prev, index[i][j].value );
        prev = index[i][j].value+1;
        }
      }
    }

  send( ch, "Unknown field - see help define.\r\n" );
}


/*
 *   TYPO COMMAND
 */


void do_typo( char_data* ch, char* argument )
{
  char tmp [ MAX_STRING_LENGTH ];

  if( *argument == '\0' ) {
    send( ch, "Room #%d\r\n\r\n", ch->in_room->vnum );
    send( ch, "What typo do you wish to report?\r\n" );
    return;
    } 

  if( strlen( ch->in_room->comments )
    > MAX_STRING_LENGTH-MAX_INPUT_LENGTH-30 ) {
    send( ch, "Comment field at max length - typo ignored.\r\n" );
    return;
    }

  ch->in_room->area->modified = TRUE;

  sprintf( tmp, "%s[%s] %s\r\n", ch->in_room->comments, 
    ch->real_name( ), argument );

  free_string( ch->in_room->comments, MEM_ROOM );
  ch->in_room->comments = alloc_string( tmp, MEM_ROOM );

  send( "Typo noted - thanks.\r\n", ch );

  return;
}    


/*
 *   RANDOM SUPPORT ROUTINES
 */


bool player_in_room( room_data* room )
{
  char_data* ch;

  if( room != NULL )
    for( int i = 0; i < room->contents; i++ )
      if( ( ch = character( room->contents[i] ) ) != NULL 
        && ch->pcdata != NULL )
        return TRUE;

  return FALSE;
};