xref: /original-bsd/usr.bin/pascal/libpc/EXCEPT.c (revision 92d3de31)
1 /* Copyright (c) 1982 Regents of the University of California */
2 
3 static char sccsid[] = "@(#)EXCEPT.c 1.3 01/10/83";
4 
5 #include	<signal.h>
6 
7 /*
8  * catch runtime arithmetic errors
9  */
10 EXCEPT(signum, type)
11 	int signum, type;
12 {
13 	signal(SIGFPE, EXCEPT);
14 #ifndef vax
15 	ERROR("Overflow, underflow, or division by zero in arithmetic operation\n");
16 	return;
17 #endif notvax
18 #ifdef vax
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 	 */
23 	switch (type) {
24 	case 1:
25 		ERROR("Integer overflow\n");
26 		return;
27 	case 2:
28 		ERROR("Integer division by zero\n");
29 		return;
30 	case 3:
31 		ERROR("Real overflow\n");
32 		return;
33 	case 4:
34 		ERROR("Real division by zero\n");
35 		return;
36 	case 5:
37 		ERROR("Real underflow\n");
38 		return;
39 	default:
40 		ERROR("Panic: Computational error in interpreter\n");
41 		return;
42 	}
43 #endif vax
44 }
45