home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / error.C < prev    next >
C/C++ Source or Header  |  1998-04-23  |  3KB  |  107 lines

  1. #include <config.h>
  2.  
  3. #ifdef __GNUG__
  4. #pragma implementation
  5. #endif
  6.  
  7. #include "error.h"
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <lstrings.h>
  11.  
  12. //     $Id: error.C,v 1.1.1.1 1998/04/23 16:02:48 larsbj Exp $    
  13.  
  14. #if !defined(lint) && !defined(WITH_WARNINGS)
  15. static char vcid[] = "$Id: error.C,v 1.1.1.1 1998/04/23 16:02:48 larsbj Exp $";
  16. #endif /* lint */
  17.  
  18. struct error_item {
  19.     Error::DEBUG_LEVELS level;
  20.     const char * name;
  21.     const char * desc;
  22. };
  23.  
  24. static error_item errorTags[] = {
  25.     { Error::INFO,        "info",        "General information"},
  26.     { Error::INIT,        "init",        "Program initialisation"},
  27.     { Error::KEY,        "key",        "Keyboard events handling"},
  28.     { Error::TOOLBAR,    "toolbar",    "Toolbar handling"},
  29.     { Error::PARSER,    "parser",    "Lyxlex grammer parser"},
  30.     { Error::LYXRC,        "lyxrc",    "Configuration files reading"},
  31.     { Error::KBMAP,        "kbmap",    "Custom keyboard definition"},
  32.     { Error::LATEX,        "latex",    "LaTeX generation/execution"},
  33.     { Error::MATHED,    "mathed",    "Math editor"},
  34.     { Error::FONT,        "font",        "Font handling"},
  35.     { Error::TCLASS,    "tclass",    "Textclass files reading"},
  36.     { Error::LYXVC,        "lyxvc",    "Version control"},
  37.     { Error::LYXSERVER,    "lyxserver",    "External control interface"},
  38.         { Error::ANY,        "any",          "All debugging messages"}};
  39.  
  40. static const int numErrorTags = sizeof(errorTags)/sizeof(error_item);
  41.  
  42. Error::Error(int level) // should loglevel also be an argument?
  43. {
  44.     debuglevel = level;
  45.     loglevel = 0;
  46. }
  47.  
  48.  
  49. void Error::setDebugLevel(char * lev)
  50. {
  51.     LString levels = lev;
  52.     LString oneLevel;
  53.     int i;
  54.  
  55.     levels.split(oneLevel,',');
  56.     while(!oneLevel.empty()) {
  57.         // Search for an explicit name
  58.         for (i = 0 ; i<numErrorTags ; i++) 
  59.             if (compare_no_case(oneLevel,
  60.                         errorTags[i].name) == 0) {
  61.                 debuglevel |= errorTags[i].level;
  62.                 break;
  63.             }
  64.         // No name found; is it a number?
  65.         if (i == numErrorTags) {
  66.             int num = atoi(oneLevel.c_str());
  67.             if (num)
  68.                 debuglevel |= num;
  69.             else
  70.                 print("Bad debug feature `"
  71.                       + oneLevel + '\'');
  72.         }
  73.         levels.split(oneLevel,',');
  74.     }
  75.  
  76.     // Show what features are traced
  77.     for (i = 0 ; i < numErrorTags ; i++)
  78.         if (errorTags[i].level != Error::ANY
  79.             && debuglevel & errorTags[i].level)
  80.             print(LString("Debugging ") + errorTags[i].name
  81.                   + " (" + errorTags[i].desc + ')');
  82. }
  83.  
  84. void Error::showTags() {
  85.     for (int i = 0 ; i<numErrorTags ; i++)
  86.         fprintf(stdout, "  %5d  %-10s%-35s\n", 
  87.             errorTags[i].level,
  88.             errorTags[i].name, 
  89.             errorTags[i].desc);
  90. }
  91.  
  92.  
  93. void Error::debug(LString const & msg, int level)
  94. {
  95.     if (debuglevel & level)
  96.         print(msg);
  97.     // should also print to the logfile
  98. }
  99.  
  100. void Error::print(LString const & msg)
  101. {
  102.     if (!msg.empty()) 
  103.         fprintf(stderr, "%s\n", msg.c_str());
  104. }
  105.  
  106.  
  107.