summaryrefslogtreecommitdiffstats
path: root/lib/libF77/main.c
diff options
context:
space:
mode:
authorljo <ljo@FreeBSD.org>1994-10-26 18:17:41 +0000
committerljo <ljo@FreeBSD.org>1994-10-26 18:17:41 +0000
commit2195d627fb793fec6c00bdddf1c4d46982b9f27f (patch)
treec2961f38c1507b80baefaca1d568747c113f28c0 /lib/libF77/main.c
parent80b2e1963004e4ae0173b4f9bc965518ba81d3b0 (diff)
downloadFreeBSD-src-2195d627fb793fec6c00bdddf1c4d46982b9f27f.zip
FreeBSD-src-2195d627fb793fec6c00bdddf1c4d46982b9f27f.tar.gz
Library for f2c (part 2 of 2)
Obtained from: netlib.att.com
Diffstat (limited to 'lib/libF77/main.c')
-rw-r--r--lib/libF77/main.c128
1 files changed, 128 insertions, 0 deletions
diff --git a/lib/libF77/main.c b/lib/libF77/main.c
new file mode 100644
index 0000000..24c2f22
--- /dev/null
+++ b/lib/libF77/main.c
@@ -0,0 +1,128 @@
+/* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
+
+#include "stdio.h"
+#include "signal.h"
+
+#ifndef SIGIOT
+#ifdef SIGABRT
+#define SIGIOT SIGABRT
+#endif
+#endif
+
+#ifndef KR_headers
+#include "stdlib.h"
+#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
OpenPOWER on IntegriCloud