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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int my_getch()
{
struct termios info;
char sequence[10];
int svg,pos,entier;
tcgetattr(STDIN_FILENO,&info);
svg=info.c_lflag;
info.c_lflag &= ~ECHO && ICANON; // ~ECHO=noecho ICANON=mode canonique (pas d'attente de entrée)
tcsetattr(STDIN_FILENO, TCSANOW, &info);
pos=0;
entier=getchar();
if (entier==27)
{
entier=getchar();
sequence[pos]=(char)entier;
++pos;
if (entier=='[')
{
do
{
entier=getchar();
sequence[pos]=(char)entier;
++pos;
} while (entier<=0x40);
sequence[pos]='\0';
if (strcmp(sequence,"[A")==0) entier=0403; // fleche haute=27,[A
else if (strcmp(sequence,"[21~")==0) entier=0420; // touche F10=27,[21~
else entier=0;
}
else
{
ungetc(entier,stdin);
entier=0;
}
}
info.c_lflag = svg;
tcsetattr(STDIN_FILENO, TCSANOW, &info);
return entier;
}
int main()
{
printf("test - Appuyer sur une touche : ");
int retour=my_getch();
printf("\nvaleur entier de retour : %d\n",retour);
return 0;
} |
Partager