|
Simple Error Handler
Submitted by |
This is a simple error handling class which I have created as an exercise of my
knowledge of the Standard Template Library. It uses STL strings and iostreams
and is made for/using Microsoft Visual C++ 6. I don't think I need to give any
extra comments because the code is pretty self-explanatory. You can use the code
for whatever you want.
I would like to hear your opinions about it, if you think something needs to be
done otherwise I would like to hear it.
-----
Bernardo Quiroga aka Drago
http://www.casema.net/~drago/index.html
|
Currently browsing [errorhandle.zip] (4,391 bytes) - [dll_interface.h] - (1,081 bytes)
/******************************************************************************
filename: dll_interface.h
date: 04/Nov/2000.
author: Bernardo Quiroga.
contact at: bernardo_quiroga@hotmail.com, ICQ UIN: 13639620.
website: http://www.casema.net/~drago/projects/mango/index.html
---------------------------------------------------------------------------
This file is part of "Mango".
This header file takes care of dll exportation/importation.
******************************************************************************/
#ifndef __DLL_INTERFACE_H__
#define __DLL_INTERFACE_H__
///////////////////////////////////////////////////////////////////////////////
// Included header files
#ifdef _MANGO_GAME_ENGINE
#define DLL_INTERFACE __declspec(dllexport)
#else
#define DLL_INTERFACE __declspec(dllimport)
#endif
#endif // __DLL_INTERFACE_H__
///////////////////////////////////////////////////////////////////////////////
// dll_interface.h - End of file.
///////////////////////////////////////////////////////////////////////////////
|
|
Currently browsing [errorhandle.zip] (4,391 bytes) - [sys_cerrorhandler.cpp] - (7,305 bytes)
/******************************************************************************
filename: sys_cerrorhandler.cpp
date: 04/Nov/2000.
author: Bernardo Quiroga.
contact at: bernardo_quiroga@hotmail.com, ICQ UIN: 13639620.
website: http://www.casema.net/~drago/projects/mango/index.html
---------------------------------------------------------------------------
This file is part of "Mango".
This class handles any error that might pop up.
******************************************************************************/
///////////////////////////////////////////////////////////////////////////////
// Includes
#include "sys_cerrorhandler.h"
///////////////////////////////////////////////////////////////////////////////
// Static data declaration.
string sys_cerrorhandler::m_strErrorMessage;
///////////////////////////////////////////////////////////////////////////////
// sys_cerrorhandler::sys_cerrorhandler()
/////////////////////////////////////////
// Class constructor.
sys_cerrorhandler::sys_cerrorhandler() :
m_bLogAndQuit(DEFAULT_MODE_OF_PROCESSING),
m_strLogFilename(DEFAULT_LOG_FILENAME),
m_bLogFailed(false)
{
}
///////////////////////////////////////////////////////////////////////////////
// sys_cerrorhandler::sys_cerrorhandler(...)
////////////////////////////////////////////
// Class constructor. bLogAndQuit specifies the mode of error processing;
// whether an error should only be logged or be logged, displayed in a dialog
// whereafter the program shuts down. strLogFilename is simply the filename of
// the error log.
sys_cerrorhandler::sys_cerrorhandler(const bool& bLogAndQuit,
const string& strLogFilename)
{
// Save the mode of error processing.
m_bLogAndQuit = bLogAndQuit;
// Save the error log's filename.
m_strLogFilename = strLogFilename;
// Log(...) hasn't had the chance to fail, yet.
m_bLogFailed = false;
}
///////////////////////////////////////////////////////////////////////////////
// sys_cerrorhandler::~sys_cerrorhandler()
//////////////////////////////////////////
// Class destructor.
sys_cerrorhandler::~sys_cerrorhandler()
{
}
///////////////////////////////////////////////////////////////////////////////
// void sys_cerrorhandler::Process(...)
///////////////////////////////////////
// Processes the error. Either logging it to disk or logging it and showing it
// in a dialog box, whereafter the program shuts down. That depends on the
// boolean member variable m_bLogAndQuit.
void sys_cerrorhandler::Process(const string& strFilename, const uint& nLine)
{
// Check if an error has been registered.
if(SYS_FAILED(m_strErrorMessage.empty()))
{
// Log the error to disk.
Log(strFilename, nLine);
if(m_bLogAndQuit)
{
// Show the error dialog box and shutdown.
ShowErrorDialog(strFilename, nLine);
}
// Reset the error message.
Reset();
}
}
///////////////////////////////////////////////////////////////////////////////
// void sys_cerrorhandler::Log(...)
///////////////////////////////////
// Log the error to disk. If the error log already exists append the error
// message with the date of occurance and in which source file and line it
// occured on.
void sys_cerrorhandler::Log(const string& strFilename, const uint& nLine)
{
// Open the error log for output only, and append the file.
fstream fErrorLog(m_strLogFilename.c_str(), ios::out | ios::app);
if(SYS_FAILED(fErrorLog.is_open()))
{
// Could not open the file. Something is seriously wrong.
m_bLogFailed = true;
m_bLogAndQuit = true;
return;
}
// Generate the error message.
string strErrorMessage = GenerateErrorMessage(strFilename, nLine);
// Output the error message.
fErrorLog << strErrorMessage << endl << endl;
// Close the file stream.
fErrorLog.close();
}
///////////////////////////////////////////////////////////////////////////////
// string sys_cerrorhandler::GenerateErrorMessage(...)
//////////////////////////////////////////////////////
// Returns an error message which includes when (date and time) and
// where (source file and line) the error occured as well as the error
// message itself.
string sys_cerrorhandler::GenerateErrorMessage(const string& strFilename,
const uint& nLine)
{
// Declare a string and a string stream object.
string strErrorMessage;
stringstream ssErrorMessage(strErrorMessage, ios::out);
// Retrieve the current date and time.
char szDate[16], szTime[16];
_strdate(szDate); _strtime(szTime);
// Generate the error message.
ssErrorMessage << "On:\t" << szDate << ", " << szTime;
ssErrorMessage << " the Mango, Game Engine encountered an error"<< endl;
ssErrorMessage << "in file:\t" << strFilename << "," << endl;
ssErrorMessage << "on line:\t" << nLine << "," << endl;
ssErrorMessage << "stating:\t" << m_strErrorMessage;
// Return the error message.
return ssErrorMessage.str();
}
///////////////////////////////////////////////////////////////////////////////
// void sys_cerrorhandler::ShowErrorDialog(...)
///////////////////////////////////////////////
// Show the error message and additional information regarding the error
// encountered in a dialog box, whereafter the program should shut down.
void sys_cerrorhandler::ShowErrorDialog(const string& strFilename,
const uint& nLine)
{
// Generate the error message.
string strDialogMessage = GenerateErrorMessage(strFilename, nLine);
// If the error message is saved on disk, ask the user if he can send the
// file. Otherwise, ask if the user can send the error message.
if(SYS_FAILED(m_bLogFailed))
{
strDialogMessage += "\n\nPlease, send the error log to";
strDialogMessage += "bernardo_quiroga@hotmail.com. It is located";
strDialogMessage += " at:\n\t\"";
strDialogMessage += m_strLogFilename;
strDialogMessage += "\"\nin the directory you installed this program.";
}
else
{
strDialogMessage += "\n\nPlease, send this error message to: ";
strDialogMessage += "bernardo_quiroga@hotmail.com.";
}
// Show the error dialog box and shut down the program.
MessageBox(NULL, strDialogMessage.c_str(), NULL, MB_OK | MB_ICONERROR |
MB_SYSTEMMODAL | MB_TOPMOST);
PostQuitMessage(0);
}
///////////////////////////////////////////////////////////////////////////////
// void sys_cerrorhandler::Reset()
//////////////////////////////////
// Flushes the error register. The error that was registered as last will be
// ignored.
void sys_cerrorhandler::Reset()
{
// Reset the error message.
m_strErrorMessage.erase(0, m_strErrorMessage.length());
}
///////////////////////////////////////////////////////////////////////////////
// void sys_cerrorhandler::SetError(...)
////////////////////////////////////////
// Register an error and set the error message.
void sys_cerrorhandler::SetError(const string& strErrorMessage)
{
// Copy the new error message.
m_strErrorMessage = strErrorMessage;
}
///////////////////////////////////////////////////////////////////////////////
// sys_cerrorhandler.cpp - End of file.
///////////////////////////////////////////////////////////////////////////////
|
|
Currently browsing [errorhandle.zip] (4,391 bytes) - [sys_cerrorhandler.h] - (2,224 bytes)
/******************************************************************************
filename: sys_cerrorhandler.h
date: 04/Nov/2000.
author: Bernardo Quiroga.
contact at: bernardo_quiroga@hotmail.com, ICQ UIN: 13639620.
website: http://www.casema.net/~drago/projects/mango/index.html
---------------------------------------------------------------------------
This file is part of "Mango".
This class handles any error that might pop up.
******************************************************************************/
#ifndef __SYS_CERRORHANDLER_H__
#define __SYS_CERRORHANDLER_H__
///////////////////////////////////////////////////////////////////////////////
// Included header files
#include <windows.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <time.h>
#include "dll_interface.h"
#include "sys_typedefs.h"
#include "sys_macros.h"
///////////////////////////////////////////////////////////////////////////////
// Definitions
#define DEFAULT_LOG_FILENAME "errors.log"
#define DEFAULT_MODE_OF_PROCESSING 1
///////////////////////////////////////////////////////////////////////////////
// Class sys_cerrorhandler
class DLL_INTERFACE sys_cerrorhandler
{
public:
sys_cerrorhandler();
sys_cerrorhandler(const bool& bLogAndQuit, const string& strLogFilename);
virtual ~sys_cerrorhandler();
void SetProcessMode(const bool& bLogAndQuit)
{m_bLogAndQuit = bLogAndQuit;};
static void SetError(const string& strErrorMessage);
void Process(const string& strFilename, const uint& nLine);
void Reset();
protected:
void Log(const string& strFilename, const uint& nLine);
string GenerateErrorMessage(const string& strFilename,
const uint& nLine);
void ShowErrorDialog(const string& strFilename, const uint& nLine);
protected:
bool m_bLogAndQuit;
static string m_strErrorMessage;
string m_strLogFilename;
private:
bool m_bLogFailed;
};
#endif // __SYS_CERRORHANDLER_H__
///////////////////////////////////////////////////////////////////////////////
// sys_cerrorhandler.h - End of file.
///////////////////////////////////////////////////////////////////////////////
|
|
Currently browsing [errorhandle.zip] (4,391 bytes) - [sys_macros.h] - (1,223 bytes)
/******************************************************************************
filename: sys_macros.h
date: 05/Nov/2000.
author: Bernardo Quiroga.
contact at: bernardo_quiroga@hotmail.com, ICQ UIN: 13639620.
website: http://www.casema.net/~drago/projects/mango/index.html
---------------------------------------------------------------------------
This file is part of "Mango".
This header file declares all the system macros used by this project.
******************************************************************************/
#ifndef __SYS_MACROS_H__
#define __SYS_MACROS_H__
///////////////////////////////////////////////////////////////////////////////
// Macro declaration.
#define SYS_DELETE(x) if(x) delete x; x = NULL;
#define SYS_DELETE_ARRAY(x) if(x) delete [] x; x = NULL;
#define SYS_RELEASE(x) SYS_DELETE(x);
#define SYS_RELEASE_ARRAY(x) SYS_DELETE_ARRAY(x);
#define SYS_FAILED(x) ((uint)x < 1)
#define SYS_SUCCEEDED(x) ((uint)x > 0)
#endif // __SYS_MACROS_H__
///////////////////////////////////////////////////////////////////////////////
// sys_macros.h - End of file.
///////////////////////////////////////////////////////////////////////////////
|
|
Currently browsing [errorhandle.zip] (4,391 bytes) - [sys_typedefs.h] - (1,235 bytes)
/******************************************************************************
filename: sys_typedefs.h
date: 04/Nov/2000.
author: Bernardo Quiroga.
contact at: bernardo_quiroga@hotmail.com, ICQ UIN: 13639620.
website: http://www.casema.net/~drago/projects/mango/index.html
---------------------------------------------------------------------------
This file is part of "Mango".
This header file declares all the type definitions that will be used in
this project.
******************************************************************************/
#ifndef __SYS_TYPEDEFS_H__
#define __SYS_TYPEDEFS_H__
///////////////////////////////////////////////////////////////////////////////
// Type definitions namespace.
namespace sys_nsTypedefs
{
typedef unsigned char ubyte;
typedef unsigned int uint;
};
///////////////////////////////////////////////////////////////////////////////
// Namespace directives.
using namespace std;
using namespace sys_nsTypedefs;
#endif // __SYS_TYPEDEFS_H__
///////////////////////////////////////////////////////////////////////////////
// sys_typedefs.h - End of file.
///////////////////////////////////////////////////////////////////////////////
|
|
The zip file viewer built into the Developer Toolbox made use
of the zlib library, as well as the zlibdll source additions.
|