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 System Menu Implementation file						*
 ****************************************************************************/

#include	"stdafx.h"

#define		SYSMENU_CPP

#include	"smaug.h"
#include	"SysData.h"
#include	"mobiles.h"
#include	"affect.h"
#include	"objects.h"
#include	"rooms.h"
#include	"sysmenu.h"
#include	"descriptor.h"
#include	"character.h"
#include	"SmaugWizDoc.h"

CMenuData	*SystemMenuData [];


void CSystemMenu::Display (CCharacter& Ch, int page)
{
	m_HelpMenu = DIM (SystemMenus) - 1;
	m_PageNr = page;

	if (m_PageNr < 0 || m_PageNr > m_HelpMenu) then m_PageNr = m_HelpMenu;

	m_CurrPageLines = GetLineCount (SystemMenus [m_PageNr]);
	m_pPageData = SystemMenuData [m_PageNr];
	m_nDataItems = m_pPageData ? GetItemCount (m_pPageData) : 0;

	// clear page & home cursor
	Ch.SendText ("\x1b[2J");

	// print the menu page
	Ch.GetDesc ()->WriteToBuffer (SystemMenus [m_PageNr]);

	// fill in fields
	DisplayData (Ch);
}


void CSystemMenu::DisplayData (CCharacter& Ch)
{
	m_Base [0] = (char*) this;
	m_Base [1] = NULL;

	CSmaugMenu::DisplayData (Ch);
}


BOOL CSystemMenu::Edit (CCharacter& Ch, char* argument, const char* command)
{
	if (command [0] == '-') {
		Display (Ch, (char) argument [0]);
		return TRUE;
	}
	if (argument [0] == '-') return FALSE;

	m_Base [0] = (char*) this;
	m_Base [1] = NULL;

	return CSmaugMenu::Edit (Ch, argument, command);
}


void CSystemMenu::Save (CCharacter& Ch)
{
	CSystemData	&Sys = *m_pSys;

	// Save a-page items
	Sys.m_Authorization = ma_Auth;
	Sys.m_AuthDelay = ma_AuthDelay;

	Sys.bNameResolving = ma_bResolve;
	Sys.SetAutoReboot (ma_bAutoBoot);
	Sys.SetRebootDelay (ma_BootDelay);
	Sys.SetRebootHour (ma_BootHour);
	Sys.SetRebootInterval (ma_BootDays);

	// Save b-page items
	Sys.ReadMailFreeLev = mb_ReadFree;
	Sys.WriteMailFreeLev = mb_WriteFree;
	Sys.ReadAllMailLev = mb_ReadAll;
	Sys.TakeOthersMailLev = mb_TakeMail;
	Sys.MuseLevel = mb_MuseLev;
	Sys.ThinkLevel = mb_ThinkLev;
	Sys.LogLevel = mb_LogLev;
	Sys.BuildLevel = mb_BuildLev;

	// Save c-page items
	Sys.SetLogResetsToFile (mc_FResets);
	Sys.SetLogBootToFile (mc_FBoot);
	Sys.SetLogBuildToFile (mc_FBuild);
	Sys.SetLogBugsToFile (mc_FBugs);
	Sys.SetLogPlayersToFile (mc_FPlayer);
	Sys.SetLogCommToFile (mc_FComm);
	Sys.SetLogBuildToChannel (mc_CBuild);
	Sys.SetLogBugsToChannel (mc_CBugs);
	Sys.SetLogPlayersToChannel (mc_CPlayer);
	Sys.SetLogCommToChannel (mc_CComm);
	Sys.SetCloseStdErr (mc_Close);
	Sys.SetMaxStdErrSize (mc_Size);

	Sys.Save ();

	// Adjust logging parameters for any changes
	if (gpDoc->m_pLog) {
		gpDoc->m_pLog->SetFromSysData ();
		gpDoc->m_pLog->SetType (LOG_NORMAL);	// always log normal messages
	}
}


