diff options
author | Jason Downs <downsj@cvs.openbsd.org> | 1996-07-27 02:52:39 +0000 |
---|---|---|
committer | Jason Downs <downsj@cvs.openbsd.org> | 1996-07-27 02:52:39 +0000 |
commit | 978f1b8e18efed5647513070f53f269049feb83c (patch) | |
tree | ce00da25c18405cf3e6847ad3d72d14d363e98b9 /gnu/usr.bin/gcc/f/runtime/libF77/main.c | |
parent | e2ce9843b6a157aadf0700edefbe6d916cb98c57 (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.c | 134 |
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 |