1 #include "stdlib.h"
2 /* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
3
4 #include "stdio.h"
5 #include "signal.h"
6
7 #ifndef SIGIOT
8 #ifdef SIGABRT
9 #define SIGIOT SIGABRT
10 #endif
11 #endif
12
13 #ifndef KR_headers
14 #undef VOID
15 #include "stdlib.h"
16 #endif
17
18 #ifndef VOID
19 #define VOID void
20 #endif
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 #ifdef NO__STDC
27 #define ONEXIT onexit
28 extern VOID f_exit();
29 #else
30 #ifndef KR_headers
31 extern void f_exit(void);
32 #ifndef NO_ONEXIT
33 #define ONEXIT atexit
34 extern int atexit(void (*)(void));
35 #endif
36 #else
37 #ifndef NO_ONEXIT
38 #define ONEXIT onexit
39 extern VOID f_exit();
40 #endif
41 #endif
42 #endif
43
44 #ifdef KR_headers
45 extern VOID f_init(), sig_die();
46 /* extern int MAIN__(); */
47 #define Int /* int */
48 #else
49 extern void f_init(void), sig_die(char*, int);
50 /* extern int MAIN__(void); */
51 #define Int int
52 #endif
53
sigfdie(Int n)54 static VOID sigfdie(Int n)
55 {
56 sig_die("Floating Exception", 1);
57 }
58
59
sigidie(Int n)60 static VOID sigidie(Int n)
61 {
62 sig_die("IOT Trap", 1);
63 }
64
65 #ifdef SIGQUIT
sigqdie(Int n)66 static VOID sigqdie(Int n)
67 {
68 sig_die("Quit signal", 1);
69 }
70 #endif
71
72
sigindie(Int n)73 static VOID sigindie(Int n)
74 {
75 sig_die("Interrupt", 0);
76 }
77
sigtdie(Int n)78 static VOID sigtdie(Int n)
79 {
80 sig_die("Killed", 0);
81 }
82
83 #ifdef SIGTRAP
sigtrdie(Int n)84 static VOID sigtrdie(Int n)
85 {
86 sig_die("Trace trap", 1);
87 }
88 #endif
89
90
91 int xargc;
92 char **xargv;
93
94 #if 0
95 /*No executable is built so no main function is needed. Other functions
96 defined in this file are required to build the library from this directory
97 though
98 */
99 #ifdef KR_headers
100 main(argc, argv) int argc; char **argv;
101 #else
102 main(int argc, char **argv)
103 #endif
104 {
105 xargc = argc;
106 xargv = argv;
107 signal(SIGFPE, sigfdie); /* ignore underflow, enable overflow */
108 #ifdef SIGIOT
109 signal(SIGIOT, sigidie);
110 #endif
111 #ifdef SIGTRAP
112 signal(SIGTRAP, sigtrdie);
113 #endif
114 #ifdef SIGQUIT
115 if(signal(SIGQUIT,sigqdie) == SIG_IGN)
116 signal(SIGQUIT, SIG_IGN);
117 #endif
118 if(signal(SIGINT, sigindie) == SIG_IGN)
119 signal(SIGINT, SIG_IGN);
120 signal(SIGTERM,sigtdie);
121
122 #ifdef pdp11
123 ldfps(01200); /* detect overflow as an exception */
124 #endif
125
126 f_init();
127 #ifndef NO_ONEXIT
128 ONEXIT(f_exit);
129 #endif
130 MAIN__();
131 #ifdef NO_ONEXIT
132 f_exit();
133 #endif
134 exit(0); /* exit(0) rather than return(0) to bypass Cray bug */
135 return 0; /* For compilers that complain of missing return values; */
136 /* others will complain that this is unreachable code. */
137 }
138 #endif
139
140 #ifdef __cplusplus
141 }
142 #endif
143