X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctsupport%2Fsyserror.cpp;h=8468f820743affdc535a49a4809fabcf1d2a94c2;hp=8721de2e9ecfa668bb43527089254289f43dae7c;hb=5c6b29ab4885308cc3381af6e0a68f4804956d2e;hpb=c24c1c0721df40e77822ad2b9ec01a944012ff42 diff --git a/libctsupport/syserror.cpp b/libctsupport/syserror.cpp index 8721de2..8468f82 100644 --- a/libctsupport/syserror.cpp +++ b/libctsupport/syserror.cpp @@ -2,7 +2,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: syserror.cpp,v 1.9 2000/12/27 20:09:19 kevin Exp $ +** $Id: syserror.cpp,v 1.10 2000/12/29 15:45:06 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -22,76 +22,87 @@ #include #include #include -#include -#include "ctsupport.h" +#include +#include +#include "ct.h" /* NAME - * sys_error System error handler - * - * SYNOPSIS - * sys_error (severity, msg, args . . .) - * int severity Severity of error - * char *msg Error message - * args Argument list, direct transfer to printf stack - * Can take 24 byte transfer - */ - -static int errorlevel = ERR_WARNING; /* Set error reporting level */ - +* sys_error System error handler +* +* SYNOPSIS +* sys_error (severity, msg, args . . .) +* int severity Severity of error +* char *msg Error message +* args Argument list, direct transfer to printf stack +* Can take 24 byte transfer +*/ + +static int s_reportErrorLevel = ERR_WARNING; // Set error reporting level + +bool g_bRunningWXWindows = false; void sys_error (int severity, const char *msg, ...) { va_list arg; - + va_start(arg, msg); - - sys_verror (severity, msg, arg); + + std::string strOutput; + sys_verror (strOutput, severity, msg, arg); + +// if (g_bRunningWXWindows) +// theApp->getLog() << strOutput.c_str(); +// else + std::cout << strOutput; va_end(arg); } -static int nErrorCount = 0; +static int s_nErrorCount = 0; const static int MAX_ERROR_COUNT = 20; -void sys_verror (int severity, const char *msg, va_list arg) +void sys_verror (std::string& strOutput, int severity, const char *msg, va_list arg) { - if (severity < errorlevel) - return; // ignore error if less than max level + if (severity < s_reportErrorLevel) + return; // ignore error if less than reporting level + + std::ostringstream os; - nErrorCount++; + s_nErrorCount++; if (severity != ERR_FATAL) { - if (nErrorCount > MAX_ERROR_COUNT) + if (s_nErrorCount > MAX_ERROR_COUNT) return; - else if (nErrorCount == MAX_ERROR_COUNT) { - std::cout << "*****************************************************************\n"; - std::cout << "*** M A X I M U M E R R O R C O U N T R E A C H E D ***\n"; - std::cout << "*** ***\n"; - std::cout << "*** No further errors will be reported ***\n"; - std::cout << "*****************************************************************\n"; + else if (s_nErrorCount == MAX_ERROR_COUNT) { + os << "*****************************************************************\n"; + os << "*** M A X I M U M E R R O R C O U N T R E A C H E D ***\n"; + os << "*** ***\n"; + os << "*** No further errors will be reported ***\n"; + os << "*****************************************************************\n"; + strOutput = os.str(); return; } } - + switch (severity) { case ERR_FATAL: - std::cout << "FATAL ERROR: "; + os << "FATAL ERROR: "; break; case ERR_SEVERE: - std::cout << "SEVERE ERROR: "; + os << "SEVERE ERROR: "; break; case ERR_WARNING: - std::cout << "WARNING ERROR: "; + os << "WARNING ERROR: "; break; case ERR_TRACE: - std::cout << "Trace: "; + os << "Trace: "; break; default: - std::cout << "Illegal error code #" << severity << ": "; + os << "Illegal error severity #" << severity << ": "; } - char errStr[512]; + char errStr[2000]; #if HAVE_VSNPRINTF vsnprintf (errStr, sizeof(errStr), msg, arg); @@ -100,57 +111,59 @@ void sys_verror (int severity, const char *msg, va_list arg) #else strncpy (errStr, sizeof(errStr), "Error message not available on this platform."); #endif - - std::cout << errStr << std::endl; + + os << errStr << std::endl; + strOutput = os.str(); if (severity == ERR_FATAL) - throw std::runtime_error (errStr); + throw std::runtime_error (errStr); #if INTERACTIVE_ERROR_DISPLAY std::cout << "A - Abort C - Continue W - Turn off warnings? "; // fflush(stderr); do - { - int c = cio_kb_waitc("AaBbCcWw", TRUE); /* get code from keyboard */ - c = tolower (c); - fputc (c, stderr); - fputc (NEWLINE, stderr); - - if (c == 'a') - exit (1); - else if (c == 'c') - return; - else if (c == 'w') - { - sys_error_level (ERR_SEVERE); /* report severe & fatal errors */ - break; - } - } while (TRUE); + { + int c = cio_kb_waitc("AaBbCcWw", TRUE); /* get code from keyboard */ + c = tolower (c); + fputc (c, stderr); + fputc (NEWLINE, stderr); + + if (c == 'a') + exit (1); + else if (c == 'c') + return; + else if (c == 'w') + { + sys_error_level (ERR_SEVERE); /* report severe & fatal errors */ + break; + } + } while (TRUE); #endif } /* NAME - * sys_error_level Set error reporting level - * - * SYNOPSIS - * sys_error_level (severity) - * int severity Report all error as serious as severity and beyond - * - * DESCRIPTION - * Causes the system to ignore all error below the level of severity - * For example, if severity == ERR_SEVERE, then report severe & fatal - * error and ignore warnings - */ +* sys_error_level Set error reporting level +* +* SYNOPSIS +* sys_error_level (severity) +* int severity Report all error as serious as severity and beyond +* +* DESCRIPTION +* Causes the system to ignore all error below the level of severity +* For example, if severity == ERR_SEVERE, then report severe & fatal +* error and ignore warnings +*/ void sys_error_level (int severity) { if (severity == ERR_FATAL || - severity == ERR_SEVERE || - severity == ERR_WARNING) - errorlevel = severity; + severity == ERR_SEVERE || + severity == ERR_WARNING || + severity == ERR_TRACE) + s_reportErrorLevel = severity; else - errorlevel = ERR_WARNING; + s_reportErrorLevel = ERR_WARNING; }