home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume11 / rpl / part02 / errors.c < prev    next >
C/C++ Source or Header  |  1990-03-10  |  3KB  |  170 lines

  1. /****************************************************************
  2.  
  3. Module:
  4.     Errors
  5.  
  6. Description:
  7.     Error messages
  8.  
  9.  
  10. Modification history:
  11.  
  12.     0.0    hjp    89-06-26
  13.  
  14.         initial version
  15.  
  16.     0.1    hjp    89-07-25
  17.  
  18.         ERR_NXVAR added
  19.  
  20.     0.2    hjp    89-08-15
  21.  
  22.         parameter detail added to error
  23.         ERR_DOS added.
  24.  
  25.     0.3    hjp    89-08-29
  26.  
  27.         ERR_LOOP added.
  28.  
  29.     0.4    hjp    89-10-05
  30.  
  31.         INT_BADLINK added.
  32.         error has now variable parameter list.
  33.  
  34.     0.5    hjp    89-11-15
  35.  
  36.         parameter to ERR_SYNTAX added.
  37.  
  38.     0.6    hjp    89-12-11
  39.  
  40.         ERR_FPE added.
  41.  
  42.     0.7    hjp    90-02-27
  43.  
  44.         START, FOR, DO, WHILE, COMMENT added to id2str.
  45.  
  46. ****************************************************************/
  47.  
  48. #define ERRORS_C
  49.  
  50. #include <port.h>
  51. #include <stdarg.h>
  52. #include <stdio.h>
  53.  
  54. #include "errors.h"
  55. #include "debug.h"
  56.  
  57. char * errstr [] =
  58. {
  59.     "No error\n",
  60.     "Wrong argument type %s\n",
  61.     "Stack empty\n",
  62.     "Too few arguments\n",
  63.     "Syntax error: %s\n",
  64.     "Out of Memory\n",
  65.     "No such variable: '%s'\n",
  66.     "No user variables\n",
  67.     "Error reported by DOS: %s\n",
  68.     "Loop nesting error\n",
  69.     "Floating Point Exception\n",
  70.  
  71.     "(INTERNAL) stack is not a list\n",
  72.     "(INTERNAL) unknown object type %s\n",
  73.     "(INTERNAL) impossible link count %s",
  74.  
  75.     "(PANIC) buffer overflow -- committing suicide ...\n",
  76. };
  77.  
  78. char * id2str (int id)
  79. {
  80.     char * rc;
  81.  
  82.     switch (id) {
  83.     case REAL:
  84.         rc = "REAL";
  85.         break;
  86.     case COMPLEX:
  87.         rc = "COMPLEX";
  88.         break;
  89.     case BINARY:
  90.         rc = "BINARY";
  91.         break;
  92.     case PROGRAM:
  93.         rc = "PROGRAM";
  94.         break;
  95.     case OP:
  96.         rc = "OP";
  97.         break;
  98.     case UNAME:
  99.         rc = "UNAME";
  100.         break;
  101.     case QNAME:
  102.         rc = "QNAME";
  103.         break;
  104.     case STRING:
  105.         rc = "STRING";
  106.         break;
  107.     case LIST:
  108.         rc = "LIST";
  109.         break;
  110.     case VARIABLE:
  111.         rc = "VARIABLE";
  112.         break;
  113.     case START:
  114.         rc = "START";
  115.         break;
  116.     case DO:
  117.         rc = "DO";
  118.         break;
  119.     case FOR:
  120.         rc = "FOR";
  121.         break;
  122.     case WHILE:
  123.         rc = "WHILE";
  124.         break;
  125.     case COMMENT:
  126.         rc = "COMMENT";
  127.         break;
  128.     default:
  129.         rc = NULL;
  130.     }
  131.     return rc;
  132. }
  133.  
  134.  
  135. #ifdef STDARGBUG
  136.  
  137.     void error (char * cmd, int errnum, long dummy )
  138.     {
  139.         va_list    argptr;
  140.  
  141.     #ifdef TRACE
  142.         printf ("error (%s, %d, ...) {\n", cmd, errnum);
  143.     #endif
  144.         va_start (argptr, errnum);
  145.         printf ("%s: ", cmd);
  146.         vprintf (errstr [errnum], argptr);
  147.         va_end (argptr);
  148.     #ifdef TRACE
  149.         printf ("} error\n");
  150.     #endif
  151.     }
  152. #else
  153.  
  154.     void error (char * cmd, int errnum, ... )
  155.     {
  156.         va_list    argptr;
  157.  
  158.     #ifdef TRACE
  159.         printf ("error (%s, %d, ...) {\n", cmd, errnum);
  160.     #endif
  161.         va_start (argptr, errnum);
  162.         printf ("%s: ", cmd);
  163.         vprintf (errstr [errnum], argptr);
  164.         va_end (argptr);
  165.     #ifdef TRACE
  166.         printf ("} error\n");
  167.     #endif
  168.     }
  169. #endif
  170.