Diff for /rpl/src/compilation.c between versions 1.14 and 1.40

version 1.14, 2010/07/25 16:16:21 version 1.40, 2012/01/30 09:25:13
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.18    RPL/2 (R) version 4.1.6
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 811  analyse_syntaxique(struct_processus *s_e Line 811  analyse_syntaxique(struct_processus *s_e
   
 /*  /*
 ================================================================================  ================================================================================
     Procédure de d'analyse syntaxique du source pour readline
   ================================================================================
     Entrées :
   --------------------------------------------------------------------------------
     Sorties :
       - rl_done à 0 ou à 1.
   --------------------------------------------------------------------------------
     Effets de bord :
   ================================================================================
   */
   
   static char                 *ligne = NULL;
   static unsigned int         niveau = 0;
   
   int
   readline_analyse_syntaxique(int count, int key)
   {
       char                        prompt[] = "+ %03d> ";
       char                        prompt2[8];
       char                        *registre;
   
       struct_processus            s_etat_processus;
   
       if ((*rl_line_buffer) == d_code_fin_chaine)
       {
           if (ligne == NULL)
           {
               rl_done = 1;
           }
           else
           {
               rl_done = 0;
           }
       }
       else
       {
           if (ligne == NULL)
           {
               if ((ligne = malloc((strlen(rl_line_buffer) + 1)
                       * sizeof(char))) == NULL)
               {
                   rl_done = 1;
                   return(0);
               }
   
               strcpy(ligne, rl_line_buffer);
           }
           else
           {
               registre = ligne;
   
               if ((ligne = malloc((strlen(registre)
                       + strlen(rl_line_buffer) + 1) * sizeof(char))) == NULL)
               {
                   rl_done = 1;
                   return(0);
               }
   
               sprintf(ligne, "%s%s", registre, rl_line_buffer);
           }
   
           rl_replace_line("", 1);
   
           s_etat_processus.definitions_chainees = ligne;
           s_etat_processus.debug = d_faux;
           s_etat_processus.erreur_systeme = d_es;
           s_etat_processus.erreur_execution = d_ex;
   
           if (analyse_syntaxique(&s_etat_processus) == d_absence_erreur)
           {
               rl_done = 1;
           }
           else
           {
               if (s_etat_processus.erreur_systeme != d_es)
               {
                   rl_done = 1;
               }
               else
               {
                   rl_done = 0;
                   rl_crlf();
   
                   sprintf(prompt2, prompt, ++niveau);
   
                   rl_expand_prompt(prompt2);
                   rl_on_new_line();
               }
           }
       }
   
       if (rl_done != 0)
       {
           uprintf("\n");
   
           if (ligne != NULL)
           {
               rl_replace_line(ligne, 1);
   
               free(ligne);
               ligne = NULL;
           }
   
           niveau = 0;
       }
   
       return(0);
   }
   
   int
   readline_effacement(int count, int key)
   {
       rl_done = 0;
       rl_replace_line("", 1);
   
       free(ligne);
       ligne = NULL;
       niveau = 0;
   
       uprintf("annulation\n");
       rl_expand_prompt("RPL/2> ");
       rl_on_new_line();
       return(0);
   }
   
   /*
   ================================================================================
   Routine d'échange de deux variables    Routine d'échange de deux variables
 ================================================================================  ================================================================================
   Entrées :    Entrées :
Line 1749  initialisation_drapeaux(struct_processus Line 1876  initialisation_drapeaux(struct_processus
   
     cf(s_etat_processus, 32);   /* Impression automatique                   */      cf(s_etat_processus, 32);   /* Impression automatique                   */
     cf(s_etat_processus, 33);   /* CR automatique (disp)                    */      cf(s_etat_processus, 33);   /* CR automatique (disp)                    */
     cf(s_etat_processus, 34);   /* Valeur principale (intervalle de déf.)   */      sf(s_etat_processus, 34);   /* Évaluation des caractères de contrôle    */
     sf(s_etat_processus, 35);   /* Evaluation symbolique des constantes     */      sf(s_etat_processus, 35);   /* Évaluation symbolique des constantes     */
     sf(s_etat_processus, 36);   /* Evaluation symbolique des fonctions      */      sf(s_etat_processus, 36);   /* Évaluation symbolique des fonctions      */
     sf(s_etat_processus, 37);   /* Taille de mot pour les entiers binaires  */      sf(s_etat_processus, 37);   /* Taille de mot pour les entiers binaires  */
     sf(s_etat_processus, 38);   /* Taille de mot pour les entiers binaires  */      sf(s_etat_processus, 38);   /* Taille de mot pour les entiers binaires  */
     sf(s_etat_processus, 39);   /* Taille de mot pour les entiers binaires  */      sf(s_etat_processus, 39);   /* Taille de mot pour les entiers binaires  */

Removed from v.1.14  
changed lines
  Added in v.1.40


CVSweb interface <joel.bertrand@systella.fr>