1

Voilà, j'ai commencé à programmer une fonction dans un header qui permet de charger une fichier texte. C'est fonction doit renvoyer un pointeur vers un bloc de mémoire contenant le fichier :

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 ! smile
www.wikio.fr/user1921&info=comments

2

Pour plus de lisibilité :
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()
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3

Essaye de mettre à la fin, return &buffer_File.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

4

printf("File lenght : %ld",strlen(Buffer_File)); <- Si ton fichier contier des caratere NULL cette valeur est FAUSSE
printf("File size: %ld",File_Size);
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

2 - Tu ne teste pas si ton malloc a reussi
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

Oui, c'est vrai je n'ai pas encore tout "sécurisé" mais là ça ne serait pas normal qu'il rate.
www.wikio.fr/user1921&info=comments

7

....on sait jamais....

Cest souvent les pbm auquel on s'attendle moins qui surgissent...
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

8

Bon je n'arrive toujours pas à réoudre ce problème !sad

Bon alors déjà est-ce que la partie du code sur la recherche des fichiers vous paraît bonne ?

Ensuite est-ce qu'il y a des risques de plantage si j'ouvre tout les fichier du répertoire même le programme qu'il soit archivé ou non ?


Sinon j'ai tout "sécurisé" et les fonctions n'ont jamais renvoyé 0 ou NULL depuis mais ça n'évite pas du tout les plantages. Ca fait que de planter.

En général c'est la première fois que j'exécute le programme. Qd il est archivé ça ne marche jamais. Et sinon il plante un peu partout. Avant c'est un peu à cause des niveau de gris mais j'avais fait des erreurs toutes bêtes alors que là je ne vois pas. sad
J'ai bien preOs() mais c'est souvent que ça plante et qu'il ne peut rien faire. je suis tout le temps entrain d'enlever les piles. Alors que sur VTI ça passe très bien sauf quelque fois.

Et puis je vais considérer que Buffer_File fait bien la bonne taille et est bien renvoyé correctement de part la fonction puisque j'ai bien le texte du fichier qui s'affiche.
www.wikio.fr/user1921&info=comments

9

Ça veut dire quoi pour toi, ouvrir les fichiers ?
Si c'est juste lire leur contenu, il n'y a pas de pb, qu'ils soient archivés ou non.

10

List_Files[File_num]=SYM_Ptr->name; // copie le nom du fichier dans la liste.

name est une string il faudrait pas utiliser strcpy?

et puis c'est un peu laid d'utiliser les fonction de stdio.h (fopen,fgets...)(qui prennent bcp de place)
fait un heapderef(sym_entry->handle) a la place ca simplifiera bien plus ton code

11

Ça veut dire quoi pour toi, ouvrir les fichiers ?
Si c'est juste lire leur contenu, il n'y a pas de pb, qu'ils soient archivés ou non.

Apparement si !
Je viens pour la première fois d'invalider le code qui ouvre tout les fichiers et plus de plantages... enfin il faudra qd même que je vérifie ça.
Peut-être que c'est de la manière dont je le fais qui ne va pas. là je les ouvre en mode texte c'est peut-être ça qui ne va pas par exemple ?
Enfin j'espère que je vais trouver le moyen d'ouvrir les fichiers sans que ça plante.
En fait c'est juste pour reconnaîte mon futur format et que le fichier soit un fichier texte pour pouvoir l'éditer facilement.


heapderef(sym_entry->handle)
Oui tu as raison et d'ailleurs j'aimerais bien mais j'ai aucune doc là dessus ! Moi j'utilise les fonctions C standard décrit dans mon Livre sur le C et puis voilà.
www.wikio.fr/user1921&info=comments

12

name est une string il faudrait pas utiliser strcpy? *
Je ne sais pas mais ça marche très bien comme ça. En fait c'est pas une chaîne mais un pointeur si je ne me trompe pas ?
www.wikio.fr/user1921&info=comments

13

c'est pas tres dur en fait les fonctions de vat.h

char* ptr=HeapDeref(Sym_Ptr->handle)

