1/*
2 * $Id: demo_keyok.c,v 1.3 2003/05/17 23:18:34 tom Exp $
3 *
4 * Demonstrate the keyok() function.
5 * Thomas Dickey - 2002/11/23
6 */
7
8#include <test.priv.h>
9
10#if defined(NCURSES_VERSION) && NCURSES_EXT_FUNCS
11int
12main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
13{
14    int lastch = ERR;
15    int ch;
16    WINDOW *win;
17
18    initscr();
19    (void) cbreak();		/* take input chars one at a time, no wait for \n */
20    (void) noecho();		/* don't echo input */
21
22    printw("Typing any function key will disable it, but typing it twice in\n");
23    printw("a row will turn it back on (just for a demo).");
24    refresh();
25
26    win = newwin(LINES - 2, COLS, 2, 0);
27    scrollok(win, TRUE);
28    keypad(win, TRUE);
29    wmove(win, 0, 0);
30
31    while ((ch = wgetch(win)) != ERR) {
32	const char *name = keyname(ch);
33	wprintw(win, "Keycode %d, name %s\n",
34		ch,
35		name != 0 ? name : "<null>");
36	wclrtoeol(win);
37	wrefresh(win);
38	if (ch >= KEY_MIN) {
39	    keyok(ch, FALSE);
40	    lastch = ch;
41	} else if (lastch >= KEY_MIN) {
42	    keyok(lastch, TRUE);
43	}
44    }
45    endwin();
46    return EXIT_SUCCESS;
47}
48#else
49int
50main(void)
51{
52    printf("This program requires the ncurses library\n");
53    ExitProgram(EXIT_FAILURE);
54}
55#endif
56