1 /* Copyright (c) 1982 Regents of the University of California */ 2 3 static char sccsid[] = "@(#)EXCEPT.c 1.4 10/01/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 FPE_INTOVF_TRAP: 25 ERROR("Integer overflow\n"); 26 return; 27 case FPE_INTDIV_TRAP: 28 ERROR("Integer division by zero\n"); 29 return; 30 case FPE_FLTOVF_TRAP: 31 case FPE_FLTOVF_FAULT: 32 ERROR("Real overflow\n"); 33 return; 34 case FPE_FLTDIV_TRAP: 35 case FPE_FLTDIV_FAULT: 36 ERROR("Real division by zero\n"); 37 return; 38 case FPE_FLTUND_TRAP: 39 case FPE_FLTUND_FAULT: 40 ERROR("Real underflow\n"); 41 return; 42 case FPE_DECOVF_TRAP: 43 case FPE_SUBRNG_TRAP: 44 default: 45 ERROR("Undefined arithmetic exception type (%d)\n", type); 46 return; 47 } 48 #endif vax 49 } 50