typedef struct { char Height; // In pixel char Weight; // In pixel /16 (in word) short Data[1]; // Should be [] } BGS;
section ".data" xdef face xdef cote xdef haut ... face: dc.b 48,2 dc.w $0000,$0001,$0000,$E000 dc.w $0663,$0663,$3198,$F198 dc.w $0597,$07F7,$3A68,$FBF8 ...
extern BGS face, cote, haut; BGS *BGS_Liste[3] = {&face, &cote, &haut}; void _main(void) { int Compteur; FILE *fp = fopen ("metgfx", "wb"); if (fp == NULL) return; fputc (3, fp);//Nombre de BGS for (Compteur = 0; Compteur < 3; Compteur++) { fwrite (BGS_Liste[Compteur], sizeof(char), 48 * 2 * 2 * 2 + 2,fp); } fputc (0, fp); fputs ("GFX", fp); fputc (0, fp); fputc (OTH_TAG, fp); fclose (fp); }
BGS face, cote, haut; BGS *BGS_Liste[3] = {&face, &cote, &haut}; int Lecture_BGS(void) { int Nombre, Hauteur, Largeur, Compteur; FILE *fp = fopen ("metgfx", "rb"); if (fp == NULL) return 0;//Impossible de lire le fichier Nombre = fgetc (fp); for (Compteur = 0; Compteur < Nombre; Compteur++) { fread (BGS_Liste[Compteur], sizeof(char), 48 * 2 * 2 * 2 + 2, fp); } fclose (fp); return 1;//Aucun problème }
IroS a écrit :
short Data[1]; // Should be []
BGS *face, *cote, *haut; int Init_BGS_Samus(void) { BGS *BGS_Liste[3] = {face, cote, haut}; short Nombre, Compteur; FILE *fp = fopen ("metgfx", "rb"); SYM_ENTRY *Adresse = DerefSym(SymFind($("metgfx"))); //Retourne si le fichier n'est pas trouvé if (fp == NULL) return 0; //Récupère le nombre de BGS Nombre = fgetc (fp)*256; Nombre = Nombre + fgetc (fp); //Assigne les pointeurs vers le fichier externe for (Compteur = 0; Compteur < Nombre; Compteur++) { BGS_Liste[Compteur] = HeapDeref(Adresse->handle) + 2 + 2 + Compteur*(48*2*2*2+2); 48*2*2*2+2, fp); } fclose (fp); return 1; }
BGS *BGS_Liste[3]; int Init_BGS_Samus(void) { short Nombre, Compteur; SYM_ENTRY *Adresse = SymFindPtr($("metgfx"),NULL); //Retourne si le fichier n'est pas trouvé if (Adresse == NULL) return 0; unsigned char *Fileptr = HeapDeref(Adresse->handle); if(Fileptr == NULL) return 0; Fileptr+=2; // On saute les deux octets de taille //Récupère le nombre de BGS Nombre = *(unsigned short *)Fileptr; Fileptr+=2; //Assigne les pointeurs vers le fichier externe for (Compteur = 0; Compteur < Nombre; Compteur++) { BGS_Liste[Compteur] = Fileptr; Fileptr += 48*2*2*2+2; } return 1; }