mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-06-15 23:29:44 +00:00
96 lines
2.8 KiB
C++
96 lines
2.8 KiB
C++
|
/******************************************************************
|
||
|
*
|
||
|
* Error Trap
|
||
|
*
|
||
|
* You can trap run-time errors with ORCA/C. There are several
|
||
|
* reasons to do this, including:
|
||
|
*
|
||
|
* 1. Error messages take up space. By replacing the
|
||
|
* system error handler with your own, you can cut
|
||
|
* out the space needed to store the run-time error
|
||
|
* messages.
|
||
|
* 2. You may want to trap some kinds of run-time
|
||
|
* errors, like file not found or out of memory,
|
||
|
* and handle them yourself. If you do not, the
|
||
|
* error will cause the program to stop executing,
|
||
|
* which may not be the desired result.
|
||
|
*
|
||
|
* This program shows how to intercept and handle run-time
|
||
|
* errors. This is done by placing a function in your program
|
||
|
* called SYSTEMERROR. The function has a single parameter,
|
||
|
* which is an integer error number. SYSTEMERROR replaces a
|
||
|
* function by the same name that is normally linked in from
|
||
|
* the libraries. Another library function, SystemErrorLocation,
|
||
|
* provides the name of the function and the line number where
|
||
|
* the run-time error occurred.
|
||
|
*
|
||
|
* Note that if you do not want to handle a particular error,
|
||
|
* you can call the system error handlers from your program.
|
||
|
* See the sample program ERROREXIT.CC for an example.
|
||
|
*
|
||
|
* By Mike Westerfield and Barbara Allred
|
||
|
*
|
||
|
* Copyright 1987-1989
|
||
|
* Byte Works, Inc.
|
||
|
*
|
||
|
*******************************************************************/
|
||
|
|
||
|
#pragma keep "ErrorTrap"
|
||
|
#pragma debug 9 /* enable range checking + trace-back */
|
||
|
#pragma lint -1
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
extern pascal void SystemErrorLocation (void);
|
||
|
/* A library procedure that prints the current location and a traceback. */
|
||
|
|
||
|
/****************************************************************
|
||
|
*
|
||
|
* BadFunction - Subroutine that will generate a run-time error
|
||
|
*
|
||
|
****************************************************************/
|
||
|
|
||
|
static void BadFunction (void)
|
||
|
|
||
|
{
|
||
|
char ch [8000]; /* this array is too large for */
|
||
|
} /* the default run-time stack */
|
||
|
|
||
|
|
||
|
/****************************************************************
|
||
|
*
|
||
|
* DoIt - Calls function that will generate a run-time error
|
||
|
*
|
||
|
****************************************************************/
|
||
|
|
||
|
static void DoIt (void)
|
||
|
{
|
||
|
BadFunction(); /* call function with large array */
|
||
|
}
|
||
|
|
||
|
|
||
|
/****************************************************************
|
||
|
*
|
||
|
* SystemError - Replaces SYSTEMERROR function in the ORCA library
|
||
|
*
|
||
|
****************************************************************/
|
||
|
|
||
|
static void SYSTEMERROR (int errorNumber)
|
||
|
|
||
|
{
|
||
|
printf ("Run-time error detected. error number = %d\n", errorNumber);
|
||
|
}
|
||
|
|
||
|
|
||
|
/****************************************************************
|
||
|
*
|
||
|
* Main program starts here
|
||
|
*
|
||
|
****************************************************************/
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
DoIt();
|
||
|
SystemErrorLocation();
|
||
|
}
|