/* Comparaison de chaine particulière */ #include #include #include #include "etc.h" /* Compare deux chaines contenant des caractères français du IBM PC Arrête après len caractères Retourne < 0 si str1 < str2 = 0 si str1 = str2 > 0 si str1 > str2 */ static int near str_nicmpfranc0 ( const char *str1, const char *str2, int len, int nocase) // Ne tient pas compte du case { int ret; while (len > 0 && *str1 != '\0' && *str2 != '\0'){ while (*str1 != '\0' && *str1 == *str2){ str1++; str2++; len--; } if (len > 0){ int car1 = char_fr2ang(*str1); int car2 = char_fr2ang(*str2); if (nocase){ car1 = toupper(car1); car2 = toupper(car2); } if (car1 < car2){ return (-1); }else if (car1 > car2){ return (1); } if (car1 != 0){ str1++; str2++; len--; } } } /* Une des deux chaine est terminé ou les deux, ou len == 0 */ ret = 0; if (len > 0){ if (*str1 == '\0'){ if (*str2 == '\0'){ ret = 0; }else{ ret = -1; } }else{ ret = 1; } } return (ret); } /* Compare deux chaines contenant des caractères français du IBM PC Arrête après len caractères Retourne < 0 si str1 < str2 = 0 si str1 = str2 > 0 si str1 > str2 */ export int str_nicmpfranc ( const char *str1, const char *str2, int len) { return str_nicmpfranc0(str1,str2,len,1); } /* Compare deux chaines contenant des caractères français du IBM PC Arrête après len caractères Retourne < 0 si str1 < str2 = 0 si str1 = str2 > 0 si str1 > str2 */ export int str_ncmpfranc (const char *str1, const char *str2, int len) { return str_nicmpfranc0(str1,str2,len,0); } /* Compare deux chaines contenant des caractères français du IBM PC Retourne < 0 si str1 < str2 = 0 si str1 = str2 > 0 si str1 > str2 */ export int str_cmpfranc (const char *str1, const char *str2) { return str_nicmpfranc0 (str1,str2,30000,0); } /* Compare deux chaines contenant des caractères français du IBM PC sans case Retourne < 0 si str1 < str2 = 0 si str1 = str2 > 0 si str1 > str2 */ export int str_icmpfranc (const char *str1, const char *str2) { return str_nicmpfranc0 (str1,str2,30000,1); } /* Compare deux chaines avec limite sans tenir compte du case Retourne < 0, == 0, > 0 */ export int str_ncmpnocase (const char *str1, const char *str2, int len) { int ret; while (len > 0 && *str1 != '\0' && *str2 != '\0'){ while (*str1 != '\0' && *str1 == *str2){ str1++; str2++; len--; } { int car1 = toupper (*str1); int car2 = toupper (*str2); if (car1 < car2){ return (-1); }else if (car1 > car2){ return (1); } if (car1 != 0){ str1++; str2++; len--; } } } /* Une des deux chaine est terminé ou les deux ou len == 0 */ ret = 0; if (len > 0){ if (*str1 == '\0'){ if (*str2 == '\0'){ ret = 0; }else{ ret = -1; } }else{ ret = 1; } } return (ret); } /* Compare deux chaines sans tenir compte du case Retourne < 0, == 0, > 0 */ export int str_cmpnocase (const char *str1, const char *str2) { return (str_ncmpnocase (str1,str2,30000)); }