/**************************************************************************** * [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. * * ------------------------------------------------------------------------ * * Logging Interface * ****************************************************************************/ #include "stdafx.h" #include "smaug.h" #include "Smaugx.h" #include "SysData.h" #include "log.h" #include "SmaugWizDoc.h" #include "SmaugFiles.h" CLog::CLog (const char* name) { m_Name = name; m_fp = NULL; m_bLeaveOpen = FALSE; memset (m_Types, 0, sizeof (m_Types)); } CLog::~CLog () { Close (); } void CLog::Open () { if (! m_fp) { m_fp = fopen (m_Name, "a"); if (! m_fp) { // if open fails, log it if possible, and continue. if (m_Name != STDERR_FILE) bug ("CLog::Open: Cannot open %s", NCCP m_Name); return; } } } void CLog::Close () { if (m_fp) { fclose (m_fp); m_fp = NULL; } } void CLog::SetFromSysData () { if (SysData.IsLogBootToFile ()) then SetType (LOG_BOOT); if (SysData.IsLogResetsToFile ()) then SetType (LOG_RESET); if (SysData.IsLogBuildToFile ()) then SetType (LOG_BUILD); if (SysData.IsLogBugsToFile ()) then SetType (LOG_BUG); if (SysData.IsLogPlayersToFile ()) then SetType (LOG_PLAYER); if (SysData.IsLogCommToFile ()) then SetType (LOG_COMM); if (! SysData.IsCloseStdErr ()) then SetLeaveOpen (TRUE); } void CLog::SetType (LogTypes t, BOOL bState /* = TRUE */) { if (t == LOG_ALL) { for (int i=0; i < LOG_END; ++i) m_Types [i] = bState; } else m_Types [t] = bState; } void CLog::Print (LogTypes t, const char* s) { if (IsLogged (t)) { Open (); if (m_fp) { fprintf (m_fp, s); if (! m_bLeaveOpen) Close (); } } } void CLog::Printf (LogTypes t, const char* fmt, ...) { va_list args; if (IsLogged (t)) { char *buf = new char [MAX_STRING_LENGTH*2]; va_start (args, fmt); vsprintf (buf, fmt, args); va_end (args); Print (t, buf); delete buf; } } long CLog::GetSize () { CFileStatus St; return CFile::GetStatus (m_Name, St) ? St.m_size : 0; } void CLog::Archive () { Close (); CString Bname = FileTable.MakeBackupName (m_Name); FileTable.Remove (Bname); rename (m_Name, Bname); }