]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/demo_keyok.c
ncurses 5.4
[ncurses.git] / test / demo_keyok.c
diff --git a/test/demo_keyok.c b/test/demo_keyok.c
new file mode 100644 (file)
index 0000000..670bd54
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * $Id: demo_keyok.c,v 1.3 2003/05/17 23:18:34 tom Exp $
+ *
+ * Demonstrate the keyok() function.
+ * Thomas Dickey - 2002/11/23
+ */
+
+#include <test.priv.h>
+
+#if defined(NCURSES_VERSION) && NCURSES_EXT_FUNCS
+int
+main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
+{
+    int lastch = ERR;
+    int ch;
+    WINDOW *win;
+
+    initscr();
+    (void) cbreak();           /* take input chars one at a time, no wait for \n */
+    (void) noecho();           /* don't echo input */
+
+    printw("Typing any function key will disable it, but typing it twice in\n");
+    printw("a row will turn it back on (just for a demo).");
+    refresh();
+
+    win = newwin(LINES - 2, COLS, 2, 0);
+    scrollok(win, TRUE);
+    keypad(win, TRUE);
+    wmove(win, 0, 0);
+
+    while ((ch = wgetch(win)) != ERR) {
+       const char *name = keyname(ch);
+       wprintw(win, "Keycode %d, name %s\n",
+               ch,
+               name != 0 ? name : "<null>");
+       wclrtoeol(win);
+       wrefresh(win);
+       if (ch >= KEY_MIN) {
+           keyok(ch, FALSE);
+           lastch = ch;
+       } else if (lastch >= KEY_MIN) {
+           keyok(lastch, TRUE);
+       }
+    }
+    endwin();
+    return EXIT_SUCCESS;
+}
+#else
+int
+main(void)
+{
+    printf("This program requires the ncurses library\n");
+    ExitProgram(EXIT_FAILURE);
+}
+#endif