# équivalent kbhit() et getxkey()



## ethan31 (1 Février 2009)

Bonjour, 
j'avais un programme C++ dévellopé sur dev-cpp et je suis entrain de l'adapter sur le logiciel xcode sur mac. Le problème est que je n'arrive pas à trouver les équivalent de kbhit() et de getxkey() qui peuvent fonctionner sur mac. 

kbhit() : fonction qui retourne vrai si une touche est appuyé 

getxkey() : donne le code ascii de la touche appuyé. 
on l'utilise souvent de cette manière : 

//********************** 
char code_ascii; 

if (kbhit()) 
{ 
code_ascii = getxkey(); 
} 
//********************** 

Si vous connaissez un site avec des docs qui donne plusieurs noms de fonction et se qu'elles sont censé faire sa me serai bien utile car j'ai un autre exemple :
j'utilisé avant une fonction qui s'appelle gotoxy() qui me permétait de me positionné à un endroit particulier dans la console (sous windows) et sur mac elle marche pas. 

merci d'avance , (si possible docs en francais).


----------



## ntx (1 Février 2009)

ethan31 a dit:


> Si vous connaissez un site avec des docs qui donne plusieurs noms de fonction et se qu'elles sont censé faire sa me serai bien utile car j'ai un autre exemple :
> j'utilisé avant une fonction qui s'appelle gotoxy() qui me permétait de me positionné à un endroit particulier dans la console (sous windows) et sur mac elle marche pas.


La doc c'est la norme ANSI C++ que ne semble pas toujours connaître M$ :rateau:
La gestion du terminal dépend par contre de chaque système, sous Mac OSX elle se fera de la même manière que sous les autres UNIX. Mais je n'ai pas de lien à te donner, ça fait des années que je ne programme plus d'applications tournant dans le terminal. Va voir du côté de Google.


----------



## tatouille (1 Février 2009)

ethan31 a dit:


> Bonjour,
> j'avais un programme C++ dévellopé sur dev-cpp et je suis entrain de l'adapter sur le logiciel xcode sur mac. Le problème est que je n'arrive pas à trouver les équivalent de kbhit() et de getxkey() qui peuvent fonctionner sur mac.
> 
> kbhit() : fonction qui retourne vrai si une touche est appuyé
> ...



bonjour voila je ne m'etais jamais interresse a la question en gros il m'a fallu 15 minutes
pour trouver une parade, en faite cela creer une pause, mais il y a d'autre outils sous ton term pour faire ca: utilise ncurse


```
#include <sys/select.h>
#include <stdio.h>

int kbhit(void) {
    struct timeval tv;
    fd_set fd;
    
    tv.tv_sec = 0;
    tv.tv_usec = 0;
    FD_ZERO(&fd);
    FD_SET(0, &fd);
    
    if(-1 != select(1, &fd, NULL, NULL, &tv)) {
        if(FD_ISSET(0, &fd)) {
            return 1;
        }
        
    }
    
    return 0;
}

char code_ascii;

int main(int argc, char *argv[]) {
    while (!kbhit()) {
        code_ascii = getchar();
        putchar(code_ascii);
    }
    
    return 0;
}
```


----------



## tatouille (2 Février 2009)

http://web.cs.mun.ca/~rod/ncurses/ncurses.html


----------



## ethan31 (3 Février 2009)

ok , merci pour votre aide , et pour le temps passer mais il y a juste un petit souci (sauf erreur de ma part). En fait ton code est bloquant alors qu'il me faudrait un truc non bloquant. Dans le genre :

//********************** 
char code_ascii; 

int main ()
{
while (1)
{
      if (kbhit()) 
      { 
           code_ascii = getxkey(); 
           cout << code_ascii;
      } 
/* Suite du code ... */
}
}
//********************** 

Et en fait getxkey () me donne le code ascii de la touche qui a déclenché kbhit().

C'est sans t'obliger à te pencher à nouveau sur le code , c'est aussi à moi de chercher un peu non ?!


----------



## tatouille (3 Février 2009)

http://cboard.cprogramming.com/archive/index.php/t-63166.html

http://linux-sxs.org/programming/kbhit.html

utilise ncurses


----------

