Diff for /rpl/src/types.c between versions 1.1.1.1 and 1.5

version 1.1.1.1, 2010/01/26 15:22:44 version 1.5, 2010/02/10 08:09:30
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.9    RPL/2 (R) version 4.0.10
   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 1073  recherche_type(struct_processus *s_etat_ Line 1073  recherche_type(struct_processus *s_etat_
   
 /*  /*
 -- Sauvegarde des paramètres du processus pour analyser le vecteur -------------  -- Sauvegarde des paramètres du processus pour analyser le vecteur -------------
 -- Analyse récursive en appelant l'interpréteur sur le vecteur moins -----------  -- Analyse récursive en appelant l'interprète sur le vecteur moins -------------
 -- ses délimiteurs -------------------------------------------------------------  -- ses délimiteurs -------------------------------------------------------------
 */  */
   
Line 2811  recherche_type(struct_processus *s_etat_ Line 2811  recherche_type(struct_processus *s_etat_
   
             while((*ptr_lecture) != d_code_fin_chaine)              while((*ptr_lecture) != d_code_fin_chaine)
             {              {
                 if ((*ptr_lecture) == '\\')  
                 {  
                     if ((*(ptr_lecture + 1)) == '"')  
                     {  
                         if ((*(ptr_lecture + 2)) != d_code_fin_chaine)  
                         {  
                             ptr_lecture++;  
                         }  
                     }  
                     else if ((*(ptr_lecture + 1)) == 'b')  
                     {  
                         if ((*(ptr_lecture + 2)) != d_code_fin_chaine)  
                         {  
                             ptr_lecture++;  
                             (*ptr_lecture) = '\b';  
                         }  
                     }  
                     else if ((*(ptr_lecture + 1)) == 'n')  
                     {  
                         if ((*(ptr_lecture + 2)) != d_code_fin_chaine)  
                         {  
                             ptr_lecture++;  
                             (*ptr_lecture) = '\n';  
                         }  
                     }  
                     else if ((*(ptr_lecture + 1)) == 't')  
                     {  
                         if ((*(ptr_lecture + 2)) != d_code_fin_chaine)  
                         {  
                             ptr_lecture++;  
                             (*ptr_lecture) = '\t';  
                         }  
                     }  
                     else if ((*(ptr_lecture + 1)) == '\\')  
                     {  
                         if ((*(ptr_lecture + 2)) != d_code_fin_chaine)  
                         {  
                             ptr_lecture++;  
                         }  
                     }  
                 }  
   
                 *ptr_ecriture++ = *ptr_lecture++;                  *ptr_ecriture++ = *ptr_lecture++;
             }              }
   
             (*(--ptr_ecriture)) = d_code_fin_chaine;              (*(--ptr_ecriture)) = d_code_fin_chaine;
   
             if ((element = realloc(element, (strlen((unsigned char *)  
                     element) + 1) * sizeof(unsigned char))) == NULL)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 (*s_etat_processus).traitement_interruptible =  
                         registre_interruption;  
                 return;  
             }  
   
             break;              break;
         }          }
   
Line 3195  recherche_type(struct_processus *s_etat_ Line 3144  recherche_type(struct_processus *s_etat_
         }          }
   
 /*  /*
 --------------------------------------------------------------------------------  
   Adresse  
 --------------------------------------------------------------------------------  
 */  
   
         case '@' :  
         {  
             if ((*s_etat_processus).recherche_types_speciaux == 'Y')  
             {  
                 if (strlen((*s_etat_processus).instruction_courante) > 2)  
                 {  
                     tampon = (*s_etat_processus).instruction_courante;  
   
                     if (((*s_etat_processus).instruction_courante =  
                             malloc((strlen(tampon) + 2) *  
                             sizeof(unsigned char))) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         (*s_etat_processus).traitement_interruptible =  
                                 registre_interruption;  
                         return;  
                     }  
   
                     strcpy((*s_etat_processus).instruction_courante, tampon);  
                     (*s_etat_processus).instruction_courante[0] = '#';  
                     (*s_etat_processus).instruction_courante  
                             [strlen((*s_etat_processus).instruction_courante)  
                             + 1] = d_code_fin_chaine;  
                     (*s_etat_processus).instruction_courante  
                             [strlen((*s_etat_processus).instruction_courante)]  
                             = 'h';  
   
                     recherche_type(s_etat_processus);  
   
                     free((*s_etat_processus).instruction_courante);  
                     (*s_etat_processus).instruction_courante = tampon;  
   
                     if (((*s_etat_processus).erreur_systeme == d_es) &&  
                             ((*s_etat_processus).erreur_execution == d_ex))  
                     {  
                         if (depilement(s_etat_processus,  
                                 &((*s_etat_processus).l_base_pile),  
                                 &s_sous_objet) == d_absence_erreur)  
                         {  
                             if ((*s_sous_objet).type == BIN)  
                             {  
                                 (*s_objet).type = ADR;  
   
                                 if ((element =  
                                         malloc(sizeof(unsigned long))) == NULL)  
                                 {  
                                     (*s_etat_processus).erreur_systeme =  
                                             d_es_allocation_memoire;  
                                     (*s_etat_processus)  
                                             .traitement_interruptible =  
                                             registre_interruption;  
                                     return;  
                                 }  
   
                                 (*((unsigned long *) element)) = (*((logical8 *)  
                                         (*s_sous_objet).objet));  
                             }  
                             else  
                             {  
                                 (*s_etat_processus).erreur_execution =  
                                         d_ex_syntaxe;  
                             }  
   
                             liberation(s_etat_processus, s_sous_objet);  
                         }  
                         else  
                         {  
                             (*s_etat_processus).traitement_interruptible =  
                                     registre_interruption;  
                             return;  
                         }  
                     }  
                 }  
                 else  
                 {  
                     (*s_etat_processus).erreur_execution = d_ex_syntaxe;  
                 }  
   
                 break;  
             }  
         }  
   
 /*  
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Entier ou réel    Entier ou réel
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------

Removed from v.1.1.1.1  
changed lines
  Added in v.1.5


CVSweb interface <joel.bertrand@systella.fr>