1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <stdio.h>
#define ARROW_KEYCODE_BASE '\027'
enum arrow_keycode {
UP = 'A',
DOWN = 'B',
RIGHT = 'C',
LEFT = 'D'
};
/* If character is arrow key, fills c and returns 1,
* otherwise returns 0.
*/
int getchar_arrow(int *restrict c) {
if ((*c = getchar()) == ARROW_KEYCODE_BASE) {
if (getchar() != '[')
goto not_arrow;
int c_tmp;
switch(c_tmp = getchar()) {
case UP:
case DOWN:
case RIGHT:
case LEFT:
*c = c_tmp;
return 1;
default:
goto not_arrow;
}
}
not_arrow:
return 0;
} |
Partager