told it to use STDIO in CFLAGS for fast tag searching
[unix-history] / usr / src / usr.bin / f77 / libF77 / main.c
CommitLineData
dd27c76e 1/* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
d2397273 2char id_libF77[] = "@(#)main.c 2.2";
dd27c76e
DW
3
4#include <stdio.h>
5#include <signal.h>
d2397273 6#include "../libI77/fiodefs.h"
dd27c76e
DW
7
8int xargc;
9char **xargv;
10
11main(argc, argv, arge)
12int argc;
13char **argv;
14char **arge;
15{
16int sigfdie(), sigidie(), sigqdie(), sigindie(), sigtdie();
d2397273 17int sigildie(), sigedie(), sigbdie(), sigsdie();
dd27c76e
DW
18long int (*sigf)();
19
20xargc = argc;
21xargv = argv;
22signal(SIGFPE, sigfdie); /* ignore underflow, enable overflow */
23signal(SIGIOT, sigidie);
24if(sigf=signal(SIGQUIT, sigqdie) != SIG_DFL) signal(SIGQUIT, sigf);
25if(sigf=signal(SIGINT, sigindie) != SIG_DFL) signal(SIGINT, sigf);
26if(sigf=signal(SIGTERM, sigtdie) != SIG_DFL) signal(SIGTERM, sigf);
d2397273
DW
27if(sigf=signal(SIGILL, sigildie) != SIG_DFL) signal(SIGILL, sigf);
28if(sigf=signal(SIGEMT, sigedie) != SIG_DFL) signal(SIGEMT, sigf);
29if(sigf=signal(SIGBUS, sigbdie) != SIG_DFL) signal(SIGBUS, sigf);
30if(sigf=signal(SIGSEGV, sigsdie) != SIG_DFL) signal(SIGSEGV, sigf);
dd27c76e
DW
31
32#ifdef pdp11
33 ldfps(01200); /* detect overflow as an exception */
34#endif
35
36f_init();
37MAIN__();
38f_exit();
39}
40
41
42static sigfdie()
43{
44sigdie("Floating Exception", 1);
45}
46
47
dd27c76e
DW
48static sigidie()
49{
50sigdie("IOT Trap", 1);
51}
52
53
54static sigqdie()
55{
56sigdie("Quit signal", 1);
57}
58
59
dd27c76e
DW
60static sigindie()
61{
62sigdie("Interrupt!", 0);
63}
64
65
dd27c76e
DW
66static sigtdie()
67{
68sigdie("Killed", 0);
69}
70
71
d2397273
DW
72static sigildie()
73{
74sigdie("Illegal instruction", 1);
75}
76
77
78static sigedie()
79{
80sigdie("EMT trap", 1);
81}
82
83
84static sigbdie()
85{
86sigdie("Bus error", 1);
87}
88
89
90static sigsdie()
91{
92sigdie("Segmentation violation", 1);
93}
94
dd27c76e 95
d2397273 96static sigdie(s, core)
dd27c76e 97register char *s;
d2397273 98int core;
dd27c76e 99{
d2397273
DW
100extern unit units[];
101/* clear buffers, then print error message */
dd27c76e 102f_exit();
d2397273 103fprintf(units[STDERR].ufd, "%s\n", s);
dd27c76e
DW
104_cleanup();
105
d2397273 106if(core)
dd27c76e
DW
107 {
108 /* now get a core */
109 signal(SIGIOT, 0);
110 abort();
111 }
112else
113 exit(1);
114}