Diff for /rpl/src/instructions_r4.c between versions 1.115 and 1.122

version 1.115, 2022/09/07 13:40:38 version 1.122, 2024/01/17 16:57:15
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.34    RPL/2 (R) version 4.1.36
   Copyright (C) 1989-2021 Dr. BERTRAND Joël    Copyright (C) 1989-2024 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 962  instruction_read(struct_processus *s_eta Line 962  instruction_read(struct_processus *s_eta
             printf("(read a record of a file)\n\n");              printf("(read a record of a file)\n\n");
         }          }
   
         printf("    1: %s, %s\n\n", d_FCH, d_SCK);          printf("    1: %s, %s\n", d_FCH, d_SCK);
           printf("->  1: %s\n\n", d_LST);
   
         printf("    2: %s, %s\n", d_INT, d_CHN);          printf("    2: %s, %s\n", d_INT, d_CHN);
         printf("    1: %s\n", d_FCH);          printf("    1: %s\n", d_FCH);
           printf("->  1: %s\n\n", d_LST);
         return;          return;
     }      }
     else if ((*s_etat_processus).test_instruction == 'Y')      else if ((*s_etat_processus).test_instruction == 'Y')
Line 2534  instruction_read(struct_processus *s_eta Line 2536  instruction_read(struct_processus *s_eta
                 }                  }
   
                 // Une donnée a été reçue.                  // Une donnée a été reçue.
                   // Attention : on peut TOUJOURS recevoir 0
                   // indiquant que la socket est close.
   
                 if (ios >= 0)                  if (ios >= 0)
                 {                  {
Line 2541  instruction_read(struct_processus *s_eta Line 2545  instruction_read(struct_processus *s_eta
                     position_initiale = 0;                      position_initiale = 0;
                     presence_indicateur = d_faux;                      presence_indicateur = d_faux;
   
                     do                      if (ios > 0)
                     {                      {
                         if (tampon_lecture[position_initiale] == '{')                          do
                         {                          {
                             presence_indicateur = d_vrai;                              if (tampon_lecture[position_initiale] == '{')
                             break;                              {
                         }                                  presence_indicateur = d_vrai;
                                   break;
                               }
   
                         position_initiale++;                              position_initiale++;
                     } while(position_initiale < longueur_effective);                          } while(position_initiale < longueur_effective);
                       }
                       else
                       {
                           presence_indicateur = d_vrai;
                       }
   
                     if (presence_indicateur == d_vrai)                      if (presence_indicateur == d_vrai)
                     {                      {
                         position_finale = position_initiale + 1;                          position_finale = position_initiale + 1;
                         presence_chaine = d_faux;                          presence_chaine = d_faux;
                         presence_indicateur = d_faux;                          presence_indicateur = d_faux;
                         niveau = 1;                          niveau = 0;
   
                         while(position_finale < longueur_effective)                          while(position_finale < longueur_effective)
                         {                          {
Line 2565  instruction_read(struct_processus *s_eta Line 2576  instruction_read(struct_processus *s_eta
   
                             if (caractere == '"')                              if (caractere == '"')
                             {                              {
                                 if (position_finale > 0)                                  if (tampon_lecture[position_finale - 1]
                                           != '\\')
                                 {                                  {
                                     if (tampon_lecture[position_finale - 1]                                      presence_chaine = (presence_chaine ==
                                             != '\\')                                              d_vrai) ? d_faux : d_vrai;
                                     {  
                                         presence_chaine = (presence_chaine ==  
                                                 d_vrai) ? d_faux : d_vrai;  
                                     }  
                                 }  
                                 else  
                                 {  
                                     presence_chaine =  
                                             (presence_chaine == d_vrai)  
                                             ? d_faux : d_vrai;  
                                 }                                  }
                             }                              }
                             else                              else
Line 2783  instruction_read(struct_processus *s_eta Line 2785  instruction_read(struct_processus *s_eta
                 }                  }
             } while(trame_complete == d_faux);              } while(trame_complete == d_faux);
   
             tampon_lecture[++position_finale] = d_code_fin_chaine;  
             tampon = (*s_etat_processus).instruction_courante;              tampon = (*s_etat_processus).instruction_courante;
             (*s_etat_processus).instruction_courante = tampon_lecture;              (*s_etat_processus).instruction_courante = tampon_lecture;
   
Line 3177  instruction_read(struct_processus *s_eta Line 3178  instruction_read(struct_processus *s_eta
                     return;                      return;
                 }                  }
   
                 if (ios <= 0)                  if (ios < 0)
                 {                  {
                     nanosleep(&attente, NULL);                      nanosleep(&attente, NULL);
                     INCR_GRANULARITE(attente.tv_nsec);                      INCR_GRANULARITE(attente.tv_nsec);
Line 3208  instruction_read(struct_processus *s_eta Line 3209  instruction_read(struct_processus *s_eta
                     position_initiale = 0;                      position_initiale = 0;
                     presence_indicateur = d_faux;                      presence_indicateur = d_faux;
                 }                  }
                 else if (ios > 0)                  else if (ios >= 0)
                 {                  {
                     // On retire une trame du buffer.                      // On retire une trame du buffer.
   
Line 3699  instruction_read(struct_processus *s_eta Line 3700  instruction_read(struct_processus *s_eta
   
                 if (longueur_effective == longueur_questure)                  if (longueur_effective == longueur_questure)
                 {                  {
                       trame_complete = d_faux;
                     free(tampon_lecture);                      free(tampon_lecture);
                     longueur_questure *= 2;  
                       // Taille standard des jumbo frames
                       if (longueur_questure <= 9000)
                       {
                           longueur_questure *= 2;
                       }
                       else
                       {
                           longueur_questure += 9000;
                       }
                 }                  }
             } while(longueur_effective == longueur_questure);                  else
                   {
                       trame_complete = d_vrai;
                   }
               } while(trame_complete == d_faux);
   
             longueur_enregistrement = 1;              longueur_enregistrement = 1;
   
             for(i = 0; i < longueur_effective; i++)              for(i = 0; i < longueur_effective; i++)
             {              {
                 if (isprint(tampon_lecture[i]) != 0)                  if (isprint(tampon_lecture[i]) == 0)
                 {                  {
                     longueur_enregistrement += 4;                      longueur_enregistrement += 4;
                 }                  }
                 else                  else
                 {                  {
                     longueur_enregistrement++;                      if ((tampon_lecture[i] == '"') ||
                               (tampon_lecture[i] == '"'))
                       {
                           longueur_enregistrement += 2;
                       }
                       else
                       {
                           longueur_enregistrement++;
                       }
                 }                  }
             }              }
   
Line 3741  instruction_read(struct_processus *s_eta Line 3764  instruction_read(struct_processus *s_eta
             {              {
                 if (isprint(tampon_lecture[i]) != 0)                  if (isprint(tampon_lecture[i]) != 0)
                 {                  {
                     (*ptr) = tampon_lecture[i];                      if ((tampon_lecture[i] == '"') ||
                     ptr++;                              (tampon_lecture[i] == '"'))
                       {
                           (*ptr) = '\\';
                           ptr++;
                           (*ptr) = tampon_lecture[i];
                           ptr++;
                       }
                       else
                       {
                           (*ptr) = tampon_lecture[i];
                           ptr++;
                       }
                 }                  }
                 else                  else
                 {                  {

Removed from v.1.115  
changed lines
  Added in v.1.122


CVSweb interface <joel.bertrand@systella.fr>