|
|
1.1 root 1: /* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
2:
3: #include "stdio.h"
4: #include "signal.h"
5:
6: #ifndef SIGIOT
7: #define SIGIOT SIGABRT
8: #endif
9:
10: #ifndef KR_headers
11: #include "stdlib.h"
12: #endif
13: #ifdef __cplusplus
14: extern "C" {
15: #endif
16:
17: #ifdef NO__STDC
18: #define ONEXIT onexit
19: extern void f_exit();
20: #else
21: #ifndef KR_headers
22: extern void f_exit(void);
23: #ifndef NO_ONEXIT
24: #define ONEXIT atexit
25: extern int atexit(void (*)(void));
26: #endif
27: #else
28: #ifndef NO_ONEXIT
29: #define ONEXIT onexit
30: extern void f_exit();
31: #endif
32: #endif
33: #endif
34:
35: #ifdef KR_headers
36: extern void f_init(), sig_die();
37: extern int MAIN__();
38: #define Int /* int */
39: #else
40: extern void f_init(void), sig_die(char*, int);
41: extern int MAIN__(void);
42: #define Int int
43: #endif
44:
45: static void sigfdie(Int n)
46: {
47: sig_die("Floating Exception", 1);
48: }
49:
50:
51: static void sigidie(Int n)
52: {
53: sig_die("IOT Trap", 1);
54: }
55:
56: #ifdef SIGQUIT
57: static void sigqdie(Int n)
58: {
59: sig_die("Quit signal", 1);
60: }
61: #endif
62:
63:
64: static void sigindie(Int n)
65: {
66: sig_die("Interrupt", 0);
67: }
68:
69: static void sigtdie(Int n)
70: {
71: sig_die("Killed", 0);
72: }
73:
74: #ifdef SIGTRAP
75: static void sigtrdie(Int n)
76: {
77: sig_die("Trace trap", 1);
78: }
79: #endif
80:
81:
82: int xargc;
83: char **xargv;
84:
85: #ifdef KR_headers
86: main(argc, argv) int argc; char **argv;
87: #else
88: main(int argc, char **argv)
89: #endif
90: {
91: xargc = argc;
92: xargv = argv;
93: signal(SIGFPE, sigfdie); /* ignore underflow, enable overflow */
94: signal(SIGIOT, sigidie);
95: #ifdef SIGTRAP
96: signal(SIGTRAP, sigtrdie);
97: #endif
98: #ifdef SIGQUIT
99: if(signal(SIGQUIT,sigqdie) == SIG_IGN)
100: signal(SIGQUIT, SIG_IGN);
101: #endif
102: if(signal(SIGINT, sigindie) == SIG_IGN)
103: signal(SIGINT, SIG_IGN);
104: signal(SIGTERM,sigtdie);
105:
106: #ifdef pdp11
107: ldfps(01200); /* detect overflow as an exception */
108: #endif
109:
110: f_init();
111: #ifndef NO_ONEXIT
112: ONEXIT(f_exit);
113: #endif
114: MAIN__();
115: #ifdef NO_ONEXIT
116: f_exit();
117: #endif
118: exit(0); /* exit(0) rather than return(0) to bypass Cray bug */
119: return 0; /* For compilers that complain of missing return values; */
120: /* others will complain that this is unreachable code. */
121: }
122: #ifdef __cplusplus
123: }
124: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.