1

J'ai une petite question de newbie smile

Quand je déclare une variable avec la fonction char ou autre, elle va se mettre dans la pile ou Stack (comme l'explique le super tutorial de Squale92).

Mais si j'execute un prog avec une boite de dialog contenant un request.
Ce resquest va se mettre dans une variable de type char.

#define OPTIMIZE_ROM_CALLS
#define SAVE_SCREEN
#include <tigcclib.h>
short _ti89;
char *pwrd;
void _main(void)
{
HANDLE h = DialogNewSimple(140,55);
DialogAddTitle(h,"Test",BT_OK,BT_CANCEL);
DialogAddRequest(h,3,30,"Valeur:",0,20,14);
DialogDo(h,CENTER,CENTER,pwrd,NULL);
HeapFree(h);
}

Voila un prog tous simple. Imaginons que je l'éxécute et que je tape toto dans le request puis enter. Le programme se termine je reviens sur l'ecran home.
Mais si je relance le prog dans le request y'aura deja marqué toto et en plus le title du dialog change et devient toto confus

Si quelqu'un peut m'expliquer a mon avis il faut supprimer la variable.

2

>> "...fonction char..."
char n'est pas une fonction mais un mot réservé informant le compilateur de la taille "physique" de la variable (1/2/4 octet généralement), et de son étendue (-128 à 127 / 0 à 255 / -32768 à 32767 / 0 à 65535 ...). Il se sert de ces informations pour générer le code assembleur exécutant les calcluls que tu réalises avec (MaVar%= i+3 produit un code différent suivant le type de MaVar et i)


>> "Mais si je relance le prog dans le request y'aura deja marqué toto et en plus le title du dialog change et devient toto"
Ben oui ce code est bugué. Tu l'as trouvé où ??
Le compilateur place la chaine de caractères "Test" dans le segment de données globales du programme (dans mon petit cours sur les pointeurs j'en parle si ça t'intéresse).
Mais juste avant cette chaîne de caractères il a placé le pointeur pwrd que tu n'initialises pas vers un buffer ! Il semblerait que l'entrée du request soit copiée dans la chaîne de caractères placée juste après le pointeur, comme si ce dernier la référençait. Ca me semble étrange qu'il pointe par défaut sur la data suivante du GDS, il faudrait une confirmation.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

3

Oui effectivement char n'est pas une fonction j'ai taper trop vite sur mon clavier.

Ce code est buggé et je suis au courant car c'est le mien. Je debute en C et je fais donc des erreurs j'ai donc exposé mon prob car je vois pas trop l'erreur que j'ai fait.
En lisant le tuto de squale92 il est dit que l'étoile met la varibles n'importe où dans la mémoire, j'ai donc enlevé cette étoile.

Maintenant le prog marche super mais quand je le relance le champ request est déjà rempli or moi je voudrais qu'il soit vide...

Mon prog c'est maintenant :

#define OPTIMIZE_ROM_CALLS
#define SAVE_SCREEN
#include <tigcclib.h>

short _ti89;
char pwrd[21];
void _main(void)
{
HANDLE h = DialogNewSimple(140,55);
ClrScr();
DialogAddTitle(h,"test",BT_OK,BT_CANCEL);
h=DialogAddRequest(h,3,30,"Valeur:",0,20,14);
DialogDo(h,CENTER,CENTER,pwrd,NULL);
}

A mon avis il faut vider la pile ou Stack à la fin du prog mais aucune source que j'ai éditer ne le fais alors je comprend pas confus
Merci d'avance pour les réponses... wink

4

C'est simple, avant DialogDo(h,CENTER,CENTER,pwrd,NULL); écrit *pwrd= 0; smile
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

5

La pile n'a rien à voir là dedans puisque tes variables sont globales. "Vider la pile" n'a presque aucun sens, ont parle plutôt de "restauration du pointeur de pile". Et ça, c'est fait automatiquement par le compilo à la sortie des fonctions, sinon tout planterait, vu que les variables locales sont allouées sur la pile wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

6

vi ya des bugs assez chelou si on alloue pas assez de mem à une variable string. Oublie pas le caractère de fin (cad '') à la fin de ton string
quand tu le déclares.
si tu as plusieurs request ils vont se foutre dans le même string à partir du caractère offset (cf doc)
donc moije prefére faire comme ça
char *requ="requ1 requ2 ..."
comme ça t'as un truc par défaut dans ton request.
the car's on fire and there's no driver at the wheel
and the sewers are all muddied with a thousand lonely suicides
and a dark wind blows

GYBE! Dead Flag Blue

7

>> "Oublie pas le caractère de fin (cad '') à la fin de ton string "
Peut-être t'ai-je mal compris, mais il me semble que tu penses que le zéro terminal n'est pas ajouté par le compilo à la fin de la chaine. Détrompe-toi wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.