--- rpl/src/formateur.c 2010/02/08 19:26:32 1.4 +++ rpl/src/formateur.c 2011/08/09 11:31:29 1.39 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.3 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -67,6 +67,8 @@ formateur(struct_processus *s_etat_proce unsigned char *format_majuscule; unsigned char *ptre; unsigned char *ptrl; + unsigned char *ptr_ecriture; + unsigned char *ptr_lecture; unsigned char *registre; unsigned char tampon[1024 + 1]; @@ -188,7 +190,7 @@ formateur(struct_processus *s_etat_proce # ifdef POSTGRESQL_SUPPORT if (alsprintf(&chaine, "Sql $ %016lX (%s)", (long unsigned int) (*((struct_connecteur_sql *) - (*s_objet).objet)).descripteur.mysql, + (*s_objet).objet)).descripteur.postgresql, (*((struct_connecteur_sql *) (*s_objet).objet)).type) < 0) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -390,7 +392,7 @@ formateur(struct_processus *s_etat_proce -------------------------------------------------------------------------------- */ - if (alsprintf(&chaine, "Socket %016lX", + if (alsprintf(&chaine, "Socket $ %016lX", (unsigned long) (*((struct_socket *) ((*s_objet).objet))).socket) < 0) { @@ -1750,16 +1752,207 @@ formateur(struct_processus *s_etat_proce -------------------------------------------------------------------------------- */ - chaine = (unsigned char *) malloc((strlen((unsigned char *) - ((*s_objet).objet)) + 1) * sizeof(unsigned char)); - - if (chaine == NULL) + if ((chaine = malloc((strlen((unsigned char *) + ((*s_objet).objet)) + 1) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); } - strcpy(chaine, (unsigned char *) ((*s_objet).objet)); + if (((*s_etat_processus).autorisation_conversion_chaine == 'Y') && + (test_cfsf(s_etat_processus, 34) == d_vrai)) + { + ptr_lecture = (unsigned char *) (*s_objet).objet; + ptr_ecriture = chaine; + + while((*ptr_lecture) != d_code_fin_chaine) + { + (*ptr_ecriture) = (*ptr_lecture); + + // Début de la séquence d'échappement + + if ((*ptr_lecture) == '\\') + { + if ((*(ptr_lecture + 1)) == '"') + { + ptr_lecture++; + (*ptr_ecriture) = '\"'; + } + else if ((*(ptr_lecture + 1)) == 'b') + { + ptr_lecture++; + (*ptr_ecriture) = '\b'; + } + else if ((*(ptr_lecture + 1)) == 'n') + { + ptr_lecture++; + (*ptr_ecriture) = '\n'; + } + else if ((*(ptr_lecture + 1)) == 't') + { + ptr_lecture++; + (*ptr_ecriture) = '\t'; + } + else if ((*(ptr_lecture + 1)) == 'x') + { + ptr_lecture += 2; + + if ((*ptr_lecture) != d_code_fin_chaine) + { + if ((*(ptr_lecture + 1)) != d_code_fin_chaine) + { + logical1 erreur; + unsigned char ec; + + erreur = d_faux; + + switch(*ptr_lecture) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + ec = (*ptr_lecture) - '0'; + break; + + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + ec = ((*ptr_lecture) - 'A') + 10; + break; + + default: + ec = 0; + erreur = d_vrai; + break; + } + + ec *= 0x10; + ptr_lecture++; + + switch(*ptr_lecture) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + ec += (*ptr_lecture) - '0'; + break; + + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + ec += ((*ptr_lecture) - 'A') + 10; + break; + + default: + erreur = d_vrai; + break; + } + + (*ptr_ecriture) = ec; + + if (erreur == d_vrai) + { + 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()); + } + } + } + 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()); + } + } + } + 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()); + } + } + } + else if ((*(ptr_lecture + 1)) == '\\') + { + ptr_lecture++; + } + 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_ecriture++; + ptr_lecture++; + } + + (*ptr_ecriture) = d_code_fin_chaine; + + if ((chaine = realloc(chaine, ((ptr_ecriture - chaine) + 1) * + sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(NULL); + } + } + else + { + strcpy(chaine, (unsigned char *) ((*s_objet).objet)); + } } else if ((*s_objet).type == CPL) { @@ -3460,6 +3653,30 @@ formateur_reel(struct_processus *s_etat_ if (type == 'R') { +# ifdef FP_INFINITE + int signe; + + if ((signe = isinf((*((real8 *) valeur_numerique)))) != 0) + { + if (signe > 0) + { + strcpy(chaine, "infinity"); + } + else + { + strcpy(chaine, "-infinity"); + } + + return(chaine); + } +# endif + + if (isnan((*((real8 *) valeur_numerique)))) + { + strcpy(chaine, "undef"); + return(chaine); + } + tampon_reel = *((real8 *) valeur_numerique); if (tampon_reel > ((real8) 0)) @@ -3690,8 +3907,15 @@ formateur_reel(struct_processus *s_etat_ if (exposant >= 0) { - sprintf(format, "%%.%luf", (longueur_utile_limite - exposant - - 1)); + if ((exposant + 1) < longueur_utile_limite) + { + sprintf(format, "%%.%luf", (longueur_utile_limite - exposant + - 1)); + } + else + { + strcpy(format, "%.0f."); + } } else {