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


/*
 *   APPEARANCE
 */


bool char_data :: look_same( thing_data* t1, thing_data* t2 )
{
  obj_data*    obj1;
  obj_data*    obj2;
  char_data*    ch1;
  char_data*    ch2;

  if( ( obj1 = object( t1 ) ) != NULL
    && ( obj2 = object( t2 ) ) != NULL )
    return look_same( obj1, obj2 );

  if( ( ch1 = character( t1 ) ) != NULL
    && ( ch2 = character( t2 ) ) != NULL )
    return look_same( ch1, ch2 );
 
  return FALSE;
}


bool none_shown( thing_array& array )
{
  for( int i = 0; i < array; i++ )
    if( array[i]->shown > 0 )
      return FALSE;
  
  return TRUE;
}  


thing_data* one_shown( thing_array& array )
{
  int j = -1;

  for( int i = 0; i < array; i++ )
    if( array[i]->shown > 0 )
      if( j == -1 ) 
        j = i;
      else
        return NULL;

  return( j == -1 ? NULL : array[j] );
}  


const char* list_name( char_data* ch, thing_array* array, bool use_and ) 
{
  thing_data*   last  = NULL;
  thing_data*  first  = NULL;
  thing_data*  thing;

  rehash( ch, *array );

  for( int i = 0; i < *array; i++ )
    if( array->list[i]->shown > 0 ) { 
      first = array->list[i];
      break;
      }

  if( first == NULL )
    return "nothing??";

  for( int i = *array-1; i >= 0; i-- )
    if( array->list[i]->shown > 0 ) { 
      last = array->list[i];
      break;
      }

  char* tmp = static_string( );
  
  *tmp = '\0'; 

  for( int i = 0; i < *array; i++ ) {
    thing = array->list[i];
    if( thing->shown > 0 ) 
      sprintf( tmp+strlen( tmp ), "%s%s",
        thing == first ? "" :
        ( thing == last && use_and ? " and " : ", " ),
        thing->Name( ch, thing->shown ) );
    }

  return tmp;
}    
         

/*
 *   REMOVAL ROUTINES
 */


const char* Visible_Data :: Keywords( char_data* )
{
  return "** BUG **";
}


const char* Visible_Data :: Name( char_data*, int, bool )
{
  return "** BUG **";
}


const char* thing_data :: Seen_Name( char_data*, int, bool )
{
  return "** BUG **";
}


const char* thing_data :: Long_Name( char_data*, int )
{
  return "** BUG **";
}


const char* thing_data :: Show( char_data*, int )
{
  return "** BUG **";
}


bool Visible_Data :: Seen( char_data* )
{
  return TRUE;
}


void Visible_Data :: Look_At( char_data* ch )
{
  send( ch, "Whatever you are looking at is very bugged.\n\r" );
}


/*
 *   EXTRACTION
 */


void extract( thing_array& array )
{
  for( int i = array-1; i >= 0; i-- )
    array.list[i]->Extract( );
}