home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-19 | 4.5 KB | 177 lines | [TEXT/MPS ] |
- /*
- * err_msg.r -- err_msg, irunerr, drunerr
- */
-
- hidden novalue err_txt Params((int n));
-
- extern struct errtab errtab[]; /* error numbers and messages */
-
- /*
- * err_msg - print run-time error message, performing trace back if required.
- * This function underlies the rtt runerr() construct.
- */
- novalue err_msg(n, v)
- int n;
- dptr v;
- {
- register struct errtab *p;
- #ifdef PresentationManager
- char outbuf[512];
- int oblength = 0;
- #endif /* PresentationManager */
-
- if (n == 0) {
- k_errornumber = t_errornumber;
- k_errorvalue = t_errorvalue;
- have_errval = t_have_val;
- }
- else {
- k_errornumber = n;
- if (v == NULL) {
- k_errorvalue = nulldesc;
- have_errval = 0;
- }
- else {
- k_errorvalue = *v;
- have_errval = 1;
- }
- }
-
- k_errortext = "";
- for (p = errtab; p->err_no > 0; p++)
- if (p->err_no == k_errornumber) {
- k_errortext = p->errmsg;
- break;
- }
-
- #ifdef EventMon
- EVVal((word)k_errornumber,E_Error);
- #endif /* EventMon */
-
- #ifdef Xver
- xver(imain.17)
- #endif /* Xver */
-
- #ifndef Xver
- if (pfp != NULL) {
- if (IntVal(kywd_err) == 0 || !err_conv) {
- #ifndef PresentationManager
- fprintf(stderr, "\nRun-time error %d\n", k_errornumber);
- #else /* PresentationManager */
- oblength = sprintf(outbuf, "Run-time error %d\n", k_errornumber);
- #endif /* PresentationManager */
- #if COMPILER
- if (line_info)
- fprintf(stderr, "File %s; Line %d\n", file_name, line_num);
- #else /* COMPILER */
- #ifndef PresentationManager
- fprintf(stderr, "File %s; Line %ld\n", findfile(ipc.opnd),
- (long)findline(ipc.opnd));
- #else /* PresentationManager */
- oblength += sprintf(&outbuf[oblength], "File %s; Line %ld\n",
- findfile(ipc.opnd), (long)findline(ipc.opnd));
- #endif /* PresentationManager */
- #endif /* COMPILER */
- }
- else {
- IntVal(kywd_err)--;
- return;
- }
- }
- else
- #ifndef PresentationManager
- fprintf(stderr, "\nRun-time error %d in startup code\n", n);
- fprintf(stderr, "%s\n", k_errortext);
- #else /* PresentationManager */
- oblength = sprintf(outbuf, "Run-time error %d in startup code\n", n);
- oblength += sprintf(&outbuf[oblength], "%s\n", k_errortext);
- #endif /* PresentationManager */
- #endif /* Xver */
-
- /* for now, this is where we'll end the error processing. We'll have
- to write some support routines for traceback and outimage */
- #ifdef PresentationManager
- /* XXX for now, just throw up a little window - later, expand this
- into a more formal dialog box with a trace button, etc */
- /* make a beep */
- WinAlarm(HWND_DESKTOP, WA_ERROR);
- /* show the box */
- WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, outbuf, "Run Time Error",
- 0, MB_OK | MB_ERROR | MB_APPLMODAL);
- /* get out of town */
- c_exit(ErrorExit);
- #else /* PresentationManager */
- if (have_errval) {
- fprintf(stderr, "offending value: ");
- outimage(stderr, &k_errorvalue, 0);
- putc('\n', stderr);
- }
-
- /*
- * Close out event monitoring, if enabled.
- */
- #ifdef MemMon
- EVTerm (k_errornumber, k_errortext);
- #endif /* MemMon */
-
- #ifdef TraceBack
- if (!debug_info)
- c_exit(ErrorExit);
-
- if (pfp == NULL) { /* skip if start-up problem */
- if (dodump)
- abort();
- c_exit(ErrorExit);
- }
-
- fprintf(stderr, "Trace back:\n");
-
- tracebk(pfp, argp);
- #endif /* TraceBack */
- fflush(stderr);
-
- #ifdef Xver
- xver(imain.18)
- #endif /* Xver */
-
- if (dodump)
- abort();
- c_exit(ErrorExit);
- #endif /* PresentationManager */
- }
-
- /*
- * irunerr - print an error message when the offending value is a C_integer
- * rather than a descriptor.
- */
- novalue irunerr(n, v)
- int n;
- C_integer v;
- {
- t_errornumber = n;
- IntVal(t_errorvalue) = v;
- t_errorvalue.dword = D_Integer;
- t_have_val = 1;
- err_msg(0,NULL);
- }
-
- /*
- * drunerr - print an error message when the offending value is a C double
- * rather than a descriptor.
- */
- novalue drunerr(n, v)
- int n;
- double v;
- {
- union block *bp;
-
- bp = (union block *)alcreal(v);
- if (bp != NULL) {
- t_errornumber = n;
- BlkLoc(t_errorvalue) = bp;
- t_errorvalue.dword = D_Real;
- t_have_val = 1;
- }
- err_msg(0,NULL);
- }
-