home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / icon / dos / src / runtime / err_msg.r < prev    next >
Encoding:
Text File  |  1992-02-10  |  2.9 KB  |  138 lines

  1. /*
  2.  * err_msg.r -- err_msg, irunerr, drunerr
  3.  */
  4.  
  5. hidden novalue err_txt Params((int n));
  6.  
  7. extern struct errtab errtab[];        /* error numbers and messages */
  8.  
  9. /*
  10.  * err_msg - print run-time error message, performing trace back if required.
  11.  *  This function underlies the rtt runerr() construct.
  12.  */
  13. novalue err_msg(n, v)
  14. int n;
  15. dptr v;
  16. {
  17.    register struct errtab *p;
  18.  
  19.    if (n == 0) {
  20.       k_errornumber = t_errornumber;
  21.       k_errorvalue = t_errorvalue;
  22.       have_errval = t_have_val;
  23.       }
  24.    else {
  25.       k_errornumber = n;
  26.       if (v == NULL) {
  27.          k_errorvalue = nulldesc;
  28.          have_errval = 0;
  29.          }
  30.       else {
  31.          k_errorvalue = *v;
  32.          have_errval = 1;
  33.          }
  34.       }
  35.  
  36. #ifdef EventMon
  37.    EVVal((word)k_errornumber,E_Error);
  38. #endif                    /* EventMon */
  39.  
  40.    k_errortext = "";
  41.    for (p = errtab; p->err_no > 0; p++)
  42.       if (p->err_no == k_errornumber) {
  43.          k_errortext = p->errmsg;
  44.          break;
  45.          }
  46.  
  47.  
  48.    if (pfp != NULL) {
  49.       if (IntVal(kywd_err) == 0 || !err_conv) {
  50.          fprintf(stderr, "\nRun-time error %d\n", k_errornumber);
  51. #if COMPILER
  52.          if (line_info)
  53.             fprintf(stderr, "File %s; Line %d\n", file_name, line_num);
  54. #else                    /* COMPILER */
  55.          fprintf(stderr, "File %s; Line %ld\n", findfile(ipc.opnd),
  56.             (long)findline(ipc.opnd));
  57. #endif                    /* COMPILER */
  58.          }
  59.       else {
  60.          IntVal(kywd_err)--;
  61.          return;
  62.          }
  63.       }
  64.    else
  65.       fprintf(stderr, "\nRun-time error %d in startup code\n", n);
  66.    fprintf(stderr, "%s\n", k_errortext);
  67.  
  68.  
  69.    if (have_errval) {
  70.       fprintf(stderr, "offending value: ");
  71.       outimage(stderr, &k_errorvalue, 0);
  72.       putc('\n', stderr);
  73.       }
  74.  
  75. /*
  76.  * Close out event monitoring, if enabled.
  77.  */
  78. #ifdef MemMon
  79.    EVTerm (k_errornumber, k_errortext);
  80. #endif                    /* MemMon */
  81.  
  82. #ifdef TraceBack
  83.    if (!debug_info)
  84.       c_exit(ErrorExit);
  85.  
  86.    if (pfp == NULL) {        /* skip if start-up problem */
  87.       if (dodump)
  88.          abort();
  89.       c_exit(ErrorExit);
  90.       }
  91.  
  92.    fprintf(stderr, "Trace back:\n");
  93.  
  94.    tracebk(pfp, argp);
  95. #endif                    /* TraceBack */
  96.    fflush(stderr);
  97.  
  98.  
  99.    if (dodump)
  100.       abort();
  101.    c_exit(ErrorExit);
  102. }
  103.  
  104. /*
  105.  * irunerr - print an error message when the offending value is a C_integer
  106.  *  rather than a descriptor.
  107.  */
  108. novalue irunerr(n, v)
  109. int n;
  110. C_integer v;
  111.    {
  112.    t_errornumber = n;
  113.    IntVal(t_errorvalue) = v;
  114.    t_errorvalue.dword = D_Integer;
  115.    t_have_val = 1;
  116.    err_msg(0,NULL);
  117.    }
  118.  
  119. /*
  120.  * drunerr - print an error message when the offending value is a C double
  121.  *  rather than a descriptor.
  122.  */
  123. novalue drunerr(n, v)
  124. int n;
  125. double v;
  126.    {
  127.    union block *bp;
  128.  
  129.    bp = (union block *)alcreal(v);
  130.    if (bp != NULL) {
  131.       t_errornumber = n;
  132.       BlkLoc(t_errorvalue) = bp;
  133.       t_errorvalue.dword = D_Real;
  134.       t_have_val = 1;
  135.       }
  136.    err_msg(0,NULL);
  137.    }
  138.