version 1.71, 2013/03/01 09:29:30
|
version 1.72, 2013/03/10 17:01:05
|
Line 892 instruction_read(struct_processus *s_eta
|
Line 892 instruction_read(struct_processus *s_eta
|
struct_liste_chainee *l_element_courant; |
struct_liste_chainee *l_element_courant; |
struct_liste_chainee *l_element_courant_format; |
struct_liste_chainee *l_element_courant_format; |
struct_liste_chainee *l_element_inclus; |
struct_liste_chainee *l_element_inclus; |
struct_liste_chainee *l_element_suivant; |
|
|
|
struct_objet *s_objet_adresse; |
struct_objet *s_objet_adresse; |
struct_objet *s_objet_argument_1; |
struct_objet *s_objet_argument_1; |
struct_objet *s_objet_argument_2; |
struct_objet *s_objet_argument_2; |
struct_objet *s_objet_element; |
|
struct_objet *s_objet_resultat; |
struct_objet *s_objet_resultat; |
struct_objet *s_objet_type; |
struct_objet *s_objet_type; |
|
|
Line 909 instruction_read(struct_processus *s_eta
|
Line 907 instruction_read(struct_processus *s_eta
|
unsigned char *tampon_lecture; |
unsigned char *tampon_lecture; |
unsigned char *tampon; |
unsigned char *tampon; |
unsigned char *tampon2; |
unsigned char *tampon2; |
unsigned char type_enregistrement; |
|
|
|
(*s_etat_processus).erreur_execution = d_ex; |
(*s_etat_processus).erreur_execution = d_ex; |
|
|
Line 1948 instruction_read(struct_processus *s_eta
|
Line 1945 instruction_read(struct_processus *s_eta
|
|
|
BUG(((*descripteur).type != 'C'), uprintf("Bad filtype !\n")); |
BUG(((*descripteur).type != 'C'), uprintf("Bad filtype !\n")); |
|
|
if (fread(&type_enregistrement, (size_t) sizeof(unsigned char), |
if ((s_objet_resultat = lecture_fichier_non_formate( |
1, (*descripteur).descripteur_c) != 1) |
s_etat_processus, (*descripteur).descripteur_c, -1, |
|
d_faux)) == NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_erreur_fichier; |
|
return; |
|
} |
|
|
|
if ((type_enregistrement & 0xF0) != 0x40) |
|
{ |
|
// L'enregistrement trouvé n'est pas une liste. |
|
// Tout porte à croire que le fichier est corrompu. |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_fichier_corrompu; |
|
return; |
return; |
} |
} |
|
|
switch(type_enregistrement) |
if (empilement(s_etat_processus, |
{ |
&((*s_etat_processus).l_base_pile), |
unsigned char taille_enregistrement[8]; |
s_objet_resultat) == d_erreur) |
|
|
case 0x48: |
|
{ |
|
if (fread(taille_enregistrement, |
|
(size_t) sizeof(unsigned char), |
|
1, (*descripteur).descripteur_c) != 1) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_erreur_fichier; |
|
return; |
|
} |
|
|
|
longueur_enregistrement = taille_enregistrement[0]; |
|
break; |
|
} |
|
|
|
case 0x49: |
|
{ |
|
if (fread(taille_enregistrement, |
|
(size_t) sizeof(unsigned char), |
|
2, (*descripteur).descripteur_c) != 2) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_erreur_fichier; |
|
return; |
|
} |
|
|
|
// A FAIRE conversion de taille_enregistrement en longueur_enregistrement |
|
break; |
|
} |
|
|
|
case 0x4A: |
|
{ |
|
if (fread(taille_enregistrement, |
|
(size_t) sizeof(unsigned char), |
|
4, (*descripteur).descripteur_c) != 4) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_erreur_fichier; |
|
return; |
|
} |
|
|
|
// A FAIRE conversion de taille_enregistrement en longueur_enregistrement |
|
break; |
|
} |
|
|
|
case 0x4B: |
|
{ |
|
if (fread(taille_enregistrement, |
|
(size_t) sizeof(unsigned char), |
|
8, (*descripteur).descripteur_c) != 8) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_erreur_fichier; |
|
return; |
|
} |
|
|
|
// A FAIRE conversion de taille_enregistrement en longueur_enregistrement |
|
break; |
|
} |
|
|
|
default: |
|
{ |
|
longueur_enregistrement = type_enregistrement & 0x07; |
|
} |
|
} |
|
|
|
printf("L=%d\n", longueur_enregistrement); |
|
// La variable longueur_enregistrement contient le nombre |
|
// d'éléments à lire dans le fichier pour générer la liste |
|
// contenant l'enregistrement. |
|
|
|
if ((s_objet_resultat = allocation(s_etat_processus, LST)) |
|
== NULL) |
|
{ |
{ |
(*s_etat_processus).erreur_systeme = |
|
d_es_allocation_memoire; |
|
return; |
return; |
} |
} |
|
|
for(i = 0; i < longueur_enregistrement; i++) |
|
{ |
|
/* A FAIRE |
|
s_objet_element = decodage_enregistrement(s_etat_processus, |
|
(*descripteur).descripteur_c); |
|
*/ |
|
s_objet_element = NULL; |
|
|
|
if (s_objet_element == NULL) |
|
{ |
|
liberation(s_etat_processus, s_objet_resultat); |
|
return; |
|
} |
|
|
|
if ((*s_objet_resultat).objet == NULL) |
|
{ |
|
if (((*s_objet_resultat).objet = allocation_maillon( |
|
s_etat_processus)) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
(*((struct_liste_chainee *) (*s_objet_resultat).objet)) |
|
.donnee = s_objet_element; |
|
l_element_courant = (*s_objet_resultat).objet; |
|
} |
|
else |
|
{ |
|
if ((l_element_suivant = allocation_maillon( |
|
s_etat_processus)) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_allocation_memoire; |
|
return; |
|
} |
|
|
|
(*l_element_courant).suivant = l_element_suivant; |
|
(*l_element_suivant).donnee = s_objet_element; |
|
l_element_courant = l_element_suivant; |
|
} |
|
} |
|
|
|
// On saute les caractère des gestion de la commande |
|
// BACKSPACE. |
|
// A FAIRE |
|
} |
} |
} |
} |
else |
else |