Keyboard input: how to separate keycodes received from user

Posted by Iulian Serbanoiu on Stack Overflow See other posts from Stack Overflow or by Iulian Serbanoiu
Published on 2010-05-07T18:24:19Z Indexed on 2010/05/07 18:28 UTC
Read the original article Hit count: 330

Filed under:
|
|

Hello,

I am writing an application involving user input from the keyboard. For doing it I use this way of reading the input:

#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 works fine for letters digits,tabs but when hiting DEL, LEFT, CTRL+LEFT, F8 (and others) I receive not one but 3,4,5 or even 6 characters.

The question is: Is is possible to make a separation of these characters (to actually know that I only hit one key or key combination).

What I would like is to have a function to return a single integer value for any type of input (letter, digit, F1-F12, DEl, PGUP, PGDOWN, CTRL+A, CTRL+ALT+A, ALT+LEFT, etc). Is this possible?

I'm interested in an idea to to this, the language doesn't matter much, though I'd prefer perl or c.

Thanks,

Iulian

© Stack Overflow or respective owner

Related posts about c

    Related posts about perl