+#ifdef wxNEED_WX_MBSTOWCS
+
+WXDLLEXPORT size_t wxMbstowcs (wchar_t * out, const char * in, size_t outlen)
+{
+ if (!out)
+ {
+ size_t outsize = 0;
+ while(*in++)
+ outsize++;
+ return outsize;
+ }
+
+ const char* origin = in;
+
+ while (outlen-- && *in)
+ {
+ *out++ = (wchar_t) *in++;
+ }
+
+ *out = '\0';
+
+ return in - origin;
+}
+
+WXDLLEXPORT size_t wxWcstombs (char * out, const wchar_t * in, size_t outlen)
+{
+ if (!out)
+ {
+ size_t outsize = 0;
+ while(*in++)
+ outsize++;
+ return outsize;
+ }
+
+ const wchar_t* origin = in;
+
+ while (outlen-- && *in)
+ {
+ *out++ = (char) *in++;
+ }
+
+ *out = '\0';
+
+ return in - origin;
+}
+
+#endif // wxNEED_WX_MBSTOWCS
+
+#if defined(wxNEED_WX_CTYPE_H)
+
+#include <CoreFoundation/CoreFoundation.h>
+
+#define cfalnumset CFCharacterSetGetPredefined(kCFCharacterSetAlphaNumeric)
+#define cfalphaset CFCharacterSetGetPredefined(kCFCharacterSetLetter)
+#define cfcntrlset CFCharacterSetGetPredefined(kCFCharacterSetControl)
+#define cfdigitset CFCharacterSetGetPredefined(kCFCharacterSetDecimalDigit)
+//CFCharacterSetRef cfgraphset = kCFCharacterSetControl && !' '
+#define cflowerset CFCharacterSetGetPredefined(kCFCharacterSetLowercaseLetter)
+//CFCharacterSetRef cfprintset = !kCFCharacterSetControl
+#define cfpunctset CFCharacterSetGetPredefined(kCFCharacterSetPunctuation)
+#define cfspaceset CFCharacterSetGetPredefined(kCFCharacterSetWhitespaceAndNewline)
+#define cfupperset CFCharacterSetGetPredefined(kCFCharacterSetUppercaseLetter)
+
+WXDLLEXPORT int wxIsalnum(wxChar ch) { return CFCharacterSetIsCharacterMember(cfalnumset, ch); }
+WXDLLEXPORT int wxIsalpha(wxChar ch) { return CFCharacterSetIsCharacterMember(cfalphaset, ch); }
+WXDLLEXPORT int wxIscntrl(wxChar ch) { return CFCharacterSetIsCharacterMember(cfcntrlset, ch); }
+WXDLLEXPORT int wxIsdigit(wxChar ch) { return CFCharacterSetIsCharacterMember(cfdigitset, ch); }
+WXDLLEXPORT int wxIsgraph(wxChar ch) { return !CFCharacterSetIsCharacterMember(cfcntrlset, ch) && ch != ' '; }
+WXDLLEXPORT int wxIslower(wxChar ch) { return CFCharacterSetIsCharacterMember(cflowerset, ch); }
+WXDLLEXPORT int wxIsprint(wxChar ch) { return !CFCharacterSetIsCharacterMember(cfcntrlset, ch); }
+WXDLLEXPORT int wxIspunct(wxChar ch) { return CFCharacterSetIsCharacterMember(cfpunctset, ch); }
+WXDLLEXPORT int wxIsspace(wxChar ch) { return CFCharacterSetIsCharacterMember(cfspaceset, ch); }
+WXDLLEXPORT int wxIsupper(wxChar ch) { return CFCharacterSetIsCharacterMember(cfupperset, ch); }
+WXDLLEXPORT int wxIsxdigit(wxChar ch) { return wxIsdigit(ch) || (ch>='a' && ch<='f') || (ch>='A' && ch<='F'); }
+WXDLLEXPORT int wxTolower(wxChar ch) { return (wxChar)tolower((char)(ch)); }
+WXDLLEXPORT int wxToupper(wxChar ch) { return (wxChar)toupper((char)(ch)); }
+
+#endif // wxNEED_WX_CTYPE_H
+