--- rpl/src/instructions_s4.c 2010/02/10 10:14:24 1.3 +++ rpl/src/instructions_s4.c 2010/08/06 15:26:49 1.12 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 + RPL/2 (R) version 4.0.18 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -611,6 +611,7 @@ instruction_store(struct_processus *s_et file *fichier; logical1 i45; + logical1 i48; logical1 i49; logical1 i50; @@ -618,6 +619,8 @@ instruction_store(struct_processus *s_et struct_objet *s_objet_argument_2; unsigned char *ligne; + unsigned char *ligne_convertie; + unsigned char registre; (*s_etat_processus).erreur_execution = d_ex; @@ -710,10 +713,12 @@ instruction_store(struct_processus *s_et } i45 = test_cfsf(s_etat_processus, 45); + i48 = test_cfsf(s_etat_processus, 48); i49 = test_cfsf(s_etat_processus, 49); i50 = test_cfsf(s_etat_processus, 50); cf(s_etat_processus, 45); + cf(s_etat_processus, 48); cf(s_etat_processus, 49); cf(s_etat_processus, 50); @@ -723,23 +728,45 @@ instruction_store(struct_processus *s_et return; } + registre = (*s_etat_processus).autorisation_conversion_chaine; + (*s_etat_processus).autorisation_conversion_chaine = 'N'; + + ligne = formateur(s_etat_processus, 0, s_objet_argument_2); + + if ((ligne_convertie = transliteration(s_etat_processus, + ligne, d_locale, "UTF-8")) == NULL) + { + free(ligne); + + liberation(s_etat_processus, s_objet_argument_1); + liberation(s_etat_processus, s_objet_argument_2); + return; + } + + free(ligne); + ligne = ligne_convertie; + + (*s_etat_processus).autorisation_conversion_chaine = registre; + if ((*s_objet_argument_2).type == CHN) { - if (fprintf(fichier, "\"%s\"\n", ligne = formateur(s_etat_processus, - 0, s_objet_argument_2)) < 0) + if (fprintf(fichier, "\"%s\"\n", ligne) < 0) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; return; } + + (*s_etat_processus).autorisation_conversion_chaine = registre; } else { - if (fprintf(fichier, "%s\n", ligne = formateur(s_etat_processus, - 0, s_objet_argument_2)) < 0) + if (fprintf(fichier, "%s\n", ligne) < 0) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; return; } + + (*s_etat_processus).autorisation_conversion_chaine = registre; } free(ligne); @@ -759,6 +786,15 @@ instruction_store(struct_processus *s_et cf(s_etat_processus, 45); } + if (i48 == d_vrai) + { + sf(s_etat_processus, 48); + } + else + { + cf(s_etat_processus, 48); + } + if (i49 == d_vrai) { sf(s_etat_processus, 49);