Commit | Line | Data |
---|---|---|
15eea6e6 BJ |
1 | /* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */ |
2 | ||
3 | #include <stdio.h> | |
4 | #include <signal.h> | |
5 | ||
6 | int xargc; | |
7 | char **xargv; | |
8 | ||
9 | main(argc, argv, arge) | |
10 | int argc; | |
11 | char **argv; | |
12 | char **arge; | |
13 | { | |
14 | int sigfdie(), sigidie(), sigqdie(), sigindie(), sigtdie(); | |
15 | ||
16 | xargc = argc; | |
17 | xargv = argv; | |
18 | signal(SIGFPE, sigfdie); /* ignore underflow, enable overflow */ | |
19 | signal(SIGIOT, sigidie); | |
20 | if( (int)signal(SIGQUIT,sigqdie) & 01) signal(SIGQUIT, SIG_IGN); | |
21 | if( (int)signal(SIGINT, sigindie) & 01) signal(SIGINT, SIG_IGN); | |
22 | signal(SIGTERM,sigtdie); | |
23 | ||
24 | #ifdef pdp11 | |
25 | ldfps(01200); /* detect overflow as an exception */ | |
26 | #endif | |
27 | ||
28 | f_init(); | |
29 | MAIN__(); | |
30 | f_exit(); | |
31 | } | |
32 | ||
33 | ||
34 | static sigfdie() | |
35 | { | |
36 | sigdie("Floating Exception", 1); | |
37 | } | |
38 | ||
39 | ||
40 | ||
41 | static sigidie() | |
42 | { | |
43 | sigdie("IOT Trap", 1); | |
44 | } | |
45 | ||
46 | ||
47 | static sigqdie() | |
48 | { | |
49 | sigdie("Quit signal", 1); | |
50 | } | |
51 | ||
52 | ||
53 | ||
54 | static sigindie() | |
55 | { | |
56 | sigdie("Interrupt", 0); | |
57 | } | |
58 | ||
59 | ||
60 | ||
61 | static sigtdie() | |
62 | { | |
63 | sigdie("Killed", 0); | |
64 | } | |
65 | ||
66 | ||
67 | ||
68 | static sigdie(s, kill) | |
69 | register char *s; | |
70 | int kill; | |
71 | { | |
72 | /* print error message, then clear buffers */ | |
73 | fflush(stderr); | |
74 | fprintf(stderr, "%s\n", s); | |
75 | f_exit(); | |
76 | fflush(stderr); | |
77 | ||
78 | if(kill) | |
79 | { | |
80 | /* now get a core */ | |
81 | signal(SIGIOT, 0); | |
82 | abort(); | |
83 | } | |
84 | else | |
85 | exit(1); | |
86 | } |