Commit | Line | Data |
---|---|---|
7fce2fad KM |
1 | /* Copyright (c) 1982 Regents of the University of California */ |
2 | ||
0cd5292b | 3 | static char sccsid[] = "@(#)EXCEPT.c 1.2 %G%"; |
7fce2fad KM |
4 | |
5 | #include <signal.h> | |
6 | #include "whoami.h" | |
7 | ||
8 | /* | |
9 | * catch runtime arithmetic errors | |
10 | */ | |
11 | EXCEPT(signum, type) | |
12 | int signum, type; | |
13 | { | |
14 | signal(SIGFPE, EXCEPT); | |
15 | #ifndef VAX | |
16 | ERROR("Overflow, underflow, or division by zero in arithmetic operation\n"); | |
0cd5292b | 17 | return; |
7fce2fad | 18 | #else |
0cd5292b KM |
19 | /* |
20 | * The values for this switch statement come from page 12-5 of | |
21 | * Volume 1 of the 1978 VAX 11/780 Architecture Handbook | |
22 | */ | |
7fce2fad KM |
23 | switch (type) { |
24 | case 1: | |
25 | ERROR("Integer overflow\n"); | |
0cd5292b | 26 | return; |
7fce2fad KM |
27 | case 2: |
28 | ERROR("Integer division by zero\n"); | |
0cd5292b | 29 | return; |
7fce2fad KM |
30 | case 3: |
31 | ERROR("Real overflow\n"); | |
0cd5292b | 32 | return; |
7fce2fad KM |
33 | case 4: |
34 | ERROR("Real division by zero\n"); | |
0cd5292b | 35 | return; |
7fce2fad KM |
36 | case 5: |
37 | ERROR("Real underflow\n"); | |
0cd5292b | 38 | return; |
7fce2fad KM |
39 | default: |
40 | ERROR("Panic: Computational error in interpreter\n"); | |
0cd5292b | 41 | return; |
7fce2fad KM |
42 | } |
43 | #endif | |
44 | } |