/
LIB3/
LIB3/D/ADMIN/
LIB3/D/ADMIN/OBJ/
LIB3/D/ADMIN/ROOM/W/
LIB3/D/HOME/
LIB3/D/HOME/CITY/ARENA/
LIB3/D/HOME/CITY/ITEMS/
LIB3/D/HOME/CITY/POSTOFFI/
LIB3/DOC/
LIB3/GLOBAL/SPECIAL/
LIB3/GLOBAL/VIRTUAL/
LIB3/NET/
LIB3/NET/CONFIG/
LIB3/NET/DAEMON/CHARS/
LIB3/NET/GOPHER/
LIB3/NET/INHERIT/
LIB3/NET/OBJ/
LIB3/NET/SAVE/
LIB3/NET/VIRTUAL/
LIB3/OBJ/B_DAY/
LIB3/OBJ/HANDLERS/TERM_TYP/
LIB3/PLAYERS/B/
LIB3/PLAYERS/N/
LIB3/ROOM/
LIB3/SAVE/
LIB3/SAVE/BOARDS/
LIB3/SAVE/ENVIRON/
LIB3/SAVE/POST/
LIB3/STD/COMMANDS/SHADOWS/
LIB3/STD/CREATOR/
LIB3/STD/DOM/
LIB3/STD/EFFECTS/
LIB3/STD/EFFECTS/HEALING/
LIB3/STD/EFFECTS/OTHER/
LIB3/STD/EFFECTS/POISONS/
LIB3/STD/ENVIRON/
LIB3/STD/GUILDS/
LIB3/STD/LIQUIDS/
LIB3/STD/ROOM/
LIB3/STD/TRIGGER/SHADOW/
LIB3/W/
LIB3/W/BANNOR/
LIB3/W/NEWSTYLE/
#pragma save_binary
#include "parse_command.h"
inherit "/std/basic/print_object";

static string name, *alias, *adjectives, *plurals;

void    create()
{
   alias = ({ });
   plurals = ({ });
   adjectives = ({ });
   name = "object";
}

void    set_name( string str )
{
   name = str;
}
string  query_name()
{
   return name;
}
string  query_cap_name()
{
   if( !name )
      return "Someone";
   return capitalize( name );
}

void    set_aliases( string *str )
{
   alias = str;
}
string *query_alias()
{
   return alias;
}
void    add_alias( mixed str )
{
   if( pointerp( str ) )
      alias += str;
   else
      alias += ({ str });
}
int     remove_alias( string str )
{
   int     i;
   
   if( (i = member_array( str, alias )) == -1 )
      return 0;
   alias = delete( alias, i, 1 );
   return 1;
}


void    set_plurals( string *str )
{
   plurals = str;
}
string *query_plurals()
{
   return plurals;
}
void    add_plural( mixed str )
{
   if( pointerp( str ) )
      plurals += str;
   else
      plurals += ({ str });
}
int     remove_plural( string str )
{
   int     i;
   
   if( (i = member_array( str, plurals )) == -1 )
      return 0;
   plurals = delete( plurals, i, 1 );
   return 1;
}


void    set_adjectives( string *str )
{
   adjectives = str;
}
string *query_adjectives()
{
   return adjectives;
}
void    add_adjective( mixed str )
{
   if( pointerp( str ) )
      adjectives += str;
   else
      adjectives += ({ str });
}
int     remove_adjective( string str )
{
   int     i;
   
   if( (i = member_array( str, adjectives )) == -1 )
      return 0;
   adjectives = delete( adjectives, i, 1 );
   return 1;
}
/*  *** Newstyle: Is this ever used? ***
void add_plurals(string *str) { plurals += str; }
*/

int     id_plural( string str )
{
   return( member_array( str, plurals ) != -1 );
}

int     id( string str )
/* Do I answer to the name str? */
{
   int i;
  string *bits, s;
   
  bits = explode(replace(str, "  ", " "), " ");
   for(i=0;i<sizeof(bits);i++)
   if(member_array(bits[i], adjectives) == -1)
     if(s)
      s += " "+bits[i];
     else
      s = bits[i];
   return s == name ||
   member_array(s, alias) != -1 ||
   member_array(s, plurals) != -1 ;
}

string *parse_command_id_list()
{
   return({ name }) +alias;
}
string *parse_command_plural_id_list()
{
   return plurals;
}
string *parse_command_adjectiv_id_list()
{
   return adjectives;
}

object  query_parse_id( mixed *arr )
{
   
   /* Where is P_THING defined ? And what is it ? */
   /* And whats up with the numbers? */
   
   if( arr[ P_THING ] == 0 )
      return this_object();
   if( arr[ P_THING ] < 0 )
      {/* specific object case */
         arr[ P_THING ]++;
      if( arr[ P_THING ] != 0 )
         return 0;
      arr[ P_THING ] = -10321;
      return this_object();
   }
   arr[ P_THING ]--;/* lots of objects case */
   if( arr[ P_THING ] != 0 )
      return this_object();
   arr[ P_THING ] = -10101;
   return this_object();
}

object  query_frac_parse_id( mixed *arr )
{
   if( arr[ P_THING ] < 0 )
      {
      arr[ P_THING ]++;
      if( arr[ P_THING ] != 0 )
         return 0;
      arr[ P_THING ] = -10235;
      return 0;
   }
   if( arr[ P_THING ] == 0 )
      if( (arr[ P_MAX_NUM ] * arr[ P_TOP ]) / arr[ P_BOT ] > arr[ P_CUR_NUM ]++ )
      return this_object();
   else
      return 0;
   if( (arr[ P_THING ] * arr[ P_TOP ]) / arr[ P_BOT ] > arr[ P_CUR_NUM ]++ )
      return this_object();
   return 0;
}

/* Have to wonder about this...
void attack_by(object ob) { ob->stop_fight(this_object()); }
*/

mixed * query_init_data()
{
   return({ "name", name, "set_name/p/",
         "alias", alias, "add_alias/p/",
         "adjectives", adjectives, "add_adjective/p/",
         "plurals", plurals, "add_plurals/p/" });
}