|
|
1.1 root 1: /* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
2:
3: #include <stdio.h>
4: #include <signal.h>
5:
6: int xargc;
7: char **xargv;
8: int _sigfdie(), _sigidie(), _sigqdie(), _sigindie(), _sigtdie();
9:
10: main(argc, argv, arge)
11: int argc;
12: char **argv;
13: char **arge;
14: {
15:
16: xargc = argc;
17: xargv = argv;
18: signal(SIGFPE, _sigfdie); /* ignore underflow, enable overflow */
19: signal(SIGIOT, _sigidie);
20: if ((int)signal(SIGQUIT,_sigqdie) & 01)
21: signal(SIGQUIT, SIG_IGN);
22: if ((int)signal(SIGINT, _sigindie) & 01)
23: signal(SIGINT, SIG_IGN);
24: signal(SIGTERM,_sigtdie);
25:
26: #ifdef pdp11
27: ldfps(01200); /* detect overflow as an exception */
28: #endif
29: f_init();
30: MAIN__();
31: f_exit();
32: }
33:
34: #if vax || tahoe
35: static char *fpenames[] = {
36: "unknown floating exception",
37: "integer overflow",
38: "integer divide by zero",
39: "floating overflow",
40: "floating/decimal divide by zero",
41: "floating underflow",
42: "decimal overflow",
43: "subscript out of range",
44: "floating overflow",
45: "floating divide by zero",
46: "floating underflow"
47: };
48:
49: _sigfdie(sig, code)
50: int sig, code;
51: {
52: if (code < 0 || code >= sizeof fpenames/sizeof fpenames[0])
53: code = 0;
54: _sigdie(fpenames[code], 1);
55: }
56: #else
57: _sigfdie() { _sigdie("floating exception, 1); }
58: #endif
59:
60: _sigidie() { _sigdie("IOT Trap", 1); }
61: _sigqdie() { _sigdie("Quit signal", 1); }
62: _sigindie() { _sigdie("Interrupt", 0); }
63: _sigtdie() { _sigdie("Killed", 0); }
64:
65: _sigdie(s, kill)
66: register char *s;
67: int kill;
68: {
69:
70: /* print error message, then clear buffers */
71: fflush(stderr);
72: fprintf(stderr, "%s\n", s);
73: f_exit();
74: fflush(stderr);
75: if (kill) {
76: /* now get a core */
77: signal(SIGIOT, 0);
78: abort();
79: /*NOTREACHED*/
80: }
81: exit(1);
82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.