diff options
author | ljo <ljo@FreeBSD.org> | 1994-10-26 18:17:41 +0000 |
---|---|---|
committer | ljo <ljo@FreeBSD.org> | 1994-10-26 18:17:41 +0000 |
commit | 2195d627fb793fec6c00bdddf1c4d46982b9f27f (patch) | |
tree | c2961f38c1507b80baefaca1d568747c113f28c0 /lib/libF77/main.c | |
parent | 80b2e1963004e4ae0173b4f9bc965518ba81d3b0 (diff) | |
download | FreeBSD-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.c | 128 |
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 |