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      |				*
 * -----------------------------------------------------------|   \\._.//	*
 * 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.    *
 * ------------------------------------------------------------------------ *
 *			    Smaug Menus Interface file									*
 ****************************************************************************/

#ifndef	MENUS_H
#define	MENUS_H

class	CMenuData;

enum MenuFnOps { MF_DISP, MF_EDIT };

class CMenuFnData {
public:

	MenuFnOps	Op;			// Display or Edit
	CMenuData	*pMd;
	void		*Base;		// base address
	CCharacter	*ch;
	char		*pArg;		// any string argument
};


enum MenuTypes { MT_INT, MT_SINT, MT_BOOL, MT_RIS, MT_STRING, MT_CSTRING,
				 MT_GROUP, MT_END };

class CMenuData {
public:
	void	SetCheck (CCharacter& Ch, BOOL bSet, BOOL bDisplay = FALSE);


    char		Section;
    char		Choice;
    int			y;
    int			x;
    int			Len;
	int			Offset;
    MenuTypes	Type;
    int			Base;
    BOOL		(*MenuFn)(CMenuFnData& Fd);
	int			Xlines;				// # of extended (additional) lines
	int			Xcol;				// starting column for extended lines
	int			Xlen;				// length for extended lines
};


class CSmaugMenu {
public:
	virtual					~CSmaugMenu () = 0 {}
	virtual void			Display (CCharacter& Ch, char page)
							{ Display (Ch, page - 'a'); }
	virtual void			Display (CCharacter& Ch, int page) = 0;
	virtual void			Save (CCharacter& Ch) = 0;
	virtual const CString&	GetName () = 0;

	virtual void	DisplayData (CCharacter& Ch);
	virtual BOOL	Edit (CCharacter& Ch, char* arg, const char* cmd);
	virtual void	ReturnToMenu (CCharacter* ch, BOOL b)
					{ if (m_pRetFun) m_pRetFun (ch, b); }

	void		ClearToEnd (CCharacter& Ch);


	// Housekeeping vars
	int			m_Vnum;
	char		*m_Base [2];
	BOOL		m_bProto;
	int			m_HelpMenu;
	int			m_PageNr;
	int			m_CurrPageLines;
	int			m_nDataItems;
	CMenuData	*m_pPageData;
    void		(*m_pRetFun)(CCharacter* ch, BOOL bDone);
	void		*m_pRetData;
};


extern int		GetLineCount (const char* str);
extern int		GetItemCount (CMenuData* pMd);
extern BOOL		MenuStringFn (CMenuFnData& Fd);
extern BOOL		MenuStringEditFn (CMenuFnData& Fd);
extern BOOL		HandleBooleanGroup (CMenuFnData& Fd, BOOL bDisplay);
extern int		GetAffect (CAffectList& AList, int type);
extern void		SetAffect (CAffectList& AList, int apply, int value);
extern void		SetRisString (char* str, CAffectList& AList, int bit);
extern BOOL		GetAffected (CAffectList& AList, int bit);


#endif