/**************************************************************************** * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | * * -----------------------------------------------------------| \\._.// * * SmaugWiz (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. * * ------------------------------------------------------------------------ * * Commands Interface file * ****************************************************************************/ #ifndef COMMANDS_H #define COMMANDS_H // Structure for a command in the command lookup table. class CCmdType { public: CCmdType () { memset (this, 0, sizeof (CCmdType)); } ~CCmdType () { delete m_pName; } CCmdType *GetNext () { return m_pNext; } void SetNext (CCmdType* n) { m_pNext = n; } char *GetName () { return m_pName; } void SetName (char* n); BOOL Read (FILE *fp); void Write (FILE* fp); friend class CCommandTable; private: CCmdType *m_pNext; char *m_pName; public: DO_FUN *do_fun; short position; short level; short log; struct timerset userec; }; class CCommandTable { public: CCommandTable () { Empty (); } ~CCommandTable () { RemoveAll (); } CCmdType *GetCommand (int hash) { ASSERT (hash >= 0 && hash < MAX_COMMANDS); return m_ct [hash]; } CCmdType *GetCommand (const char *name) { return GetCommand (GetHash (name [0])); } int GetHash (char k) { return LOWER (k) % MAX_COMMANDS; } void Add (CCmdType *command); CCmdType * Find (char *command); void Unlink (CCmdType *command); void Load (); void Save (); void Empty () { memset (this, 0, sizeof (CCommandTable)); } void RemoveAll (); private: CCmdType *m_ct [MAX_COMMANDS]; }; #ifdef SMAUGSERVER_CPP CCommandTable CommandTable; #endif extern CCommandTable CommandTable; #endif