1

Après plusieurs journées de debuggage d'un programme, j'ai vu que l'erreur venait du fait qu'on ne pouvait pas écrire 13 dans un fichier.

Alors EST-IL POSSIBLE D'ECRIRE 13 DANS UN FICHIER ? Y A-T-IL D'AUTRES NOMBRES QU'ON NE PEUT PAS ECRIRE ?

merci
What kind of technology is this?

2

Bah oué, ça porte malheur alors il a été interdit d'écriture dans les fichiers trigic

Non en fait ton pb vient du fait que tu dois ouvrir ton fichier binaire comme un fichier texte... Utilise fopen(mon_fichier,"wb"), pas "w"... (et pense à rajouter un tag si t sur TI, genre fwrite("\0plop\0\xF8",7,my_fp))

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

T'as plus de détail ? Genre un extrait du source, le type de fichier (donnée brute ou tu veux faire une variable qui contient la valeur 13), ... ?
[edit: cross. Suis le conseil de Pollux d'abord, ça a de grandes chances d'être ça ton pb]

4

En fait je veux juste sauver des nombres qui tiennent sur un octet. Et parmi ces nombres, il ce peut qu'il y est 13.

J'ai essayé avec wb+ puis avec wb, mais ca ne change rien.

Dans la doc:
#define EOF (-1)


Indicates that the end of a file has been reached.

EOF is a constant which is usually returned as the result of file handling functions if an end-of-file is reached, or in a case of an error. The ANSI standard does not propose exact value of this constant, but it proposes that it must be negative.


Effectivement, j'ai des -1 presque partout apres avoir essayé de mettre un 13.

Pourtant, je ne demande pas la lune, je veux ecrire0x00001101 dans de la mémoire.

fopen (str_map, "wb+");

...

fputc (13, fmap);

...

fputc (0, fmap);
fputc (STR_TAG, fmap);
fclose (fmap);


A la fin, le fichier doit etre sauvé sous STR.
What kind of technology is this?

5

c pas très clair... en quoi 13 est-il différent des autres nombres ? qu'est-ce qui change si tu mets 14 au lieu de 13 ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

6

Si je mets 14 au lieu de 13, tout marche bien.

Ya encore ca dans la doc:
#define putc fputc


Writes a character to a stream.

putc writes the character c to the stream given by stream. It will update the stream's file pointer, and expands the size of associated variable if necessary. If the file is opened in "text" mode (see fopen), all '\n' characters will be translated to '\r' 0x20 sequence during writting (to satisfy the format of the text in TEXT variables). On success, putc returns the character c. On error, it returns EOF.


En fait, fputc ne veut apparement pas qu'on ecrive 13 (effectivement 13 = RETURN).

Je vais essayer un memcpy puisque fputc n'est pas du tout cooperatif.
What kind of technology is this?

7

tu réponds pas à ma question...
Pollux :
c pas très clair... en quoi 13 est-il différent des autres nombres ? qu'est-ce qui change si tu mets 14 au lieu de 13 ?

le fichier est tronqué, a le mauvais type, prend un octet de trop/de moins ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

8

Si je mets 14 au lieu de 13, tout marche bien car 13 est le code pour un retour a la ligne sans doute. Sans 13, tout il n'y a aucun probleme. 13 pose probleme.

J'utilise fputc car cette fonction redimensionne automatiquement le fichier d'arrivée.

Le fichier a le bon type.
La sauvegarde dans le fichier se deroule sans probleme mais apres, son analyse par le programme echoue car fput n'ecrit pas ce qu'on lui demande. (j'ai l'impression qu'il n'ecrit rien du tout si on lui demande de mettre 13)

Le probleme vient uniquement du 13 qu'on ne peut pas ecrire dans le fichier externe.
What kind of technology is this?

9

tu connais le varlink ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

10

Le fichier a le bon type (STR), le bon nom, la bonne taille, n'est pas tronqué, ne fait rien planter a la sortie du programme.
Il prend un octet de moins quand j'essaye d'y ecrire 13 (car fput ne sait pas ecrire 13).
What kind of technology is this?

11