CSystemMenu::CSystemMenu (CSystemData& Sys)
{
	m_pSys = &Sys;
	m_Vnum = 0;				// not used for sysmenu
	m_bProto = FALSE;		// not used for sysmenu

	// load local a-page items
	ma_Auth = Sys.m_Authorization;
	ma_AuthDelay = Sys.m_AuthDelay;
	ma_bResolve = Sys.bNameResolving;
	ma_bAutoBoot = Sys.IsAutoReboot ();
	ma_BootDelay = Sys.GetRebootDelay ();
	ma_BootHour = Sys.GetRebootHour ();
	ma_BootDays = Sys.GetRebootInterval ();

	// load local b-page items
	mb_ReadFree = Sys.ReadMailFreeLev;
	mb_WriteFree = Sys.WriteMailFreeLev;
	mb_ReadAll = Sys.ReadAllMailLev;
	mb_TakeMail = Sys.TakeOthersMailLev;
	mb_MuseLev = Sys.MuseLevel;
	mb_ThinkLev = Sys.ThinkLevel;
	mb_LogLev = Sys.LogLevel;
	mb_BuildLev = Sys.BuildLevel;

	// load local c-page items
	mc_FResets = Sys.IsLogResetsToFile ();
	mc_FBoot = Sys.IsLogBootToFile ();
	mc_FBuild = Sys.IsLogBuildToFile ();
	mc_FBugs = Sys.IsLogBugsToFile ();
	mc_FPlayer = Sys.IsLogPlayersToFile ();
	mc_FComm = Sys.IsLogCommToFile ();
	mc_CBuild = Sys.IsLogBuildToChannel ();
	mc_CBugs = Sys.IsLogBugsToChannel ();
	mc_CPlayer = Sys.IsLogPlayersToChannel ();
	mc_CComm = Sys.IsLogCommToChannel ();
	mc_Close = Sys.IsCloseStdErr ();
	mc_Size = Sys.GetMaxStdErrSize ();
}




#define		OFFSET(aa)	offsetof(CSystemMenu,aa)

CMenuData	SysPage_A [] = {
	{ '1', 'a', 4, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 0,4 },
	{ '1', 'b', 5, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 1,4 },
	{ '1', 'c', 6, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 2,4 },
	{ '1', 'd', 7, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 3,4 },
	{ '1', 'e', 8, 30, 3, OFFSET(ma_AuthDelay), MT_INT, 0, NULL },
	{ '1', 'f', 3, 60, 1, OFFSET(ma_bResolve), MT_BOOL, 0, NULL },
	{ '1', 'g', 4, 60, 1, OFFSET(ma_bAutoBoot), MT_BOOL, 0, NULL },
	{ '1', 'h', 5, 57, 4, OFFSET(ma_BootDelay), MT_INT, 0, NULL },
	{ '1', 'i', 6, 59, 2, OFFSET(ma_BootHour), MT_INT, 0, NULL },
	{ '1', 'j', 7, 59, 2, OFFSET(ma_BootDays), MT_INT, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};

CMenuData	SysPage_B [] = {
	{ '1', 'a', 4, 18, 3, OFFSET(mb_ReadFree), MT_INT, 0, NULL },
	{ '1', 'b', 5, 18, 3, OFFSET(mb_WriteFree), MT_INT, 0, NULL },
	{ '1', 'c', 6, 18, 3, OFFSET(mb_ReadAll), MT_INT, 0, NULL },
	{ '1', 'd', 7, 18, 3, OFFSET(mb_TakeMail), MT_INT, 0, NULL },
	{ '2', 'a', 4, 35, 3, OFFSET(mb_MuseLev), MT_INT, 0, NULL },
	{ '2', 'b', 5, 35, 3, OFFSET(mb_ThinkLev), MT_INT, 0, NULL },
	{ '2', 'c', 6, 35, 3, OFFSET(mb_LogLev), MT_INT, 0, NULL },
	{ '2', 'd', 7, 35, 3, OFFSET(mb_BuildLev), MT_INT, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};


CMenuData	SysPage_C [] = {
	{ '1', 'a', 4, 22, 1, OFFSET(mc_FResets), MT_BOOL, 0, NULL },
	{ '1', 'b', 5, 22, 1, OFFSET(mc_FBoot), MT_BOOL, 0, NULL },
	{ '1', 'c', 6, 22, 1, OFFSET(mc_FBuild), MT_BOOL, 0, NULL },
	{ '1', 'd', 7, 22, 1, OFFSET(mc_FBugs), MT_BOOL, 0, NULL },
	{ '1', 'e', 8, 22, 1, OFFSET(mc_FPlayer), MT_BOOL, 0, NULL },
	{ '1', 'f', 9, 22, 1, OFFSET(mc_FComm), MT_BOOL, 0, NULL },
	{ '2', 'a', 4, 46, 1, OFFSET(mc_CBuild), MT_BOOL, 0, NULL },
	{ '2', 'b', 5, 46, 1, OFFSET(mc_CBugs), MT_BOOL, 0, NULL },
	{ '2', 'c', 6, 46, 1, OFFSET(mc_CPlayer), MT_BOOL, 0, NULL },
	{ '2', 'd', 7, 46, 1, OFFSET(mc_CComm), MT_BOOL, 0, NULL },
	{ '3', 'a', 4, 73, 1, OFFSET(mc_Close), MT_BOOL, 0, NULL },
	{ '3', 'b', 5, 71, 3, OFFSET(mc_Size), MT_INT, 0, NULL },
	{ 0, 0, 0, 0, 0, 0, MT_END }
};


CMenuData	*SystemMenuData [] = { SysPage_A, SysPage_B, SysPage_C, NULL };