
J'ai déjà posté dans C, mais ça sera pê mieux ici après tout...
Donc, je voudrais que mon programme soit capable de renvoyer une liste Ti-basic de chaines de caractères : {"Chaine1","Chaine2"}...
Voilà qq portions de code (j'ai bcp détaillé parceque je reconnais que mes variables sont parfois peu compréhensibles) :
SYM_ENTRY *var_sym; // Fonction qui, normalement, donne un a un les noms des dossiers présents
var_sym = SymFindFirst(NULL,4); // Cherche le 1er dossier de la ti
while(var_sym!=NULL)
{
exe_adds(var_sym->name); // L'ajoute à la liste grace au programme (voir + loin)
var_sym=SymFindNext(); // Cherche le dossier suivant
}
Voilà la fonction exe_adds :
void exe_adds(char *valeur) // Sensé ajouter 1 pointeur de chaine dans le tableau
{
tbl_retstr[var_retstr++]=valeur; // Le pointeur est stocké dans le tableau, puis on incremente le rang pour l'élement suivant
}
Et enfin, à la fin du programme quand tous les dossiers ont été entrés dans la liste :
void exe_rets(char *variable) // On stockera le tableau dans une liste TiOS de nom 'variable'
{
ESI backup; // Pour mesurer plus tard la taille de la liste en octets
if(var_retstr>0) // Si la liste contient des éléments
{
backup=top_estack;
push_quantum(END_TAG);
for(var_for=var_retstr;var_for>0;var_for--) // On traite a l'envers les éléments de la liste
{
push_ANSI_string(tbl_retstr[var_for-1]); // On les push un a un sur le stack
}
push_quantum(LIST_TAG);
SYM_ENTRY *var_sym = DerefSym(SymAdd(variable)); // On crée la variable
if(var_sym) // Et on la fixe à partir du stack
{
ptr_argument=(char*)HeapDeref(var_sym->handle=HeapAlloc(top_estack-backup+2));
*(unsigned short *)ptr_argument=top_estack-backup;
memcpy(ptr_argument+2,backup+1,top_estack-backup);
}
top_estack=backup;
}
}
Et donc ça ne marche pas, j'obtient ça : {"",""...} avec autant d'élements que de dossiers bien sur...
Pourtant quand je fait exe_adds(chaine), ça marche. 'chaine' est de type char *
Voilà, si qqun voit où est (sont) la (les) erreur(s)...
[edit]Edité par Bob 64 le 09-03-2002 à 19:32:53[/edit]