|
|
1.1 ! root 1: /*- ! 2: * Copyright (c) 1982 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that: (1) source distributions retain this entire copyright ! 7: * notice and comment, and (2) distributions including binaries display ! 8: * the following acknowledgement: ``This product includes software ! 9: * developed by the University of California, Berkeley and its contributors'' ! 10: * in the documentation or other materials provided with the distribution ! 11: * and in all advertising materials mentioning features or use of this ! 12: * software. Neither the name of the University nor the names of its ! 13: * contributors may be used to endorse or promote products derived ! 14: * from this software without specific prior written permission. ! 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 18: */ ! 19: ! 20: #ifndef lint ! 21: static char sccsid[] = "@(#)EXCEPT.c 1.5 (Berkeley) 4/9/90"; ! 22: #endif /* not lint */ ! 23: ! 24: #include <signal.h> ! 25: ! 26: /* ! 27: * catch runtime arithmetic errors ! 28: */ ! 29: EXCEPT(signum, type) ! 30: int signum, type; ! 31: { ! 32: signal(SIGFPE, EXCEPT); ! 33: #ifndef vax ! 34: ERROR("Overflow, underflow, or division by zero in arithmetic operation\n"); ! 35: return; ! 36: #endif notvax ! 37: #ifdef vax ! 38: /* ! 39: * The values for this switch statement come from page 12-5 of ! 40: * Volume 1 of the 1978 VAX 11/780 Architecture Handbook ! 41: */ ! 42: switch (type) { ! 43: case FPE_INTOVF_TRAP: ! 44: ERROR("Integer overflow\n"); ! 45: return; ! 46: case FPE_INTDIV_TRAP: ! 47: ERROR("Integer division by zero\n"); ! 48: return; ! 49: case FPE_FLTOVF_TRAP: ! 50: case FPE_FLTOVF_FAULT: ! 51: ERROR("Real overflow\n"); ! 52: return; ! 53: case FPE_FLTDIV_TRAP: ! 54: case FPE_FLTDIV_FAULT: ! 55: ERROR("Real division by zero\n"); ! 56: return; ! 57: case FPE_FLTUND_TRAP: ! 58: case FPE_FLTUND_FAULT: ! 59: ERROR("Real underflow\n"); ! 60: return; ! 61: case FPE_DECOVF_TRAP: ! 62: case FPE_SUBRNG_TRAP: ! 63: default: ! 64: ERROR("Undefined arithmetic exception type (%d)\n", type); ! 65: return; ! 66: } ! 67: #endif vax ! 68: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.