m_ctype.h
上传用户:jxpjxmjjw
上传日期:2009-12-07
资源大小:5877k
文件大小:6k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.   A better inplementation of the UNIX ctype(3) library.
  15.   Notes:   my_global.h should be included before ctype.h
  16. */
  17. #ifndef _m_ctype_h
  18. #define _m_ctype_h
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #define CHARSET_DIR "charsets/"
  23. typedef struct charset_info_st
  24. {
  25.     uint      number;
  26.     const char *name;
  27.     uchar    *ctype;
  28.     uchar    *to_lower;
  29.     uchar    *to_upper;
  30.     uchar    *sort_order;
  31.     uint      strxfrm_multiply;
  32.     int     (*strcoll)(const uchar *, const uchar *);
  33.     int     (*strxfrm)(uchar *, const uchar *, int);
  34.     int     (*strnncoll)(const uchar *, int, const uchar *, int);
  35.     int     (*strnxfrm)(uchar *, const uchar *, int, int);
  36.     my_bool (*like_range)(const char *, uint, pchar, uint,
  37.                           char *, char *, uint *, uint *);
  38.     uint      mbmaxlen;
  39.     int     (*ismbchar)(const char *, const char *);
  40.     my_bool (*ismbhead)(uint);
  41.     int     (*mbcharlen)(uint);
  42. } CHARSET_INFO;
  43. /* strings/ctype.c */
  44. extern CHARSET_INFO *default_charset_info;
  45. extern CHARSET_INFO *find_compiled_charset(uint cs_number);
  46. extern CHARSET_INFO *find_compiled_charset_by_name(const char *name);
  47. extern CHARSET_INFO  compiled_charsets[];
  48. extern uint compiled_charset_number(const char *name);
  49. extern const char *compiled_charset_name(uint charset_number);
  50. #define MY_CHARSET_UNDEFINED 0
  51. #define MY_CHARSET_CURRENT (default_charset_info->number)
  52. /* Don't include std ctype.h when this is included */
  53. #define _CTYPE_H
  54. #define _CTYPE_H_
  55. #define _CTYPE_INCLUDED
  56. #define __CTYPE_INCLUDED
  57. #define _CTYPE_USING   /* Don't put names in global namespace. */
  58. /* Fix things, if ctype.h would have been included before */
  59. #undef toupper
  60. #undef _toupper
  61. #undef _tolower
  62. #undef toupper
  63. #undef tolower
  64. #undef isalpha
  65. #undef isupper
  66. #undef islower
  67. #undef isdigit
  68. #undef isxdigit
  69. #undef isalnum
  70. #undef isspace
  71. #undef ispunct
  72. #undef isprint
  73. #undef isgraph
  74. #undef iscntrl
  75. #undef isascii
  76. #undef toascii
  77. #define _U 01 /* Upper case */
  78. #define _L 02 /* Lower case */
  79. #define _NMR 04 /* Numeral (digit) */
  80. #define _SPC 010 /* Spacing character */
  81. #define _PNT 020 /* Punctuation */
  82. #define _CTR 040 /* Control character */
  83. #define _B 0100 /* Blank */
  84. #define _X 0200 /* heXadecimal digit */
  85. #define my_ctype (default_charset_info->ctype)
  86. #define my_to_upper (default_charset_info->to_upper)
  87. #define my_to_lower (default_charset_info->to_lower)
  88. #define my_sort_order (default_charset_info->sort_order)
  89. #define _toupper(c) (char) my_to_upper[(uchar) (c)]
  90. #define _tolower(c) (char) my_to_lower[(uchar) (c)]
  91. #define toupper(c) (char) my_to_upper[(uchar) (c)]
  92. #define tolower(c) (char) my_to_lower[(uchar) (c)]
  93. #define isalpha(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L))
  94. #define isupper(c) ((my_ctype+1)[(uchar) (c)] & _U)
  95. #define islower(c) ((my_ctype+1)[(uchar) (c)] & _L)
  96. #define isdigit(c) ((my_ctype+1)[(uchar) (c)] & _NMR)
  97. #define isxdigit(c) ((my_ctype+1)[(uchar) (c)] & _X)
  98. #define isalnum(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L | _NMR))
  99. #define isspace(c) ((my_ctype+1)[(uchar) (c)] & _SPC)
  100. #define ispunct(c) ((my_ctype+1)[(uchar) (c)] & _PNT)
  101. #define isprint(c) ((my_ctype+1)[(uchar) (c)] & (_PNT | _U | _L | _NMR | _B))
  102. #define isgraph(c) ((my_ctype+1)[(uchar) (c)] & (_PNT | _U | _L | _NMR))
  103. #define iscntrl(c) ((my_ctype+1)[(uchar) (c)] & _CTR)
  104. #define isascii(c) (!((c) & ~0177))
  105. #define toascii(c) ((c) & 0177)
  106. #ifdef ctype
  107. #undef ctype
  108. #endif /* ctype */
  109. #define my_isalpha(s, c)  (((s)->ctype+1)[(uchar) (c)] & (_U | _L))
  110. #define my_isupper(s, c)  (((s)->ctype+1)[(uchar) (c)] & _U)
  111. #define my_islower(s, c)  (((s)->ctype+1)[(uchar) (c)] & _L)
  112. #define my_isdigit(s, c)  (((s)->ctype+1)[(uchar) (c)] & _NMR)
  113. #define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _X)
  114. #define my_isalnum(s, c)  (((s)->ctype+1)[(uchar) (c)] & (_U | _L | _NMR))
  115. #define my_isspace(s, c)  (((s)->ctype+1)[(uchar) (c)] & _SPC)
  116. #define my_ispunct(s, c)  (((s)->ctype+1)[(uchar) (c)] & _PNT)
  117. #define my_isprint(s, c)  (((s)->ctype+1)[(uchar) (c)] & (_PNT | _U | _L | _NMR | _B))
  118. #define my_isgraph(s, c)  (((s)->ctype+1)[(uchar) (c)] & (_PNT | _U | _L | _NMR))
  119. #define my_iscntrl(s, c)  (((s)->ctype+1)[(uchar) (c)] & _CTR)
  120. #define use_strcoll(s)                ((s)->strcoll != NULL)
  121. #define MY_STRXFRM_MULTIPLY           (default_charset_info->strxfrm_multiply)
  122. #define my_strnxfrm(s, a, b, c, d)    ((s)->strnxfrm((a), (b), (c), (d)))
  123. #define my_strnncoll(s, a, b, c, d)   ((s)->strnncoll((a), (b), (c), (d)))
  124. #define my_strcoll(s, a, b)           ((s)->strcoll((a), (b)))
  125. #define my_like_range(s, a, b, c, d, e, f, g, h) 
  126.                 ((s)->like_range((a), (b), (c), (d), (e), (f), (g), (h)))
  127. #define use_mb(s)                     ((s)->ismbchar != NULL)
  128. #define MBMAXLEN                      (default_charset_info->mbmaxlen)
  129. #define my_ismbchar(s, a, b)          ((s)->ismbchar((a), (b)))
  130. #define my_ismbhead(s, a)             ((s)->ismbhead((a)))
  131. #define my_mbcharlen(s, a)            ((s)->mbcharlen((a)))
  132. /* Some macros that should be cleaned up a little */
  133. #define isvar(c) (isalnum(c) || (c) == '_')
  134. #define isvar_start(c) (isalpha(c) || (c) == '_')
  135. #define tocntrl(c) ((c) & 31)
  136. #define toprint(c) ((c) | 64)
  137. /* XXX: still need to take care of this one */
  138. #ifdef MY_CHARSET_TIS620
  139. #error The TIS620 charset is broken at the moment.  Tell tim to fix it.
  140. #define USE_TIS620
  141. #include "t_ctype.h"
  142. #endif
  143. #ifdef __cplusplus
  144. }
  145. #endif
  146. #endif /* _m_ctype_h */