Ключевые слова:keyboard, (найти похожие документы)
Date: Fri, 20 Apr 2001 16:03:08 +0400
From: Oleg Galizin <Oleg.Galizin@f17.n5025.z2.fidonet.org>
Newsgroups: fido7.ru.unix.prog
Subject: пример функции для ожидания нажатия одной клавиши
> Кстати, можно вопрос? Я вот тут наваял подобие getkey из редхатовых
>
вот некий пример по ожиданию нажатия одной клавиши
тк в UNIX нажатие одной клавиши может приввести к целой последовательности
символов
то и возвращается ее длина
int WaitOneKeyDown(char* buffer, int length)
{
struct termios ti, nti;
char c;
int flags_fcntl;
int ret_value;
/* set max length of sequence */
length = length > MAX_INPUT?MAX_INPUT:length;
/* Set terminal mode for read one key */
if ( tcgetattr(0, &ti) < 0 )
return -1;
memcpy(&nti, &ti, sizeof(struct termios));
nti.c_lflag &= ~ICANON;
nti.c_cc[VMIN] = length;
nti.c_cc[VTIME] = 2;
if ( tcsetattr(0, TCSANOW, &nti) < 0)
return -1;
/* flush previon input */
flags_fcntl = fcntl(0, F_GETFL);
if ( flags_fcntl < 0 )
return -1;
if ( fcntl(0, F_SETFL, flags_fcntl | O_NONBLOCK) < 0 )
return -1;
while ( read(0, &c, 1) > 0 );
errno = 0;
if ( fcntl(0, F_SETFL, flags_fcntl & ~O_NONBLOCK) < 0 )
return -1;
/* wait one key press */
ret_value = read(0, buffer, length);
/* restore setting */
if ( tcsetattr(0, TCSANOW, &ti) < 0)
return -1;
return ret_value;
}
еще нужны соотв #include
Считаем что между нажатиями на клавиши не менее 0.2 сек