This commit was generated by cvs2svn to track changes on a CVS vendor
[unix-history] / lib / libF77 / main.c
CommitLineData
547779a8
WH
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
14extern "C" {
15#endif
16
17#ifdef NO__STDC
18#define ONEXIT onexit
19extern void f_exit();
20#else
21#ifndef KR_headers
22extern void f_exit(void);
23#ifndef NO_ONEXIT
24#define ONEXIT atexit
25extern int atexit(void (*)(void));
26#endif
27#else
28#ifndef NO_ONEXIT
29#define ONEXIT onexit
30extern void f_exit();
31#endif
32#endif
33#endif
34
35#ifdef KR_headers
36extern void f_init(), sig_die();
37extern int MAIN__();
38#define Int /* int */
39#else
40extern void f_init(void), sig_die(char*, int);
41extern int MAIN__(void);
42#define Int int
43#endif
44
45static void sigfdie(Int n)
46{
47sig_die("Floating Exception", 1);
48}
49
50
51static void sigidie(Int n)
52{
53sig_die("IOT Trap", 1);
54}
55
56#ifdef SIGQUIT
57static void sigqdie(Int n)
58{
59sig_die("Quit signal", 1);
60}
61#endif
62
63
64static void sigindie(Int n)
65{
66sig_die("Interrupt", 0);
67}
68
69static void sigtdie(Int n)
70{
71sig_die("Killed", 0);
72}
73
74#ifdef SIGTRAP
75static void sigtrdie(Int n)
76{
77sig_die("Trace trap", 1);
78}
79#endif
80
81
82int xargc;
83char **xargv;
84
85#ifdef KR_headers
86main(argc, argv) int argc; char **argv;
87#else
88main(int argc, char **argv)
89#endif
90{
91xargc = argc;
92xargv = argv;
93signal(SIGFPE, sigfdie); /* ignore underflow, enable overflow */
94signal(SIGIOT, sigidie);
95#ifdef SIGTRAP
96signal(SIGTRAP, sigtrdie);
97#endif
98#ifdef SIGQUIT
99if(signal(SIGQUIT,sigqdie) == SIG_IGN)
100 signal(SIGQUIT, SIG_IGN);
101#endif
102if(signal(SIGINT, sigindie) == SIG_IGN)
103 signal(SIGINT, SIG_IGN);
104signal(SIGTERM,sigtdie);
105
106#ifdef pdp11
107 ldfps(01200); /* detect overflow as an exception */
108#endif
109
110f_init();
111#ifndef NO_ONEXIT
112ONEXIT(f_exit);
113#endif
114MAIN__();
115#ifdef NO_ONEXIT
116f_exit();
117#endif
118exit(0); /* exit(0) rather than return(0) to bypass Cray bug */
119return 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