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

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 1996  TCX DataKonsult AB & Monty Program KB & Detron HB
  2.    For a more info consult the file COPYRIGHT distributed with this file */
  3. /*
  4.   A better inplementation of the UNIX ctype(3) library.
  5.   Notes:   global.h should be included before ctype.h
  6. */
  7. #ifndef _m_ctype_h
  8. #define _m_ctype_h
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #ifdef WIN32
  13. #include <ctype.h>
  14. #endif
  15. /* Don't include std ctype.h when this is included */
  16. #define _CTYPE_H
  17. #define __CTYPE_H__
  18. #ifndef CTYPE_LIBRARY
  19. #define EXT extern
  20. #define D(x)
  21. #else
  22. #define EXT
  23. #define D(x) = x
  24. #endif
  25. #define _U 01 /* Upper case */
  26. #define _L 02 /* Lower case */
  27. #define _N 04 /* Numeral (digit) */
  28. #define _S 010 /* Spacing character */
  29. #define _P 020 /* Punctuation */
  30. #define _C 040 /* Control character */
  31. #define _B 0100 /* Blank */
  32. #define _X 0200 /* heXadecimal digit */
  33. extern uchar NEAR ctype_usa7[];
  34. extern uchar NEAR to_upper_usa7[],NEAR to_lower_usa7[],NEAR sort_order_usa7[];
  35. extern uchar NEAR ctype_swe7[];
  36. extern uchar NEAR to_upper_swe7[],NEAR to_lower_swe7[],NEAR sort_order_swe7[];
  37. extern uchar NEAR ctype_hp8[];
  38. extern uchar NEAR to_upper_hp8[],NEAR to_lower_hp8[],NEAR sort_order_hp8[];
  39. extern uchar NEAR ctype_dec8[];
  40. extern uchar NEAR to_upper_dec8[],NEAR to_lower_dec8[],NEAR sort_order_dec8[];
  41. extern uchar NEAR ctype_latin1[];
  42. extern uchar NEAR to_upper_latin1[],NEAR to_lower_latin1[],
  43.      NEAR sort_order_latin1[];
  44. #if defined(USE_USA7BITCHARS) + 
  45.     defined(USE_SWE7BITCHARS) + 
  46.     defined(USE_DEC8BITCHARS) + 
  47.     defined(USE_HP8BITCHARS) + 
  48.     defined(USE_ISO_8859_1) + 
  49.     defined(USE_ISO_8859_2) + 
  50.     defined(MSDOS) != 1
  51. error "More than one USE_xxxnBITCHARS defined"
  52. #endif
  53. #if defined(USE_USA7BITCHARS) /* to_*_usa7 is also used directly by other programs */
  54. EXT uchar *my_ctype D(ctype_usa7);
  55. EXT uchar *my_to_lower D(to_lower_usa7);
  56. EXT uchar *my_to_upper D(to_upper_usa7);
  57. EXT uchar *my_sort_order D(sort_order_usa7);
  58. #elif defined(USE_SWE7BITCHARS)
  59. EXT uchar *my_ctype D(ctype_swe7);
  60. EXT uchar *my_to_upper D(to_upper_swe7);
  61. EXT uchar *my_to_lower D(to_lower_swe7);
  62. EXT uchar *my_sort_order D(sort_order_swe7);
  63. #elif defined(USE_HP8BITCHARS) /* use HPUX internal tables */
  64. EXT uchar *my_ctype D(ctype_hp8);
  65. EXT uchar *my_to_upper D(to_upper_hp8);
  66. EXT uchar *my_to_lower D(to_lower_hp8);
  67. EXT uchar *my_sort_order D(sort_order_hp8);
  68. #elif defined(USE_DEC8BITCHARS)
  69. EXT uchar *my_ctype D(ctype_dec8);
  70. EXT uchar *my_to_upper D(to_upper_dec8);
  71. EXT uchar *my_to_lower D(to_lower_dec8);
  72. EXT uchar *my_sort_order D(sort_order_dec8);
  73. #elif defined(USE_ISO_8859_1)
  74. EXT uchar *my_ctype D(ctype_latin1);
  75. EXT uchar *my_to_upper D(to_upper_latin1);
  76. EXT uchar *my_to_lower D(to_lower_latin1);
  77. EXT uchar *my_sort_order D(sort_order_latin1);
  78. #elif defined(USE_ISO_8859_2)
  79. EXT uchar *my_ctype D(ctype_ISO_8859_2);
  80. EXT uchar *my_to_upper D(to_upper_ISO_8859_2);
  81. EXT uchar *my_to_lower D(to_lower_ISO_8859_2);
  82. EXT uchar *my_sort_order D(sort_order_ISO_8859_2);
  83. #elif defined(MSDOS)
  84. #define my_ctype ctype
  85. #define my_to_upper to_upper
  86. #define my_to_lower to_lower
  87. #define my_sort_order sort_order
  88. extern uchar NEAR ctype[],NEAR to_lower[],NEAR to_upper[],NEAR sort_order[];
  89. #endif
  90. #ifndef WIN32
  91. #define _toupper(c) (char) my_to_upper[(uchar) (c)]
  92. #define _tolower(c) (char) my_to_lower[(uchar) (c)]
  93. #define toupper(c) (char) my_to_upper[(uchar) (c)]
  94. #define tolower(c) (char) my_to_lower[(uchar) (c)]
  95. #define isalpha(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L))
  96. #define isupper(c) ((my_ctype+1)[(uchar) (c)] & _U)
  97. #define islower(c) ((my_ctype+1)[(uchar) (c)] & _L)
  98. #define isdigit(c) ((my_ctype+1)[(uchar) (c)] & _N)
  99. #define isxdigit(c) ((my_ctype+1)[(uchar) (c)] & _X)
  100. #define isalnum(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L | _N))
  101. #define isspace(c) ((my_ctype+1)[(uchar) (c)] & _S)
  102. #define ispunct(c) ((my_ctype+1)[(uchar) (c)] & _P)
  103. #define isprint(c) ((my_ctype+1)[(uchar) (c)] & (_P | _U | _L | _N | _B))
  104. #define isgraph(c) ((my_ctype+1)[(uchar) (c)] & (_P | _U | _L | _N))
  105. #define iscntrl(c) ((my_ctype+1)[(uchar) (c)] & _C)
  106. #define isascii(c) (!((c) & ~0177))
  107. #define toascii(c) ((c) & 0177)
  108. #endif
  109. #ifdef ctype
  110. #undef ctype
  111. #endif /* ctype */
  112. /* These are always used */
  113. /* Some macros that should be cleaned up a little */
  114. #define isvar(c) (isalnum(c) || (c) == '_')
  115. #define isvar_start(c) (isalpha(c) || (c) == '_')
  116. #define tocntrl(c) ((c) & 31)
  117. #define toprint(c) ((c) | 64)
  118. /* Support for Chineze(BIG5) characters, by jou@nematic.ieo.nctu.edu.tw */
  119. #ifdef USE_BIG5CODE
  120. #define isbig5head(c) ((((char)c) >= 'xA1') && (((char)c) <= 'xF9'))
  121. #define isbig5tail(c) ((((char)c) >= 'x40')&&(((char)c) <= 'x7E'))    
  122.  || ((((char)c) >= 'xA1')&&(((char)c) <= 'xFE'))
  123. #define isbig5code(c,d) (((((char)c) >= 'xA1') && (((char)c) <= 'xF9'))  
  124.  && (((char)d) >= 'x40')&&(((char)d) <= 'x7E'))  
  125.  || ((((char)d) >= 'xA1')&&(((char)d) <= 'xFE')))
  126. #endif
  127. #ifdef __cplusplus
  128. }
  129. #endif
  130. #endif /* _m_ctype_h */