xref: /original-bsd/usr.bin/f77/libF77/traper_.c (revision fbed46ce)
1 /*
2 char id_traper[] = "@(#)traper_.c	1.1";
3  * Arrange to trap integer overflow & floating underflow.
4  * Full of Magic! DON'T CHANGE ANYTHING !!
5  *
6  * To use from f77:
7  *	integer oldmsk, traper
8  *	oldmsk = traper (mask)
9  * where:
10  *	mask = 1 to trap integer overflow
11  *	mask = 2 to trap floating underflow
12  *	mask = 3 to trap both
13  *	These 2 bits will be set into the PSW.
14  *	The old state will be returned.
15  */
16 
17 long traper_(msk)
18 long	*msk;
19 {
20 	int	old = 0;
21 #if	vax
22 #define IOV_MASK	0140
23 	int	**s = &msk;
24 	int	psw;
25 
26 	s -= 5;
27 	psw = (int)*s;
28 	old = (psw & IOV_MASK) >> 5;
29 	psw = (psw & ~IOV_MASK) | ((*msk << 5) & IOV_MASK);
30 	*s = (int *)psw;
31 #endif	vax
32 	return((long)old);
33 }
34