Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 2013
-
24 mars 2008 à 12:40
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 2013
-
24 mars 2008 à 16:36
Bonjour , voila j'ai un petit probleme pour lire 1 fichier WAD ( wad )
donc suivant le modele décrit je me suis fait 2 structures :
struct Header
{
char identification[4];
int numLumps;
int pInfoTableOfs;
}header;
struct Directory
{
int filePos;
int size;
char name[8];
}directory;
et je lis comme cela le fichier : (je poste le "source" ) :
printf("Position dans le fichier %d \n\n",ftell(file));
printf("Lecture du directory: (pos : %d)\n\n",ftell(file));
//lecture du directory
fread(&directory,sizeof(struct Directory),1,file);
// infos
printf("pointer vers fichiers : %d\n",directory.filePos);
printf("taille en bytes du lump: %d\n",directory.size);
printf("nom du directory : %s\n",directory.name);
system("PAUSE");
fclose(file);
return EXIT_SUCCESS;
}
Bon ce code fonctionne , je trouve les bon renseignements dans le HEADER , je me positionne sur le directory , il s'appelle PLAYPAL (j'ai verifié avec 1 autre logiciel et c'est juste )
Mon probleme est le suivant : comment trouver les autres directory , je ne comprends pas , il n'y a plus aucuns renseignements sur ou trouver les autres ?
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 24 mars 2008 à 13:01
Bonjour,
Vu la description sur Wiki; les "numlumps" directories sont les uns derrière les autres tout simplement ! Il faut faire une boucle qui fait "numlumps" fread(&directory).
printf("pointer vers fichiers : %d\n",directory.filePos);
printf("taille en bytes du lump: %d\n",directory.size);
printf("nom du directory : %s\n",directory.name);
i=0;
iMax=header.numLumps;
while(i<=iMax)
{
//lecture du directory
fread(&directory,sizeof(struct Directory),1,file);
// infos
printf("pointer vers fichiers : %d\n",directory.filePos);
printf("taille en bytes du lump: %d\n",directory.size);
printf("nom du directory : %s\n",directory.name);
i++;
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 24 mars 2008 à 13:53
D'autre part, l' dans la structure headernom dans la structure ne sont pas des chaînes de caractères au sens C (c'est à dire terminées par un zéro binaire) mais de simples tableaux de caractères (sauf pour le nom%s ne fonctionne pas ! il faut %4.4s pour l'identificateur et %-8.8s pour le nom.
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 24 mars 2008 à 13:55
Je ne connais pas du tout le détail de ces choses là mais sur Wiki,
REJECT semble être une donnée tout à fait prévue et valable !
ok ca je sais mais le prob c que je boucle dessus !
D'autre part, l' dans la structure headernom dans la structure directory
ne sont pas des chaînes de caractères au sens C (c'est à dire terminées
par un zéro binaire) mais de simples tableaux de caractères (sauf pour
le s'il est plus court que 8 caractères puisqu'il est sensé être comblé avec des 0). L'affichage avec un %s ne fonctionne pas ! il faut %4.4s pour l'identificateur%-8.8s pour le nom.
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 24 mars 2008 à 15:24
a mon avis g 1 probleme avec mon wad (qui est pourtant le WAD officiel d'heretic) parce que avec ton code aussi je boucle sur REJECT ... a partir du numlump 38 jusque 2415 c le meme !