#ifndef __M_M_WCHAR_H__
#define __M_M_WCHAR_H__ 1
#include <wchar.h>
#include <wctype.h>
#include <limits.h>
#ifdef M_I18N_LOCKING_SHIFT
extern char *m_strsanitize (char *);
#else
#define m_strsanitize(str) (str)
#endif
#ifdef M_I18N_MB
# ifndef MB_LEN_MAX
# error M_I18N_MB defined; but the local system does not support multibyte
# endif
#define MB_BEGIN if (MB_CUR_MAX > 1) {
#define MB_ELSE } else {
#define MB_END }
#define M_MB_L(s) L##s
#ifndef _WUCHAR_T
#define _WUCHAR_T
typedef wchar_t wuchar_t;
#endif
extern wint_t m_escapewc(wchar_t **);
extern int m_fputmbs(FILE* fp, char *mbs, int wid, int prec, int ljust);
extern int m_fgetws (wchar_t *, size_t, FILE *);
extern FILE *m_fwopen (wchar_t *, char *);
extern wchar_t *m_wcsdup (const wchar_t *);
extern wchar_t *m_mbstowcsdup (const char *s);
extern char *m_wcstombsdup (const wchar_t *w);
extern char *m_mbschr (const char *, int);
extern char *m_mbsrchr (const char *, int);
extern char *m_mbspbrk (const char *, const char *);
extern wchar_t *m_wcsset (wchar_t *, wchar_t, size_t);
extern int iswabsname (wchar_t *);
#define m_smalls(s) (s)
#define wctomb_init() wctomb(NULL,0)
#else
#include <stdlib.h>
#undef m_escapewc
#undef m_fgetws
#undef m_fwopen
#undef m_wcsdup
#undef m_mbstowcsdup
#undef m_wcstombsdup
#undef m_mbschr
#undef m_mbsrchr
#undef m_mbspbrk
#undef m_wcsset
#undef iswabsname
#undef m_fputmbs
#define m_escapewc m_escapec
#define m_fgetws m_fgets
#define m_fwopen fopen
#define m_wcsdup strdup
#define m_mbstowcsdup strdup
#define m_wcstombsdup strdup
#define m_mbschr strchr
#define m_mbsrchr strrchr
#define m_mbspbrk strpbrk
#define m_wcsset memset
#define iswabsname(s) isabsname(s)
#define m_fputmbs(fp, str, wid, prec, ljust) \
fprintf((fp), (ljust) ? "%-*.*s" : "%*.*s", wid, prec, str)
#define MB_BEGIN if (0) {
#define MB_ELSE } else {
#define MB_END }
#define M_MB_L(s) s
#undef WEOF
#undef wint_t
#undef wuchar_t
#undef wchar_t
#define WEOF EOF
#define wchar_t char
#define wint_t int
#define wuchar_t unsigned char
#undef _WCHAR_T
#undef _WINT_T
#undef _WUCHAR_T
#define _WCHAR_T
#define _WINT_T
#define _WUCHAR_T
#undef fgetwc
#undef getwc
#undef getwchar
#undef fputwc
#undef putwc
#undef putwchar
#undef fputws
#undef puts
#undef fgetwx
#undef getws
#undef ungetwc
#undef fwprintf
#undef fwscanf
#undef wprintf
#undef wscanf
#undef swscanf
#undef vfwprintf
#undef vwprintf
#undef vswprintf
#define fgetwc fgetc
#define getwc getc
#define getwchar getchar
#define fputwc fputc
#define putwc putc
#define putwchar putchar
#define fputws fputs
#define fgetws fgets
#define getws gets
#define ungetwc ungetc
#define fwprintf fprintf
#define fwscanf fscanf
#define wprintf printf
#define wscanf scanf
#define swscanf sscanf
#define vfwprintf vfprintf
#define vwprintf vprintf
#define swprintf m_swprintf
#define vswprintf(w,n,f,v) vsprintf((char*)w,(const char*)f, v)
#ifndef m_smalls
extern wchar_t *m_smalls (const wchar_t *);
#endif
#undef wcstod
#undef wcstol
#undef wcstoul
#undef wctomb_init
#define wcstod strtod
#define wcstol strtol
#define wcstoul strtoul
#define wctomb_init() (0)
#undef wcscpy
#undef wcsncpy
#undef wcscat
#undef wcsncat
#undef wcscoll
#undef wcscmp
#undef wcsncmp
#undef wcsxfrm
#undef wcschr
#undef wcscspn
#undef wcspbrk
#undef wcsrchr
#undef wcsspn
#undef wcsstr
#undef wcstok
#undef wcslen
#undef wcswidth
#undef wcwidth
#define wcscpy strcpy
#define wcsncpy strncpy
#define wcscat strcat
#define wcsncat strncat
#define wcscoll strcoll
#define wcscmp strcmp
#define wcsncmp strncmp
#define wcsxfrm strxfrm
#define wcschr strchr
#define wcscspn strcspn
#define wcspbrk strpbrk
#define wcsrchr strrchr
#define wcsspn strspn
#define wcsstr strstr
#define wcstok(x, y, z) strtok(x, y)
#define wcslen strlen
#define wcswidth(s1, n) strlen(s1)
#define wcwidth(c) 1
#undef wcsftime
#define wcsftime strftime
#undef wctob
#undef sisinit
#define wctob(c) ((int) (wint_t) (c))
#define sisinit(p) (1)
#undef mblen
#undef mbrlen
#undef mbtowc
#undef mbrtowc
#undef wctomb
#undef wcrtomb
#undef mbstowcs
#undef mbsrtowcs
#undef wcstombs
#undef wcsrtombs
#define mblen(s, n) m_sb_mblen(s, n)
#define mbrlen(s, n, ps) m_sb_mblen(s, n)
#define mbtowc(pwc, s, n) m_sb_mbtowc(pwc, s, n)
#define mbrtowc(pwc, s, n, ps) m_sb_mbtowc(pwc, s, n)
#define wctomb(s, wc) m_sb_wctomb(s, wc)
#define wcrtomb(s, wc, ps) m_sb_wctomb(s, wc)
#define mbstowcs(pwcs, s, n) m_sb_mbstowcs(pwcs, s, n)
#define mbsrtowcs(pwcs, s, n, ps) m_sb_mbstowcs(pwcs, s, n)
#define wcstombs(s, pwcs, n) m_sb_wcstombs(s, pwcs, n)
#define wcsrtombs(s, pwcs, n, ps) m_sb_wcstombs(s, pwcs, n)
extern int m_sb_mblen(const char *s, size_t n);
extern int m_sb_mbtowc(wchar_t *pwc, const char *s, size_t n);
extern int m_sb_wctomb(char *s, wchar_t wc);
extern size_t m_sb_mbstowcs(wchar_t *pwcs, const char *s, size_t n);
extern size_t m_sb_wcstombs(char *s, const wchar_t *pwcs, size_t n);
#undef iswalnum
#undef iswalpha
#undef iswcntrl
#undef iswdigit
#undef iswgraph
#undef iswlower
#undef iswprint
#undef iswpunct
#undef iswspace
#undef iswupper
#undef iswxdigit
#undef iswblank
#undef towlower
#undef towupper
#define iswalnum(c) isalnum(c)
#define iswalpha(c) isalpha(c)
#define iswcntrl(c) iscntrl(c)
#define iswdigit(c) isdigit(c)
#define iswgraph(c) isgraph(c)
#define iswlower(c) islower(c)
#define iswprint(c) isprint(c)
#define iswpunct(c) ispunct(c)
#define iswspace(c) isspace(c)
#define iswupper(c) isupper(c)
#define iswxdigit(c) isxdigit(c)
#define iswblank(c) isblank(c)
#define towlower(c) tolower(c)
#define towupper(c) toupper(c)
#undef wctype
#undef iswctype
#define wctype _m_wctype
#define iswctype _m_iswctype
extern wctype_t wctype(const char *property);
extern int iswctype(wint_t wc, wctype_t desc);
#include <fnmatch.h>
#undef fnwwmatch
#undef fnwnmatch
#define fnwwmatch fnmatch
#define fnwnmatch fnmatch
#include <regex.h>
#undef regwcomp
#undef regwexec
#undef regwdosub
#undef regwdosuba
#undef regwmatch_t
#define regwcomp regcomp
#define regwexec regexec
#define regwdosub regdosub
#define regwdosuba regdosuba
#define regwmatch_t regmatch_t
#endif
extern int m_mbswidth (const char *, size_t);
extern int m_mbsrwidth (const char *, size_t, mbstate_t *);
#endif