30

Le mieux serait que tu n'ajoutes que d'un type de données.

31

C'est à dire confus
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

32

Par exemple que tu ne retournes par la liste que des nombres entiers.

33

Ah oui ok, c'est ce que je vais faire sinon c trop compliqué.

Quand j'utilise HeapAlloc j'alloue combien de mémoire ? J'ai essayé
HeapAlloc(taille_de_la_liste+2) mais j'obtient une variable qui fait environ 58000 octets roll
[edit]Edité par Bob 64 le 15-01-2002 à 20:43:02[/edit]
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

34

ouch... utilises donc malloc (ou HeapAllocPtr : c exactement la même chose, mais la première appelation en ANSI alors que la seconde est TIOS grin)

HeapAlloc alloue un Handle... cela dit... c peut-être ce que tu veux grin
(je suis un peu mort ce soir grin et j'ai pas le courage de lire la page précédente sad)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

35

J'y arrive pas Pleure.gif

Je veux donc retourner une liste basic à partir d'une en C. Dans mon exemple la liste 'retour' contient une seule valeur. La variable rng_return indique combien la liste contient d'élements, donc elle vaut 1. Et je n'arrive à rien :


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+2));
pointeur[0]=0xE5;
pointeur[rng_return+1]=0xD9;
for(tmp=rng_return;tmp>1;tmp--) pointeur[tmp]=retour[rng_return-tmp];
}
}
}

Résultat :
Retour1.gif


Et si on supprime la ligne "pointeur[0]=0xE5" :

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+2));

//pointeur[0]=0xE5;
pointeur[rng_return+1]=0xD9;
for(tmp=rng_return;tmp>1;tmp--) pointeur[tmp]=retour[rng_return-tmp];
}
}
}

Résultat :
Retour2.gif
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

36

Kevin, à l'aide...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

37

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!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

38

et voila.
Merci Kevin !
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

39

Une fois de + merci ! (va falloir que je mette ton nom en gras dans les remerciements)

Et puis-je savoir pourquoi tu inverses rng_return ???
> Je ne sais plus ou j'avais entendu ça...

Je suis allé voir sur Doors.ticalc.org mais ils n'expliquent que certains types de variables, et je n'ai pas trouvé d'explications pour les listes sad

Squale > Lol grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

40

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
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

41

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; ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

42

Lancement du programme, du Vars-Link, et...

YYYYYYEEEEEEEEAAAAAAAHHHHHHH

Une superbe liste de 5 octets !!!
Mais par contre quand je l'ouvre...

Retour3.gif

Pourtant voilà ce qui a été fait sur la liste :

exe_addl(ngetchx());

Le sous programme exe_addl :

void exe_addl(int valeur)
{
retour[rng_return]=valeur;
rng_return++;
}


Je croyais obtenir le code de la touche appuyée...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

43

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
...
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

44

Bah oui mais comment j'aurait su moi mourn
(d'ailleurs je ne sait tjrs pas sad)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

45

Essaye ça:

[i]void exe_retr(char *variable)
{
int i;
ESI top_estack_backup;
SYM_ENTRY *sym;
if(rng_return)
{
top_estack_backup=top_estack;
push_quantum(END_TAG);
for(i=rng_return-1;i;i--) push_longint(retour);
push_quantum(LIST_TAG);
sym = DerefSym(SymAdd(variable));
if(sym)
{
pointeur=(char*)HeapDeref(sym->handle=HeapAlloc(top_estack-top_estack_backup+2));
*(unsigned short *)pointeur=top_estack-top_estack_backup;
memcpy(pointeur+2,top_estack_backup+1,top_estack-top_estack_backup);
}
top_estack=top_estack_backup;
}
}


attention Je ne garantis pas que ça marche, mais ça m'a l'air correct.
[edit]Edité par Kevin Kofler le 17-01-2002 à 01:31:29[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

46

Ah ouais c completement différent de mon algo de départ...
Il était vraiment totalement faux ???

Le + bizzard c'est qu'en envoyant 2 fois la même valeur dans le tableau, après la convertion en basic les élements n'étaient plus les mêmes confus

Ah oui aussi, dans ton algo + haut, que signifie *(short *)pointeur=rng_return+2; ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

47

Il force la conversion de pointeur en short * (typecasting) puis place rng_return+2 à l'adresse pointée par la variable (short*)pointeur.

48

Et ce short (*(short *)pointeur) correspond à la taille de la variable.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

49

Mmm ok... donc si la liste contenait un seul élement, ça revient à
*(short *)pointeur=3;

Donc ça devient assez simple, sauf pour :
Et ce short (*(short *)pointeur) correspond à la taille de la variable.
Mais je comprendrait surement ça + tard wink

Bon sinon je vais peut-être jeter un coup d'oeil à Flib pour voir comment ça marche pour renvoyer des nombres dans 'fl' (mais j'ai peur que FL ne s'y soit pas prit du tout comme moi, et qu'il ait employé un système bcp mieux que je ne comprendrait pas)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

50

Bon bah ct à prévoir, je comprends rien mourn
Tant pis sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

51

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 ???
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

52

Lis bien mes réponses ci-dessus. Il y a:
- l'explication du format à utiliser (Si tu ne comprends pas, va voir http://tigcc.ticalc.org/doc/estack.html#top_estack, peut-être que tu comprends mieux.)
- un algorithme qui passe par la pile d'expressions et qui devrait fonctionner
Soit tu crées les nombres au bon format toi-même, soit tu utilises mon algorithme (qui fait faire le travail à push_longint). Mais le format d'un char ou d'un short n'est pas du tout le format d'un entier d'AMS, donc ça ne peut pas marcher.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

53

C'est dommage une incompatibilité pareille...

En fait je n'ai pas encore utilisé ton algo, parceque ça me vexait un peu d'avoir fait le mien pour rien (tongue) et aussi que je ne m'imaginait pas l'erreur aussi grosse...

Donc là j'ai plus trop le choix, je vais devoir recopier "betement" ton algo, ce que je n'aime pas trop faire d'habitude (j'aime bien avoir fait mon prog tt seul comme un grand grin).

Je n'ai pas des connaissances en C assez grandes pour faire mon prog sans me faire aider sad. Il y en a déjà une grosse partie de toi : cette fonction de retour de liste, et aussi la fonction Zoom.

(je vais faire comment dans les remerciements ? Mettre ton nom en gras ? grin)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

54

Tu connais pas Kévin, si tu mets son nom, il va te faire payer pour l'avoir écrit sans autorisation écrite...

55

"J'autorise Bob 64, auteur de sa lib de m**de, à écrire mon nom dans la partie 'Remerciements' du fichier ReadMe qui l'accompagnera.
Fait le 18/01/02 à Paris."

Signe ici : pencil

gringringrin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

56

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".)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

57

Chouette il m'a autorisé gringringrin

(merci pr l'explication au fait wink)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)