Pristine Ack-5.5
[Ack-5.5.git] / lang / fortran / lib / libF77 / main.c
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 #ifdef NO__STDC
11 #define ONEXIT onexit
12 extern void f_exit();
13 #else
14 #ifdef __STDC__
15 #include "stdlib.h"
16 extern void f_exit(void);
17 #ifndef NO_ONEXIT
18 #define ONEXIT atexit
19 extern int atexit(void (*)(void));
20 #endif
21 #else
22 #ifndef NO_ONEXIT
23 #define ONEXIT onexit
24 extern void f_exit();
25 #endif
26 #endif
27 #endif
28
29 extern void sig_die();
30
31 static void sigfdie(n)
32 {
33 sig_die("Floating Exception", 1);
34 }
35
36
37 static void sigidie(n)
38 {
39 sig_die("IOT Trap", 1);
40 }
41
42 #ifdef SIGQUIT
43 static void sigqdie(n)
44 {
45 sig_die("Quit signal", 1);
46 }
47 #endif
48
49
50 static void sigindie(n)
51 {
52 sig_die("Interrupt", 0);
53 }
54
55
56
57 static void sigtdie(n)
58 {
59 sig_die("Killed", 0);
60 }
61
62
63 int xargc;
64 char **xargv;
65
66 main(argc, argv)
67 int argc;
68 char **argv;
69 {
70 xargc = argc;
71 xargv = argv;
72 signal(SIGFPE, sigfdie);        /* ignore underflow, enable overflow */
73 signal(SIGIOT, sigidie);
74 #ifdef SIGQUIT
75 if(signal(SIGQUIT,sigqdie) == SIG_IGN)
76         signal(SIGQUIT, SIG_IGN);
77 #endif
78 if(signal(SIGINT, sigindie) == SIG_IGN)
79         signal(SIGINT, SIG_IGN);
80 signal(SIGTERM,sigtdie);
81
82 #ifdef pdp11
83         ldfps(01200); /* detect overflow as an exception */
84 #endif
85
86 f_init();
87 #ifndef NO_ONEXIT
88 ONEXIT(f_exit);
89 #endif
90 MAIN__();
91 #ifdef NO_ONEXIT
92 f_exit();
93 #endif
94 exit(0);        /* exit(0) rather than return(0) to bypass Cray bug */
95 }