SmaugWizard/Backup/
SmaugWizard/Backup/L/
SmaugWizard/Boards/
SmaugWizard/Building/
SmaugWizard/Corpses/
SmaugWizard/Councils/
SmaugWizard/Deity/
SmaugWizard/Gods/
SmaugWizard/MudProgs/
SmaugWizard/Player/L/
SmaugWizard/Src/
SmaugWizard/Src/res/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |				*
 * -----------------------------------------------------------|   \\._.//	*
 * SmaugWizard (C) 1998 by Russ Pillsbury (Windows NT version)|   (0...0)	*
 * -----------------------------------------------------------|    ).:.(	*
 * SMAUG (C) 1994, 1995, 1996 by Derek Snider                 |    {o o}	*
 * -----------------------------------------------------------|   / ' ' \	*
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |~'~.VxvxV.~'~*
 * Scryn, Swordbearer, Rennard, Tricops, and Gorog.           |				*
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe.    *
 * ------------------------------------------------------------------------ *
 *			    Language Class Interface file								*
 ***************************************************************************/

#ifndef		LANGUAGE_H
#define		LANGUAGE_H

#define		CurrentLanguageFileVersion		1000

// These are the only fixed language definitions
#define		LANG_ALL	0			// duplicated in Smaug.h
#define		LANG_COMMON	1

// These languages are the default languages that will be used if no
// language file is found, and the names below are used when setting
// up the default list.  But the enums are commented out to eliminate
// the chance that someone will accidentally use them (which would
// cause problems).

//enum LanguageTypes {
//	LANG_ALL, LANG_COMMON, LANG_ELVEN, LANG_DWARVEN, LANG_PIXIE, LANG_OGRE,
//	LANG_ORCISH, LANG_TROLLISH, LANG_RODENT, LANG_INSECTOID,
//	LANG_MAMMAL, LANG_REPTILE, LANG_DRAGON, LANG_SPIRITUAL,
//	LANG_MAGICAL, LANG_GOBLIN, LANG_GOD, LANG_ANCIENT,
//	LANG_HALFLING, LANG_CLAN, LANG_GITH, MAX_LANGUAGE };

#define		MAX_LANGUAGE	21
#ifdef SMAUGSERVER_CPP
const char *LanguageNames [MAX_LANGUAGE] = {
	"all", "common", "elvish", "dwarven", "pixie", "ogre",
	"orcish", "trollese", "rodent", "insectoid",
	"mammal", "reptile", "dragon", "spiritual",
	"magical", "goblin", "god", "ancient",
	"halfling", "clan", "gith" };
#endif

extern	const char	*LanguageNames [MAX_LANGUAGE];

#define VALID_LANGS    (LANG_COMMON | LANG_ELVEN | LANG_DWARVEN			\
						| LANG_PIXIE | LANG_OGRE | LANG_ORCISH			\
						| LANG_TROLLISH | LANG_GOBLIN | LANG_HALFLING	\
						| LANG_GITH)
// 18 Languages


class CLanguage {
public:
			CLanguage (int lang, const char* n, BOOL learn = TRUE)
			{ m_nLanguage = lang; m_Name = n; m_bLearn = learn; }

	BOOL	Read (FILE* fp);
	void	Write ();
	BOOL	HasName () { return ! m_Name.IsEmpty (); }
	void	SetName (const char* n) { m_Name = n; }
	const CString& GetName () { return m_Name; }
	int		GetLanguage () { return m_nLanguage; }
	BOOL	CanLearn () { return m_bLearn; }

friend class CLanguageTable;
protected:
	int			m_nLanguage;
	BOOL		m_bLearn;
	CString		m_Name;				// Language name
};


class CLanguageTable : public CPtrList {
public:
	void		Load ();
	void		Save ();
	int			GetCurrentVersion () { return CurrentLanguageFileVersion; }
	BOOL		IsValidLanguage (int l) { return l > 0 && l < GetCount (); }
	int			GetCommon () { return m_Common; }
	int			GetClan () { return m_Clan; }
	void		Add (CLanguage* pLa) { AddTail (pLa); }
	BOOL		LoadLanguageFile (const char *fname);
	int			GetLanguage (const char* name);
	void		LoadFromString (CBitVector& Bv, char* s);
	CLanguage	*GetNext (POSITION& pos)
				{ return (CLanguage*) CPtrList::GetNext (pos); }
	CLanguage	*GetLanguageData (int l)
				{ if (l < 0 || l > GetCount ()) return NULL;
				  else return (CLanguage*) GetAt (FindIndex (l)); }
	const CString& GetName (int l) { return GetLanguageData (l)->m_Name; }
	BOOL		HasName (int l) { return GetLanguageData (l)->HasName (); }
	CLanguage	*Find (const char* prefix);
	CLanguage	*RemoveTail () { return (CLanguage*) CPtrList::RemoveTail (); }
	void		SetFromString (char*& pLine, CBitVector& Bv);
	CString		PrintAssigned (const CBitVector& Bv);
	void		RemoveAll ();

private:
	int			m_Common, m_Clan;
};


#ifdef	SMAUGSERVER_CPP
	CLanguageTable		LanguageTable;
#endif

extern CLanguageTable		LanguageTable;

#endif