Diff for /rpl/src/instructions_t3.c between versions 1.2 and 1.15

version 1.2, 2010/01/27 22:22:16 version 1.15, 2010/08/26 19:07:41
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.10    RPL/2 (R) version 4.0.19
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2010 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 514  instruction_trim(struct_processus *s_eta Line 514  instruction_trim(struct_processus *s_eta
     {      {
         debut = (unsigned char *) (*s_objet_argument).objet;          debut = (unsigned char *) (*s_objet_argument).objet;
   
         while(((*debut) != d_code_fin_chaine) && ((*debut) == d_code_espace))          while(((*debut) != d_code_fin_chaine) &&
                   (((*debut) == d_code_espace)
                   || ((*debut) == d_code_retour_chariot)
                   || ((*debut) == d_code_tabulation)))
         {          {
             debut++;              debut++;
         }          }
Line 522  instruction_trim(struct_processus *s_eta Line 525  instruction_trim(struct_processus *s_eta
         fin = &(((unsigned char *) (*s_objet_argument).objet)          fin = &(((unsigned char *) (*s_objet_argument).objet)
                 [strlen((unsigned char *) (*s_objet_argument).objet) - 1]);                  [strlen((unsigned char *) (*s_objet_argument).objet) - 1]);
   
         while((fin > debut) && ((*fin) == d_code_espace))          while((fin > debut) &&
                   (((*fin) == d_code_espace)
                   || ((*fin) == d_code_retour_chariot)
                   || ((*fin) == d_code_tabulation)))
         {          {
             fin--;              fin--;
         }          }
Line 591  instruction_tokenize(struct_processus *s Line 597  instruction_tokenize(struct_processus *s
   
     struct_liste_chainee                *l_element_courant;      struct_liste_chainee                *l_element_courant;
   
       unsigned char                       *ptr;
       unsigned char                       *ptr2;
     unsigned char                       *registre_instruction_courante;      unsigned char                       *registre_instruction_courante;
     unsigned char                       *registre_definitions_chainees;      unsigned char                       *registre_definitions_chainees;
       unsigned char                       *tampon;
   
       unsigned long                       nombre_caracteres_echappement;
     unsigned long                       registre_longueur_definitions_chainees;      unsigned long                       registre_longueur_definitions_chainees;
     unsigned long                       registre_position_courante;      unsigned long                       registre_position_courante;
   
Line 640  instruction_tokenize(struct_processus *s Line 650  instruction_tokenize(struct_processus *s
   
     if ((*s_objet_argument).type == CHN)      if ((*s_objet_argument).type == CHN)
     {      {
           // Conversion des caractères d'échappement
   
           ptr = (unsigned char *) (*s_objet_argument).objet;
           ptr2 = ptr;
   
           while((*ptr) != d_code_fin_chaine)
           {
               (*ptr2) = (*ptr);
   
               // Début de la séquence d'échappement
   
               if ((*ptr) == '\\')
               {
                   if ((*(ptr + 1)) == '"')
                   {
                       ptr++;
                       (*ptr2) = '\"';
                   }
                   else if ((*(ptr + 1)) == 'n')
                   {
                       ptr++;
                       (*ptr2) = '\n';
                   }
                   else if ((*(ptr + 1)) == 't')
                   {
                       ptr++;
                       (*ptr2) = '\t';
                   }
                   else if ((*(ptr + 1)) == '\\')
                   {
                           ptr++;
                   }
                   else
                   {
                       if ((*s_etat_processus).langue == 'F')
                       {
                           printf("+++Information : Séquence d'échappement "
                                   "inconnue [%d]\n", (int) getpid());
                       }
                       else
                       {
                           printf("+++Warning : Unknown escape code "
                                   "[%d]\n", (int) getpid());
                       }
                   }
               }
   
                   ptr++;
                   ptr2++;
           }
   
           (*ptr2) = d_code_fin_chaine;
   
           // Remplacement des éventuels retours à la ligne et tabulations par
           // des espaces.
   
           ptr = (unsigned char *) (*s_objet_argument).objet;
   
           while((*ptr) != d_code_fin_chaine)
           {
               if (((*ptr) == d_code_retour_chariot) ||
                       ((*ptr) == d_code_tabulation))
               {
                   (*ptr) = d_code_espace;
               }
   
               ptr++;
           }
   
         if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)          if ((s_objet_resultat = allocation(s_etat_processus, LST)) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
Line 723  instruction_tokenize(struct_processus *s Line 802  instruction_tokenize(struct_processus *s
                 (*(*l_element_courant).donnee).objet = (*s_etat_processus)                  (*(*l_element_courant).donnee).objet = (*s_etat_processus)
                         .instruction_courante;                          .instruction_courante;
                 (*l_element_courant).suivant = NULL;                  (*l_element_courant).suivant = NULL;
   
                   /*
                    * Rajout du caractère d'échappement devant un guillemet
                    */
   
                   nombre_caracteres_echappement = 0;
                   ptr = (unsigned char *) (*(*l_element_courant).donnee).objet;
   
                   while((*ptr) != d_code_fin_chaine)
                   {
                       if ((*ptr) == '\"')
                       {
                           nombre_caracteres_echappement++;
                       }
   
                       ptr++;
                   }
   
                   if (nombre_caracteres_echappement != 0)
                   {
                       tampon = (unsigned char *) (*(*l_element_courant)
                               .donnee).objet;
   
                       if (((*(*l_element_courant).donnee).objet = malloc(
                               (strlen(tampon) + 1 + nombre_caracteres_echappement)
                               * sizeof(unsigned char))) == NULL)
                       {
                           (*s_etat_processus).erreur_systeme =
                                   d_es_allocation_memoire;
                           return;
                       }
   
                       ptr = tampon;
                       ptr2 = (*(*l_element_courant).donnee).objet;
   
                       while((*ptr) != d_code_fin_chaine)
                       {
                           if ((*ptr) == '\"')
                           {
                               (*(ptr2++)) = '\\';
   
                           }
                           else if ((*ptr) == '\\')
                           {
                               (*(ptr2++)) = '\\';
                           }
   
                           (*(ptr2++)) = (*(ptr++));
                       }
   
                       (*ptr2) = d_code_fin_chaine;
                       free(tampon);
                   }
             }              }
             else              else
             {              {

Removed from v.1.2  
changed lines
  Added in v.1.15


CVSweb interface <joel.bertrand@systella.fr>