/*                                                       fortentry6.c      */
/* 16/05/88 - Changed fortran entry point to _MAIN_ to be compatible       */
/*            with dbx and f77 (sl).                                       */
#include <signal.h>


    /*******  IMP RUNBASE ( mark 5 ) *******/

     /* Conforms to Convention to access */
     /*   the arguments and environment  */


    /*******  IMP RUNBASE ( mark 4 ) *******/

      /* This version calls MAIN__ rather */
      /* than MAIN.                       */


    /*******  IMP RUNBASE ( mark 3 ) *******/

      /*Routine COREDUMP has been moved has*/
      /*   been moved into NDIAG6, because */
      /*   of problems when an IMP/Fortran */
      /*   procedure is linked in with a C */
      /*   main program.                   */


    /*******  IMP RUNBASE ( mark 2 ) *******/

     /* This version is designed for Perq3 */
     /*   in that On Bound is PNX specific */
     /*   and all signal are trapped by    */
     /*   one routine (in Ndiag)           */


    /*******  IMP RUNBASE ( mark 1 ) *******/

     /* This is more general version and   */
     /*   is to be found in IMPENTRY1.C    */


extern int MAIN__();   /* used to be s_go */
extern void _exit(int i);
extern void f_onsignal(int info);


int    xargc;    /* fort progs access from GETARG */
char **xargv;

int main(int   argc, char  **argv, char  **arge) { /* command arguments */
    /* Set traps to take interrupts to IMP diagnostics */

    if (signal(SIGFPE,  SIG_IGN) != SIG_IGN) signal(SIGFPE,  f_onsignal);
    if (signal(SIGILL,  SIG_IGN) != SIG_IGN) signal(SIGILL,  f_onsignal);
#ifndef __POSIX__
    if (signal(SIGEMT,  SIG_IGN) != SIG_IGN) signal(SIGEMT,  f_onsignal);
#endif
    if (signal(SIGSEGV, SIG_IGN) != SIG_IGN) signal(SIGSEGV, f_onsignal);
    if (signal(SIGIOT,  SIG_IGN) != SIG_IGN) signal(SIGIOT,  f_onsignal);
    if (signal(SIGQUIT, SIG_IGN) != SIG_IGN) signal(SIGQUIT, f_onsignal);
    if (signal(SIGBUS,  SIG_IGN) != SIG_IGN) signal(SIGBUS,  f_onsignal);
    if (signal(SIGTRAP, SIG_IGN) != SIG_IGN) signal(SIGTRAP, f_onsignal);

    xargc =  argc;
    xargv =  argv;

    MAIN__(argc,argv,arge); /* call Imp main program (S#GO) */
    /* The parameters are ignored by true IMP main programs */
    _exit(0);    /* crashes system to just return from here */
    return(1);   /* Keep the compiler happy */
}
