--- rpl/src/instructions_t2.c 2010/03/27 09:42:11 1.7 +++ rpl/src/instructions_t2.c 2013/09/06 10:30:55 1.53 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.13 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.16 + Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -44,8 +44,8 @@ instruction_trn(struct_processus *s_etat logical1 argument_nom; logical1 variable_partagee; - unsigned long i; - unsigned long j; + integer8 i; + integer8 j; (*s_etat_processus).erreur_execution = d_ex; @@ -109,44 +109,26 @@ instruction_trn(struct_processus *s_etat liberation(s_etat_processus, s_objet_argument); - 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; return; } - if ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet != NULL) + if ((*(*s_etat_processus).pointeur_variable_courante).objet != NULL) { - s_objet_argument = (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet; + s_objet_argument = (*(*s_etat_processus).pointeur_variable_courante) + .objet; } else { - if (pthread_mutex_lock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - 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) == NULL) { - if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - (*s_etat_processus).erreur_systeme = d_es; (*s_etat_processus).erreur_execution = d_ex_variable_non_definie; @@ -177,7 +159,7 @@ instruction_trn(struct_processus *s_etat if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -196,13 +178,13 @@ instruction_trn(struct_processus *s_etat .nombre_lignes; if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau = - malloc((*((struct_matrice *) (*s_objet_resultat).objet)) - .nombre_lignes * sizeof(integer8 *))) == NULL) + malloc(((size_t) (*((struct_matrice *) (*s_objet_resultat) + .objet)).nombre_lignes) * sizeof(integer8 *))) == NULL) { if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -217,14 +199,14 @@ instruction_trn(struct_processus *s_etat .nombre_lignes; i++) { if ((((integer8 **) (*((struct_matrice *) (*s_objet_resultat) - .objet)).tableau)[i] = - malloc((*((struct_matrice *) (*s_objet_resultat).objet)) - .nombre_colonnes * sizeof(integer8))) == NULL) + .objet)).tableau)[i] = malloc(((size_t) + (*((struct_matrice *) (*s_objet_resultat).objet)) + .nombre_colonnes) * sizeof(integer8))) == NULL) { if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -259,7 +241,7 @@ instruction_trn(struct_processus *s_etat if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -278,13 +260,13 @@ instruction_trn(struct_processus *s_etat .nombre_lignes; if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau = - malloc((*((struct_matrice *) (*s_objet_resultat).objet)) - .nombre_lignes * sizeof(real8 *))) == NULL) + malloc(((size_t) (*((struct_matrice *) (*s_objet_resultat) + .objet)).nombre_lignes) * sizeof(real8 *))) == NULL) { if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -299,14 +281,14 @@ instruction_trn(struct_processus *s_etat .nombre_lignes; i++) { if ((((real8 **) (*((struct_matrice *) (*s_objet_resultat) - .objet)).tableau)[i] = - malloc((*((struct_matrice *) (*s_objet_resultat).objet)) - .nombre_colonnes * sizeof(real8))) == NULL) + .objet)).tableau)[i] = malloc(((size_t) + (*((struct_matrice *) (*s_objet_resultat).objet)) + .nombre_colonnes) * sizeof(real8))) == NULL) { if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -341,7 +323,7 @@ instruction_trn(struct_processus *s_etat if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -360,13 +342,13 @@ instruction_trn(struct_processus *s_etat .nombre_lignes; if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau = - malloc((*((struct_matrice *) (*s_objet_resultat).objet)) - .nombre_lignes * sizeof(struct_complexe16 *))) == NULL) + malloc(((size_t) (*((struct_matrice *) (*s_objet_resultat) + .objet)).nombre_lignes) * sizeof(struct_complexe16 *))) == NULL) { if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -382,14 +364,14 @@ instruction_trn(struct_processus *s_etat { if ((((struct_complexe16 **) (*((struct_matrice *) (*s_objet_resultat).objet)).tableau)[i] = - malloc((*((struct_matrice *) - (*s_objet_resultat).objet)).nombre_colonnes * + malloc(((size_t) (*((struct_matrice *) + (*s_objet_resultat).objet)).nombre_colonnes) * sizeof(struct_complexe16))) == NULL) { if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -435,7 +417,7 @@ instruction_trn(struct_processus *s_etat if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -460,12 +442,11 @@ instruction_trn(struct_processus *s_etat { if (variable_partagee == d_vrai) { - (*(*s_etat_processus).s_liste_variables_partagees).table - [(*(*s_etat_processus).s_liste_variables_partagees) - .position_variable].objet = s_objet_resultat; + (*(*s_etat_processus).pointeur_variable_partagee_courante).objet = + s_objet_resultat; if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -473,8 +454,7 @@ instruction_trn(struct_processus *s_etat } else { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet = + (*(*s_etat_processus).pointeur_variable_courante).objet = s_objet_resultat; } } @@ -498,15 +478,11 @@ instruction_trn(struct_processus *s_etat void instruction_tot(struct_processus *s_etat_processus) { - logical1 presence_variable; - - long i; - struct_objet *s_objet_statistique; struct_objet *s_objet_resultat; struct_objet *s_objet_temporaire; - unsigned long nombre_colonnes; + integer8 nombre_colonnes; (*s_etat_processus).erreur_execution = d_ex; @@ -545,70 +521,34 @@ instruction_tot(struct_processus *s_etat * 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; } if (nombre_colonnes == 0) @@ -618,8 +558,8 @@ instruction_tot(struct_processus *s_etat 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_statistique).type == MRL)) @@ -857,6 +797,7 @@ instruction_time(struct_processus *s_eta * Lecture des différents temps */ +# ifndef OS2 if ((getrusage(RUSAGE_SELF, &s_usage_processus_pere)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -868,6 +809,16 @@ instruction_time(struct_processus *s_eta (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + s_usage_processus_pere.ru_utime.tv_sec = 0; + s_usage_processus_pere.ru_utime.tv_usec = 0; + s_usage_processus_pere.ru_stime.tv_sec = 0; + s_usage_processus_pere.ru_stime.tv_usec = 0; + s_usage_processus_fils.ru_utime.tv_sec = 0; + s_usage_processus_fils.ru_utime.tv_usec = 0; + s_usage_processus_fils.ru_stime.tv_sec = 0; + s_usage_processus_fils.ru_stime.tv_usec = 0; +# endif /* * Initialisation de la liste @@ -899,7 +850,7 @@ instruction_time(struct_processus *s_eta } (*((real8 *) (*(*l_element_courant).donnee).objet)) = - s_usage_processus_pere.ru_utime.tv_sec + + ((real8) s_usage_processus_pere.ru_utime.tv_sec) + (((real8) s_usage_processus_pere.ru_utime.tv_usec) / ((real8) 1E6)); @@ -924,7 +875,7 @@ instruction_time(struct_processus *s_eta } (*((real8 *) (*(*l_element_courant).donnee).objet)) = - s_usage_processus_pere.ru_stime.tv_sec + + ((real8) s_usage_processus_pere.ru_stime.tv_sec) + (((real8) s_usage_processus_pere.ru_stime.tv_usec) / ((real8) 1E6)); @@ -949,7 +900,7 @@ instruction_time(struct_processus *s_eta } (*((real8 *) (*(*l_element_courant).donnee).objet)) = - s_usage_processus_fils.ru_utime.tv_sec + + ((real8) s_usage_processus_fils.ru_utime.tv_sec) + (((real8) s_usage_processus_fils.ru_utime.tv_usec) / ((real8) 1E6)); @@ -974,7 +925,7 @@ instruction_time(struct_processus *s_eta } (*((real8 *) (*(*l_element_courant).donnee).objet)) = - s_usage_processus_fils.ru_stime.tv_sec + + ((real8) s_usage_processus_fils.ru_stime.tv_sec) + (((real8) s_usage_processus_fils.ru_stime.tv_usec) / ((real8) 1E6)); @@ -2152,6 +2103,7 @@ instruction_target(struct_processus *s_e else if ((*((struct_socket *) (*s_objet_argument_1).objet)) .domaine == PF_INET6) { // Résolution du nom en IPv6 +# ifdef IPV6 resolution_courante = resolution; while(resolution_courante != NULL) @@ -2199,6 +2151,18 @@ instruction_target(struct_processus *s_e (*resolution_courante).ai_addr)).sin6_addr .s6_addr[i]); } +# else + if ((*s_etat_processus).langue == 'F') + { + printf("+++Attention : Support du protocole" + " IPv6 indisponible\n"); + } + else + { + printf("+++Warning : IPv6 support " + "unavailable\n"); + } +# endif } else {