Commit | Line | Data |
---|---|---|
2d8189f2 DW |
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 | } |