version 1.5, 2011/06/21 07:45:22
|
version 1.14, 2011/11/17 22:21:16
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.0.prerelease.1 |
RPL/2 (R) version 4.1.4 |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 241 formateur_flux(struct_processus *s_etat_
|
Line 241 formateur_flux(struct_processus *s_etat_
|
return(chaine); |
return(chaine); |
} |
} |
|
|
|
|
|
/* |
|
================================================================================ |
|
Routine permettant de trouver le caractère suivant dans une chaîne |
|
================================================================================ |
|
Entrées : structure sur l'état du processus et chaîne courante |
|
-------------------------------------------------------------------------------- |
|
Sorties : pointeur sur le caractère suivant |
|
-------------------------------------------------------------------------------- |
|
Effets de bord : néant |
|
================================================================================ |
|
*/ |
|
|
|
static inline unsigned char * |
|
prochain_caractere(struct_processus *s_etat_processus, unsigned char *chaine) |
|
{ |
|
unsigned char *suivant; |
|
|
|
if ((*chaine) == '\\') |
|
{ |
|
if ((*(chaine + 1)) == '"') |
|
{ |
|
suivant = chaine + 2; |
|
} |
|
else if ((*(chaine + 1)) == 'b') |
|
{ |
|
suivant = chaine + 2; |
|
} |
|
else if ((*(chaine + 1)) == 'n') |
|
{ |
|
suivant = chaine + 2; |
|
} |
|
else if ((*(chaine + 1)) == 't') |
|
{ |
|
suivant = chaine + 2; |
|
} |
|
else if ((*(chaine + 1)) == 'x') |
|
{ |
|
if ((*(chaine + 2)) != d_code_fin_chaine) |
|
{ |
|
if ((*(chaine + 3)) != d_code_fin_chaine) |
|
{ |
|
logical1 erreur; |
|
|
|
erreur = d_faux; |
|
|
|
switch(*(chaine + 2)) |
|
{ |
|
case '0': |
|
case '1': |
|
case '2': |
|
case '3': |
|
case '4': |
|
case '5': |
|
case '6': |
|
case '7': |
|
case '8': |
|
case '9': |
|
case 'A': |
|
case 'B': |
|
case 'C': |
|
case 'D': |
|
case 'E': |
|
case 'F': |
|
break; |
|
|
|
default: |
|
erreur = d_vrai; |
|
break; |
|
} |
|
|
|
switch(*(chaine + 3)) |
|
{ |
|
case '0': |
|
case '1': |
|
case '2': |
|
case '3': |
|
case '4': |
|
case '5': |
|
case '6': |
|
case '7': |
|
case '8': |
|
case '9': |
|
case 'A': |
|
case 'B': |
|
case 'C': |
|
case 'D': |
|
case 'E': |
|
case 'F': |
|
break; |
|
|
|
default: |
|
erreur = d_vrai; |
|
break; |
|
} |
|
|
|
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()); |
|
} |
|
|
|
return(NULL); |
|
} |
|
|
|
suivant = chaine + 4; |
|
} |
|
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()); |
|
} |
|
|
|
return(NULL); |
|
} |
|
} |
|
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()); |
|
} |
|
|
|
return(NULL); |
|
} |
|
} |
|
else if ((*(chaine + 1)) == '\\') |
|
{ |
|
suivant = chaine + 1; |
|
} |
|
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()); |
|
} |
|
|
|
return(NULL); |
|
} |
|
} |
|
else |
|
{ |
|
suivant = chaine + 1; |
|
} |
|
|
|
return(suivant); |
|
} |
|
|
|
|
|
/* |
|
================================================================================ |
|
Routine donnant la longueur d'une chaîne de caractères |
|
================================================================================ |
|
Entrées : structure sur l'état du processus et chaîne |
|
-------------------------------------------------------------------------------- |
|
Sorties : longueur de la chaîne |
|
-------------------------------------------------------------------------------- |
|
Effets de bord : néant |
|
================================================================================ |
|
*/ |
|
|
|
integer8 |
|
longueur_chaine(struct_processus *s_etat_processus, unsigned char *chaine) |
|
{ |
|
integer8 nombre_caracteres; |
|
|
|
unsigned char *pointeur; |
|
|
|
pointeur = chaine; |
|
nombre_caracteres = 0; |
|
|
|
if ((*pointeur) == '\0') |
|
{ |
|
return(0); |
|
} |
|
|
|
do |
|
{ |
|
if ((pointeur = prochain_caractere(s_etat_processus, pointeur)) == NULL) |
|
{ |
|
return(0); |
|
} |
|
|
|
nombre_caracteres++; |
|
} while((*pointeur) != 0); |
|
|
|
return(nombre_caracteres); |
|
} |
|
|
// vim: ts=4 |
// vim: ts=4 |