ptr pointe alors sur le premier octet du ficheir (les deux promiers octets donnent la taille du fichier puis apre tu as tes données.

sinon pour les chaines, Le nom de la chaine est un pointeur vers le premier octet de la chaine donc en fait ca doit marcher ce que t'as fais...

14

Ok, merci ! smile C'est dommage qu'il n'y ai pas de doc en Français sur ces fonctions parce-que je me débarrasserait volontier de ces fonctions de hauts niveaux !
A mais d'ailleurs je crois que j'ai une version traduite en Français de la doc de TIGCC. J'y vais pas très souvent.
D'ailleurs il n'y a plus personnes qui est sur la traduction maintenant, non ?
www.wikio.fr/user1921&info=comments

15

La traduction de la doc de TIGCC est largement dépassée (elle est déjà inutilisable depuis longtemps), et ça va devenir pire avec l'ajout progressif des contributions...
Combien y a-t-il de traductions de la doc de TIGCC (je veux dire, est-ce qu'elle a été traduite en d'autres langues) ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

16

Bah, moi je ne trouve pas. En tout cas il y a beaucoup de choses qui sont encore valable. smile
Il y avait la FAQ de Ti.fr aussi qui était pas mal.
Bon sinon il y a le tuto de squale92 qui est excellent parce-que rien qu'avec la doc de TIGCC aussi complète soit elle, on ne s'en sort pas facilement des fois.
Mais bon je en vais pas me plaindre parce-que sur PC, par exemple avec DevC++, de la doc il n'y en a point et c'est aussi l'une des raison pour lesquelles je préfère programmer sur Ti. smile
Et puis les fread(), fopen() et tout ça c'est sûr à 100 % maintenant ? Parce-qu'avec DevC++ sur PC, je sais qu'il n'y a pas de pb mais sur TI j'ai pas testé toutes les fonctions.

Mais peut-être qu'il y a des trucs qui ne passe aps du genre le fgets() avec les programme en asm de même que d'ouvrir le fichier en mode texte ?
D'habitude j'utilise fread mais là je ne sais plus pourquoi j'ai été obligé d'utiliser fgets()
.
Enfin de toute manière je vais tout essayer jusqu'à ce que ça ne plante plus mais j'y aurais passer du temps ! sad Et puis c'est ma 89 qui aura souffert aussi. sad
www.wikio.fr/user1921&info=comments

17

Bon sinon il y a le tuto de squale92 qui est excellent

merci smile
sur PC, par exemple avec DevC++, de la doc il n'y en a point

bah, utilise une paire de bouquin pr apprendre le C++ smile
(et si utilise des librairies, genre Allegro, il y a souvent une doc dans le genre de celle de TIGCC, qui explique comment utiliser les fonctions)
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

18

si utilise des librairies, genre Allegro

je suis tjrs pas arrivé à la faire focntionner avec DevC++ ! grin
Et puis le C++, ça ne me branche pas plus que ça.
www.wikio.fr/user1921&info=comments

19

je suis tjrs pas arrivé à la faire focntionner avec DevC++

tiens, Pim89 avait le meme problème que toi.
sous MSVC, elle tourne sans problème, par contre smile
Et puis le C++, ça ne me branche pas plus que ça

je disais pareil il y a un an et demi...
je disais moins pareil il y a un an
je dis plus du tout pareil maintenant
concept objet powa !
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

20

sous MSVC, elle tourne sans problème, par contre

Sans rien modifier ? Parce-que pour DevC++ c'est possible mais c'est assez compliqué.
je disais pareil il y a un an et demi...

C'est quoi qui t'as fait changer d'avis ?

Bon sinon à part ça mainteant ma fonction marche ! smile
Ca, ça ne passait pas :
char TAG_File[]="";
fgets(TAG_File,3,Current_File);


Il fallait directement déclaré la taille de la chaîne : char TAG_File[20];
Comme quoi c'est vraiment bête et c'est seulement maintenant que je trouve la solution roll


www.wikio.fr/user1921&info=comments

21

(perso sous MSVC++ je n'y suis pas arrivé non plus, mais j'ai pas trop insisté en fait grin)
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

22

Ouais, c'est ce qui me semblait : il faut modifier deux trois trucs. Mais moi non plus je n'ai pas insisté grin
www.wikio.fr/user1921&info=comments

23

si tu recupere pas la version compilé pour msvc, il faut avoir DJGPP sous la main
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

24

C'est censé marcher avec MinGW (ou Dev-C++ qui l'utilise)...
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é

25

oui mais pour compiler pour MSVC, il faut certain executables de DJGPP
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

26

Bref, vive MinGW. tongue
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é

27

DJGPP est gratuit donc aucun interet a utiiser MinGW quadn MSVC fonctionne tres bien tongue
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

28

M$VC n'est pas gratuit, donc aucun intérêt de l'utiliser quand MinGW marche très bien!
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é

29

MSVC est recuperable en version gratuite et officielement

Recupere le SDK Framework .net et tu a le compilo vb.net cs.net et c++.net tongue

et MSVC 6 est dispo en une version gratuite qui est installé sur mon pc tongue
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

30

oui, mais t'as de la chance, j'ai demandé pour .net moi et tjrs pas recu sad