--- rpl/src/analyse_notation_algebrique.c 2013/09/06 10:30:50 1.50 +++ rpl/src/analyse_notation_algebrique.c 2020/01/10 11:15:39 1.73 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.16 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.32 + Copyright (C) 1989-2020 Dr. BERTRAND Joël This file is part of RPL/2. @@ -217,8 +217,8 @@ analyse_algebrique(struct_processus *s_e { instruction_test[5] = d_code_fin_chaine; - instruction_majuscule = conversion_majuscule(strncpy( - instruction_test, ptr1, 5)); + instruction_majuscule = conversion_majuscule( + s_etat_processus, strncpy(instruction_test, ptr1, 5)); if (instruction_majuscule == NULL) { @@ -241,8 +241,12 @@ analyse_algebrique(struct_processus *s_e for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++); (*(ptr2++)) = (*ptr1); } - else if ((strncmp(instruction_majuscule, " OR ", 4) == 0) && - (strlen(instruction_majuscule) == 4)) + else if (strcmp(instruction_majuscule, " EQV ") == 0) + { + for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++); + (*(ptr2++)) = (*ptr1); + } + else if ((strcmp(instruction_majuscule, " OR ") == 0)) { for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++); (*(ptr2++)) = (*ptr1); @@ -358,14 +362,14 @@ analyse_algebrique(struct_processus *s_e if ((drapeau_debut_zone_valide == d_vrai) && (drapeau_fin_zone_valide == d_vrai)) { - chaine_gauche = purification_chaine( - extraction_chaine(chaine_travail, + chaine_gauche = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, chaine_travail, 1, debut_zone_algebrique)); - chaine_centrale = purification_chaine( - extraction_chaine(chaine_travail, + chaine_centrale = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, chaine_travail, debut_zone_algebrique + 1, fin_zone_algebrique + 1)); - chaine_droite = purification_chaine( - extraction_chaine(chaine_travail, + chaine_droite = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, chaine_travail, fin_zone_algebrique + 2, (integer8) strlen(chaine_travail))); @@ -469,8 +473,9 @@ analyse_algebrique(struct_processus *s_e if ((test_expression_rpn(chaine_centrale) == d_vrai) && (fin_zone_algebrique - debut_zone_algebrique > 0)) { - if ((tampon = purification_chaine( - extraction_chaine(chaine_centrale, 2, + if ((tampon = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_centrale, 2, ((integer8) strlen(chaine_centrale)) - 1))) == NULL) { (*s_etat_processus).erreur_systeme = @@ -540,10 +545,12 @@ analyse_algebrique(struct_processus *s_e j--; } - chaine_fonction = purification_chaine( - extraction_chaine(chaine_centrale, 2, i)); - chaine_arguments = purification_chaine( - extraction_chaine(chaine_centrale, i + 2, j)); + chaine_fonction = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_centrale, 2, i)); + chaine_arguments = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_centrale, i + 2, j)); i = 0; niveau = 0; @@ -564,9 +571,13 @@ analyse_algebrique(struct_processus *s_e if ((chaine_arguments[i] == ',') && (niveau == 0)) { sous_chaine_gauche = purification_chaine( - extraction_chaine(chaine_arguments, 1, i)); + s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_arguments, 1, i)); sous_chaine_droite = purification_chaine( - extraction_chaine(chaine_arguments, i + 2, + s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_arguments, i + 2, ((integer8) strlen(chaine_arguments)))); free(chaine_arguments); @@ -818,14 +829,15 @@ analyse_algebrique(struct_processus *s_e if ((chaine_travail[i] != 0) && (j != 0)) { - chaine_gauche = purification_chaine( - extraction_chaine(chaine_travail, 1, i)); - chaine_centrale = purification_chaine( - extraction_chaine(chaine_travail, + chaine_gauche = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_travail, 1, i)); + chaine_centrale = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, chaine_travail, i + 1, j + 1)); - chaine_droite = purification_chaine( - extraction_chaine(chaine_travail, j + 2, - ((integer8) strlen(chaine_travail)))); + chaine_droite = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, chaine_travail, + j + 2, ((integer8) strlen(chaine_travail)))); if ((chaine_gauche == NULL) || (chaine_centrale == NULL) || (chaine_droite == NULL)) @@ -940,11 +952,12 @@ analyse_algebrique(struct_processus *s_e if (niveau == 0) { - prologue = purification_chaine( - extraction_chaine(chaine_centrale, 1, k)); - epilogue = purification_chaine( - extraction_chaine(chaine_centrale, - k + 2, longueur_chaine)); + prologue = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_centrale, 1, k)); + epilogue = purification_chaine(s_etat_processus, + extraction_chaine(s_etat_processus, + chaine_centrale, k + 2, longueur_chaine)); if ((prologue == NULL) || (epilogue == NULL)) { @@ -1029,8 +1042,10 @@ analyse_algebrique(struct_processus *s_e drapeau_modification = d_vrai; } else if (((priorite == 1) && (t4 == ' ') && - (t3 == 'X') && (t2 == 'O') && (t1 == 'R') - && (t0 == ' ')) || ((priorite == 2) && + (((t3 == 'X') && (t2 == 'O') && (t1 == 'R')) + || ((t3 == 'E') && (t2 == 'Q') && + (t1 == 'V'))) && (t0 == ' ')) + || ((priorite == 2) && (t4 == ' ') && (t3 == 'A') && (t2 == 'N') && (t1 == 'D') && (t0 == ' '))) { @@ -1148,13 +1163,18 @@ analyse_algebrique(struct_processus *s_e unsigned char * -purification_chaine(unsigned char *chaine) +purification_chaine(struct_processus *s_etat_processus, unsigned char *chaine) { integer8 i; integer8 j; unsigned char *chaine_purifiee; + if (chaine == NULL) + { + return(NULL); + } + i = 0; j = ((integer8) strlen(chaine)) - 1; @@ -1179,7 +1199,7 @@ purification_chaine(unsigned char *chain } } - chaine_purifiee = extraction_chaine(chaine, i + 1, j + 1); + chaine_purifiee = extraction_chaine(s_etat_processus, chaine, i + 1, j + 1); free(chaine); return(chaine_purifiee); @@ -1273,6 +1293,9 @@ test_expression_rpn(unsigned char *chain || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) && ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd')) && (t4 == ' ')) || + ((t0 == ' ') && ((t1 == 'E') || (t1 == 'e')) && + ((t2 == 'Q') || (t2 == 'q')) && ((t3 == 'V') || (t3 == 'v')) + && (t4 == ' ')) || ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) && ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) || ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) && @@ -1358,8 +1381,8 @@ test_fonction(unsigned char *chaine) unsigned char * -extraction_chaine(unsigned char *chaine, integer8 position_1, - integer8 position_2) +extraction_chaine(struct_processus *s_etat_processus, + unsigned char *chaine, integer8 position_1, integer8 position_2) { integer8 i; @@ -1384,6 +1407,7 @@ extraction_chaine(unsigned char *chaine, malloc(((size_t) (position_2 - position_1 + 2)) * sizeof(unsigned char))) == NULL) { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); }