--- rpl/src/formateur.c 2010/07/02 08:41:29 1.14 +++ rpl/src/formateur.c 2011/06/22 13:26:57 1.31 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.17 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0.prerelease.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" /* @@ -392,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) { @@ -1759,7 +1759,8 @@ formateur(struct_processus *s_etat_proce return(NULL); } - if ((*s_etat_processus).autorisation_conversion_chaine == 'Y') + 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; @@ -1792,6 +1793,130 @@ formateur(struct_processus *s_etat_proce 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++; @@ -1817,7 +1942,7 @@ formateur(struct_processus *s_etat_proce (*ptr_ecriture) = d_code_fin_chaine; - if ((chaine = realloc(chaine, (strlen(chaine) + 1) * + if ((chaine = realloc(chaine, ((ptr_ecriture - chaine) + 1) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -3758,8 +3883,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 {