1*5673Smckusick /* Copyright (c) 1982 Regents of the University of California */
2*5673Smckusick 
3*5673Smckusick static char sccsid[] = "@(#)EXCEPT.c 1.1 02/02/82";
4*5673Smckusick 
5*5673Smckusick #include	<signal.h>
6*5673Smckusick #include	"whoami.h"
7*5673Smckusick 
8*5673Smckusick /*
9*5673Smckusick  * catch runtime arithmetic errors
10*5673Smckusick  */
11*5673Smckusick EXCEPT(signum, type)
12*5673Smckusick 	int signum, type;
13*5673Smckusick {
14*5673Smckusick 	signal(SIGFPE, EXCEPT);
15*5673Smckusick #ifndef VAX
16*5673Smckusick 	ERROR("Overflow, underflow, or division by zero in arithmetic operation\n");
17*5673Smckusick #else
18*5673Smckusick 	switch (type) {
19*5673Smckusick 	case 1:
20*5673Smckusick 		ERROR("Integer overflow\n");
21*5673Smckusick 	case 2:
22*5673Smckusick 		ERROR("Integer division by zero\n");
23*5673Smckusick 	case 3:
24*5673Smckusick 		ERROR("Real overflow\n");
25*5673Smckusick 	case 4:
26*5673Smckusick 		ERROR("Real division by zero\n");
27*5673Smckusick 	case 5:
28*5673Smckusick 		ERROR("Real underflow\n");
29*5673Smckusick 	default:
30*5673Smckusick 		ERROR("Panic: Computational error in interpreter\n");
31*5673Smckusick 	}
32*5673Smckusick #endif
33*5673Smckusick }
34