Я пишу приложение, включающее пользовательский ввод с клавиатуры. Для этого я использую этот способ чтения ввода:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int mygetch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main(void)
{
int c;
do{
c = mygetch();
printf("%d\n",c);
}while(c!='q');
return 0;
}
Everyting отлично работает для цифр букв, табуляции, но при нажатии DEL, LEFT, CTRL + LEFT, F8 (и других) я получаю не один, а 3,4,5 или даже 6 кодов клавиш.
Вопрос в том, возможно ли разделить эти коды клавиш (чтобы я знал, что я нажимаю только одну клавишу или комбинацию клавиш).
Я хотел бы иметь функцию, возвращающую одиночное целочисленное значение для любого типа ввода (буквы, цифры, F1-F12, DEl, PGUP, PGDOWN, CTRL + A, CTRL + ALT + A, ALT + LEFT и т. Д.). Это возможно?
Мне интересна идея этого, язык не имеет большого значения, хотя я бы предпочел perl или c.
Спасибо
Юлиан