c bizarre... p-ê un bug de tigcclib ? (mais c bizarre, parce que fputc() n'est censé faire des trucs magiques que pour '\n', pas pour '\r') Kevin va se faire un plaisir de regarder ça je suis sûr happy

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

12

J'ai utilisé des memset. Le probleme est exactement le meme: 13 fait tout "planter". Donc fputs n'est pas responsable du bug.

fputc (0, fmap);
fputc (0, fmap); // Pour agrandir au cas ou
memset(fmap->fpos-2, ((j<<3)&31)+b, 1);
memset(fmap->fpos-1, j>>2, 1);

au lieu de:

fputc ((char)(((j<<3)&31)+b), fmap);
fputc ((char)(j>>2), fmap);

Ca revient au meme.

Je vais voir ailleurs alors...
What kind of technology is this?

13

Le probleme vient de fgetc alors...
#define getc fgetc


Gets a character from a stream.

getc gets the next character on the given input stream (associated with the structure pointed to by stream), and increments the stream's file pointer to point to the next character. If the file is opened in "text" mode (see fopen), a character after '\r' will be swallowed during reading (to skip over the "command byte" at the begining of the each line in a TEXT variable).

On success, getc returns the character read, after converting it to an integer without sign extension. On error (usually end-of-file), it returns EOF.
What kind of technology is this?

14

C'est ma faute !

J'avais mis fopen("truc","r") pour la lecture .....

Qu'est-ce que c'est relou les bugs comme ça....

Merci pour votre aide.
What kind of technology is this?

15

heu ton but est de stoquer un char dans un fichier externe ?

pourquoi tu utilise fputc si tu est en BINAIRE ?

fputc, fprintf & co sont fait pour le mode TEXTE

si tu veux utiliser le mode binaire, il faut utiliser fwrite/fread

apres ne t'étone pas si tu as des pbms
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.

16

euh, non, pas du tout Godzil, ça marche pour les 2...

et sinon pour lire des fichiers binaires sur TI, fgetc/fread sont pas super efficaces, c bcp mieux d'aller chercher directement l'adresse du fichier et d'aller lire en mémoire ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

17

ça marche mais si tu as un comportement bizzare il faut pas s'étonner

ça fonctionne correctemetn sur ti, mais sur pc c'est deja largemetn moins sur, le mode binaire ne fait normalemetn pas certaines convertion que fait le mode texte, bref faut se mefier, utiliser fputc/fgetc c'est pas forcement la meilleur methode

sinon oué recuperer l'addresse mémoire du fichier et faire un ptit coup de

#define GetVar(t,f) (t *)(f)

addr = HeapDeref(fp->handle);

sMaStruct1 = GetVar(MaStruct1,addr);

addr += sizeof(MaStruct1);

sMaStruct2 = GetVar(MaStruct1,addr);

etc...


(histoire de faire geuler kk ^^)

attention ceci marche tres bien pour du readonly, mais pour ecrire ça marchera jamais aussi simplement (surtout si le fichier est en flash !!!)
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.

18

Godzil :
ça marche mais si tu as un comportement bizzare il faut pas s'étonner
ça fonctionne correctemetn sur ti, mais sur pc c'est deja largemetn moins sur, le mode binaire ne fait normalemetn pas certaines convertion que fait le mode texte, bref faut se mefier, utiliser fputc/fgetc c'est pas forcement la meilleur methode

T'es qd même pas en train de sous-entendre que je fais pas la différence entre spécification et implémentation tongue
Non mais je ne vois absolument aucune restriction dans le standard C, et si tu regardes la doc sur MSDN tu verras qu'ils parlent à un endroit du mode binaire (pour préciser ce qui se passe dans le cas de fputwc)...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

19

certe, et non je dit pas que tu sait pas faire la diff, juste qu'utiliser des trucs "astandard" rique un jour de poser un pbm ^^
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.

20

mais justement, c parfaitement standard embarrassed

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

21

Hey, dites, le problème a déjà été résolu!
Galmiza :
C'est ma faute !
J'avais mis fopen("truc","r") pour la lecture .....


Et au passage:
Galmiza
: Le fichier a le bon type (STR)

Non, ce n'est pas le bon type pour un fichier binaire! Les fichiers de type personnalisé, c'est pour les chiens? http://tigcc.ticalc.org/doc/faq.html#55
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é

22

Kevin Kofler
: Hey, dites, le problème a déjà été résolu!

Et donc il faut fermer le topic ? gol C juste que Godzil pensait que fgetc/fputc n'était pas portable en binaire, et il me semble que si...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

23

On peut utiliser fgetc/fputc en binaire en effet.
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é

24

Tant qu'on y est encore je voudrait savoir :
- est la seule façon de faire pour sauvegarder des variables de tout type(structure ,union tableau) d'un prog C ?

n'y a-t-il pas de librairie qui prenne en compte la gestion des données externes automatiquement ?
(j'aurais cru que oui !)

Parceque moi j'ai ce prolème actuellement ; tout un tas de structure décrivant le jeu de scrabble que je voudrait bien sauver en externe et récupérer sans trop coder.
Déjà que le codage de la plate forme de jeu qui finira certainement dans 2 heures me donne du file à retordre.

D'ailleur c'est pareil pour le Dico; il faut que je fasse des fichiers externes alors ça va pas avancer pas de beaucoup ;
sauf si y a moyen de faire plus rapide que des conversion de toutes les données en string!

25

andoh_wilfried :
Tant qu'on y est encore je voudrait savoir : - est la seule façon de faire pour sauvegarder des variables de tout type(structure ,union tableau) d'un prog C ?

Oui, mais tu ferais mieux d'utiliser vat.h et pas stdio.h.
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é

26

disons que si je pouvais avoir quelque indication sur les fonctions à utiliser , ça m'aiderai un peu!
C'est pas que j'ai pas envie de me taper la DOC en Anglais (ce qui me pose quelques problèmes même si le dictionnaire aide pour les mots un peu trop spécifiques)

27

Ben, SymFindPtr, SymAdd, DerefSym avant tout.
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é

28

on peut pas écrire 666 non plus sad
"I read the game.dll assembly more easily than you read the joke on the back of your box of Cocoa Pebbles, and have spent the past 2 1/2 years navigating it." ©

29

Normal, 666>255. roll
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é

30

trophor, pya grin
avatar