]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wxcrt.cpp
Add white outline to bulls eye cursor used under MSW.
[wxWidgets.git] / src / common / wxcrt.cpp
index 5d42579e942ec25ae602c90b80a3f6f4055e1925..db16fa9b18d762c8de933d51ffc6883be76b700b 100644 (file)
 #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__
@@ -65,9 +75,9 @@ using namespace std ;
 #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
 
@@ -99,9 +109,9 @@ WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n)
   // support it (the only currently known example being Metrowerks, see
   // wx/crt.h) we don't use its mbstowcs() at all
 #ifdef HAVE_WCSRTOMBS
-  return mbsrtowcs((wchar_t *) NULL, &psz, 0, &mbstate);
+  return mbsrtowcs(NULL, &psz, 0, &mbstate);
 #else
-  return wxMbstowcs((wchar_t *) NULL, psz, 0);
+  return wxMbstowcs(NULL, psz, 0);
 #endif
 }
 
@@ -126,9 +136,9 @@ WXDLLIMPEXP_BASE size_t wxWC2MB(char *buf, const wchar_t *pwz, size_t n)
   }
 
 #ifdef HAVE_WCSRTOMBS
-  return wcsrtombs((char *) NULL, &pwz, 0, &mbstate);
+  return wcsrtombs(NULL, &pwz, 0, &mbstate);
 #else
-  return wxWcstombs((char *) NULL, pwz, 0);
+  return wxWcstombs(NULL, pwz, 0);
 #endif
 }
 #endif // wxUSE_WCHAR_T
@@ -255,14 +265,14 @@ int /* not wint_t */ wxCRT_FputcW(wchar_t wc, FILE *stream)
 // 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;
 }
@@ -299,12 +309,12 @@ static int vswscanf(const wchar_t *ws, const wchar_t *format, va_list argptr)
     // 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(wx_static_cast(const char*, wxConvLibc.cWX2MB(ws)),
+    return vsscanf(static_cast<const char*>(wxConvLibc.cWX2MB(ws)),
         wxConvLibc.cWX2MB(format), argptr);
 }
 #endif
@@ -643,13 +653,13 @@ int wxVsprintf(wchar_t *str, const wxString& format, va_list argptr)
 #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
@@ -796,6 +806,42 @@ WXDLLIMPEXP_BASE wchar_t * wxCRT_StrdupW(const wchar_t *pwz)
 }
 #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; };
+    return i;
+}
+
+wxChar16* wxStrdup(const wxChar16* s)
+{
+  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; };
+    return i;
+}
+
+wxChar32* wxStrdup(const wxChar32* s)
+{
+  size_t size = (wxStrlen(s) + 1) * sizeof(wxChar32);
+  wxChar32 *ret = (wxChar32*) malloc(size);
+  memcpy(ret, s, size);
+  return ret;
+}
+#endif
+
 #ifndef wxCRT_StricmpA
 WXDLLIMPEXP_BASE int wxCRT_StricmpA(const char *psz1, const char *psz2)
 {
@@ -875,7 +921,7 @@ WXDLLIMPEXP_BASE wchar_t* wxCRT_GetenvW(const wchar_t *name)
     // NB: buffer returned by getenv() is allowed to be overwritten next
     //     time getenv() is called, so it is OK to use static string
     //     buffer to hold the data.
-    static wxWCharBuffer value((wchar_t*)NULL);
+    static wxWCharBuffer value;
     value = wxConvLibc.cMB2WC(getenv(wxConvLibc.cWC2MB(name)));
     return value.data();
 }
@@ -1079,15 +1125,15 @@ static T *wxCRT_DoStrtok(T *psz, const T *delim, T **save_ptr)
     psz += wxStrspn(psz, delim);
     if (!*psz)
     {
-        *save_ptr = (T *)NULL;
-        return (T *)NULL;
+        *save_ptr = NULL;
+        return NULL;
     }
 
     T *ret = psz;
     psz = wxStrpbrk(psz, delim);
     if (!psz)
     {
-        *save_ptr = (T*)NULL;
+        *save_ptr = NULL;
     }
     else
     {
@@ -1186,7 +1232,7 @@ void wxUpdateLocaleIsUtf8()
 #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();
@@ -1210,9 +1256,11 @@ void wxUpdateLocaleIsUtf8()
 
 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)
@@ -1275,15 +1323,15 @@ int wxVsscanf(const char *str, const char *format, va_list ap)
 int wxVsscanf(const wchar_t *str, const wchar_t *format, va_list ap)
     { return wxCRT_VsscanfW(str, format, ap); }
 int wxVsscanf(const wxCharBuffer& str, const char *format, va_list ap)
-    { return wxCRT_VsscanfA(wx_static_cast(const char*, str), format, ap); }
+    { return wxCRT_VsscanfA(static_cast<const char*>(str), format, ap); }
 int wxVsscanf(const wxWCharBuffer& str, const wchar_t *format, va_list ap)
     { return wxCRT_VsscanfW(str, format, ap); }
 int wxVsscanf(const wxString& str, const char *format, va_list ap)
-    { return wxCRT_VsscanfA(wx_static_cast(const char*, str.mb_str()), format, ap); }
+    { return wxCRT_VsscanfA(static_cast<const char*>(str.mb_str()), format, ap); }
 int wxVsscanf(const wxString& str, const wchar_t *format, va_list ap)
     { return wxCRT_VsscanfW(str.wc_str(), format, ap); }
 int wxVsscanf(const wxCStrData& str, const char *format, va_list ap)
-    { return wxCRT_VsscanfA(wx_static_cast(const char*, str.AsCharBuf()), format, ap); }
+    { return wxCRT_VsscanfA(static_cast<const char*>(str.AsCharBuf()), format, ap); }
 int wxVsscanf(const wxCStrData& str, const wchar_t *format, va_list ap)
     { return wxCRT_VsscanfW(str.AsWCharBuf(), format, ap); }
 #endif // HAVE_NO_VSSCANF