--- rpl/src/analyse.c 2010/01/26 15:22:44 1.1.1.1 +++ rpl/src/analyse.c 2010/04/29 07:30:57 1.13 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.9 + RPL/2 (R) version 4.0.15 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -25,7 +25,7 @@ /* ================================================================================ - Analyseur syntaxique de l'interpréteur RPL/2 + Analyseur syntaxique de l'interprète RPL/2 ================================================================================ Entrées : -------------------------------------------------------------------------------- @@ -710,6 +710,7 @@ initialisation_instructions(struct_proce INSTRUCTION("APPEND", instruction_append); INSTRUCTION("ARRY->", instruction_array_fleche); + INSTRUCTION("ATEXIT", instruction_atexit); INSTRUCTION("BESSEL", instruction_bessel); INSTRUCTION("CLRERR", instruction_clrerr); INSTRUCTION("CLRMTX", instruction_clrmtx); @@ -811,6 +812,7 @@ initialisation_instructions(struct_proce INSTRUCTION("CONTINUE", instruction_continue); INSTRUCTION("DUPCNTXT", instruction_dupcntxt); INSTRUCTION("FUNCTION", instruction_function); + INSTRUCTION("IMPLICIT", instruction_implicit); INSTRUCTION("KEYLABEL", instruction_keylabel); INSTRUCTION("KEYTITLE", instruction_keytitle); INSTRUCTION("LOGSCALE", instruction_logscale); @@ -826,6 +828,7 @@ initialisation_instructions(struct_proce INSTRUCTION("AUTOSCALE", instruction_autoscale); INSTRUCTION("BACKSPACE", instruction_backspace); + INSTRUCTION("CLRATEXIT", instruction_clratexit); INSTRUCTION("COPYRIGHT", instruction_copyright); //INSTRUCTION("CYLINDRIC"); INSTRUCTION("DAEMONIZE", instruction_daemonize); @@ -955,6 +958,7 @@ analyse(struct_processus *s_etat_process * On autorise l'exécution d'un fork() dans un thread concurrent. */ +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -969,6 +973,22 @@ analyse(struct_processus *s_etat_process return; } } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + { + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + } +# endif scrutation_injection(s_etat_processus);