r318: *** empty log message ***
[ctsim.git] / libctsupport / syserror.cpp
index 8721de2e9ecfa668bb43527089254289f43dae7c..8468f820743affdc535a49a4809fabcf1d2a94c2 100644 (file)
@@ -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
 #include <exception>
 #include <stdexcept>
 #include <stdarg.h>
-#include <ctype.h>
-#include "ctsupport.h"
+#include <ctype.h>\r
+#include <string>
+#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 
+\r
+bool g_bRunningWXWindows = false;
 
 void sys_error (int severity, const char *msg, ...)
 {
   va_list arg;
-
+  
   va_start(arg, msg);
-
-  sys_verror (severity, msg, arg);
+  \r
+  std::string strOutput;
+  sys_verror (strOutput, severity, msg, arg);
+  \r
+//  if (g_bRunningWXWindows)\r
+//    theApp->getLog() << strOutput.c_str();\r
+//  else\r
+    std::cout << strOutput;\r
 
   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;\r
 
-  nErrorCount++;
+  s_nErrorCount++;\r
   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";\r
+      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;\r
   case ERR_TRACE:\r
-    std::cout << "Trace: ";\r
+    os << "Trace: ";\r
     break;
   default:
-         std::cout << "Illegal error code #" << severity << ": ";
+    os << "Illegal error severity #" << severity << ": ";
   }
   
-  char errStr[512];\r
+  char errStr[2000];\r
   
 #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\r
   strncpy (errStr, sizeof(errStr), "Error message not available on this platform.");
 #endif
-
-  std::cout << errStr << std::endl;
+  
+  os << errStr << std::endl;
+  strOutput = os.str();\r
   
   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 ||\r
+    severity == ERR_TRACE)
+    s_reportErrorLevel = severity;
   else
-    errorlevel = ERR_WARNING;
+    s_reportErrorLevel = ERR_WARNING;
 }