--- rpl/src/instructions_s1.c 2010/02/10 10:14:24 1.3 +++ rpl/src/instructions_s1.c 2010/06/17 11:00:23 1.12 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 + RPL/2 (R) version 4.0.16 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1275,6 +1275,10 @@ instruction_same(struct_processus *s_eta printf(" 1: %s\n", d_RPN); printf("-> 1: %s\n", d_RPN); + printf(" 2: %s\n", d_PRC); + printf(" 1: %s\n", d_PRC); + printf("-> 1: %s\n", d_INT); + return; } else if ((*s_etat_processus).test_instruction == 'Y') @@ -2578,8 +2582,7 @@ instruction_start(struct_processus *s_et return; } - if (((*s_objet_1).type != INT) && - ((*s_objet_1).type != REL)) + if (((*s_objet_1).type != INT) && ((*s_objet_1).type != REL)) { liberation(s_etat_processus, s_objet_1); @@ -2596,8 +2599,7 @@ instruction_start(struct_processus *s_et return; } - if (((*s_objet_2).type != INT) && - ((*s_objet_2).type != REL)) + if (((*s_objet_2).type != INT) && ((*s_objet_2).type != REL)) { liberation(s_etat_processus, s_objet_1); liberation(s_etat_processus, s_objet_2); @@ -3831,7 +3833,11 @@ instruction_syseval(struct_processus *s_ longueur_ecriture = strlen((unsigned char *) (*(*l_element_courant).donnee).objet); +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -3842,8 +3848,13 @@ instruction_syseval(struct_processus *s_ (*(*l_element_courant).donnee).objet, longueur_ecriture) != longueur_ecriture) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) .semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -3859,8 +3870,13 @@ instruction_syseval(struct_processus *s_ return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus) .semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus) + .semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -3870,8 +3886,13 @@ instruction_syseval(struct_processus *s_ while(write_atomic(s_etat_processus, pipes_entree[1], "\n", 1) != 1) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) .semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -3887,16 +3908,24 @@ instruction_syseval(struct_processus *s_ return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus) .semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus) + .semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } } - while(sem_wait(&((*s_etat_processus).semaphore_fork)) - == -1) +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -3926,8 +3955,11 @@ instruction_syseval(struct_processus *s_ * Récupération de la valeur de retour du processus détaché */ - if (sem_post(&((*s_etat_processus).semaphore_fork)) - != 0) +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -3935,7 +3967,11 @@ instruction_syseval(struct_processus *s_ if (waitpid(pid, &status, 0) == -1) { +# ifndef SEMAPHORES_NOMMES if (sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + if (sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -3948,7 +3984,11 @@ instruction_syseval(struct_processus *s_ return; } +# ifndef SEMAPHORES_NOMMES if (sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + if (sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -3969,17 +4009,29 @@ instruction_syseval(struct_processus *s_ return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif while((ios = read_atomic(s_etat_processus, pipes_sortie[0], &(tampon[pointeur]), longueur_lecture)) > 0) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -4001,14 +4053,22 @@ instruction_syseval(struct_processus *s_ return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; } } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -4156,7 +4216,11 @@ instruction_syseval(struct_processus *s_ return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -4173,7 +4237,11 @@ instruction_syseval(struct_processus *s_ &((*s_etat_processus).l_base_pile), s_objet_resultat) == d_erreur) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -4192,7 +4260,11 @@ instruction_syseval(struct_processus *s_ return; } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -4378,9 +4450,21 @@ instruction_sign(struct_processus *s_eta return; } - f77absc_((struct_complexe16 *) (*s_objet_argument).objet, &norme); - f77divisioncr_((struct_complexe16 *) (*s_objet_argument).objet, - &norme, (struct_complexe16 *) (*s_objet_resultat).objet); + if (((*((struct_complexe16 *) (*s_objet_argument).objet)).partie_reelle + != 0) || ((*((struct_complexe16 *) (*s_objet_argument).objet)) + .partie_imaginaire != 0)) + { + f77absc_((struct_complexe16 *) (*s_objet_argument).objet, &norme); + f77divisioncr_((struct_complexe16 *) (*s_objet_argument).objet, + &norme, (struct_complexe16 *) (*s_objet_resultat).objet); + } + else + { + (*((struct_complexe16 *) (*s_objet_argument).objet)) + .partie_reelle = 0; + (*((struct_complexe16 *) (*s_objet_argument).objet)) + .partie_imaginaire = 0; + } } /*