--- rpl/src/transliteration.c 2010/08/10 18:02:43 1.16 +++ rpl/src/transliteration.c 2011/10/05 13:14:19 1.46 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.18 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.4 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -50,14 +50,6 @@ transliteration(struct_processus *s_etat unsigned char *codage_sortie_transliteral; unsigned char *tampon; -# ifdef OS2 - unsigned char *ptr_e;; - unsigned char *ptr_l;; - unsigned char *tampon2; - - unsigned long i; -# endif - if ((codage_sortie_transliteral = malloc((strlen(codage_sortie) + strlen("//TRANSLIT") + 1) * sizeof(unsigned char))) == NULL) { @@ -71,53 +63,6 @@ transliteration(struct_processus *s_etat codage_entree, codage_sortie_transliteral); free(codage_sortie_transliteral); -# ifdef OS2 - - i = 0; - ptr_l = tampon; - - while((*ptr_l) != d_code_fin_chaine) - { - if ((*ptr_l) == '\n') - { - i++; - } - - ptr_l++; - } - - if ((tampon2 = malloc((strlen(tampon) + i + 1) * sizeof(unsigned char))) - == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return(NULL); - } - - ptr_e = tampon2; - ptr_l = tampon; - - while((*ptr_l) != d_code_fin_chaine) - { - (*ptr_e) = (*ptr_l); - - if ((*ptr_l) == '\n') - { - (*(++ptr_e)) = '\r'; - ptr_e++; - ptr_l++; - } - else - { - ptr_e++; - ptr_l++; - } - } - - free(tampon); - tampon = tampon2; - -# endif - return(tampon); } @@ -160,7 +105,8 @@ reencodage(struct_processus *s_etat_proc chaine_sortie[0] = d_code_fin_chaine; - if ((buffer_sortie = malloc((d_LONGUEUR + 1) * sizeof(char))) == NULL) + if ((buffer_sortie = malloc((d_LONGUEUR + 1) * sizeof(unsigned char))) + == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); @@ -186,7 +132,7 @@ reencodage(struct_processus *s_etat_proc } } - tampon = (unsigned char *) chaine_sortie; + tampon = chaine_sortie; (*pointeur) = d_code_fin_chaine; if ((chaine_sortie = malloc((strlen(tampon) + strlen(buffer_sortie) + 1) @@ -230,16 +176,11 @@ localisation_courante(struct_processus * int pipes_sortie[2]; int status; - logical1 drapeau_fin; - long i; long nombre_arguments; pid_t pid; - sigset_t oldset; - sigset_t set; - struct sigaction action_passee; unsigned char *tampon; @@ -271,7 +212,6 @@ localisation_courante(struct_processus * arguments[2] = NULL; nombre_arguments = 2; - drapeau_fin = d_faux; if (pipe(pipes_entree) != 0) { @@ -291,16 +231,10 @@ localisation_courante(struct_processus * return; } - sigfillset(&set); - pthread_sigmask(SIG_BLOCK, &set, &oldset); - verrouillage_threads_concurrents(s_etat_processus); pid = fork(); deverrouillage_threads_concurrents(s_etat_processus); - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - if (pid < 0) { if (close(pipes_entree[0]) != 0) @@ -463,9 +397,9 @@ localisation_courante(struct_processus * */ # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) # endif { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -475,9 +409,9 @@ localisation_courante(struct_processus * if (waitpid(pid, &status, 0) == -1) { # ifndef SEMAPHORES_NOMMES - if (sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -492,9 +426,9 @@ localisation_courante(struct_processus * } # ifndef SEMAPHORES_NOMMES - if (sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -516,10 +450,12 @@ localisation_courante(struct_processus * return; } + tampon[0] = d_code_fin_chaine; + # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) # endif { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -531,9 +467,9 @@ localisation_courante(struct_processus * longueur_lecture)) > 0) { # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -557,9 +493,9 @@ localisation_courante(struct_processus * } # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) # endif { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -568,9 +504,9 @@ localisation_courante(struct_processus * } # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -600,7 +536,23 @@ localisation_courante(struct_processus * return; } - (*s_etat_processus).localisation = tampon; + if (strlen(tampon) > 0) + { + (*s_etat_processus).localisation = tampon; + } + else + { + free(tampon); + + if (((*s_etat_processus).localisation = malloc((strlen(d_locale) + + 1) * sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + + strcpy((*s_etat_processus).localisation, d_locale); + } if (sigaction(SIGINT, &action_passee, NULL) != 0) { @@ -622,9 +574,9 @@ localisation_courante(struct_processus * free(arguments); # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (sem_post((*s_etat_processus).semaphore_fork) != 0) # endif { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -635,27 +587,22 @@ localisation_courante(struct_processus * { // Le processus fils renvoie une erreur. -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + free(tampon); + + if (((*s_etat_processus).localisation = malloc((strlen(d_locale) + + 1) * sizeof(unsigned char))) == NULL) { - if (errno != EINTR) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } - (*s_etat_processus).erreur_execution = d_ex_erreur_processus; - return; + strcpy((*s_etat_processus).localisation, d_locale); } # ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { if (errno != EINTR) @@ -689,6 +636,14 @@ transliterated_fprintf(struct_processus va_start(arguments, format); +# ifdef OS2 + unsigned char *ptr_e;; + unsigned char *ptr_l;; + unsigned char *tampon3; + + unsigned long i; +# endif + if (valsprintf(&tampon, format, arguments) < 0) { va_end(arguments); @@ -719,6 +674,56 @@ transliterated_fprintf(struct_processus tampon2 = tampon; } +# ifdef OS2 + if ((flux == stderr) || (flux == stdout)) + { + i = 0; + ptr_l = tampon2; + + while((*ptr_l) != d_code_fin_chaine) + { + if ((*ptr_l) == '\n') + { + i++; + } + + ptr_l++; + } + + if ((tampon3 = malloc((strlen(tampon2) + i + 1) * + sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(-1); + } + + ptr_e = tampon3; + ptr_l = tampon2; + + while((*ptr_l) != d_code_fin_chaine) + { + (*ptr_e) = (*ptr_l); + + if ((*ptr_l) == '\n') + { + (*(++ptr_e)) = '\r'; + ptr_e++; + ptr_l++; + } + else + { + ptr_e++; + ptr_l++; + } + } + + (*ptr_e) = d_code_fin_chaine; + + free(tampon2); + tampon2 = tampon3; + } +# endif + # ifdef SunOS while((ios = fprintf(flux, "%s", tampon2)) < 0) { @@ -790,6 +795,20 @@ tex_fprintf(struct_processus *s_etat_pro return(ios); } +#undef readline + +unsigned char * +readline_wrapper(unsigned char *invite) +{ + unsigned char *chaine; + + chaine = readline(invite); + printf("\r"); + + return(chaine); +} + + #define fprintf NULL #define printf NULL