summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/gcc/f/runtime/libF77/main.c
diff options
context:
space:
mode:
authorJason Downs <downsj@cvs.openbsd.org>1996-07-27 02:52:39 +0000
committerJason Downs <downsj@cvs.openbsd.org>1996-07-27 02:52:39 +0000
commit978f1b8e18efed5647513070f53f269049feb83c (patch)
treece00da25c18405cf3e6847ad3d72d14d363e98b9 /gnu/usr.bin/gcc/f/runtime/libF77/main.c
parente2ce9843b6a157aadf0700edefbe6d916cb98c57 (diff)
Initial integration of G77.
Please do a make cleandir before rebuilding gcc!
Diffstat (limited to 'gnu/usr.bin/gcc/f/runtime/libF77/main.c')
-rw-r--r--gnu/usr.bin/gcc/f/runtime/libF77/main.c134
1 files changed, 134 insertions, 0 deletions
diff --git a/gnu/usr.bin/gcc/f/runtime/libF77/main.c b/gnu/usr.bin/gcc/f/runtime/libF77/main.c
new file mode 100644
index 00000000000..79f19435a08
--- /dev/null
+++ b/gnu/usr.bin/gcc/f/runtime/libF77/main.c
@@ -0,0 +1,134 @@
+/* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
+
+#include "stdio.h"
+#include "signal.h"
+
+#ifndef SIGIOT
+#ifdef SIGABRT
+#define SIGIOT SIGABRT
+#endif
+#endif
+
+#ifndef KR_headers
+#undef VOID
+#include "stdlib.h"
+#endif
+
+#ifndef VOID
+#define VOID void
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef NO__STDC
+#define ONEXIT onexit
+extern VOID f_exit();
+#else
+#ifndef KR_headers
+extern void f_exit(void);
+#ifndef NO_ONEXIT
+#define ONEXIT atexit
+extern int atexit(void (*)(void));
+#endif
+#else
+#ifndef NO_ONEXIT
+#define ONEXIT onexit
+extern VOID f_exit();
+#endif
+#endif
+#endif
+
+#ifdef KR_headers
+extern VOID f_init(), sig_die();
+extern int MAIN__();
+#define Int /* int */
+#else
+extern void f_init(void), sig_die(char*, int);
+extern int MAIN__(void);
+#define Int int
+#endif
+
+static VOID sigfdie(Int n)
+{
+sig_die("Floating Exception", 1);
+}
+
+
+static VOID sigidie(Int n)
+{
+sig_die("IOT Trap", 1);
+}
+
+#ifdef SIGQUIT
+static VOID sigqdie(Int n)
+{
+sig_die("Quit signal", 1);
+}
+#endif
+
+
+static VOID sigindie(Int n)
+{
+sig_die("Interrupt", 0);
+}
+
+static VOID sigtdie(Int n)
+{
+sig_die("Killed", 0);
+}
+
+#ifdef SIGTRAP
+static VOID sigtrdie(Int n)
+{
+sig_die("Trace trap", 1);
+}
+#endif
+
+
+int xargc;
+char **xargv;
+
+#ifdef KR_headers
+main(argc, argv) int argc; char **argv;
+#else
+main(int argc, char **argv)
+#endif
+{
+xargc = argc;
+xargv = argv;
+signal(SIGFPE, sigfdie); /* ignore underflow, enable overflow */
+#ifdef SIGIOT
+signal(SIGIOT, sigidie);
+#endif
+#ifdef SIGTRAP
+signal(SIGTRAP, sigtrdie);
+#endif
+#ifdef SIGQUIT
+if(signal(SIGQUIT,sigqdie) == SIG_IGN)
+ signal(SIGQUIT, SIG_IGN);
+#endif
+if(signal(SIGINT, sigindie) == SIG_IGN)
+ signal(SIGINT, SIG_IGN);
+signal(SIGTERM,sigtdie);
+
+#ifdef pdp11
+ ldfps(01200); /* detect overflow as an exception */
+#endif
+
+f_init();
+#ifndef NO_ONEXIT
+ONEXIT(f_exit);
+#endif
+MAIN__();
+#ifdef NO_ONEXIT
+f_exit();
+#endif
+exit(0); /* exit(0) rather than return(0) to bypass Cray bug */
+return 0; /* For compilers that complain of missing return values; */
+ /* others will complain that this is unreachable code. */
+}
+#ifdef __cplusplus
+ }
+#endif