1

fp=fopen(GFX[id_gfx],"rb"); if (fp=NULL) {gl_put_large_string(DARK_SCREEN(DScr[0]),0,12,(const char *)"ERROR : GFX not found"); gl_wait_a_key(); return 1;} T=fgetc(fp); S=fgetc(fp); ///Tiles1=malloc(T*sizeof(SPRITE_16)); ///Tiles2=malloc(S*sizeof(SPRITE_16)); Tiles1=malloc(10000); Tiles2=malloc(10000); if (S==0 || T==0){gl_put_large_string(DARK_SCREEN(DScr[ts]), 0,12,(const char *) "ERROR : not enough RAM"); return 1;} gl_put_large_string(DARK_SCREEN(DScr[ts]), 0,60,(const char *) "Tiles allocated"); gl_wait_a_key(); fread (Tiles1,1, sizeof(SPRITE_16)*T,  fp); fread (Tiles2,1, sizeof(SPRITE_16)*S,  fp); fclose(fp);

bien voila la jolie source de ma fonction

je crée un fichier externe comme ça :
fp = fopen("GFX000","wb")
fputc(33,fp);// nbre T1 //arriere plan
fputc(41,fp);//nbre T2 // sprites
//on y met la premiere image:
if(!fwrite(Tiles1,1,sizeof(SPRITE_16)*33*2,fp)) printf("ERROR3 n")
//la 2eme
if(!fwrite(Tiles2,1,sizeof(SPRITE_16)*41*2,fp)) printf("ERROR4 n")
//ngetchx();
//on met une extension speciale:
fputc(0,fp);
fputs("SGFX",fp);
fputc(0,fp);
fputc(OTH_TAG,fp);
//on ferme le fichier
fclose(fp);


et donc je veux extraire les tableaux Tiles1 et Tiles2 qui sont des grands tableaux de sprite_16 (tableau à un indice)

et il semble que ceci :
fread (Tiles1,1, sizeof(SPRITE_16)*T, fp);
fread (Tiles2,1, sizeof(SPRITE_16)*S, fp);

extrait de la source de dessus fasse planter la calc, et je ne sais pas pourquoi
avatar
納 豆パワー!
I becamed a natto!!!1!one!

2

ben déja, ça serait pas plutôt ça : fread (Tiles1,1,sizeof(SPRITE_16)*T*2,fp); et fread (Tiles2,1,sizeof(SPRITE_16)*S*2,fp);, vu que c'est ce que tu fais à l'écriture ?

Et tu devrais eviter les fopen/fread/fwrite. Utilise les structures SYM_ENTRY, c'est bien mieux smile
Mon site perso : http://www.xwing.info

3

gloups !!!! grin j'avais mm pas remarqué ça grin

et pour les structure sym_entry je sais le faire mais c'est pas ce que je com)pte utiliser pour le moment
avatar
納 豆パワー!
I becamed a natto!!!1!one!

4

Verifie que tiles1 et tiles2 soient bien allouer.

5

ah oui, j'etais vraiment fatigué hier en ecrivant
if(S==0 || T==0) au lieu de if(Tiles1==0 || Tiles2==0)picol
avatar
納 豆パワー!
I becamed a natto!!!1!one!

6

bon je n'en sors pas !!! avec les SYM_ENTRY, qq un peut me donner un exemple ? grin
avatar
納 豆パワー!
I becamed a natto!!!1!one!

7

Voici une aide que m'a donné Kévin Kofler, si ça peut t'aider :
Créer un fichier :

On alloue un bloc avec HeapAlloc (PAS avec malloc).
On déréférence le handle avec HeapDeref pour avoir son adresse.
On met un word (unsigned short) donnant la taille du fichier, puis le contenu du fichier, dans ce bloc.
On crée un symbole avec SymAdd.
On place le numéro du bloc dans la structure SYM_ENTRY (dans le champ handle).


Lire le contenu d'un fichier :

On obtient un SYM_ENTRY * avec SymFindPtr.
On prélève son champ handle.
On déréférence le handle avec HeapDeref pour avoir l'adresse du bloc.
On rajoute 2 pour sauter la taille du fichier. On se retrouve avec un pointeur vers son contenu.

8

ok mais je pensais que fwrite suffisait a creer un fichier et fread pour l'extraire voire symfindptr pour avoir un pointeur
avatar
納 豆パワー!
I becamed a natto!!!1!one!

9

