1

J'ai du mal a determiner le type personnalisé d'un fichier externe.
Puisque pour definir un type personnalisé on doit faire comme ça(exple tiré d'un tutorial de nEUrOO):

if ((fichier = fopen(“myfile”,”wb”)) == F_NULL)
return ;
else
{
//ici on met des data avec fwrite()
fputc(0,fichier); // ligne A
fputs("TIMG",fichier); //
fputc(0,fichier); // ligne B
fputc(OTH_TAG,fichier);
fclose(fichier) ;

voici l'extrait de mon projet ,qui ne marche pas:

if ((fichier = fopen(myfile,"rb")) == F_NULL) return;//j'ouvre
if (fseek (fichier,1,SEEK_END)){fclose(fichier) ; return ;} //je pointe à la ligne A et je quitte si erreur
char type[5]; //4 caracters+1 null byte pour la fin de string
if(!fgets (type,6,fichier)){fclose(fichier) ; return ;}//6 car fgets "read either n - 1 characters or a '\r' "et je quitte si erreur.Je suis en B
char types[3][5]={"MAN","CBO","POS"}; //les types que j'utilise dans mon jeu//cbo comme combo ; )
if (item!=types[result-1]) printf_xy(41,62,"'%s' isn't a %s",name,types[result-1]); //je compare pour savoir si apresje load le fichier ou non
else printf_xy(41,62,"used mem: %lu octets",sizeof(fichier)); //si c'est le bon type j'affiche la memoire utilisée par le fichier (ça ne marche pas d'ailleurs...)
fclose(fichier) ;//je referme
projet en cours XiaoXiaoShow

2

SYM_ENTRY *septr=SymFindPtr(SYMSTR(myfile),0);
if (!septr) return;
HANDLE h=septr->handle;
if (!h) return;
CESI fptr=HToESI(h);
if (*(fptr--)!=OTH_TAG) return;
while (*--fptr);
const char *ftype=fptr+1;

et voilà, tu as le type du fichier dans ftype.
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é

3

Petite erreur : il me semble que c'est SYMSTR au lieu de SYM_STR (1ere ligne) smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

Merci, c'est corrigé. smile
(Je confonds toujours... Ce n'est pas moi qui ai donné ces noms-là.)
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é

5

merci je vais modifier mon jeu...
et pour la taille du fichier??
projet en cours XiaoXiaoShow

6

SYM_ENTRY *septr=SymFindPtr(SYMSTR(myfile),0);
if (!septr) return;
HANDLE h=septr->handle;
if (!h) return;
short *fptr=HeapDeref(h);
short fsize=*fptr;

Ça te donne la taille du contenu du fichier. La taille affichée dans le Var-Link est fsize+2.
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é

7

merci bcp.

j'utilise des reallocs dans mon programme mais les infos dans la doc de TIGCC ne sont pas claire au sujet de la façon de libérer la memoire allouée grace aux réalloc : quand je free(ce que j'ai allouer) ça plante ...comment je fais alors??


projet en cours XiaoXiaoShow

8

if (ptr) free(ptr);
(pour éviter d'essayer de libérer NULL).

Si ça ne marche pas, c'est qu'il y a un bogue quelque part dans ton programme (débordement de tableau normalement) qui a corrompu les zones de mémoire dont free a besoin.
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é

9

merci, grace a ton aide j'avance bien..bientot j'espere, une release de mon travail!
projet en cours XiaoXiaoShow

10

Heuresment que kk est là. smile
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.

11

encore un truc:
j'utilise une structure principale contenant bcp de datas de differents types et un ponteur inclu avec;
Je doit allouer la memoire pour le pointeur meme si il fais partit d'une structure??
projet en cours XiaoXiaoShow

12

Pas pour le pointeur pour la zone ou il pointe. En bref le bloc ou le pointeur pointe.
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.

13

comme ça:

typedef struct { int short x; int short y; int short z;} XYZ; //a vertex
typedef XYZ *LOV;//a List Of Vertex
typedef char NAME[name_size_max];//a simple string as a name
typedef char KEYC[keyc_size_max];//a simple string as a key code
typedef struct { LOV b; XYZ g;} POS; //a position with g="gravity center"
typedef POS *LOP;//a List Of Positions
typedef struct {NAME a ; LOP b;int n;KEYC k; int p; int num;} CBO; //a combo with n="number of pos" and p="power of the cbo"
//num = number of the current position (=0 if the current position is independant)
typedef CBO *LOC;//a List Of Combos
typedef struct {NAME a ; LOC b;int n; int num;} MAN; //a huMAN = a character with n="number of combos"
//num = number of the current combo (=0 if the current combo is independant)

//l'important:
CBO curcbo;
curcbo.b=malloc_throw(cbo_size);//j'alloue de la memoire juste pour le bloc ou le pointeur pointe a l'interieur d'une structure...

???????
projet en cours XiaoXiaoShow

14

euh.

Essaye mais je sens que ça va pas marcher.

Je parlais de pointeur du genre void *ptr; pas de structure....
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.

15

sad ça marche pas malheureusement sad

j'ai essayer pour resoudre mon probleme de faire ça:

CBO *curcbo;

comme ça j'alloue de la memoire pour toute la structure en meme temps mais sa complique tout dans la suite du prog
alors je prefererais une autre solution ...
projet en cours XiaoXiaoShow

16

Essaye ça:
struct CBO *curcbo=NULL;

curcbo = (struct CBO *)calloc(1,sizeof(struct CBO));

Mais ça ne fait que allouer la structure en émoire CBO avec un pointeur curcbo.
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.

17

merci.
je crois avoir une idée je vais essayer et je reviens..
(pas aujourd'hui j'ai depassé mon heure d' internet par jour; a demain !)
projet en cours XiaoXiaoShow

18

ca sert a koi un calloc(1,....) pkoi passer par un pointeur de structure dans ce cas là fou

19

nEUrOO :
ca sert a koi un calloc(1,....) pkoi passer par un pointeur de structure dans ce cas là fou

Peut-être parce que la structure est grosse. 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é

20

c pas le cas ici roll enfin, c pas "lourd"

21

lol, je me suis gourré, j'aurais pas du prendre ça comme exemple. Le pricnipe y est.
Un malloc suffit.
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.

22

la structure peut et sera certainement "lourde" par la suite si vous voulez dire "contenant beaucoup de data"
projet en cours XiaoXiaoShow

23

*la solution que j'avais trouvé:
MAN curman; //c'est plus un pointeur comme avant
CBO curcbo; //idem
POS curpos; //idem
LOC curloc=NULL;//le type de mon pointeur dans la structure
LOP curlop=NULL;//idem
LOV curlov=NULL;//idem
maintenant j'alloue de la mem pour ces pointeurs:
curlov=malloc_throw(lov_size);//alloue de la memoire pour la liste de vertices
curlop=malloc_throw(sizeoflop(curcbo.n));//alloue de la memoire pour la liste de positions
curloc=malloc_throw(sizeofloc(m,curman.n));//alloue de la memoire pour la liste de combos
et enfin :
curpos.b=curlov ;
curcbo.b=curlop ;
curman.b=curloc ;
mais ces dernieres lignes ne servent plus a rien puisque je peux utiliser directement les pointeurs curlov,curlop et curloc...

*euh ça change beaucoup sizeof(struct CBO) et sizeof(CBO)?

*au debut du prog je charge les données issus de myfile dans les structures decrites avant avec des fonction comme celle-la:

void loadcbo (CBO s)
{
fread((NAME *)(&s.a),sizeof(NAME),1,myfile);
fread((int *)(&s.n),sizeof(int unsigned),1,myfile);
fread((KEYC *)(&s.k),sizeof(KEYC),1,myfile);
fread((int *)(&s.p),sizeof(int),1,myfile);
fread((int *)(&s.num),sizeof(int unsigned),1,myfile);
int unsigned i;for(i=0;i<(s.n);i++) loadpos(*((s.b)+i));
}
//pour savoir a quoi correspond s.a ,s.n etc voir post#12
pourquoi ça ne marche pas si je fais directement

void loadcbo (CBO s)
{
fread((CBO *)(&s),sizeof(CBO),1,myfile);
}

(j'ai remaqué que sizeof(CBO) est differente de la somme des sizeof(de chaqu'un des elements internes de la structure) pourquoi?
En plus sizeof() ne prend en compte que la place prise par un pointeur et non la place prise par ce qu'il pointe...)

pendant le programme j'utilise ces structures dans mon jeu et en fin de programme je sauvegarde tout dans myfile avec les fonctions inverse de celle de chargement(est-ce la bonne methode?):

void loadcbo (CBO s)
{
fwrite((NAME *)(&s.a),sizeof(NAME),1,myfile);
fwrite((int *)(&s.n),sizeof(int unsigned),1,myfile);
fwrite((KEYC *)(&s.k),sizeof(KEYC),1,myfile);
fwrite((int *)(&s.p),sizeof(int),1,myfile);
fwrite((int *)(&s.num),sizeof(int unsigned),1,myfile);
int unsigned i;for(i=0;i<(s.n);i++) loadpos(*((s.b)+i));
}

//ou alors:

void loadcbo (CBO s)
{
fwrite((CBO *)(&s),sizeof(CBO),1,myfile);
}


projet en cours XiaoXiaoShow

24

>*euh ça change beaucoup sizeof(struct CBO) et sizeof(CBO)?
C'est facile à vérifier... Un ClrScr(); printf_xy(0,0,"%lu",sizeof(CBO)); printf_xy(0,10,"%lu", sizeof(struct CBO)); doit te donner la réponse.
A mon avis, aucune différence.

> (j'ai remaqué que sizeof(CBO) est differente de la somme des sizeof(de chaqu'un des elements internes de la structure) pourquoi?
Si tu as un nombre impair de char suivis par un short ou un long (tout type word-aligned), il va être mis un octet supplémentaire vide, pour éviter d'avoir des Address Errors. Ca peut venir de là.

> En plus sizeof() ne prend en compte que la place prise par un pointeur et non la place prise par ce qu'il pointe...
Bah, ça, c'est parfaitement normal !


Sinon, une fois que ton format de fichier sera bien défini, tu devrais penser à utiliser les fonctions de vat.h + memset / memcpy, plutôt que les stdio.h... Tu vas gagner beaucoup de place (jusqu'à 1 ou 2 KO) et la vitesse sera augmentée.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

25

Sinon, une fois que ton format de fichier sera bien défini


Je te conseil je vraiment te pencher sur cette étape car il te faut un format de petite taille et surtout rapide pour accéder à des éléments.
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.

26

mon format de fichier ne convient pas:
ça fait la n-ieme fois que j' en redefini le format et donc que je modifie la suite du prog et pourtant je n'arrive pas a comprendre pourquoi ça ne marche pas.
Ce que je veux faire c'est un jeu de combat :
D'apres mes observations un jeu comme tekken ou street fighter correspond graphiquement a une serie de combo qui s'enchaine, chaqu'un etant declanché par une combinaison de touches; donc pour mon jeu les données a mettre en memoire sont :
-une liste de n combos
-chaque combo correspond a une liste de m positions (variant suivant les combos)+un code de combinaison de touches+un nom de combo+une puissance+vos suggestions!!
et chaque position et une liste de 16 points (structure du corps du joueur)+ un centre de gravité+ vos suggestions...

comme vous pouvez le constater dans le post n°12 j'ai donner un des moyens que j'ai trouver pour organiser la mise en memoire mais qui ne convient pas sad
*comment feriez-vous?


j'avais deja fait pendant l'année un editeur de combo et je n'utilisais pas encore de pointeurs car je ne pouvais modifier qu'un combo de 5 posiitions (ça marchait bien mais il n'y avais pas de sauvegarde externe au programme et donc on recommence a chaque fois...)
maintenant daans la nouvelle version j'ai fais les routines: SAVE LOAD NEW etc..
mais avec des pointeurs pour la premiere fois pour permettre de creer un nombre indefini de combos
et de positions (et ainsi eviter de sauvegarder le nombre maximal possible de combo a chaque fois...)
mais depuis comme je ne maitrise qu'avec difficulté les pointeurs ça ne marche plus et je rame...sad sad

*j'aimerais savoir si je fais ce travail uniquement pour moi ou si ça vous interesse comme projet:
seriez vous prêt a creer des combos portant votre nom (par exemple) et que j'integrerai a mon programme principale en plus des combos que je fais moi-meme pour le jeu de combat finalement obtenu et distribué evidement gratuitement a tous?
ou simplement prêt a vous amuser sur un bon jeu de combat anti-stress?
ou je laisse tomber car "trop compliqué" ou alors "ça va prendre trop de memoire" ou encore "c'est nul".
projet en cours XiaoXiaoShow

27

si tu sauvegarde la valeur des pointeur (pas la valeur de sur quoi il pointe) c'est normal que sa ne marche pas
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

c'est bon j'ai trouver comment faire merci beaucoup!
projet en cours XiaoXiaoShow