/* Conversion et test sur caractères spéciaux */ #include #include #include "key.h" #include "etc.h" /* Convertit un caractère français en son équivalent anglais Fait rien si ce n'est pas un caractère français */ export char char_fr2ang (char carac) { if (carac > 127){ switch (carac){ case KEYIBM_ACONFLEX: case KEYISO_ACONFLEX: case KEYIBM_AGRAVE: case KEYISO_AGRAVE: carac = 'a'; break; case KEYIBM_EGRAVE: case KEYISO_EGRAVE: case KEYIBM_ECONFLEX: case KEYISO_ECONFLEX: case KEYIBM_EAIGU: case KEYISO_EAIGU: carac = 'e'; break; case KEYIBM_ICONFLEX: case KEYISO_ICONFLEX: carac = 'i'; break; case KEYIBM_OCONFLEX: case KEYISO_OCONFLEX: carac = 'o'; break; case KEYIBM_UGRAVE: case KEYISO_UGRAVE: case KEYIBM_UCONFLEX: case KEYISO_UCONFLEX: carac = 'u'; break; case KEYIBM_CCDILLE: case KEYISO_CCDILLE: carac = 'c'; break; } } return carac; } /* Convertit un caractère s'il fait partie d'un ensemble selon un deuxième Retourne le caractère convertit ou le caractère original si aucune conversion ne s'appliquait */ export char char_lookup ( char carac, /* caractère à convertir */ const char *lookup, /* table à lire */ const char *tbcnv) /* Table à utiliser pour convertir carac */ { const char *pt = (const char *) strchr (lookup,carac); if (pt != NULL) carac = tbcnv[(int)(pt-lookup)]; return (carac); } #ifdef TEST void main (void) { char *pt = "àâèéôù"; while (*pt != '\0'){ printf ("%c -> %c\n",*pt,char_fr2ang(*pt)); pt++; } } #endif