/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project.  All 
................................................ contributions are welcome. 
....Copyright(C).1995.Melvin.Smith.............. Enjoy. 
------------------------------------------------------------------------------
Melvin Smith (aka Fusion)         msmith@hom.net 
MUD++ development mailing list    mudpp@van.ml.org
------------------------------------------------------------------------------
social.cc
*/
#include "config.h"
#include "social.h"
#include "io.h"
LList<Social> social_table[26];
const char * he_she[] = { "it", "he", "she" };
const char * him_her[] = { "it", "him", "her" };
const char * his_her[] = { "its", "his", "her" };
void loadSocials()
{
	int count = 0;
	int ihash;
	String str;
	char buf[256];
	Social * social;
	InputFile in( "../etc/socials.db" );
	if( !in )
	{
		Cout << "Error loading socials database.\n";
		return;
	}
	while( 1 )
	{
		in.getword( buf );
		if( buf[0] == '#' )
		{
			Cout << "Socials database loaded with " << count << " entries.\n";
			return;
		}
		if( !isalpha( buf[0] ) )
			in.error( "Social name has illegal name." );
		social = new Social( buf );
		in.getword( buf );
		if( buf[0] != '{' )
			in.error( "Invalid social syntax: missing {" );
		social->selftargnone << "\n\r" << in.getstring( buf ) << "\n\r";
		social->roomtargnone << "\n\r" << in.getstring( buf ) << "\n\r";
		social->selftargself << "\n\r" << in.getstring( buf ) << "\n\r";
		social->roomtargself << "\n\r" << in.getstring( buf ) << "\n\r";
		social->selftargother << "\n\r" << in.getstring( buf ) << "\n\r";
		social->roomtargother << "\n\r" << in.getstring( buf ) << "\n\r";
		social->targother << "\n\r" << in.getstring( buf ) << "\n\r";
		in.getword( buf );
		if( buf[0] != '}' )
			in.error( "Invalid social syntax: missing }" );
		ihash = tolower( social->getName()[0] ) - 'a';
		social_table[ ihash ].add( social );
		count++;
	}
}
const Social * lookupSocial( const String & name )
{
	const Social *social;
	int ihash = tolower( name[0] ) - 'a';
	if( ihash < 0 || ihash > 25 )
		return 0;
	social_table[ihash].reset();
	while( ( social = social_table[ihash].peek() ) )
	{
		social_table[ihash].next();
		if( name.isAbbrev( social->getName() ) )
			return social;
	}	
	return 0;
}