#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <wchar.h>
+
+#ifdef __SGI__
+ // wide character functions are declared in std namespace under IRIX
+ using namespace std;
+
+ // and this one is only declared if __c99 is defined which is not the case
+ // for C++ builds, so declare it ourselves
+ extern "C" int vswscanf(const wchar_t *, const wchar_t *, va_list);
+#endif
#ifndef __WXPALMOS5__
#ifndef __WXWINCE__
#endif
#if defined(__DARWIN__)
- #include "wx/osx/core/cfref.h"
- #include <CoreFoundation/CFLocale.h>
- #include "wx/osx/core/cfstring.h"
+ #include "wx/osx/core/cfref.h"
+ #include <CoreFoundation/CFLocale.h>
+ #include "wx/osx/core/cfstring.h"
#include <xlocale.h>
#endif
-#if wxUSE_WCHAR_T
WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n)
{
// assume that we have mbsrtowcs() too if we have wcsrtombs()
return wxWcstombs(NULL, pwz, 0);
#endif
}
-#endif // wxUSE_WCHAR_T
char* wxSetlocale(int category, const char *locale)
{
// TODO: implement the scanf() functions
static int vwscanf(const wchar_t *format, va_list argptr)
{
- wxFAIL_MSG( _T("TODO") );
+ wxFAIL_MSG( wxT("TODO") );
return -1;
}
static int vfwscanf(FILE *stream, const wchar_t *format, va_list argptr)
{
- wxFAIL_MSG( _T("TODO") );
+ wxFAIL_MSG( wxT("TODO") );
return -1;
}
// of the function. This doesn't work with %c and %s because of difference
// in size of char and wchar_t, though.
- wxCHECK_MSG( wxStrstr(format, _T("%s")) == NULL, -1,
- _T("incomplete vswscanf implementation doesn't allow %s") );
- wxCHECK_MSG( wxStrstr(format, _T("%c")) == NULL, -1,
- _T("incomplete vswscanf implementation doesn't allow %c") );
+ wxCHECK_MSG( wxStrstr(format, wxT("%s")) == NULL, -1,
+ wxT("incomplete vswscanf implementation doesn't allow %s") );
+ wxCHECK_MSG( wxStrstr(format, wxT("%c")) == NULL, -1,
+ wxT("incomplete vswscanf implementation doesn't allow %c") );
return vsscanf(static_cast<const char*>(wxConvLibc.cWX2MB(ws)),
wxConvLibc.cWX2MB(format), argptr);
#if !wxUSE_UTF8_LOCALE_ONLY
int ConvertStringToBuf(const wxString& s, char *out, size_t outsize)
{
- const wxWX2WCbuf buf = s.wc_str();
+ const wxCharBuffer buf(s.mb_str());
- size_t len = wxConvLibc.FromWChar(out, outsize, buf);
- if ( len != wxCONV_FAILED )
- return len-1;
- else
- return wxConvLibc.FromWChar(NULL, 0, buf);
+ const size_t len = buf.length();
+ if ( outsize > len )
+ {
+ memcpy(out, buf, (len+1) * sizeof(char));
+ }
+ else // not enough space
+ {
+ memcpy(out, buf, (outsize-1) * sizeof(char));
+ out[outsize-1] = '\0';
+ }
+
+ return len;
}
#endif // !wxUSE_UTF8_LOCALE_ONLY
#if wxUSE_UNICODE_WCHAR
#ifdef __DMC__
/*
-This fails with a bug similar to
+This fails with a bug similar to
http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=c++.beta&artnum=680
in DMC 8.49 and 8.50
I don't see it being used in the wxWidgets sources at present (oct 2007) CE
*/
#pragma message ( "warning ::::: wxVsprintf(wchar_t *str, const wxString& format, va_list argptr) not yet implemented" )
- wxFAIL_MSG( _T("TODO") );
+ wxFAIL_MSG( wxT("TODO") );
return -1;
#else
}
#endif // wxUSE_UNICODE
-#if wxUSE_WCHAR_T
// ----------------------------------------------------------------------------
// ctype.h stuff (currently unused)
#endif // wxCRT_StrdupW
#ifndef wxWCHAR_T_IS_WXCHAR16
-size_t wxStrlen(const wxChar16 *s )
-{
- if (!s) return 0;
- size_t i=0;
- while (*s!=0) { ++i; ++s; };
+size_t wxStrlen(const wxChar16 *s )
+{
+ if (!s) return 0;
+ size_t i=0;
+ while (*s!=0) { ++i; ++s; };
return i;
}
wxChar16* wxStrdup(const wxChar16* s)
-{
- size_t size = (wxStrlen(s) + 1) * sizeof(wxChar16);
+{
+ size_t size = (wxStrlen(s) + 1) * sizeof(wxChar16);
wxChar16 *ret = (wxChar16*) malloc(size);
memcpy(ret, s, size);
return ret;
#endif
#ifndef wxWCHAR_T_IS_WXCHAR32
-size_t wxStrlen(const wxChar32 *s )
-{
- if (!s) return 0;
- size_t i=0;
- while (*s!=0) { ++i; ++s; };
+size_t wxStrlen(const wxChar32 *s )
+{
+ if (!s) return 0;
+ size_t i=0;
+ while (*s!=0) { ++i; ++s; };
return i;
}
wxChar32* wxStrdup(const wxChar32* s)
-{
- size_t size = (wxStrlen(s) + 1) * sizeof(wxChar32);
+{
+ size_t size = (wxStrlen(s) + 1) * sizeof(wxChar32);
wxChar32 *ret = (wxChar32*) malloc(size);
memcpy(ret, s, size);
return ret;
}
#endif // !wxCRT_StrftimeW
-#endif // wxUSE_WCHAR_T
-
#ifdef wxLongLong_t
template<typename T>
static wxULongLong_t
#endif // wxLongLong_t
// ----------------------------------------------------------------------------
-// functions which we may need even if !wxUSE_WCHAR_T
+// strtok() functions
// ----------------------------------------------------------------------------
template<typename T>
#if wxUSE_UTF8_LOCALE_ONLY
if ( !wxIsLocaleUtf8() )
{
- wxLogFatalError(_T("This program requires UTF-8 locale to run."));
+ wxLogFatalError(wxT("This program requires UTF-8 locale to run."));
}
#else // !wxUSE_UTF8_LOCALE_ONLY
wxLocaleIsUtf8 = wxIsLocaleUtf8();
int wxPuts(const wxString& s)
{
+ // under IRIX putws() takes a non-const argument so use wchar_str() instead
+ // of wc_str()
CALL_ANSI_OR_UNICODE(return,
wxCRT_PutsA(s.mb_str()),
- wxCRT_PutsW(s.wc_str()));
+ wxCRT_PutsW(s.wchar_str()));
}
int wxFputs(const wxString& s, FILE *stream)