summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hl/test/ld_monitor.c60
-rw-r--r--src/H5private.h3
2 files changed, 51 insertions, 12 deletions
diff --git a/hl/test/ld_monitor.c b/hl/test/ld_monitor.c
index 7b90715..cc17b8c 100644
--- a/hl/test/ld_monitor.c
+++ b/hl/test/ld_monitor.c
@@ -4,6 +4,43 @@
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+
+static void set_mode(int want_key)
+{
+ static struct termios old_val, new_val;
+
+ if (!want_key) {
+ HDtcsetattr(STDIN_FILENO, TCSANOW, &old_val);
+ return;
+ }
+
+ HDtcgetattr(STDIN_FILENO, &old_val);
+ new_val = old_val;
+ new_val.c_lflag &= (tcflag_t)~(ICANON | ECHO);
+ HDtcsetattr(STDIN_FILENO, TCSANOW, &new_val);
+}
+
+static int get_key(void)
+{
+ int c = 0;
+ struct timeval tv;
+ fd_set fs;
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+
+ FD_ZERO(&fs);
+ FD_SET(STDIN_FILENO, &fs);
+ HDselect(STDIN_FILENO + 1, &fs, 0, 0, &tv);
+
+ if (FD_ISSET(STDIN_FILENO, &fs)) {
+ c = HDgetchar();
+ set_mode(0);
+ }
+ return c;
+}
#define TEST_BUF_SIZE 100
@@ -17,7 +54,7 @@
* retrieve the appended data and print them
*/
static int
-monitor_dset(const char *fname, char *dname)
+monitor_dset(const char *fname, const char *dname)
{
hid_t fid; /* dataset id */
hid_t did; /* dataset id */
@@ -56,6 +93,9 @@ monitor_dset(const char *fname, char *dname)
goto done;
}
+ /* Monitor for keypresses */
+ set_mode(1);
+
/* Monitor the dataset for changes */
while(1) {
@@ -102,11 +142,15 @@ monitor_dset(const char *fname, char *dname)
/* Flush the output to stdout */
HDfflush(stdout);
/* Update the dimension sizes */
- HDmemcpy(prev_dims, cur_dims, ndims * sizeof(hsize_t));
+ HDmemcpy(prev_dims, cur_dims, (size_t)ndims * sizeof(hsize_t));
}
/* Sleep before next monitor */
sleep(1);
+
+ /* Check for keypress */
+ if(get_key())
+ break;
} /* end while */
done:
@@ -123,26 +167,18 @@ done:
int
main(int argc, const char *argv[])
{
- char *dname = NULL; /* dataset name */
- char *fname = NULL; /* file name */
-
if(argc != 3) {
HDfprintf(stderr, "Should have file name and dataset name to be monitored...\n");
goto done;
}
- /* Get the file name and dataset name to be extended */
- fname = strdup(argv[1]);
- dname = strdup(argv[2]);
-
/* only integer dataset */
- if(monitor_dset(fname, dname) < 0)
+ if(monitor_dset(argv[1], argv[2]) < 0)
goto done;
exit(EXIT_SUCCESS);
done:
- if(dname) free(dname);
- if(fname) free(fname);
exit(EXIT_FAILURE);
}
+
diff --git a/src/H5private.h b/src/H5private.h
index af2b29a..22062d4 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -1112,6 +1112,9 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
#define HDrmdir(S) rmdir(S)
#endif /* HDrmdir */
/* scanf() variable arguments */
+#ifndef HDselect
+ #define HDselect(N,RD,WR,ER,T) select(N,RD,WR,ER,T)
+#endif /* HDsetbuf */
#ifndef HDsetbuf
#define HDsetbuf(F,S) setbuf(F,S)
#endif /* HDsetbuf */