Forum Programmation.c pb de configuration de clavier

Posté par  .
Étiquettes :
0
19
déc.
2005
Bonjour,
J'effectue le portage d'une application de unixware SCO vers linux redhat : Red Hat Enterprise Linux ES release 3 (Taroon Update 4)
Kernel 2.4.21-27.EL on an i686

Mon problème est d'obtenir,pour la touche "Entrée", le code 13.
On se connecte à l'application à l'aide d'un émulateur de terminal configuré en VT220.
Si je lance la commande showkey -a j'obtiens bien un code 13 :
^M 13 0015 0x0d
par contre quand l'application lit le clavier à l'aide de read(stdin..., elle récupère un code 10

J'aimerai donc savoir comment on configure linux pour obtenir un code 13 lors de la lecture à l'aide de read(stdin..
(ne pas perdre de vue que l'application est appelée à partir d'un émulateur VT220).
Merci par avance de vos réponses

pledreau
  • # stty

    Posté par  . Évalué à 3.

    Vérirfies que ton tty n'est pas configuré en mode conversion CR (code 13) en NL (code 10) avec la commande
    stty -a
    Si tu as l'option icrnl, tu peux la désactiver avec:
    stty -icrnl
    • [^] # Re: stty

      Posté par  . Évalué à 1.

      Je ne sais pas si en fait cette modification marche.
      Ce qui se passe c'est que la fonction read(stdin... ne voit pas que j'ai appuyé sur la touche "Entrée", mais j'ai le même problème pour les touches flèches par exemple. Le terminal (en l'occurence WTERM) affiche le code suivant ^M pour entrée). La fonction read quant à elle reste bloquée, en attente!!

      ça me laisse un peu perplexe.
      • [^] # Re: stty

        Posté par  . Évalué à 1.

        Le terminal (en l'occurence WTERM) affiche le code suivant ^M pour entrée). La fonction read quant à elle reste bloquée, en attente!!

        Il me semble que par défaut, la fonction read(stdin, ..) est bufferisée, et qu'il faut appuyer sur Entrée pour que la fonction rende la main. Pour arriver à ce que tu veux, il faut passer le terminal en mode "brut" (raw), et là tu auras accès aux pressions des touches, y compris les touches flèches, mais peut-être avec une autre fonction que read().
        Jette un oeil sur le code de "VI" par exemple, pour voir comment il lit le clavier.
        • [^] # Re: stty

          Posté par  . Évalué à 1.

          tu as raison il faut faire stty raw -echo avant de lancer le programme.
          les flèches sont correctement traitées.

          merci
          • [^] # Re: stty

            Posté par  . Évalué à 1.

            tu as raison il faut faire stty raw -echo avant de lancer le programme.
            les flèches sont correctement traitées.


            C'est sans doute encore mieux d'effectuer cette opération depuis le programme, via l'API qui convient (je ne parle pas de faire un system("stty raw -echo");).
    • [^] # Re: stty

      Posté par  . Évalué à 1.

      Je ne sais pas si en fait cette modification marche.
      Ce qui se passe c'est que la fonction read(stdin... ne voit pas que j'ai appuyé sur la touche "Entrée", mais j'ai le même problème pour les touches flèches par exemple. Le terminal (en l'occurence WTERM) affiche le code suivant ^M pour entrée). La fonction read quant à elle reste bloquée, en attente!!

      ça me laisse un peu perplexe.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.