aboutsummaryrefslogtreecommitdiff
path: root/lib/libF77/s_paus.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libF77/s_paus.c')
-rw-r--r--lib/libF77/s_paus.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/libF77/s_paus.c b/lib/libF77/s_paus.c
new file mode 100644
index 000000000000..35107d880734
--- /dev/null
+++ b/lib/libF77/s_paus.c
@@ -0,0 +1,64 @@
+#include "stdio.h"
+#include "f2c.h"
+#define PAUSESIG 15
+
+#ifdef KR_headers
+#define Void /* void */
+#define Int /* int */
+#else
+#define Void void
+#define Int int
+#undef abs
+#include "stdlib.h"
+#include "signal.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int getpid(void), isatty(int), pause(void);
+#endif
+
+extern VOID f_exit(Void);
+
+static VOID waitpause(Int n)
+{
+return;
+}
+
+#ifdef KR_headers
+int s_paus(s, n) char *s; ftnlen n;
+#else
+int s_paus(char *s, ftnlen n)
+#endif
+{
+int i;
+
+fprintf(stderr, "PAUSE ");
+if(n > 0)
+ for(i = 0; i<n ; ++i)
+ putc(*s++, stderr);
+fprintf(stderr, " statement executed\n");
+if( isatty(fileno(stdin)) )
+ {
+ fprintf(stderr, "To resume execution, type go. Any other input will terminate job.\n");
+ fflush(stderr);
+ if( getchar()!='g' || getchar()!='o' || getchar()!='\n' )
+ {
+ fprintf(stderr, "STOP\n");
+ f_exit();
+ exit(0);
+ }
+ }
+else
+ {
+ fprintf(stderr, "To resume execution, execute a kill -%d %d command\n",
+ PAUSESIG, getpid() );
+ signal(PAUSESIG, waitpause);
+ fflush(stderr);
+ pause();
+ }
+fprintf(stderr, "Execution resumes after PAUSE.\n");
+#ifdef __cplusplus
+return 0; /* NOT REACHED */
+}
+#endif
+}