void *Load_TLF(unsigned char File_BOOL)
{
void *Buffer_File;
FILE *Current_File;
SYM_ENTRY * SYM_Ptr; // créer un pointeur SYM_Ptr
char *List_Files[20]; // créer une liste qui contiendra les nom s des fichiers du répertoire.
char TAG_File[]=""; // Chaîne de caractère qui servira à stocker le nom du Tag avec fread();
int File_num=0;
File_BOOL=0; // Par défaut, elle est à 0
SYM_Ptr = SymFindFirst ($(main),FO_SINGLE_FOLDER); // Cherche les noms des fichiers du répertoire.
while(SYM_Ptr) // tant que tout le répertoire n'est pas parcouru
{
Current_File = fopen(SYM_Ptr->name,"r"); // Ouvre le fichier courant
if(Current_File!=NULL)
{
fgets(TAG_File,3,Current_File); // charge les 2 premier caractère dans la chaîne
}
//printf("Fichier : %s, Tag : /%s/\n",SYM_Ptr->name,TAG_File);
fclose(Current_File); // Fermeture du fichier
if(!strncmp(TAG_File,"TL TAG\n",2)) //quand la fonction qui permet de comparer deux chaînes de caractères retourne 0
{
List_Files[File_num]=SYM_Ptr->name; // copie le nom du fichier dans la liste.
File_num++; // Incrémente la variable pour situer le numéro du fichier danns la liste.
}
SYM_Ptr=SymFindNext(); // Passe au fichier suivant.
} // Fin de la boucle qui parcoure le répertoire.
if(File_num>0) // Si au moins un fichier ayant le Tag des fichier TL.
{
//Menu_Popup(List_Files,File_num,1); // Menu Popup personnalisé en grayscale
File_num=1;
if(File_num>0) //
{
Current_File=fopen(List_Files[File_num-1],"r"); // Ouvre le fichier en mode binaire afin de le lire
unsigned long File_Size=0;
fseek(Current_File,0,SEEK_END); // Positionne le curseur à la fin du fichier.
File_Size=ftell(Current_File); // Détermine la taille du fichier grâce à la position de la lecture
fseek(Current_File,0,SEEK_SET); // Repositionne la lecture en début de fichier.
Buffer_File=malloc(File_Size);
File_BOOL=1; // Afin de savoir qu'un fichier à été charger et qu'il faut libérer le bloc de mémoire alloué à la fin !
fread(Buffer_File,File_Size,1,Current_File); // Copie le Fichier dans un Buffer.
printf("File lenght : %ld",strlen(Buffer_File));
printf("File size: %ld",File_Size);
ngetchx();
fclose(Current_File);
}
}
if(File_BOOL)
{
return Buffer_File;
}else
{
printf("NULL !");
ngetchx();
return NULL;
}
} // Fin de la Fonction Load_TLF()
Donc dans le fichier main je l'utilise comme ceci :
unsigned char File_BOOL=0;
void *Buffer_File;
Buffer_File=Load_TLF(File_BOOL); // charge un fichier TL et return l'adresse du buffer alloué
Mais par contre j'ai des petits soucis parce-que à l'intérieur de la fonction il arrive une fois sur deux que la taille du bloc de mémoire soit différent de sa longeur et puis la taille du bloc de mémoire est différente à l'intérieur et à l'extérieur de la fonction.
En plus sur ma Ti 89 le programme fait que de planter : je suppose que c'est à cause de cette fonction, donc si vous voyez des erreurs que j'aurais pû faire signalez le moi ça serait sympa !
