#include #include #include #include "etc.h" /* Extrait une copie d'un mot d'une chaine. Retourne pointeur après le mot. Incrément nb si un mot est vue. Tous les mots débutent pas un < et finissent pas un > Traite les escape ( \ suivit d'un caractère) nb peut etre NULL. */ export char *strf_copymot (char *dst, const char *src, int *nb) { int tmpnb=0; if (nb == NULL) nb = &tmpnb; while (isspace(*src)) src++; if (*src == '<'){ src++; while (*src != '\0' && *src != '>'){ if (*src == '\\' && src[1] != '\0'){ src++; } *dst++ = *src++; } if (*src == '>'){ (*nb)++; src++; } }else{ /* #Spécification: etc / fichiers texte / encapsulage <> L'encapsulage avec des <> est optionnel. Si un champ ne commence pas par <, alors on assume qu'il n'y a pas de blanc dans le champs. Le champ se termine donc au premier blanc. */ char *debdst = dst; while (*src > ' ') *dst++ = *src++; if (dst > debdst) (*nb)++; } *dst = '\0'; return (char*)src; } /* Extrait un nombre int d'une chaine. Retourne pointeur après le nombre. Incrément nb si un nombre est vue. Batie par dessus strf_copymot(). Utilise les memes conventions lexicales. */ export char *strf_copyint ( int *dst, /* Contiendra la valeur */ const char *src, /* Buffer qui contient la chaine */ int *nb, /* Sera incrémenté s'il y a un nombre dans la chaine */ int defval) /* Valeur par défaut s'il n'y a pas de nombre */ { char buf[50]; int tmpnb = *nb; src = strf_copymot(buf,src,nb); if (*nb != tmpnb){ *dst = atoi(buf); }else{ *dst = defval; } return (char*)src; } /* Extrait un nombre long d'une chaine. Retourne pointeur après le nombre. Incrément nb si un nombre est vue. Batie par dessus strf_copymot(). Utilise les memes conventions lexicales. */ export char *strf_copylong ( long *dst, /* Contiendra la valeur */ const char *src,/* Buffer qui contient la chaine */ int *nb, /* Sera incrémenté s'il y a un nombre dans la chaine */ long defval) /* Valeur par défaut s'il n'y a pas de nombre */ { char buf[50]; int tmpnb = *nb; src = strf_copymot(buf,src,nb); if (*nb != tmpnb){ *dst = atoi(buf); }else{ *dst = defval; } return (char*)src; }