00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined (_RL_MBUTIL_H_)
00024 #define _RL_MBUTIL_H_
00025
00026 #include "rlstdc.h"
00027
00028
00029
00030
00031
00032
00033
00034
00035 #if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) && defined (HAVE_LOCALE_H)
00036 # include <wchar.h>
00037 # include <wctype.h>
00038 # if defined (HAVE_ISWCTYPE) && \
00039 defined (HAVE_ISWLOWER) && \
00040 defined (HAVE_ISWUPPER) && \
00041 defined (HAVE_MBSRTOWCS) && \
00042 defined (HAVE_MBRTOWC) && \
00043 defined (HAVE_MBRLEN) && \
00044 defined (HAVE_TOWLOWER) && \
00045 defined (HAVE_TOWUPPER) && \
00046 defined (HAVE_WCHAR_T) && \
00047 defined (HAVE_WCWIDTH)
00048
00049 # define HANDLE_MULTIBYTE 1
00050 # endif
00051 #endif
00052
00053
00054
00055 #if defined (NO_MULTIBYTE_SUPPORT)
00056 # undef HANDLE_MULTIBYTE
00057 #endif
00058
00059
00060 #if HANDLE_MULTIBYTE && !defined (HAVE_MBSTATE_T)
00061 # define wcsrtombs(dest, src, len, ps) (wcsrtombs) (dest, src, len, 0)
00062 # define mbsrtowcs(dest, src, len, ps) (mbsrtowcs) (dest, src, len, 0)
00063 # define wcrtomb(s, wc, ps) (wcrtomb) (s, wc, 0)
00064 # define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
00065 # define mbrlen(s, n, ps) (mbrlen) (s, n, 0)
00066 # define mbstate_t int
00067 #endif
00068
00069
00070
00071 #ifdef HANDLE_MULTIBYTE
00072 # include <limits.h>
00073 # if defined(MB_LEN_MAX) && (MB_LEN_MAX < 16)
00074 # undef MB_LEN_MAX
00075 # endif
00076 # if !defined (MB_LEN_MAX)
00077 # define MB_LEN_MAX 16
00078 # endif
00079 #endif
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 #define MB_FIND_ANY 0x00
00093 #define MB_FIND_NONZERO 0x01
00094
00095 extern int _rl_find_prev_mbchar PARAMS((char *, int, int));
00096 extern int _rl_find_next_mbchar PARAMS((char *, int, int, int));
00097
00098 #ifdef HANDLE_MULTIBYTE
00099
00100 extern int _rl_compare_chars PARAMS((char *, int, mbstate_t *, char *, int, mbstate_t *));
00101 extern int _rl_get_char_len PARAMS((char *, mbstate_t *));
00102 extern int _rl_adjust_point PARAMS((char *, int, mbstate_t *));
00103
00104 extern int _rl_read_mbchar PARAMS((char *, int));
00105 extern int _rl_read_mbstring PARAMS((int, char *, int));
00106
00107 extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
00108
00109 extern wchar_t _rl_char_value PARAMS((char *, int));
00110 extern int _rl_walphabetic PARAMS((wchar_t));
00111
00112 #define _rl_to_wupper(wc) (iswlower (wc) ? towupper (wc) : (wc))
00113 #define _rl_to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc))
00114
00115 #define MB_NEXTCHAR(b,s,c,f) \
00116 ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
00117 ? _rl_find_next_mbchar ((b), (s), (c), (f)) \
00118 : ((s) + (c)))
00119 #define MB_PREVCHAR(b,s,f) \
00120 ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
00121 ? _rl_find_prev_mbchar ((b), (s), (f)) \
00122 : ((s) - 1))
00123
00124 #define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2)
00125 #define MB_NULLWCH(x) ((x) == 0)
00126
00127 #else
00128
00129 #undef MB_LEN_MAX
00130 #undef MB_CUR_MAX
00131
00132 #define MB_LEN_MAX 1
00133 #define MB_CUR_MAX 1
00134
00135 #define _rl_find_prev_mbchar(b, i, f) (((i) == 0) ? (i) : ((i) - 1))
00136 #define _rl_find_next_mbchar(b, i1, i2, f) ((i1) + (i2))
00137
00138 #define _rl_char_value(buf,ind) ((buf)[(ind)])
00139
00140 #define _rl_walphabetic(c) (rl_alphabetic (c))
00141
00142 #define _rl_to_wupper(c) (_rl_to_upper (c))
00143 #define _rl_to_wlower(c) (_rl_to_lower (c))
00144
00145 #define MB_NEXTCHAR(b,s,c,f) ((s) + (c))
00146 #define MB_PREVCHAR(b,s,f) ((s) - 1)
00147
00148 #define MB_INVALIDCH(x) (0)
00149 #define MB_NULLWCH(x) (0)
00150
00151 #endif
00152
00153 extern int rl_byte_oriented;
00154
00155 #endif