summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/query.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/query.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/query.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/query.c b/reference/C/CONTRIB/SNIP/query.c
new file mode 100755
index 0000000..04f72ce
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/query.c
@@ -0,0 +1,51 @@
+/*
+** QUERY.C - Timed query with default for batch files
+**
+** public domain by Bob Stout
+*/
+
+#include <stdio.h>
+#include <time.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <conio.h>
+
+main(int argc, char *argv[])
+{
+ int ch = '\0', def_ch = '\0';
+ char *prompt = "(y/n) ";
+ clock_t start, limit = (clock_t)0;
+
+ if (1 < argc)
+ {
+ def_ch = toupper(*argv[1]);
+ if ('Y' == def_ch)
+ prompt[1] = (char)def_ch;
+ else if ('N' == def_ch)
+ prompt[3] = (char)def_ch;
+ else def_ch = '\0';
+ }
+ fputs(prompt, stderr);
+ if (2 < argc)
+ {
+ start = clock();
+ limit = (clock_t)(CLK_TCK * atoi(argv[2]));
+ }
+ while ('Y' != ch && 'N' != ch)
+ {
+ while (!kbhit())
+ {
+ if (limit && (limit <= (clock() - start)))
+ {
+ ch = def_ch;
+ goto BYE;
+ }
+ }
+ ch = toupper(getch());
+ if ('Y' != ch && 'N' != ch && (1 < argc))
+ ch = def_ch;
+ };
+BYE: fputc(ch, stderr);
+ fputc('\n', stderr);
+ return ('Y' == ch);
+}