Platform | Win32 |
Purpose |
Install a user defined exception handler (Win32 only). |
Syntax |
INTEGER (KIND=3) FUNCTION TRAP_EXCEPTION@(EXCEPTION,
ROUTINE) |
Description |
The subroutine ROUTINE is installed as the default method of handling the event specified by EXCEPTION. |
Return value |
If EXCEPTION is a valid exception event, the location of the previous handler is returned. 0 is returned if EXCEPTION is an invalid exception code. |
The values of EXCEPTION are as follows:
Event |
Parameter name |
Value |
Access violation |
ACCESS_VIOLATION |
0 |
Invalid floating point operation |
FLT_INVALID_OPERATION |
1 |
Denormal floating point operand |
FLT_DENORMAL |
2 |
Floating point divide by zero |
FLT_DIV_ZERO |
3 |
Floating point overflow |
FLT_OVERFLOW |
4 |
Floating point underflow |
FLT_UNDERFLOW |
5 |
Inexact floating point result |
FLT_INEXACT_RESULT |
6 |
Floating point stack overflow |
FLT_STACK_FAULT |
7 |
Breakpoint |
BREAK_POINT |
9 |
Single step |
SINGLE_STEP |
10 |
Execution of a privileged instruction |
PRIV_INSTRUCTION |
11 |
All exceptions |
ALL_EXCEPTIONS |
12 |
All floating point exceptions |
ALL_FLOATING_POINT |
13 |
Integer divide by zero |
INT_DIVIDEBY_ZERO |
14 |
Down to page reserve |
DOWNTO_PAGE_RESERVE |
16 |
Values returned by ROUTINE:
Instruction to event handler |
Parameter name |
Value |
Exception has been handled so continue execution. |
CONTINUE_EXECUTION |
0 |
The problem has not been fixed so the system should try to handle this event. |
EXCEPTION_UNHANDLED |
1 |
Unable to continue after handling this exception so exit from the program. |
NONCONTINUABLE_EXCEPTION |
-2 |
Notes |
Unless assembler coding is used, ROUTINE should normally return the value NONCONTINUABLE_EXCEPTION. One exception to this rule is floating point underflow for which one can return EXCEPTION_UNHANDLED and then continue. Integer overflow does not generate an exception unless in /DEBUG mode. In /DEBUG mode the exception cannot be trapped. The above parameter names and values are listed in the file exceptn.ins. |
Example |
PROGRAM TrapException |
This example illustrates a case where it is not possible to continue executing the program after the event has been trapped. The best that one can do is to save program data and exit cleanly. |