--- rpl/src/instructions_p5.c 2011/04/21 16:00:58 1.18 +++ rpl/src/instructions_p5.c 2011/06/10 11:35:13 1.19 @@ -41,9 +41,6 @@ instruction_pcov(struct_processus *s_eta integer8 nombre_colonnes; logical1 erreur; - logical1 presence_variable; - - long i; struct_objet *s_objet_statistique; struct_objet *s_objet_resultat; @@ -85,75 +82,38 @@ instruction_pcov(struct_processus *s_eta * Recherche d'une variable globale référencée par SIGMA */ - if (recherche_variable(s_etat_processus, ds_sdat) == d_faux) + if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux) { /* * Aucune variable SIGMA */ (*s_etat_processus).erreur_systeme = d_es; - (*s_etat_processus).erreur_execution = d_ex_absence_observations; - return; - } - else - { - /* - * Il existe une variable locale SIGMA. Reste à vérifier l'existence - * d'une variable SIGMA globale... - */ - - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - while(i >= 0) + if ((*s_etat_processus).erreur_execution == d_ex) { - if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, - ds_sdat) == 0) && ((*s_etat_processus) - .s_liste_variables[i].niveau == 1)) - { - presence_variable = d_vrai; - break; - } - - i--; + (*s_etat_processus).erreur_execution = d_ex_absence_observations; } - if (presence_variable == d_faux) + return; + } + else + { + if (((*(*(*s_etat_processus).pointeur_variable_courante).objet) + .type != MIN) && ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).type != MRL)) { - (*s_etat_processus).erreur_execution = d_ex_absence_observations; + (*s_etat_processus).erreur_execution = + d_ex_matrice_statistique_invalide; return; } - else - { - (*s_etat_processus).position_variable_courante = i; - if (((*s_etat_processus).s_liste_variables[i]).objet == NULL) - { - (*s_etat_processus).erreur_execution = - d_ex_variable_partagee; - return; - } - - if (((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet)) - .type != MIN) && ((*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)).type != MRL)) - { - (*s_etat_processus).erreur_execution = - d_ex_matrice_statistique_invalide; - return; - } - - nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)).objet)) - .nombre_colonnes; - } + nombre_colonnes = (*((struct_matrice *) (*(*(*s_etat_processus) + .pointeur_variable_courante).objet).objet)).nombre_colonnes; } - s_objet_statistique = ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]).objet; + s_objet_statistique = (*(*s_etat_processus).pointeur_variable_courante) + .objet; if (((*s_objet_statistique).type == MIN) || ((*s_objet_statistique).type == MRL)) @@ -428,8 +388,8 @@ instruction_putc(struct_processus *s_eta return; } - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == d_vrai) + if ((*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee; @@ -441,8 +401,8 @@ instruction_putc(struct_processus *s_eta } liberation(s_etat_processus, s_objet_argument_3); - s_objet_argument_3 = (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet; + s_objet_argument_3 = (*(*s_etat_processus).pointeur_variable_courante) + .objet; if (s_objet_argument_3 == NULL) { @@ -454,13 +414,10 @@ instruction_putc(struct_processus *s_eta } if (recherche_variable_partagee(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].nom, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .variable_partagee, (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].origine) - == d_faux) + (*(*s_etat_processus).pointeur_variable_courante).nom, + (*(*s_etat_processus).pointeur_variable_courante) + .variable_partagee, (*(*s_etat_processus) + .pointeur_variable_courante).origine) == d_faux) { if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -495,8 +452,8 @@ instruction_putc(struct_processus *s_eta liberation(s_etat_processus, s_objet_argument_3); s_objet_argument_3 = s_copie_argument_3; - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_objet_argument_3; + (*(*s_etat_processus).pointeur_variable_courante).objet = + s_objet_argument_3; } else { @@ -1362,8 +1319,8 @@ instruction_putr(struct_processus *s_eta return; } - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == d_vrai) + if ((*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { (*s_etat_processus).erreur_execution = d_ex_variable_verrouillee; @@ -1375,8 +1332,8 @@ instruction_putr(struct_processus *s_eta } liberation(s_etat_processus, s_objet_argument_3); - s_objet_argument_3 = (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet; + s_objet_argument_3 = (*(*s_etat_processus).pointeur_variable_courante) + .objet; if (s_objet_argument_3 == NULL) { @@ -1388,13 +1345,10 @@ instruction_putr(struct_processus *s_eta } if (recherche_variable_partagee(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].nom, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .variable_partagee, (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].origine) - == d_faux) + (*(*s_etat_processus).pointeur_variable_courante).nom, + (*(*s_etat_processus).pointeur_variable_courante) + .variable_partagee, (*(*s_etat_processus) + .pointeur_variable_courante).origine) == d_faux) { if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -1429,8 +1383,8 @@ instruction_putr(struct_processus *s_eta liberation(s_etat_processus, s_objet_argument_3); s_objet_argument_3 = s_copie_argument_3; - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_objet_argument_3; + (*(*s_etat_processus).pointeur_variable_courante).objet = + s_objet_argument_3; } else {