Annotation of win32/sql/mysql/include/m_ctype.h, revision 1.1.1.1
1.1 parser 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:
8: #ifndef _m_ctype_h
9: #define _m_ctype_h
10:
11: #define MY_CHARSET_UNDEFINED 0
12: #define MY_CHARSET_BIG5 1
13: #define MY_CHARSET_CZECH 2
14: #define MY_CHARSET_DEC8 3
15: #define MY_CHARSET_DOS 4
16: #define MY_CHARSET_GERMAN1 5
17: #define MY_CHARSET_HP8 6
18: #define MY_CHARSET_KOI8_RU 7
19: #define MY_CHARSET_LATIN1 8
20: #define MY_CHARSET_LATIN2 9
21: #define MY_CHARSET_SWE7 10
22: #define MY_CHARSET_USA7 11
23: #define MY_CHARSET_UJIS 12
24: #define MY_CHARSET_SJIS 13
25: #define MY_CHARSET_CP1251 14
26: #define MY_CHARSET_DANISH 15
27: #define MY_CHARSET_HEBREW 16
28: #define MY_CHARSET_WIN1251 17
29: #define MY_CHARSET_TIS620 18
30: #define MY_CHARSET_EUC_KR 19
31: #define MY_CHARSET_ESTONIA 20
32: #define MY_CHARSET_HUNGARIAN 21
33: #define MY_CHARSET_KOI8_UKR 22
34: #define MY_CHARSET_WIN1251UKR 23
35: #define MY_CHARSET_GB2312 24
36: #define MY_CHARSET_GREEK 25
37: #define MY_CHARSET_WIN1250 26
38: #define MY_CHARSET_CROAT 27
39: #define MY_CHARSET_GBK 28
40:
41: #ifdef __cplusplus
42: extern "C" {
43: #endif
44:
45: #ifdef __WIN32__
46: #include <ctype.h>
47: #endif
48: /* Don't include std ctype.h when this is included */
49: #define _CTYPE_H
50: #define _CTYPE_INCLUDED
51: #define __CTYPE_INCLUDED
52: #define _CTYPE_USING /* Don't put names in global namespace. */
53:
54: #ifndef CTYPE_LIBRARY
55: #define EXT extern
56: #define D(x)
57: #else
58: #define EXT
59: #define D(x) = x
60: #endif
61:
62: #define _U 01 /* Upper case */
63: #define _L 02 /* Lower case */
64: #define _N 04 /* Numeral (digit) */
65: #define _S 010 /* Spacing character */
66: #define _P 020 /* Punctuation */
67: #define _C 040 /* Control character */
68: #define _B 0100 /* Blank */
69: #define _X 0200 /* heXadecimal digit */
70:
71: extern uchar NEAR ctype_latin1[];
72: extern uchar NEAR to_upper_latin1[];
73: extern uchar NEAR to_lower_latin1[];
74: extern uchar NEAR sort_order_latin1[];
75:
76: #define my_ctype ctype_latin1
77: #define my_to_upper to_upper_latin1
78: #define my_to_lower to_lower_latin1
79: #define my_sort_order sort_order_latin1
80:
81: #ifndef __WIN32__
82: #define _toupper(c) (char) my_to_upper[(uchar) (c)]
83: #define _tolower(c) (char) my_to_lower[(uchar) (c)]
84: #define toupper(c) (char) my_to_upper[(uchar) (c)]
85: #define tolower(c) (char) my_to_lower[(uchar) (c)]
86:
87: #define isalpha(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L))
88: #define isupper(c) ((my_ctype+1)[(uchar) (c)] & _U)
89: #define islower(c) ((my_ctype+1)[(uchar) (c)] & _L)
90: #define isdigit(c) ((my_ctype+1)[(uchar) (c)] & _N)
91: #define isxdigit(c) ((my_ctype+1)[(uchar) (c)] & _X)
92: #define isalnum(c) ((my_ctype+1)[(uchar) (c)] & (_U | _L | _N))
93: #define isspace(c) ((my_ctype+1)[(uchar) (c)] & _S)
94: #define ispunct(c) ((my_ctype+1)[(uchar) (c)] & _P)
95: #define isprint(c) ((my_ctype+1)[(uchar) (c)] & (_P | _U | _L | _N | _B))
96: #define isgraph(c) ((my_ctype+1)[(uchar) (c)] & (_P | _U | _L | _N))
97: #define iscntrl(c) ((my_ctype+1)[(uchar) (c)] & _C)
98: #define isascii(c) (!((c) & ~0177))
99: #define toascii(c) ((c) & 0177)
100:
101: #ifdef ctype
102: #undef ctype
103: #endif /* ctype */
104:
105: #endif /* __WIN32__ */
106:
107: /* Some macros that should be cleaned up a little */
108: #define isvar(c) (isalnum(c) || (c) == '_')
109: #define isvar_start(c) (isalpha(c) || (c) == '_')
110: #define tocntrl(c) ((c) & 31)
111: #define toprint(c) ((c) | 64)
112:
113: /* Support for Japanese(UJIS) characters, by tommy@valley.ne.jp */
114: #if MY_CHARSET_CURRENT == MY_CHARSET_UJIS
115: #define USE_MB
116: #define USE_MB_IDENT
117: #define isujis(c) ((0xa1<=((c)&0xff) && ((c)&0xff)<=0xfe))
118: #define iskata(c) ((0xa1<=((c)&0xff) && ((c)&0xff)<=0xdf))
119: #define isujis_ss2(c) (((c)&0xff) == 0x8e)
120: #define isujis_ss3(c) (((c)&0xff) == 0x8f)
121: #define ismbchar(p, end) ((*(uchar*)(p)<0x80)? 0:\
122: isujis(*(p)) && (end)-(p)>1 && isujis(*((p)+1))? 2:\
123: isujis_ss2(*(p)) && (end)-(p)>1 && iskata(*((p)+1))? 2:\
124: isujis_ss3(*(p)) && (end)-(p)>2 && isujis(*((p)+1)) && isujis(*((p)+2))? 3:\
125: 0)
126: #define ismbhead(c) (isujis(c) || isujis_ss2(c) || isujis_ss3(c))
127: #define mbcharlen(c) (isujis(c)? 2: isujis_ss2(c)? 2: isujis_ss3(c)? 3: 0)
128: #define MBMAXLEN 3
129: #endif
130:
131: /* Support for Japanese(SJIS) characters, by tommy@valley.ne.jp */
132: #if MY_CHARSET_CURRENT == MY_CHARSET_SJIS
133: #define USE_MB
134: #define USE_MB_IDENT
135: #define issjishead(c) ((0x81<=((c)&0xff) && ((c)&0xff)<=0x9f) || (0xe0<=((c)&0xff) && ((c)&0xff)<=0xfc))
136: #define issjistail(c) ((0x40<=((c)&0xff) && ((c)&0xff)<=0x7e) || (0x80<=((c)&0xff) && ((c)&0xff)<=0xfc))
137: #define ismbchar(p, end) (issjishead(*(p)) && (end)-(p)>1 && issjistail(*((p)+1))? 2: 0)
138: #define ismbhead(c) issjishead(c)
139: #define mbcharlen(c) (issjishead(c)? 2: 0)
140: #define MBMAXLEN 2
141: #endif
142:
143: /* Support for Chinese(BIG5) characters, by jou@nematic.ieo.nctu.edu.tw
144: modified by Wei He (hewei@mail.ied.ac.cn) */
145:
146: #if MY_CHARSET_CURRENT == MY_CHARSET_BIG5
147: #define USE_MB
148: #define USE_MB_IDENT
149: #define isbig5head(c) (0xa1<=(uchar)(c) && (uchar)(c)<=0xf9)
150: #define isbig5tail(c) ((0x40<=(uchar)(c) && (uchar)(c)<=0x7e) || \
151: (0xa1<=(uchar)(c) && (uchar)(c)<=0xfe))
152: #define ismbchar(p, end) (isbig5head(*(p)) && (end)-(p)>1 && isbig5tail(*((p)+1))? 2: 0)
153: #define ismbhead(c) isbig5head(c)
154: #define mbcharlen(c) (isbig5head(c)? 2: 0)
155: #define MBMAXLEN 2
156: #
157: #undef USE_STRCOLL
158: #define USE_STRCOLL
159: #endif
160:
161: /* Support for Chinese(GB2312) characters, by Miles Tsai (net-bull@126.com)
162: modified by Wei He (hewei@mail.ied.ac.cn) */
163:
164: #if MY_CHARSET_CURRENT == MY_CHARSET_GB2312
165: #define USE_MB
166: #define USE_MB_IDENT
167: #define isgb2312head(c) (0xa1<=(uchar)(c) && (uchar)(c)<=0xf7)
168: #define isgb2312tail(c) (0xa1<=(uchar)(c) && (uchar)(c)<=0xfe)
169: #define ismbchar(p, end) (isgb2312head(*(p)) && (end)-(p)>1 && isgb2312tail(*((p)+1))? 2: 0)
170: #define ismbhead(c) isgb2312head(c)
171: #define mbcharlen(c) (isgb2312head(c)? 2:0)
172: #define MBMAXLEN 2
173: #endif
174:
175: /* Support for Chinese(GBK) characters, by hewei@mail.ied.ac.cn */
176:
177: #if MY_CHARSET_CURRENT == MY_CHARSET_GBK
178: #define USE_MB
179: #define USE_MB_IDENT
180: #define isgbkhead(c) (0x81<=(uchar)(c) && (uchar)(c)<=0xfe)
181: #define isgbktail(c) ((0x40<=(uchar)(c) && (uchar)(c)<=0x7e) || \
182: (0x80<=(uchar)(c) && (uchar)(c)<=0xfe))
183: #define ismbchar(p, end) (isgbkhead(*(p)) && (end)-(p)>1 && isgbktail(*((p)+1))? 2: 0)
184: #define ismbhead(c) isgbkhead(c)
185: #define mbcharlen(c) (isgbkhead(c)? 2:0)
186: #define MBMAXLEN 2
187: #undef USE_STRCOLL
188: #define USE_STRCOLL
189: #endif
190:
191: /* Define, how much will the string grow under strxfrm */
192: #if MY_CHARSET_CURRENT == MY_CHARSET_CZECH
193: #undef USE_STRCOLL
194: #define USE_STRCOLL
195: #endif
196: #if MY_CHARSET_CURRENT == MY_CHARSET_TIS620
197: #undef USE_STRCOLL
198: #define USE_STRCOLL
199: #define USE_TIS620
200: #include "t_ctype.h"
201: #endif
202:
203: /* Support for Korean(EUC_KR) characters, by powerm90@tinc.co.kr and mrpark@tinc.co.kr */
204: #if MY_CHARSET_CURRENT == MY_CHARSET_EUC_KR
205: #define USE_MB
206: #define USE_MB_IDENT
207: #define iseuc_kr(c) ((0xa1<=(uchar)(c) && (uchar)(c)<=0xfe))
208: #define ismbchar(p, end) ((*(uchar*)(p)<0x80)? 0:\
209: iseuc_kr(*(p)) && (end)-(p)>1 && iseuc_kr(*((p)+1))? 2:\
210: 0)
211: #define ismbhead(c) (iseuc_kr(c))
212: #define mbcharlen(c) (iseuc_kr(c) ? 2 : 0)
213: #define MBMAXLEN 2
214: #endif
215:
216: #ifdef USE_STRCOLL
217: extern uint MY_STRXFRM_MULTIPLY;
218: extern int my_strnxfrm(unsigned char *, unsigned char *, int, int);
219: extern int my_strnncoll(const unsigned char *, int, const unsigned char *, int);
220: extern int my_strxfrm(unsigned char *, unsigned char *, int);
221: extern int my_strcoll(const unsigned char *, const unsigned char *);
222: extern my_bool my_like_range(const char *ptr,uint ptr_length,pchar escape,
223: uint res_length, char *min_str,char *max_str,
224: uint *min_length,uint *max_length);
225: #endif
226:
227: #ifdef __cplusplus
228: }
229: #endif
230:
231: #endif /* _m_ctype_h */
E-mail: