niuob Le 15/01/2002 à 19:59 Le mieux serait que tu n'ajoutes que d'un type de données.
niuob Le 15/01/2002 à 20:05 Par exemple que tu ne retournes par la liste que des nombres entiers.
Tu as oublié les octets de taille!
void exe_retr(char *variable)
{
if(rng_return>0)
{
SYM_ENTRY *sym = DerefSym(SymAdd(variable));
if(sym)
{
pointeur=(char*)HeapDeref(sym->handle=HeapAlloc(rng_return+4));
*(short *)pointeur=rng_return+2;
pointeur[2]=0xE5;
pointeur[rng_return+3]=0xD9;
for(tmp=rng_return+2;tmp>3;tmp--) pointeur[tmp]=retour[rng_return-tmp];
}
}
}
Et puis-je savoir pourquoi tu inverses rng_return???
Ça aussi, ça risque de poser problème!
Il faut seulement inverser l'ordre des éléments, pas le contenu des éléments!
Pour les docs sur les formats de vars, ce qui est pour le moment le meileur est à mon avis la doc du SDK de TI
Zeph Le 16/01/2002 à 20:39 J'ai pas trouvé dedant non plus, mais j'ai peut-être pas bien cherché...
Tant que j'y suis, que veut dire la ligne : *(short *)pointeur=rng_return+2; ?

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
C'est n'importe quoi! Les entiers dans une liste TI ne sont pas au même format qu'en C.
Pour information:
0 -> 0x00 0x1f
1 -> 0x01 0x01 0x1f
2 -> 0x02 0x01 0x1f
...
255 -> 0xff 0x01 0x1f
256 -> 0x00 0x01 0x02 0x1f
257 -> 0x01 0x01 0x02 0x1f
...
65535 -> 0xff 0xff 0x02 0x1f
65536 -> 0x00 0x00 0x01 0x03 0x1f
...
niuob Le 17/01/2002 à 18:20 Il force la conversion de pointeur en short * (typecasting) puis place rng_return+2 à l'adresse pointée par la variable (short*)pointeur.
Et ce short (*(short *)pointeur) correspond à la taille de la variable.
Zeph Le 18/01/2002 à 18:22 En + je suis sur qu'il existe une solution simple !!!
[2]pointeur=(char*)HeapDeref(sym->handle=HeapAlloc(rng_return+4));
*(short *)pointeur=rng_return+2;
pointeur=0xE5;
pointeur[rng_return+3]=0xD9;
for(tmp=rng_return;tmp>0;tmp--) pointeur[tmp+2]=retour[rng_return-tmp];
J'ai testé entre chaque étape, et c'est à la partie en bleu clair que ça ne marche pas. Je ne sais pas pkoi il transforme la valeur (j'ai essayé 13) en une liste : {c}.
Il n'y aurait pas une petite transformation simple à faire pr que ça marche ???

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Tu connais pas Kévin, si tu mets son nom, il va te faire payer pour l'avoir écrit sans autorisation écrite...
LOL, bien sûr que tu peux mettre mon nom dans les remerciements.
Et pour le format, c'est que tu ne peux pas mettre un caractère tout seul et penser que AMS comprendra tout seul que c'est un entier: tu dois mettre (de la fin vers le début):
- Le tag indiquant que c'est un entier positif: POSINT_TAG.
- Le nombre d'octets (codé sur 1 octet) représentant le nombre. Pour un nombre de type unsigned char, c'est 0 pour 0 et 1 pour 1-255.
- La valeur de l'octet (sauf si c'est 0).
push_longint s'occupe de tout ça (même pour un unsigned long d'ailleurs), mais le résultat est placé sur la pile d'expressions, et il faut donc le récupérer, soit avec HS_popEstack, soit comme moi directement. (HS_popEstack va aussi vouloir retirer les arguments de ton programme de la pile d'expressions et les placer dans le handle résultant, et ils n'ont vraiment rien à faire dans la variable, c'est pour ça que je préfère le faire "à la main".)