mf_casecnv.c
上传用户:jmzj888
上传日期:2007-01-02
资源大小:220k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
  2.    This file is public domain and comes with NO WARRANTY of any kind */
  3. /*
  4.   Functions to convert to lover_case and to upper_case in scandinavia.
  5.   case_sort converts a character string to a representaion that can
  6.   be compared by strcmp to find with is alfabetical bigger.
  7.   (lower- and uppercase letters is compared as the same)
  8. */
  9. #include "mysys_priv.h"
  10. #include <m_ctype.h>
  11. /* string to uppercase */
  12. void caseup_str(my_string str)
  13. {
  14.   while ((*str = toupper(*str)) != 0)
  15.     str++;
  16. } /* caseup_str */
  17. /* string to lowercase */
  18. void casedn_str(my_string str)
  19. {
  20.   while ((*str= tolower(*str)) != 0)
  21.     str++;
  22. } /* casedn_str */
  23. /* to uppercase */
  24. void caseup(my_string str, uint length)
  25. {
  26.   for ( ; length>0 ; length--, str++)
  27.     *str= toupper(*str);
  28. } /* caseup */
  29. /* to lowercase */
  30. void casedn(my_string str, uint length)
  31. {
  32.   for ( ; length>0 ; length--, str++)
  33.     *str= tolower(*str);
  34. } /* casedn */
  35. /* to sort-string that can be compared to get text in order */
  36. void case_sort(my_string str, uint length)
  37. {
  38.   for ( ; length>0 ; length--, str++)
  39.     *str= (char) my_sort_order[(uchar) *str];
  40. } /* case_sort */
  41. /* find string in another with no case_sensivity */
  42. my_string strcasestr(const char *str, const char *search)
  43. {
  44.  uchar *i,*j,*pos;
  45.  pos=(uchar*) str;
  46. skipp:
  47.   while (*pos != '') {
  48.     if (toupper((uchar) *pos++) == toupper((uchar) *search)) {
  49.       i=(uchar*) pos; j=(uchar*) search+1;
  50.       while (*j)
  51. if (toupper(*i++) != toupper(*j++)) goto skipp;
  52.       return ((char*) pos-1);
  53.     }
  54.   }
  55.   return ((my_string) 0);
  56. } /* strcstr */
  57. /* compare strings without regarding to case */
  58. int my_strcasecmp(const char *s, const char *t)
  59. {
  60.   while (toupper((uchar) *s) == toupper((uchar) *t++))
  61.     if (!*s++) return 0;
  62.   return ((int) toupper((uchar) s[0]) - (int) toupper((uchar) t[-1]));
  63. }
  64. int my_casecmp(const char *s, const char *t, uint len)
  65. {
  66.   while (len-- != 0 && toupper(*s++) == toupper(*t++)) ;
  67.   return (int) len+1;
  68. }
  69. int my_strsortcmp(const char *s, const char *t)
  70. {
  71. #ifdef USE_STRCOLL
  72. return my_strcoll((unsigned char *)s, (unsigned char *)t);
  73. #else
  74.   while (my_sort_order[(uchar) *s] == my_sort_order[(uchar) *t++])
  75.     if (!*s++) return 0;
  76.   return ((int) my_sort_order[(uchar) s[0]] - (int) my_sort_order[(uchar) t[-1]]);
  77. #endif
  78. }
  79. int my_sortcmp(const char *s, const char *t, uint len)
  80. {
  81. #ifndef USE_STRCOLL
  82.   while (len--)
  83.   {
  84.     if (my_sort_order[(uchar) *s++] != my_sort_order[(uchar) *t++])
  85.       return ((int) my_sort_order[(uchar) s[-1]] -
  86.       (int) my_sort_order[(uchar) t[-1]]);
  87.   }
  88.   return 0;
  89. #else
  90. return my_strnncoll((unsigned char *)s, len, (unsigned char
  91. *)t, len);
  92. #endif
  93. }