--- rpl/src/instructions_s5.c 2011/04/21 16:00:59 1.18 +++ rpl/src/instructions_s5.c 2011/06/10 11:35:13 1.19 @@ -38,10 +38,7 @@ void instruction_s_plus(struct_processus *s_etat_processus) { - long i; - logical1 creation_variable_sigma; - logical1 presence_variable; struct_objet *s_copie; struct_objet *s_copie_statistique; @@ -50,6 +47,7 @@ instruction_s_plus(struct_processus *s_e struct_variable s_variable; + unsigned long i; unsigned long j; unsigned long k; unsigned long nombre_colonnes; @@ -95,7 +93,7 @@ instruction_s_plus(struct_processus *s_e * 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, donc il faut la créer en fonction @@ -108,83 +106,40 @@ instruction_s_plus(struct_processus *s_e } else { - /* - * Il existe une variable locale SIGMA. Reste à vérifier l'existence - * d'une variable SIGMA globale... - */ + creation_variable_sigma = d_faux; - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - - while(i >= 0) + if ((*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { - 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_variable_verrouillee; + return; } - if (presence_variable == d_faux) + if (((*(*(*s_etat_processus).pointeur_variable_courante).objet) + .type != MIN) && ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).type != MRL)) { - creation_variable_sigma = d_vrai; - nombre_colonnes = 0; + (*s_etat_processus).erreur_execution = + d_ex_matrice_statistique_invalide; + return; } - else - { - creation_variable_sigma = d_faux; - - (*s_etat_processus).position_variable_courante = i; - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == - d_vrai) - { - (*s_etat_processus).erreur_execution = - d_ex_variable_verrouillee; - return; - } - - 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; - } + if ((s_copie_statistique = copie_objet(s_etat_processus, + (*(*s_etat_processus).pointeur_variable_courante).objet, 'Q')) + == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } - if ((s_copie_statistique = copie_objet(s_etat_processus, - (*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet, 'Q')) == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } + liberation(s_etat_processus, (*(*s_etat_processus) + .pointeur_variable_courante).objet); + (*(*s_etat_processus).pointeur_variable_courante).objet = + s_copie_statistique; - liberation(s_etat_processus, (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet); - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_copie_statistique; - - 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; } if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), @@ -299,8 +254,8 @@ instruction_s_plus(struct_processus *s_e return; } - 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).type == INT)) @@ -320,7 +275,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { ((integer8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -353,7 +308,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { ((real8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -386,7 +341,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { ((real8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -425,7 +380,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { if ((((real8 **) (*((struct_matrice *) @@ -566,8 +521,8 @@ instruction_s_plus(struct_processus *s_e return; } - 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).type == VIN)) @@ -587,7 +542,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { ((integer8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -622,7 +577,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { ((real8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -657,7 +612,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { ((real8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -700,7 +655,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - 1); i++) { if ((((real8 **) (*((struct_matrice *) @@ -813,8 +768,8 @@ instruction_s_plus(struct_processus *s_e return; } - 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; nombre_lignes = (*((struct_matrice *) (*s_objet).objet)) .nombre_lignes; @@ -837,7 +792,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - nombre_lignes); i++) { @@ -847,7 +802,7 @@ instruction_s_plus(struct_processus *s_e free(tampon); - for(k = 0; i < (long) ((*((struct_matrice *) + for(k = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes); i++, k++) { ((integer8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -880,7 +835,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - nombre_lignes); i++) { @@ -890,7 +845,7 @@ instruction_s_plus(struct_processus *s_e free(tampon); - for(k = 0; i < (long) ((*((struct_matrice *) + for(k = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes); i++, k++) { ((real8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -923,7 +878,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - nombre_lignes); i++) { @@ -933,7 +888,7 @@ instruction_s_plus(struct_processus *s_e free(tampon); - for(k = 0; i < (long) ((*((struct_matrice *) + for(k = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes); i++, k++) { if ((((real8 **) (*((struct_matrice *) @@ -971,7 +926,7 @@ instruction_s_plus(struct_processus *s_e return; } - for(i = 0; i < (long) ((*((struct_matrice *) + for(i = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes - nombre_lignes); i++) { @@ -997,7 +952,7 @@ instruction_s_plus(struct_processus *s_e free(tampon); - for(k = 0; i < (long) ((*((struct_matrice *) + for(k = 0; i < ((*((struct_matrice *) (*s_objet_statistique).objet)).nombre_lignes); i++, k++) { ((real8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -1051,14 +1006,11 @@ instruction_s_plus(struct_processus *s_e void instruction_s_moins(struct_processus *s_etat_processus) { - logical1 presence_variable; - - long i; - struct_objet *s_copie_statistique; struct_objet *s_objet; struct_objet *s_objet_statistique; + unsigned long i; unsigned long nombre_colonnes; unsigned long nombre_lignes; @@ -1101,102 +1053,61 @@ instruction_s_moins(struct_processus *s_ * 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; + + if ((*s_etat_processus).erreur_execution == d_ex) + { + (*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).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { - 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_variable_verrouillee; + return; } - if (presence_variable == d_faux) + 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[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == - d_vrai) - { - (*s_etat_processus).erreur_execution = - d_ex_variable_verrouillee; - return; - } - 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; - } - - if ((s_copie_statistique = copie_objet(s_etat_processus, - (*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet, 'O')) == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } - - liberation(s_etat_processus, (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet); - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_copie_statistique; - - nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)).objet)) - .nombre_colonnes; - - nombre_lignes = (*((struct_matrice *) (*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)).objet)) - .nombre_lignes; + if ((s_copie_statistique = copie_objet(s_etat_processus, + (*(*s_etat_processus).pointeur_variable_courante).objet, 'O')) + == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; } + + liberation(s_etat_processus, (*(*s_etat_processus) + .pointeur_variable_courante).objet); + (*(*s_etat_processus).pointeur_variable_courante).objet = + s_copie_statistique; + + nombre_colonnes = (*((struct_matrice *) (*(*(*s_etat_processus) + .pointeur_variable_courante).objet).objet)).nombre_colonnes; + nombre_lignes = (*((struct_matrice *) (*(*(*s_etat_processus) + .pointeur_variable_courante).objet).objet)).nombre_lignes; } - 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) { @@ -1267,7 +1178,7 @@ instruction_s_moins(struct_processus *s_ return; } - for(i = 0; i < (long) nombre_colonnes; i++) + for(i = 0; i < nombre_colonnes; i++) { ((integer8 *) (*((struct_vecteur *) (*s_objet).objet)) .tableau)[i] = ((integer8 **) (*((struct_matrice *) @@ -1315,7 +1226,7 @@ instruction_s_moins(struct_processus *s_ return; } - for(i = 0; i < (long) (*((struct_matrice *) (*s_objet_statistique) + for(i = 0; i < (*((struct_matrice *) (*s_objet_statistique) .objet)).nombre_lignes; i++) { ((integer8 **) (*((struct_matrice *) (*s_objet_statistique) @@ -1395,7 +1306,7 @@ instruction_s_moins(struct_processus *s_ return; } - for(i = 0; i < (long) nombre_colonnes; i++) + for(i = 0; i < nombre_colonnes; i++) { ((real8 *) (*((struct_vecteur *) (*s_objet).objet)) .tableau)[i] = ((real8 **) (*((struct_matrice *) @@ -1443,7 +1354,7 @@ instruction_s_moins(struct_processus *s_ return; } - for(i = 0; i < (long) (*((struct_matrice *) (*s_objet_statistique) + for(i = 0; i < (*((struct_matrice *) (*s_objet_statistique) .objet)).nombre_lignes; i++) { ((real8 **) (*((struct_matrice *) (*s_objet_statistique)