Je suis étonné, j'avoue. Je pensais que SYMSTR était une macro et quelle n'avait aucun effet dans des pogrammes ou une variable du type string change.
moins qui me cassé la tête avec des fonctions:
/*----------------------------------------------------------
Crée un nom du tios à partir d'une chaîne de cractères en C
Retourne le pointeur de fin du nom du fichier
-----------------------------------------------------------*/
char* GenerateTIOSName(char* cname,char* buffer) {
buffer[0] = 0;
return (strcpy(buffer + 1, cname) + strlen(cname));
}
/*-----------------------------------------------------
Renvoie un SYM_ENTRY à partir d'une chaîne de caractère
-------------------------------------------------------*/
SYM_ENTRY* GetSymByName(char* name) {
char buf[50];
HSym hs;
if (*name) hs = SymFind(GenerateTIOSName(name,buf)); /* cname */
else hs = SymFind(name); /* tiosname */
if (!hs.folder) return NULL;
else return DerefSym(hs);
}
Donc cela signifie que je peux faire ça:
void FindAudioFile(struct ListAudio *lst)
{
SYM_ENTRY *entry_folder;
SYM_ENTRY *entry_file;
char buffer[50];
unsigned char **lst_folder;
unsigned char **lst_file;
unsigned char nbr_folder=0;
unsigned char nbr_file=0;
unsigned char tempfile[17];
unsigned char *ptr;
int i=0;
lst_folder=malloc(sizeof(char)*8*50);
entry_folder=SymFindFirst(NULL,FO_SKIP_TEMPS);
while (entry_folder != NULL)
{
lst_folder[nbr_folder++]=entry_folder->name;
entry_folder=SymFindNext();
}
lst_file=malloc(sizeof(char)*18*50);
for (i=0;i<nbr_folder;i++)
{
entry_file=SymFindFirst(GenerateTIOSName(lst_folder[i],buffer),9);
while (entry_file != NULL)
{
memset(tempfile,0,17);
memcpy(tempfile,lst_folder[i],strlen(lst_folder[i]));
strcat(tempfile,"\");
strcat(tempfile,entry_file->name);
if ((unsigned char)(peek(HToESI(entry_file->handle)))==OTH_TAG)
{
ptr=HeapDeref(entry_file->handle);
if (*Get_OtherExt(ptr)==*"mus") memcpy (lst->ptr+18*nbr_file++,tempfile,18);
}
entry_file=SymFindNext();
}
}
lst->size=nbr_file;
free(lst_folder);
free(lst_file);
}
Et remplacer if (*name) hs = SymFind(GenerateTIOSName(name,buf)); par if (*name) hs=SymFind(SYMSTR(name));
J'avoue que je suis surpris.
