+#endif // wxUSE_UNICODE_UTF8
+
+// ============================================================================
+// wx wrappers for CRT functions
+// ============================================================================
+
+
+// ----------------------------------------------------------------------------
+// wxScanf() and friends
+// ----------------------------------------------------------------------------
+
+// implement vararg function by calling a vfoo function that takes va_list
+// argument; use "ap" for the va_list argument in "call" expression
+#define IMPL_SCANFUNC(call) \
+ va_list ap; \
+ va_start(ap, format); \
+ int retval = call; \
+ va_end(ap); \
+ return retval
+
+int wxScanf(const char *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VscanfA(format, ap) ); }
+int wxScanf(const wchar_t *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VscanfW(wxFormatConverter(format), ap) ); }
+
+int wxFscanf(FILE *stream, const char *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VfscanfA(stream, format, ap) ); }
+int wxFscanf(FILE *stream, const wchar_t *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VfscanfW(stream, wxFormatConverter(format), ap) ); }
+
+int wxSscanf(const char *str, const char *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfA(str, format, ap) ); }
+int wxSscanf(const wchar_t *str, const wchar_t *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfW(str, wxFormatConverter(format), ap) ); }
+int wxSscanf(const wxCharBuffer& str, const char *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfA(str, format, ap) ); }
+int wxSscanf(const wxWCharBuffer& str, const wchar_t *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfW(str, wxFormatConverter(format), ap) ); }
+int wxSscanf(const wxString& str, const char *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfA(str.mb_str(), format, ap) ); }
+int wxSscanf(const wxString& str, const wchar_t *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfW(str.wc_str(), wxFormatConverter(format), ap) ); }
+int wxSscanf(const wxCStrData& str, const char *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfA(str.AsCharBuf(), format, ap) ); }
+int wxSscanf(const wxCStrData& str, const wchar_t *format, ...)
+ { IMPL_SCANFUNC( wxCRT_VsscanfW(str.AsWCharBuf(), wxFormatConverter(format), ap) ); }
+
+int wxVsscanf(const char *str, const char *format, va_list ap)
+ { return wxCRT_VsscanfA(str, format, ap); }
+int wxVsscanf(const wchar_t *str, const wchar_t *format, va_list ap)
+ { return wxCRT_VsscanfW(str, wxFormatConverter(format), ap); }
+int wxVsscanf(const wxCharBuffer& str, const char *format, va_list ap)
+ { return wxCRT_VsscanfA(str, format, ap); }
+int wxVsscanf(const wxWCharBuffer& str, const wchar_t *format, va_list ap)
+ { return wxCRT_VsscanfW(str, wxFormatConverter(format), ap); }
+int wxVsscanf(const wxString& str, const char *format, va_list ap)
+ { return wxCRT_VsscanfA(str.mb_str(), format, ap); }
+int wxVsscanf(const wxString& str, const wchar_t *format, va_list ap)
+ { return wxCRT_VsscanfW(str.wc_str(), wxFormatConverter(format), ap); }
+int wxVsscanf(const wxCStrData& str, const char *format, va_list ap)
+ { return wxCRT_VsscanfA(str.AsCharBuf(), format, ap); }
+int wxVsscanf(const wxCStrData& str, const wchar_t *format, va_list ap)
+ { return wxCRT_VsscanfW(str.AsWCharBuf(), wxFormatConverter(format), ap); }