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