Et en gros, ça donne ça pour ecrire :

SYM_ENTRY *sym;
char *file;
sym = DerefSym (SymAdd (SYMSTR(GFX[id_gfx]));
file = (char *)HeapDeref (sym->handle = HeapAlloc(taille_du_fichier));
*(unsigned short *)file = taille_du_fichier;
file += 2;
//et là, tu met ce que tu veux dans file entre les adresses (file) et (file+taille_du_fichier-2), par exemple :
memcpy (file, Tiles1, sizeof(SPRITE_16)*T);


Pour lire :
SYM_ENTRY *sym;
char *file;
sym = SymFindPtr (SYMSTR(GFX[id_gfx]));
file = (char *)HeapDeref (sym->handle);
taille_du_fichier = *(unsigned short *)file;
file += 2;
//et là, tu récupère ce que tu veux dans file entre les adresses (file) et (file+taille_du_fichier-2), par exemple ça :
memcpy (Tiles1, file, sizeof(SPRITE_16)*T);


Vala, ça applique ce que disait jackiechan91 grin

Attention, ne fait jamais de copie de char dans et vers une adresse impaire : *(file+1) = (char)machin; va lamentabement planter dans l'exemple que je t'ai donné.
Mon site perso : http://www.xwing.info

10

excellent !! merci bcp !cool
avatar
納 豆パワー!
I becamed a natto!!!1!one!

11

erf, ça marche pas !!! // C Source File // Created 26/04/2002; 13:45:17 #define USE_TI89              // Compile for TI-89 #define USE_TI92PLUS          // Compile for TI-92 Plus #define OPTIMIZE_ROM_CALLS    // Use ROM Call Optimization // #define SAVE_SCREEN        // Save/Restore LCD Contents #include <tigcclib.h>         // Include All Header Files #include "genlib.h" extern  SPRITE_16       Tiles1[];       // Import reference extern  char            Matrix1[];      // Import reference extern  SPRITE_16       Tiles2[];       // Import reference extern  char            Matrix2[];          char            murs[16*30]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,                                      1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,                                      1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,                                      1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,                                      1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,                                      1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,                                      1,1,1,0,1,0,0,0,0,1,1,0,0,0,0,1,                                      1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,                                      1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,                                      1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,                                      1,0,1,0,1,0,1,0,0,0,0,0,0,1,0,1,                                      1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,1,                                      1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,                                      1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,                                      1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,                                      1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,                                      1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,1,                                      1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,                                      1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,                                      1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,                                      1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,                                      1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,                                      1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1}; short autres[][32]= {//pres/abs,sprite,cox,coy,?????,????,ref_dlg,event_dlg,mouvx,mouvy,sens,pos_sens,tag_spé,??,??,??,?? ,????????,anim,pos_anime,timer,hrztl_vertic   {  0,         1,   48, 96,   0,  0,      0,      0,     64,  64,   2,      0,         0, 0, 0, 0,0  ,  0      ,7          ,0 ,0  ,   0   },{0,         2,   96,176,   0,  0,      3,      0,  16*20,9*16,   3,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   },{0,         0,   128,32,   0,  0,      1,      0,     0 ,   0,   2,      0,         0, 0, 0, 0,0  ,  0      ,0          ,0 ,0  ,   0   },{0,         3,   80,176,   0,  0,      4,      0,  10*16,0,      0,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   },{0,         1,   96,160,   0,  0,      3,      0,  10*16,9*16,   0,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   },{0,         2,   80,194,   0,  0,      0,      0,  0    ,   0,   3,      0,         0, 0, 0, 0,0  ,  0      ,16         ,0 ,0  ,   0   },{0,         1,   32,176,   0,  0,      4,      0,  3*16,3*16,    0,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   },{0,         3,   48,176,   0,  0,      2,      0,  3*16,19*16,   0,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   },{0,         1,   176,220,  0,  0,      0,      0,  0   ,0   ,    3,      0,         0, 0, 0, 0,0  ,  0      ,16         ,0 ,0  ,   0   },{0,         2,   176,80,   0,  0,      3,      0,  5*16,8*16,    0,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   },{0,         3,   160,16,   0,  0,      2,      0,  7*16,4*16,    0,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   },{0,         3,   112,68,   0,  0,      4,      0,  0   ,0   ,    3,      0,         0, 0, 0, 0,0  ,  0      ,16         ,0 ,0  ,   0   },{0,         2,   320,320,  0,  0,      0,      0,  16*16,23*16,  0,      0,         0, 0, 0, 0,0  ,  0      ,16         ,1 ,0  ,   0   //random:   spr  cox   coy            "     "      rand(160)-80   3 ,tps imm(rand(8)+2)   }         };// sens=0-> aiguille montre, sens=1-> inverse, sens=2->fixe, sens=3-> aléatoire, sens=4-> baston :)                                     short nbre_autres=13; short size_x=16; short size_y=30; short T=35; short S=41; // Main Function void _main(void) { short a,b; SYM_ENTRY *sym,*sym2; char *file,*file2; sym = DerefSym (SymAdd (SYMSTR("MAP21"))); file = (char *)HeapDeref (sym->handle = HeapAlloc(2+size_x*size_y*3*sizeof(char)+32*nbre_autres*sizeof(char))); *(unsigned short *)file = 16*30*3*sizeof(char)+32*nbre_autres*sizeof(char)+2; file += 2; //et là, tu met ce que tu veux dans file entre les adresses (file) et (file+taille_du_fichier-2), par exemple : memcpy (file, &size_x, sizeof(short)); file += sizeof(short); memcpy (file, &size_y, sizeof(short)); file += sizeof(short); memcpy (file, &nbre_autres, sizeof(short)); file += sizeof(short); memcpy (file, Matrix1, sizeof(char)*size_x*size_y); file += sizeof(char)*size_x*size_y; memcpy (file, Matrix2, sizeof(char)*size_x*size_y); file += sizeof(char)*size_x*size_y; memcpy (file, murs, sizeof(char)*size_x*size_y); file += sizeof(char)*size_x*size_y; memcpy (file, autres, sizeof(char)*32*nbre_autres); sym2 = DerefSym (SymAdd (SYMSTR("GFX000"))); file2 = (char *)HeapDeref (sym2->handle = HeapAlloc(2+sizeof(SPRITE_16)*T+sizeof(SPRITE_16)*S+(T+S)*sizeof(short))); *(unsigned short *)file2 = sizeof(SPRITE_16)*T+sizeof(SPRITE_16)*S+2+(T+S)*sizeof(short); file2 += 2; memcpy (file2, &T, sizeof(short)); file2 += sizeof(short); memcpy (file2, &S, sizeof(short)); file2 += sizeof(short); //et là, tu met ce que tu veux dans file entre les adresses (file) et (file+taille_du_fichier-2), par exemple : memcpy (file2, Tiles1, sizeof(SPRITE_16)*T); file2+=sizeof(SPRITE_16)*T; memcpy (file2, Tiles2, sizeof (SPRITE_16)*S); }
VOIL0 G FAIT QUASIMENT du copier coller smile, le message ERR_THROW apparaît sur la TI, deux cas possibles : la taille d'un SPRITE_16 est impaire et donc ça foire, sinon ben je ne sais pas du tout.... qqun a une idé&e ?
avatar
納 豆パワー!
I becamed a natto!!!1!one!

12

personne ?icon22.gificon22.gificon22.gificon22.gificon22.gificon22.gificon22.gificon22.gif
avatar
納 豆パワー!
I becamed a natto!!!1!one!

13

Déjà, tu n'as mis aucun test pour voir si les fonctions n'échouent pas!
Par exemple, tu remplaces:
sym = DerefSym (SymAdd (SYMSTR("MAP21")));
par:
HSym hsym1=SymAdd (SYMSTR("MAP21"));
if (!*(long *)&hsym1) /*teste si hsym1 est 0*/ {ST_helpMsg("SymAdd(SYMSTR(\"MAP21\")) failed")exit(0);}
sym = DerefSym(hsym1);


Si tu fais ça partout, non seulement ça ne plantera probablement plus, mais tu verras aussi très bien où est le problème.
Au fait, pour la plupart des variables, if (!var) suffit pour tester si elles sont nulles. Ce n'est que pour les variables de type HSym que c'est lourd, parce que HSym est une structure.
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é

14

juste un truc, pourquoi apres tes "&", il y a un ";" ?????
Mon site perso : http://www.xwing.info

15

C'est un bogue de la coloration syntaxique du forum.
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é

16

Désolé de remonter ce topic, mais comment mettre une extension personnalisée à ce genre de fichier ???

Je voudrais qu'il apparaisse en face de mon fichier, l'extension "Map" ou "GFX".

Aussi, dans les 2 octets du début de fichier où on doit mettre la taille du fichier, faut il compter les 2 octets pris par cet emplacements en plus de tous ce qu'on a mis dans notre fichier , ou bien y stocker juste la valeur de nos données sans compter 2 1ers octets ???
Je parle de la valeur à stocker au début du fichier et non pas de la valeur qu'on doit mettre lors de l'allocation !! attention

Ex :

int taille;
taille = 2 + taille_de_tout_ce_qu'on_met; // '2' car au début du fichier, 2 octets sont pris pour stocker la taille
memcpy(begin_file, &taille, sizeof(int));

ou

int taille;
taille = taille_de_tout_ce_qu'on_met; // sans compter les 2 premiers octets du fichier
memcpy(begin_file, &taille, sizeof(int));

merci smile
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

17

Un type personnalisé est structuré come ça : {0, 'G', 'F', 'X', 0, OTH_TAG}

Il faut additionner taille du fichier + 1 à l'adresse du handle pour pointer sur OTH_TAG.

avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

18

Vi, mais j'ai pas tout compris en fait grin

quel code faut il mettre après tout les SymAdd() , SymDeref()ect pour rajouter cette extension ???
J'imagine donc qu'ajouter une extension augmentera la taille du fichier donc la taille qu'on alloue ??
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

19

Ha tu veux changer l'extension de fichiers déjà existants ? pourquoi confus
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

20

Pim89 a écrit :
Désolé de remonter ce topic, mais comment mettre une extension personnalisée à ce genre de fichier ???

Aussi, dans les 2 octets du début de fichier où on doit mettre la taille du fichier, faut il compter les 2 octets pris par cet emplacements en plus de tous ce qu'on a mis dans notre fichier , ou bien y stocker juste la valeur de nos données sans compter 2 1ers octets ???
Je parle de la valeur à stocker au début du fichier et non pas de la valeur qu'on doit mettre lors de l'allocation !! attention

Ex :

int taille;
taille = 2 + taille_de_tout_ce_qu'on_met; // '2' car au début du fichier, 2 octets sont pris pour stocker la taille
memcpy(begin_file, &taille, sizeof(int));

ou

int taille;
taille = taille_de_tout_ce_qu'on_met; // sans compter les 2 premiers octets du fichier
memcpy(begin_file, &taille, sizeof(int));

merci smile

C'est la deuxième solution.
Pim89 a écrit :
Vi, mais j'ai pas tout compris en fait grin

quel code faut il mettre après tout les SymAdd() , SymDeref()ect pour rajouter cette extension ??? J'imagine donc qu'ajouter une extension augmentera la taille du fichier donc la taille qu'on alloue ??

Ben oui, tu rajoutes 6 octets à la taille et tu y mets {0,'G','F','X',0,OTH_TAG} (tout à la fin).
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é

21

Ok, merci, je vais tester ça !!! wink
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

22

Petite remarque : ne jamais utiliser HeapDeref, mais plutôt HLock et HeapUnlock...

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

23

Pourquoi ??
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

24

Systèmes multitâches je suppose. Donc demande à ignorer. (AMS n'est pas un système multitâche.)
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

Bon, en tt cas merci à tous , tout marche nickel pour moi maintenant top, map externes gérées (et changement de map) dans le projet XXXXX !!!!!! blackblack
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

26

g une centaine de sprite16 qui trainent sur mon DD en format C niv gris 4, tu veux pim ?
warau kado niha fuku kitaru.

#trifouet#!!!

27

memcpy(begin_file, &taille, sizeof(int)) c'est pas génial, pour copier simplement un int, c'est mieux de faire *(int *)begin_file = taille sachant que tu est certain que begin_file est pair (car HeapAlloc alloue un bloc débutant à une adresse paire)

28

hwti >> oui, je sais, j'ai fait une méthode systématique, j'ai pas cherché, en plus ce prog de copie ne me sert qu'à stocker les map, et n'est pas dans le moteur du jeu, donc même si c pas optimisé c pas grave. wink

liquid >> oui, ça m'aurait intéréssé mais ce format est bien trop différent de celui d'Xlib, ça me donnerait toutes les defs à réorganiser, trop de temps quoi ... sad c dommage. sad
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

29

arg !! non !! ne dis pas ça ! donne moi ce format xlib vite fait
warau kado niha fuku kitaru.

#trifouet#!!!