LINUX.ORG.RU

Буферизованный ввод с клавиатуры


0

0

У меня необходимость использовать ввод с клавиатуры не средствами SDL.
Делаю так:


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;
}

........................

string text;
int key
while(key!='\n')
{
key = mygetch();
text += (char)key;
}


это не работает. Может кто знает как сделать?
Хотя этот код в консоли обрабатывается и все работает как надо, но в SDL не робит

Ответ на: комментарий от ananas

Дело в том что мне средствами SDL не надо перехватывать клавиши. Он не может отлавливать данные с клавиатурного сканера штрих-кодов.. потомучто сканер слишком быстро посылает инфу, и в очередь евентов у SDL не успевают помещаться цифры! А getch() работает корректно, но в SDL он не работает, вот в чем дело.

pozitiffcat ★★★ ()
Ответ на: комментарий от ananas

а терминал не работает в SDL :-D замкнутый круг... значит мне ничего не остается как отказаться от SDL ?

pozitiffcat ★★★ ()
Ответ на: комментарий от ananas

Просто у меня программа написана уже на SDL мне нужно всего лишь отлавливать нормально клавиши, не «криво» как эо реализовано в SDL

pozitiffcat ★★★ ()
Ответ на: комментарий от pozitiffcat

терминал не имеет никакого отношения к sdl, открывай псевдотерминал, с ним и работай. man 7 pty, man openpty

ananas ★★★★★ ()
Ответ на: комментарий от ananas

Если не атруднит можно примерчик, а то и так намучился сегодня уже %-) глаза вылазют

pozitiffcat ★★★ ()
Ответ на: комментарий от pozitiffcat

int main()
{
int master;
char buf[100];
pid_t fpr=forkpty(&master,NULL,NULL,NULL);
if(fpr<0)perror(«forkpty»);
if(fpr>0)
{
int n=read(master,buf,100);
cout<<buf<<'\n';
}
else
{
cout<<«Hello, World!\n»;
}
return 0;
}
В упор не пойму как читать введенне символы с клавиатуры

pozitiffcat ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.