home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / f2csrc.zip / f2csrc / libF77 / main.c < prev    next >
C/C++ Source or Header  |  1994-07-28  |  2KB  |  129 lines

  1. /* STARTUP PROCEDURE FOR UNIX FORTRAN PROGRAMS */
  2.  
  3. #include "stdio.h"
  4. #include "signal.h"
  5.  
  6. #ifndef SIGIOT
  7. #ifdef SIGABRT
  8. #define SIGIOT SIGABRT
  9. #endif
  10. #endif
  11.  
  12. #ifndef KR_headers
  13. #include "stdlib.h"
  14. #endif
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18.  
  19. #ifdef NO__STDC
  20. #define ONEXIT onexit
  21. extern void f_exit();
  22. #else
  23. #ifndef KR_headers
  24. extern void f_exit(void);
  25. #ifndef NO_ONEXIT
  26. #define ONEXIT atexit
  27. extern int atexit(void (*)(void));
  28. #endif
  29. #else
  30. #ifndef NO_ONEXIT
  31. #define ONEXIT onexit
  32. extern void f_exit();
  33. #endif
  34. #endif
  35. #endif
  36.  
  37. #ifdef KR_headers
  38. extern void f_init(), sig_die();
  39. extern int MAIN__();
  40. #define Int /* int */
  41. #else
  42. extern void f_init(void), sig_die(char*, int);
  43. extern int MAIN__(void);
  44. #define Int int
  45. #endif
  46.  
  47. static void sigfdie(Int n)
  48. {
  49. sig_die("Floating Exception", 1);
  50. }
  51.  
  52.  
  53. static void sigidie(Int n)
  54. {
  55. sig_die("IOT Trap", 1);
  56. }
  57.  
  58. #ifdef SIGQUIT
  59. static void sigqdie(Int n)
  60. {
  61. sig_die("Quit signal", 1);
  62. }
  63. #endif
  64.  
  65.  
  66. static void sigindie(Int n)
  67. {
  68. sig_die("Interrupt", 0);
  69. }
  70.  
  71. static void sigtdie(Int n)
  72. {
  73. sig_die("Killed", 0);
  74. }
  75.  
  76. #ifdef SIGTRAP
  77. static void sigtrdie(Int n)
  78. {
  79. sig_die("Trace trap", 1);
  80. }
  81. #endif
  82.  
  83.  
  84. int xargc;
  85. char **xargv;
  86.  
  87. #ifdef KR_headers
  88. main(argc, argv) int argc; char **argv;
  89. #else
  90. main(int argc, char **argv)
  91. #endif
  92. {
  93. xargc = argc;
  94. xargv = argv;
  95. signal(SIGFPE, sigfdie);    /* ignore underflow, enable overflow */
  96. #ifdef SIGIOT
  97. signal(SIGIOT, sigidie);
  98. #endif
  99. #ifdef SIGTRAP
  100. signal(SIGTRAP, sigtrdie);
  101. #endif
  102. #ifdef SIGQUIT
  103. if(signal(SIGQUIT,sigqdie) == SIG_IGN)
  104.     signal(SIGQUIT, SIG_IGN);
  105. #endif
  106. if(signal(SIGINT, sigindie) == SIG_IGN)
  107.     signal(SIGINT, SIG_IGN);
  108. signal(SIGTERM,sigtdie);
  109.  
  110. #ifdef pdp11
  111.     ldfps(01200); /* detect overflow as an exception */
  112. #endif
  113.  
  114. f_init();
  115. #ifndef NO_ONEXIT
  116. ONEXIT(f_exit);
  117. #endif
  118. MAIN__();
  119. #ifdef NO_ONEXIT
  120. f_exit();
  121. #endif
  122. exit(0);    /* exit(0) rather than return(0) to bypass Cray bug */
  123. return 0;    /* For compilers that complain of missing return values; */
  124.         /* others will complain that this is unreachable code. */
  125. }
  126. #ifdef __cplusplus
  127.     }
  128. #endif
  129.