/*
 * Test if key is pressed,
 * do not echo.
 *
 * 2003 by Hans Schou
 */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>


int main(void) {
	int c;
	long count = 0;
	int fflags;
	struct termios t,prev_t;

	printf("Enter 'q' to quit. Any other to test.\n");

	/* do not echo */
	tcgetattr(STDIN_FILENO, &t);
	memcpy(&prev_t, &t, sizeof(prev_t));
        t.c_lflag &= ~(ICANON | ECHO | ICRNL);
	t.c_lflag |= ISIG;
	t.c_cc[VMIN] = 1;
	t.c_cc[VTIME] = 0;
	tcsetattr(STDIN_FILENO, TCSADRAIN, &t);

	/* non-block */
	fflags = fcntl(STDIN_FILENO, F_GETFL, 0);
	fcntl(STDIN_FILENO, F_SETFL, fflags | O_NONBLOCK);

	while ((c = getchar()) != 'q') {
		if (c != -1) {
			printf("%c 0x%02X %3d #%d\n", c, c, c, count);
			count = 0;
		} else {
			/* do something else */
			usleep(1);
			count++;
		}
	}

	fcntl(STDIN_FILENO, F_SETFL, fflags & ~O_NONBLOCK);

	tcsetattr(STDIN_FILENO, TCSADRAIN, &prev_t);

	return 0;
}

