aboutsummaryrefslogtreecommitdiffstats
path: root/kbdtest.c
diff options
context:
space:
mode:
Diffstat (limited to 'kbdtest.c')
-rw-r--r--kbdtest.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/kbdtest.c b/kbdtest.c
new file mode 100644
index 0000000..849e5e2
--- /dev/null
+++ b/kbdtest.c
@@ -0,0 +1,60 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <inttypes.h>
+#include <time.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <errno.h>
+#include <termios.h>
+
+#include "kbd.h"
+
+/* ---------------------------------------------------------------------- */
+
+static const char *keyname[KEY_CNT] = {
+#include "KEY.h"
+};
+
+int main(int argc, char *argv[])
+{
+ struct timeval limit;
+ uint32_t code, mod;
+ char key[32];
+ fd_set set;
+ int rc,i;
+
+ tty_raw();
+
+ for (;;) {
+ FD_ZERO(&set);
+ FD_SET(0, &set);
+ limit.tv_sec = 10;
+ limit.tv_usec = 0;
+ rc = select(1, &set, NULL, NULL, &limit);
+ if (0 == rc || !FD_ISSET(0,&set))
+ break;
+
+ memset(key, 0, sizeof(key));
+ rc = read(0, key, sizeof(key)-1);
+ if (rc < 1) {
+ /* EOF */
+ break;
+ }
+
+ code = kbd_parse(key, &mod);
+ fprintf(stderr, "key: \"");
+ for (i = 0; key[i] != 0; i++) {
+ fprintf(stderr, "%c", isprint(key[i]) ? key[i] : '.');
+ }
+ fprintf(stderr, "\" -> %s", keyname[code]);
+ if (mod & KEY_MOD_SHIFT)
+ fprintf(stderr, " +shift");
+ if (mod & KEY_MOD_CTRL)
+ fprintf(stderr, " +ctrl");
+ fprintf(stderr, "\n");
+ }
+ tty_restore();
+ return 0;
+}