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: