version 1.23, 2012/05/21 17:25:41
|
version 1.28, 2012/12/18 13:19:34
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.9 |
RPL/2 (R) version 4.1.12 |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 240 formateur_flux(struct_processus *s_etat_
|
Line 240 formateur_flux(struct_processus *s_etat_
|
|
|
return(chaine); |
return(chaine); |
} |
} |
|
|
|
|
|
/* |
|
================================================================================ |
|
Routine de d'analyse d'un flux |
|
================================================================================ |
|
Entrées : structure sur l'état du processus et objet à afficher |
|
-------------------------------------------------------------------------------- |
|
Sorties : chaine de caractères |
|
-------------------------------------------------------------------------------- |
|
Effets de bord : néant |
|
================================================================================ |
|
*/ |
|
|
|
unsigned char * |
|
analyse_flux(struct_processus *s_etat_processus, unsigned char *donnees, |
|
long longueur) |
|
{ |
|
long longueur_courante; |
|
long offset; |
|
|
|
unsigned char *chaine; |
|
unsigned char hexadecimal[3]; |
|
unsigned char *ptr_ecriture; |
|
unsigned char *ptr_lecture; |
|
|
|
if ((chaine = malloc((longueur_courante = longueur + 1) * |
|
sizeof(unsigned char))) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_allocation_memoire; |
|
return(NULL); |
|
} |
|
|
|
ptr_lecture = donnees; |
|
ptr_ecriture = chaine; |
|
|
|
while(longueur > 0) |
|
{ |
|
// Début de la séquence d'échappement |
|
|
|
switch((*ptr_lecture)) |
|
{ |
|
case '"': |
|
case '\b': |
|
case '\n': |
|
case '\t': |
|
{ |
|
offset = ptr_ecriture - chaine; |
|
|
|
if ((chaine = realloc(chaine, (++longueur_courante) |
|
* sizeof(unsigned char))) == NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_allocation_memoire; |
|
return(NULL); |
|
} |
|
|
|
ptr_ecriture = chaine + offset; |
|
*ptr_ecriture++ = '\\'; |
|
|
|
switch((*ptr_lecture++)) |
|
{ |
|
case '"': |
|
{ |
|
*ptr_ecriture++ = '"'; |
|
break; |
|
} |
|
|
|
case '\b': |
|
{ |
|
*ptr_ecriture++ = 'b'; |
|
break; |
|
} |
|
|
|
case '\n': |
|
{ |
|
*ptr_ecriture++ = 'n'; |
|
break; |
|
} |
|
|
|
case '\t': |
|
{ |
|
*ptr_ecriture++ = 't'; |
|
break; |
|
} |
|
} |
|
|
|
break; |
|
} |
|
|
|
case ' ': |
|
{ |
|
*ptr_ecriture++ = *ptr_lecture++; |
|
break; |
|
} |
|
|
|
default: |
|
{ |
|
if (isgraph((*ptr_lecture))) |
|
{ |
|
*ptr_ecriture++ = *ptr_lecture++; |
|
} |
|
else |
|
{ |
|
offset = ptr_ecriture - chaine; |
|
|
|
if ((chaine = realloc(chaine, (longueur_courante = |
|
longueur_courante + 3) * sizeof(unsigned char))) |
|
== NULL) |
|
{ |
|
(*s_etat_processus).erreur_systeme = |
|
d_es_allocation_memoire; |
|
return(NULL); |
|
} |
|
|
|
ptr_ecriture = chaine + offset; |
|
*ptr_ecriture++ = '\\'; |
|
*ptr_ecriture++ = 'x'; |
|
|
|
sprintf(hexadecimal, "%02X", *ptr_lecture++); |
|
|
|
*ptr_ecriture++ = hexadecimal[0]; |
|
*ptr_ecriture++ = hexadecimal[1]; |
|
} |
|
|
|
break; |
|
} |
|
} |
|
|
|
longueur--; |
|
} |
|
|
|
(*ptr_ecriture) = d_code_fin_chaine; |
|
|
|
return(chaine); |
|
} |
|
|
|
|
/* |
/* |