5Fermer7
ZephLe 09/09/2004 à 15:26
Pfffff... Lis la doc de TIGCC, apprends un peu comment ça fonctionne parceque tu mélanges tout là... On va faire en image, c'est encore ce qui risque d'être le plus simple :

[ ..., END_TAG, END_TAG, 50, 1, POSINT_TAG, 0, 'P', 'l', 'o', 'p', 0, STR_TAG, LIST_TAG, 0, 'b', 0, STR_TAG, 0, 'a', 0, STR_TAG ]

Voilà la pile, j'ai placé les différents blocs en couleur pour les différencier plus facilement. Actuellement, top_estack indique l'emplacement du dernier STR_TAG : le sommet de la pile. Puisqu'on lit ça en sens inverse, la pile contient donc : "a", "b", {"Plop", 50}.

Tu commences ton programme, GetArgType, ça renvoie STR_TAG. Tu récupere la première chaine, "a", et le pointeur se place sur l'argument suivant : le deuxième STR_TAG. Tu récuperes la deuxième chaine, "b", et le pointeur se place sur l'argument suivant : le LIST_TAG.

A partir de là, ton truc merde completement. Il faut tout simplement décaler le pointeur avec argPtr--, ce qui le fait passer sur le STR_TAG. Là tu continues comme avant, avec des GetArgType et des GetIntArg / GetStrnArg, ce qui va lire tous les elements de la liste jusqu'au END_TAG final. Tu sais donc que tu es arrivé à la fin de la liste, tu décrementes le pointeur pour passer sur l'argument suivant : le END_TAG, qui indique la fin des arguments.

Maintenant débrouille toi avec ça, je ne répondrais plus à ces questions tant que tu n'auras pas lu la doc serieusement.