![]()
Ce chapitre va nous permettre de voir comment utiliser des pseudo-constantes, afin de créer des programmes compatibles entre la TI-89 et la TI-92plus. En effet, ces deux calculatrices ont deux différences majeures (taille de l'écran, et claviers différents), qui s'avèrent souvent gênantes pour le développement de programmes fonctionnant sur les deux à la fois... C'est pour cette raison que, la plupart du temps, un programme est fait pour une machine, et, ensuite, il est porté pour l'autre. (C'est ce que nous avons été contraint de faire jusqu'à maintenant !).
La plupart des pseudo-constantes utilisables sous TIGCC
sont définies dans la librairie <compat.h>, qui, comme sont nom
l'indique, permet d'améliorer la compatibilité entre les deux calculatrices.
En fait, les pseudo-constantes correspondent à des macros,
définies de façon à se comporter comme des constantes. c'est pour cette
raison qu'elles portent ce nom.
Table des matières de ce chapitre :
I:\ Les différentes pseudo-constantes :
Il existe 18 pseudo-constantes. Pour les définir, donner leur type et leur utilité, nous allons utiliser le tableau suivant :
| Nom | Type | Utilité |
| Pseudo-constantes en rapport avec le point de vue logiciel de la TI : | ||
| TIOS_entries | unsigned long | Nombre d'entrées dans la table du TIOS. Cette pseudo-constante peut
être utilisée pour déterminer la version de la ROM utilisée sur la
calculatrice. Par exemple, cette pseudo-constante a pour valeur :
|
| AMS_1xx | short (Boolean) | Cette pseudo-constante renvoie TRUE sur les ROM 1.xx, et elle renvoie FALSE sur les ROM 2.xx |
| AMS_2xx | short (Boolean) | Cette pseudo-constante est la réciproque de la précédente, ce qui signifie qu'elle renvoie TRUE sur les ROM 2.xx, et FALSE sur les ROM 1.xx |
| Pseudo-constantes en rapport avec le point de vue matériel de la TI : | ||
| ROM_base | void * | Adresse de base de la ROM. Cette pseudo-constante renvoie 0x200000 sur TI-89, et 0x400000 sur TI-92plus. |
| CALCULATOR | short | Cette pseudo-constante renvoie 0 sur une TI-89, et un nombre différent de 0 sur une TI-92plus. |
| TI89 | short (Boolean) | Cette pseudo-constante a pour valeur TRUE sur TI-89, et FALSE sur TI-92plus. |
| TI92 | short (Boolean) | Cette pseudo-constante est la réciproque de la précédente, ce qui signifie qu'elle a pour valeur TRUE sur une TI-92plus, et FALSE sur une TI-89. |
| Pseudo-constantes en rapport avec la taille de l'écran de la TI : | ||
| LCD_WIDTH | unsigned short | Cette pseudo-constante a pour valeur la largeur de l'écran de la TI, exprimée en pixels. Elle a pour valeur 160 sur une TI-89, et 240 sur une TI-92plus. |
| LCD_HEIGHT | unsigned short | Cette pseudo-constante a pour valeur la hauteur de l'écran de la TI, exprimée en pixels. Elle a pour valeur 100 sur une TI-89, et 128 sur une TI-92plus. |
| LCD_LINE_BYTES | unsigned short | Cette pseudo-constante a pour valeur le nombre d'octets contenus dans la partie visible d'une ligne de l'écran. Elle a pour valeur 20 sur une TI-89, et 30 sur une TI-92plus. |
| Pseudo-constantes en rapport avec la gestion du clavier de la TI : | ||
| KEY_LEFT | short | Cette pseudo-constante a pour valeur un code correspondant à la touche directionnelle de gauche. |
| KEY_RIGHT | short | Cette pseudo-constante a pour valeur un code correspondant à la touche directionnelle de droite. |
| KEY_UP | short | Cette pseudo-constante a pour valeur un code correspondant à la touche directionnelle du haut. |
| KEY_DOWN | short | Cette pseudo-constante a pour valeur un code correspondant à la touche directionnelle du bas. |
| KEY_UPRIGHT | short | Cette pseudo-constante a pour valeur un code correspondant à une pression simultanée sur les touches directionnelles du haut et de droite. |
| KEY_DOWNLEFT | short | Cette pseudo-constante a pour valeur un code correspondant à une pression simultanée sur les touches directionnelles du bas et de gauche. |
| KEY_DIAMOND | short | Cette pseudo-constante correspond à la valeur à ajouter à la valeur
du code correspondant à une touche si la touche Diamant ( |
| KEY_SHIFT | short | Cette pseudo-constante correspond à la valeur à ajouter à la valeur
du code correspondant à une touche si la touche Shift ( |
II:\ Pseudo-constantes et mémoire :
Utiliser des pseudo-constantes est une chose très
pratique. Cependant, cet usage a tendance à augmenter la taille occupée en
mémoire par les programmes. Il vaut donc mieux utiliser l'astuce suivante (tout
au moins en mode nostub), qui permet d'économiser de la mémoire :
short
key_right = KEY_RIGHT;
Ainsi, on déclare la variable key_right de
type short, qui aura pour valeur celle de KEY_RIGHT.
Utiliser cette technique permet de ne faire appel qu'une seule fois à la macro
qu'est la pseudo-constantes. cel économise donc de la mémoire. Cependant,
utiliser une autre variable (ici nommée key_right) utilise de la
mémoire !!! (Quel paradoxe !). Cette astuce n'est donc à utiliser que si la
pseudo-constantes doit être utilisée plus de 5 fois dans le programme.
(Cette astuce n'est pas de moi, mais de Zelko
Juric, qui nous en fait part dans la doc de TIGCC...)
III:\ Inconvénients des pseudo-constantes :
Les pseudo-constantes apparaissent comme quasiment
géniales, puisqu'elle permettent de résoudre la majeure partie des
inconvénients liés à la taille de l'écran, et à la gestion des touches
directionnelles du clavier. cependant, elles présentent un inconvénient, assez
gênant par rapport à ce que nous avons vu auparavant dans ce tutorial...
En effet, les pseudo-constantes étant des macros, et non pas
de simples variables, il n'est pas possible de les utiliser dans le cas d'instructions
case...break;
Ainsi, l'exemple suivant ne fonctionnera pas (en fait, il
refusera de se compiler !) :
short
key = 0;
key =
ngetchx();
switch(key)
{
case
KEY_LEFT:
........
break;
case
KEY_RIGHT:
........
break;
}
Dans ce cas, on ne pourra pas utiliser de boucle switch
avec des blocs case...break.
il faudra donc faire appel à des boucles conditionnelles. Le "code"
présenté ci-dessus devra donc être réécrit de la façon suivante :
short
key = 0;
key = ngetchx();
if(key
== KEY_LEFT)
{
........
}
else if(key
== KEY_RIGHT)
{
........
}
Cela revient au même, mais écrit de façon
différente, et moins claire...
Voilà, à présent vous êtes à même d'utiliser les pseudo-constantes, avec les formidables capacités de compatibilité qu'elles offrent entre TI-89 et TI-92plus...
Copyright Squale92 & Verstand. Logo et sigle TCI® réservés. Développé pour MS Internet Explorer 5.0 en 1024x768 pixels. Page modifiée le