1*4130Sdlw /* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */ 2*4130Sdlw 3*4130Sdlw #include <stdio.h> 4*4130Sdlw #include <signal.h> 5*4130Sdlw 6*4130Sdlw int xargc; 7*4130Sdlw char **xargv; 8*4130Sdlw 9*4130Sdlw main(argc, argv, arge) 10*4130Sdlw int argc; 11*4130Sdlw char **argv; 12*4130Sdlw char **arge; 13*4130Sdlw { 14*4130Sdlw int sigfdie(), sigidie(), sigqdie(), sigindie(), sigtdie(); 15*4130Sdlw long int (*sigf)(); 16*4130Sdlw 17*4130Sdlw xargc = argc; 18*4130Sdlw xargv = argv; 19*4130Sdlw signal(SIGFPE, sigfdie); /* ignore underflow, enable overflow */ 20*4130Sdlw signal(SIGIOT, sigidie); 21*4130Sdlw if(sigf=signal(SIGQUIT, sigqdie) != SIG_DFL) signal(SIGQUIT, sigf); 22*4130Sdlw if(sigf=signal(SIGINT, sigindie) != SIG_DFL) signal(SIGINT, sigf); 23*4130Sdlw if(sigf=signal(SIGTERM, sigtdie) != SIG_DFL) signal(SIGTERM, sigf); 24*4130Sdlw 25*4130Sdlw #ifdef pdp11 26*4130Sdlw ldfps(01200); /* detect overflow as an exception */ 27*4130Sdlw #endif 28*4130Sdlw 29*4130Sdlw f_init(); 30*4130Sdlw MAIN__(); 31*4130Sdlw f_exit(); 32*4130Sdlw } 33*4130Sdlw 34*4130Sdlw 35*4130Sdlw static sigfdie() 36*4130Sdlw { 37*4130Sdlw sigdie("Floating Exception", 1); 38*4130Sdlw } 39*4130Sdlw 40*4130Sdlw 41*4130Sdlw 42*4130Sdlw static sigidie() 43*4130Sdlw { 44*4130Sdlw sigdie("IOT Trap", 1); 45*4130Sdlw } 46*4130Sdlw 47*4130Sdlw 48*4130Sdlw static sigqdie() 49*4130Sdlw { 50*4130Sdlw sigdie("Quit signal", 1); 51*4130Sdlw } 52*4130Sdlw 53*4130Sdlw 54*4130Sdlw 55*4130Sdlw static sigindie() 56*4130Sdlw { 57*4130Sdlw sigdie("Interrupt!", 0); 58*4130Sdlw } 59*4130Sdlw 60*4130Sdlw 61*4130Sdlw 62*4130Sdlw static sigtdie() 63*4130Sdlw { 64*4130Sdlw sigdie("Killed", 0); 65*4130Sdlw } 66*4130Sdlw 67*4130Sdlw 68*4130Sdlw 69*4130Sdlw static sigdie(s, kill) 70*4130Sdlw register char *s; 71*4130Sdlw int kill; 72*4130Sdlw { 73*4130Sdlw /* print error message, then clear buffers */ 74*4130Sdlw fprintf(stderr, "%s\n", s); 75*4130Sdlw f_exit(); 76*4130Sdlw _cleanup(); 77*4130Sdlw 78*4130Sdlw if(kill) 79*4130Sdlw { 80*4130Sdlw /* now get a core */ 81*4130Sdlw signal(SIGIOT, 0); 82*4130Sdlw abort(); 83*4130Sdlw } 84*4130Sdlw else 85*4130Sdlw exit(1); 86*4130Sdlw } 87