Tutorial TIGCC - Chapitre 4 - Gestion du clavier | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Article posté par limmt Chapitre 4 - Gestion du clavier A - Lecture à haut niveau - ngetchx() ngetchx() est une fonction de lecture du clavier à haut niveau. Cela ne signifie pas qu'elle est compliquée, bien au contraire. Cela signifie qu'elle est justement plus simple à utiliser car elle est elle même un ensemble de fonctions bas niveau cependant elle n'est pas aussi performante et ne permet pas de lire l'état du clavier en temps réel. Prototype de la fonction: short ngetchx(short); Cette fonction attend l'appui d'une touche et renvoie le code de cette touche en short. Elle ne prend pas d'arguments. Les codes des touches renvoyés sont similaires à ceux du TI-basic, cependant les codes des touches directionnelles sont différents et diffèrent également selon la TI utilisée. TI89:
TI92 plus/V200:
B - Lecture à bas niveau - _rowread() et _keytest() I) Intro _rowread() et _keytest() sont des fonctions de lecture du clavier à bas niveau, elles sont beaucoup plus performantes que ngetchx et permettent de lire le clavier en temps réel. Cependant elles nécéssitent la désactivation de l'interruption système numéro 1, l'AUTO_INT_1. II) Interruptions Les interruptions sont une sorte de compte à rebours qui, à chaque fois qu'ils arriveznt à zéro déclenchent un événement. Nous ne nous occuperons ici que de l'AUTO_INT_1. Les fonctions de lecture du clavier à bas niveau requierent la désactivation de celle-ci, mais l'utilisation des niveaxu de gris nécessitera l'AUTO_INT_1 ; pour pouvoir lire le clavier en pouvant tout de même utiliser les niveaux de gris, nous ne désactiverons pas l'AUOT_INT_1, mais nous la remplacerons par une interruption vide. Pour cela nous utiliserons une interruption inclue dans TIGCC, le DUMMY_HANDLER. C'est une interruption vide qui comprend uniquement "rte". Syntaxe de désactivation d'une interruption: Avant le programme ou au début de main: INT_HANDLER save_auto_int_1; //Déclare la variable save_auto_int_1 comme INT_HANDLER (sauvegarde d'interruption, ce qui nous permettra de restaurer l'AUTO_INT_1 à la fin du programme) Au début du programme (avant l''activation des niveaux de gris et avant l'utilisation des fonctions de lecture de clavier à bas niveau): save_auto_int_1 = GetIntVec (AUTO_INT_1); //Sauvegarde le contenu de l'AUTO_INT_1 dans save_auto_int_1 SetIntVec (AUTO_INT_1, DUMMY_HANDLER); //Redirige l'AUTO_INT_1 vers DUMMY_HANDLER (interruption vide) A la fin (restauration de l'AUTO_INT_1): SetIntVec (AUTO_INT_1, save_auto_int_1); //Restaure l'AUTO_INT_1 avec le contenu de save_auto_int_1 ! Il est vivement recommandé de désactiver l'AUTO_INT_5 de la même manière car ces fonctions seront alors plus rapides. III) _keytest() Je n'expliquerai pas ici en détail l'utilisation de _rowread car il est bien plus simple d'utiliser _keytest, qui a la même vitesse. Si vous voulez utiliser _rowread, reportez vous à la documentation de TIGCC. Prototype: short _keytest (short row, short col); _keytest renvoie TRUE si la touche demandée est pressé ou renvoie FALSE sinon. On peut soit mettre les numéros de ligne et de colonne de la touche désirée mais il y a plus simple. Dnas le fichier compat.h, il y a des paires de pseudo-constantes prédéfinies pour _keytest et qui repsectent la compatibilité entre TI89 et TI92+/V200. Ces pseudo-constantes commence toutes par RR_ puis le nom de la touche (voir compat.h dans la doc de TIGCC) et remplacent les deux arguments. Exemple pour tester l'appui sur ESC: if(_keytest(RR_ESC)) actions_si_appui_sur_ESC; ! Les fonctions de lecture du clavier à haut et bas niveau sont incompatibles, car pour le bas niveau il est nécessaire de désactiver l'AUTO_INT_1 et ngetchx est un ROM_CALL basée sur l'AUTO_INT_1, elle produira une barre noire si vous l'utilisez avec l'AUTO_INT_1 désactivée. Limmt Ribeman © 2004 |
>> Vos commentaires [1]
|