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.    *
 * ------------------------------------------------------------------------ *
 *			    Time & Date Interface file									*
 ****************************************************************************/
#ifndef		SWTIME_H
#define		SWTIME_H
#pragma warning( disable: 4244 )

class CSwTime {
public:
				CSwTime () { *this = 0; bManual = FALSE; }
				CSwTime (int y, int mo, int d, int h, int min, int s = 0)
				{ *this = CTime (y, mo, d, h, min, s); bManual = FALSE; }
				CSwTime (const CSwTime& t) { m_time = t.m_time; bManual = t.bManual; }
				CSwTime (const CTime& t) { *this = t; }

	CString		GetString ()
				{ CTime t (m_time);
				  return t.Format ("%a %b %d %Y  %H:%M:%S"); }
	void		SetCurrentTime () { GetSystemTime (&m_time); }	// UTC
	void		SetSecond (int s) { m_time.wSecond = s; }
	void		SetMinute (int m) { m_time.wMinute = m; }
	void		SetHour (int h) { m_time.wHour = h; }
	CTime		GetCtime () { return CTime (m_time); }
	int			GetSecond () { return m_time.wSecond; }
	int			GetMinute () { return m_time.wMinute; }
	int			GetHour () { return m_time.wHour; }
	int			GetDay () { return m_time.wDay; }
	int			GetMonth () { return m_time.wMonth; }
	int			GetYear () { return m_time.wYear; }
	long		GetTotalSeconds ()
				{ CTimeSpan ts (CTime (m_time).GetTime ());
				  return ts.GetTotalSeconds (); }

	const CSwTime&	operator= (const CSwTime& t)
					{ m_time = t.m_time; bManual = t.bManual; return *this; }
	const CSwTime&	operator= (int t) { CTime ct (t); *this = ct; return *this; }
	const CSwTime&	operator= (long t) { CTime ct (t); *this = ct; return *this; }
	const CSwTime&	operator= (tm t)
					{ CTime ct (mktime (&t)); *this = ct; return *this; }
	const CSwTime&	operator= (const CTime& t)
					{ m_time.wMilliseconds = 0;
					  m_time.wSecond = t.GetSecond ();
					  m_time.wMinute = t.GetMinute ();
					  m_time.wHour = t.GetHour ();
					  m_time.wDay = t.GetDay ();
					  m_time.wMonth = t.GetMonth ();
					  m_time.wYear = t.GetYear ();
					  m_time.wDayOfWeek = t.GetDayOfWeek ();
					  return *this;
					}
	BOOL		operator< (CSwTime& t)
				{ return CTime (m_time) < CTime (t.m_time); }
	BOOL		operator> (CSwTime& t)
				{ return CTime (m_time) > CTime (t.m_time); }
	BOOL		operator>= (CSwTime& t)
				{ return CTime (m_time) >= CTime (t.m_time); }
	BOOL		operator<= (CSwTime& t)
				{ return CTime (m_time) <= CTime (t.m_time); }

	void		operator+= (int days)
				{ CTime t1 (m_time); t1 += CTimeSpan ((long) days, 0,0,0);
				  *this = t1; }
	void		operator+= (CTimeSpan ts)
				{ CTime t (m_time); t += ts; *this = t; }

	CSwTime		operator+ (int i)
				{
				  CTime t (m_time);
				  t += i;
				  return CSwTime (t); }
	CTime		operator+ (CSwTime& t)
				{ CTime t1 (m_time);
				  CTimeSpan t2 (CTime (t.m_time).GetTime ());
				  return t1 + t2; }
	CTimeSpan	operator- (CSwTime& t)
				{ CTime t1 (m_time);
				  CTime t2 (t.m_time);
				  return t1 - t2; }

	BOOL		IsManual () { return bManual; }
	void		SetManual (BOOL f) { bManual = f; }
	BOOL		IsZero () { return CTime (m_time) == 0; }

private:
	SYSTEMTIME	m_time;
//	CString		m_ts;
	BOOL		bManual;	// used for reboot time
};


#endif