]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/wxchar.h
undef CreateWindow too, even if we don't use it ourselves it's still a very common...
[wxWidgets.git] / include / wx / wxchar.h
index e6f54b771e0d2e428c3f91415fcbe88720727e6b..82abd84a45801bc3081ac4c2b9114d8b0258467d 100644 (file)
     #define wxHAVE_TCHAR_SUPPORT
 #elif defined(__DMC__)
     #define wxHAVE_TCHAR_SUPPORT
     #define wxHAVE_TCHAR_SUPPORT
 #elif defined(__DMC__)
     #define wxHAVE_TCHAR_SUPPORT
-#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 )
+#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 ) && !defined(__PALMOS__)
     #define wxHAVE_TCHAR_SUPPORT
     #include <stddef.h>
     #include <string.h>
     #define wxHAVE_TCHAR_SUPPORT
     #include <stddef.h>
     #include <string.h>
 #ifdef wxHAVE_TCHAR_SUPPORT
     #include <ctype.h>
 
 #ifdef wxHAVE_TCHAR_SUPPORT
     #include <ctype.h>
 
+    #if defined(__WATCOMC__) && defined(UNICODE)
+      #define WXWCHAR_T_CAST(c) (wint_t)(c)
+    #else
+      #define WXWCHAR_T_CAST(c) c
+    #endif
+    
     /* ctype.h functions */
     /* ctype.h functions */
-    #define  wxIsalnum   _istalnum
-    #define  wxIsalpha   _istalpha
-    #define  wxIscntrl   _istcntrl
-    #define  wxIsdigit   _istdigit
-    #define  wxIsgraph   _istgraph
-    #define  wxIslower   _istlower
-    #define  wxIsprint   _istprint
-    #define  wxIspunct   _istpunct
-    #define  wxIsspace   _istspace
-    #define  wxIsupper   _istupper
-    #define  wxIsxdigit  _istxdigit
+    #define  wxIsalnum(c)   _istalnum(WXWCHAR_T_CAST(c))
+    #define  wxIsalpha(c)   _istalpha(WXWCHAR_T_CAST(c))
+    #define  wxIscntrl(c)   _istcntrl(WXWCHAR_T_CAST(c))
+    #define  wxIsdigit(c)   _istdigit(WXWCHAR_T_CAST(c))
+    #define  wxIsgraph(c)   _istgraph(WXWCHAR_T_CAST(c))
+    #define  wxIslower(c)   _istlower(WXWCHAR_T_CAST(c))
+    #define  wxIsprint(c)   _istprint(WXWCHAR_T_CAST(c))
+    #define  wxIspunct(c)   _istpunct(WXWCHAR_T_CAST(c))
+    #define  wxIsspace(c)   _istspace(WXWCHAR_T_CAST(c))
+    #define  wxIsupper(c)   _istupper(WXWCHAR_T_CAST(c))
+    #define  wxIsxdigit(c)  _istxdigit(WXWCHAR_T_CAST(c))
 
     /*
        There is a bug in VC6 C RTL: toxxx() functions dosn't do anything with
 
     /*
        There is a bug in VC6 C RTL: toxxx() functions dosn't do anything with
     #define  wxGets      _getts
     #define  wxPerror    _tperror
     #define  wxPrintf    _tprintf
     #define  wxGets      _getts
     #define  wxPerror    _tperror
     #define  wxPrintf    _tprintf
-    #define  wxPutc      _puttc
+    #define  wxPutc(c,f) _puttc(WXWCHAR_T_CAST(c),f)
     #define  wxPutchar   _puttchar
     #define  wxPuts      _putts
     #define  wxScanf     _tscanf
     #define  wxPutchar   _puttchar
     #define  wxPuts      _putts
     #define  wxScanf     _tscanf
     #define  wxCtime     _tctime
 #else /* !TCHAR-aware compilers */
 
     #define  wxCtime     _tctime
 #else /* !TCHAR-aware compilers */
 
-    #if __DARWIN__ && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 ) && !defined(__MWERKS__)
+    #if !defined(__MWERKS__) && defined(__DARWIN__) && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 )
         /* even though they are defined and "implemented", they are bad and just 
            stubs so we need our own - we need these even in ANSI builds!! */
         #define mbstowcs wxInternalMbstowcs
         /* even though they are defined and "implemented", they are bad and just 
            stubs so we need our own - we need these even in ANSI builds!! */
         #define mbstowcs wxInternalMbstowcs
     #endif
     
     /* No UNICODE in the c library except wchar_t typedef on mac OSX 10.2 and less - roll our own */
     #endif
     
     /* No UNICODE in the c library except wchar_t typedef on mac OSX 10.2 and less - roll our own */
-    #if wxUSE_UNICODE && __DARWIN__ && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 ) && !defined(__MWERKS__)
+    #if !defined(__MWERKS__) && wxUSE_UNICODE && defined(__DARWIN__) && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 )
         
         /* we need everything! */
         #define wxNEED_WX_STRING_H
         
         /* we need everything! */
         #define wxNEED_WX_STRING_H
         #define wxNEED_UNGETC
 
         #define wxNEED_FPUTS
         #define wxNEED_UNGETC
 
         #define wxNEED_FPUTS
+        #define wxNEED_PUTS
         #define wxNEED_PUTC
  
         int wxFputs(const wxChar *ch, FILE *stream);
         #define wxNEED_PUTC
  
         int wxFputs(const wxChar *ch, FILE *stream);
+        int wxPuts(const wxChar *ws);
         int wxPutc(wxChar ch, FILE *stream);
         int wxPutc(wxChar ch, FILE *stream);
-            
-        WXDLLIMPEXP_BASE size_t   wxStrlen_(const wxChar *s);
+        
+        #ifdef __cplusplus
+        extern "C" {
+        #endif
+            WXDLLIMPEXP_BASE size_t   wxStrlen_(const wxChar *s);
+        #ifdef __cplusplus
+        }
+        #endif
 
         #define wxPutchar(wch) wxPutc(wch, stdout)
 
         #define wxPutchar(wch) wxPutc(wch, stdout)
-        #define wxPuts(ws) wxFputs(ws, stdout)
             
         #define wxNEED_PRINTF_CONVERSION
         #define wxNEED_WX_STDIO_H
             
         #define wxNEED_PRINTF_CONVERSION
         #define wxNEED_WX_STDIO_H
             #ifdef HAVE_PUTWS
                 #define wxPuts      putws
             #else
             #ifdef HAVE_PUTWS
                 #define wxPuts      putws
             #else
-                #define wxPuts(ws) wxFputs(ws, stdout)
+                #define wxNEED_PUTS
+                int wxPuts(const wxChar *ws);
             #endif
 
             /* we need %s to %ls conversion for printf and scanf etc */
             #endif
 
             /* we need %s to %ls conversion for printf and scanf etc */
             defined(__EMX__) || defined(__DJGPP__)
         #define wxStricmp stricmp
         #define wxStrnicmp strnicmp
             defined(__EMX__) || defined(__DJGPP__)
         #define wxStricmp stricmp
         #define wxStrnicmp strnicmp
+    #elif defined(__PALMOS__)
+        /* FIXME: There is no equivalent to strnicmp in the Palm OS API.  This 
+         * quick hack should do until one can be written. 
+         */
+        #define wxStricmp StrCaselessCompare
+        #define wxStrnicmp strnicmp       
     #elif defined(__SYMANTEC__) || defined(__VISUALC__) || \
             (defined(__MWERKS__) && defined(__INTEL__))
         #define wxStricmp _stricmp
     #elif defined(__SYMANTEC__) || defined(__VISUALC__) || \
             (defined(__MWERKS__) && defined(__INTEL__))
         #define wxStricmp _stricmp
     #ifdef HAVE_WCSLEN
         #define wxWcslen wcslen
     #else
     #ifdef HAVE_WCSLEN
         #define wxWcslen wcslen
     #else
-    #if defined( __WXMAC_XCODE__ ) && !defined( __cplusplus )
-    /* xcode native targets are giving multiply defined symbols on regex */
-        static
-    #endif
-        inline size_t wxWcslen(const wchar_t *s)
-        {
-            size_t n = 0;
-            while ( *s++ )
-                n++;
-
-            return n;
-        }
+        WXDLLIMPEXP_BASE size_t wxWcslen(const wchar_t *s);
     #endif
 #endif /* wxUSE_WCHAR_T */
 
     #endif
 #endif /* wxUSE_WCHAR_T */
 
@@ -935,33 +944,49 @@ WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */
     WXDLLIMPEXP_BASE char *strdup(const char* s);
 #endif
 
     WXDLLIMPEXP_BASE char *strdup(const char* s);
 #endif
 
-/* RN: Used only under OSX <= 10.2 currently */
+/* RN: Used only under OSX <= 10.2 currently 
+   The __cplusplus ifdefs are messy, but they are required to build
+   the regex library, since c does not support function overloading
+*/
 #ifdef wxNEED_WX_STRING_H
 #ifdef wxNEED_WX_STRING_H
-    WXDLLIMPEXP_BASE wxChar * wxStrcat(wxChar *dest, const wxChar *src);
-    WXDLLIMPEXP_BASE const wxChar * wxStrchr(const wxChar *s, wxChar c);
-    inline wxChar * wxStrchr(wxChar *s, wxChar c)
-        { return (wxChar *)wxStrchr((const wxChar *)s, c); }
-    WXDLLIMPEXP_BASE int      wxStrcmp(const wxChar *s1, const wxChar *s2);
-    WXDLLIMPEXP_BASE int      wxStrcoll(const wxChar *s1, const wxChar *s2);
-    WXDLLIMPEXP_BASE wxChar * wxStrcpy(wxChar *dest, const wxChar *src);
-    WXDLLIMPEXP_BASE size_t   wxStrcspn(const wxChar *s, const wxChar *reject);
-    WXDLLIMPEXP_BASE wxChar * wxStrncat(wxChar *dest, const wxChar *src, size_t n);
-    WXDLLIMPEXP_BASE int      wxStrncmp(const wxChar *s1, const wxChar *s2, size_t n);
-    WXDLLIMPEXP_BASE wxChar * wxStrncpy(wxChar *dest, const wxChar *src, size_t n);
-    WXDLLIMPEXP_BASE const wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept);
-    inline wxChar * wxStrpbrk(wxChar *s, const wxChar *accept)
-        { return (wxChar *)wxStrpbrk((const wxChar *)s, accept); }
-    WXDLLIMPEXP_BASE const wxChar * wxStrrchr(const wxChar *s, wxChar c);
-    inline wxChar * wxStrrchr(wxChar *s, wxChar c)
-        { return (wxChar *)wxStrrchr((const wxChar *)s, c); }
-    WXDLLIMPEXP_BASE size_t   wxStrspn(const wxChar *s, const wxChar *accept);
-    WXDLLIMPEXP_BASE const wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle);
-    inline wxChar *wxStrstr(wxChar *haystack, const wxChar *needle)
-        { return (wxChar *)wxStrstr((const wxChar *)haystack, needle); }
+#      ifdef __cplusplus
+    extern "C" {
+#      endif
+        WXDLLIMPEXP_BASE wxChar * wxStrcat(wxChar *dest, const wxChar *src);
+        WXDLLIMPEXP_BASE const wxChar * wxStrchr(const wxChar *s, wxChar c);
+        WXDLLIMPEXP_BASE int      wxStrcmp(const wxChar *s1, const wxChar *s2);
+        WXDLLIMPEXP_BASE int      wxStrcoll(const wxChar *s1, const wxChar *s2);
+        WXDLLIMPEXP_BASE wxChar * wxStrcpy(wxChar *dest, const wxChar *src);
+        WXDLLIMPEXP_BASE size_t   wxStrcspn(const wxChar *s, const wxChar *reject);
+        WXDLLIMPEXP_BASE wxChar * wxStrncat(wxChar *dest, const wxChar *src, size_t n);
+        WXDLLIMPEXP_BASE int      wxStrncmp(const wxChar *s1, const wxChar *s2, size_t n);
+        WXDLLIMPEXP_BASE wxChar * wxStrncpy(wxChar *dest, const wxChar *src, size_t n);
+        WXDLLIMPEXP_BASE const wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept);
+        WXDLLIMPEXP_BASE const wxChar * wxStrrchr(const wxChar *s, wxChar c);
+        WXDLLIMPEXP_BASE size_t   wxStrspn(const wxChar *s, const wxChar *accept);
+        WXDLLIMPEXP_BASE const wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle);
+#      ifdef __cplusplus       
+    }
+#      endif
+
+    /* These functions use C++, so we can't c extern them */
     WXDLLIMPEXP_BASE double   wxStrtod(const wxChar *nptr, wxChar **endptr);
     WXDLLIMPEXP_BASE long int wxStrtol(const wxChar *nptr, wxChar **endptr, int base);
     WXDLLIMPEXP_BASE unsigned long int wxStrtoul(const wxChar *nptr, wxChar **endptr, int base);
     WXDLLIMPEXP_BASE size_t   wxStrxfrm(wxChar *dest, const wxChar *src, size_t n);
     WXDLLIMPEXP_BASE double   wxStrtod(const wxChar *nptr, wxChar **endptr);
     WXDLLIMPEXP_BASE long int wxStrtol(const wxChar *nptr, wxChar **endptr, int base);
     WXDLLIMPEXP_BASE unsigned long int wxStrtoul(const wxChar *nptr, wxChar **endptr, int base);
     WXDLLIMPEXP_BASE size_t   wxStrxfrm(wxChar *dest, const wxChar *src, size_t n);
+
+    /* inlined versions */
+    #ifdef __cplusplus
+        inline wxChar * wxStrchr(wxChar *s, wxChar c)
+            { return (wxChar *)wxStrchr((const wxChar *)s, c); }
+        inline wxChar * wxStrpbrk(wxChar *s, const wxChar *accept)
+            { return (wxChar *)wxStrpbrk((const wxChar *)s, accept); }
+        inline wxChar * wxStrrchr(wxChar *s, wxChar c)
+            { return (wxChar *)wxStrrchr((const wxChar *)s, c); }
+        inline wxChar *wxStrstr(wxChar *haystack, const wxChar *needle)
+            { return (wxChar *)wxStrstr((const wxChar *)haystack, needle); }
+    #endif
+
 #endif /* wxNEED_WX_STRING_H */
 
 #ifndef wxStrdupA
 #endif /* wxNEED_WX_STRING_H */
 
 #ifndef wxStrdupA
@@ -1021,6 +1046,8 @@ WXDLLIMPEXP_BASE int      wxSystem(const wxChar *psz);
 #if defined(__MWERKS__) && defined(macintosh)
     #include <time.h>
 #endif
 #if defined(__MWERKS__) && defined(macintosh)
     #include <time.h>
 #endif
+    /*silent gabby compilers*/
+    struct tm;
     WXDLLIMPEXP_BASE size_t wxStrftime(wxChar *s, size_t max,
                                   const wxChar *fmt, const struct tm *tm);
 #endif /* wxNEED_WX_TIME_H */
     WXDLLIMPEXP_BASE size_t wxStrftime(wxChar *s, size_t max,
                                   const wxChar *fmt, const struct tm *tm);
 #endif /* wxNEED_WX_TIME_H */
@@ -1057,7 +1084,8 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
         #define wxWX2WC wxMB2WC
     #endif
 #else /* !wxUSE_UNICODE */
         #define wxWX2WC wxMB2WC
     #endif
 #else /* !wxUSE_UNICODE */
-#error ha
+/* Why is this here?
+#error ha */
     /* No wxUSE_WCHAR_T: we have to do something (JACS) */
     #define wxMB2WC wxStrncpy
     #define wxWC2MB wxStrncpy
     /* No wxUSE_WCHAR_T: we have to do something (JACS) */
     #define wxMB2WC wxStrncpy
     #define wxWC2MB wxStrncpy
@@ -1087,7 +1115,7 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
         #include <string.h> //for mem funcs
         
         //implement our own wmem variants
         #include <string.h> //for mem funcs
         
         //implement our own wmem variants
-        inline wxChar* wxMemchr(const wxChar* s, wxChar c, size_t l)
+        inline wxChar* wxTmemchr(const wxChar* s, wxChar c, size_t l)
         {
             for(;l && *s != c;--l, ++s) {}
 
         {
             for(;l && *s != c;--l, ++s) {}
 
@@ -1096,7 +1124,7 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
             return NULL;
         }
 
             return NULL;
         }
 
-        inline int wxMemcmp(const wxChar* sz1, const wxChar* sz2, size_t len)
+        inline int wxTmemcmp(const wxChar* sz1, const wxChar* sz2, size_t len)
         {
             for(; *sz1 == *sz2 && len; --len, ++sz1, ++sz2) {}
 
         {
             for(; *sz1 == *sz2 && len; --len, ++sz1, ++sz2) {}
 
@@ -1106,17 +1134,17 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
                 return 0;
         }
 
                 return 0;
         }
 
-        inline wxChar* wxMemcpy(wxChar* szOut, const wxChar* szIn, size_t len)
+        inline wxChar* wxTmemcpy(wxChar* szOut, const wxChar* szIn, size_t len)
         {
             return (wxChar*) memcpy(szOut, szIn, len * sizeof(wxChar));
         }
 
         {
             return (wxChar*) memcpy(szOut, szIn, len * sizeof(wxChar));
         }
 
-        inline wxChar* wxMemmove(wxChar* szOut, const wxChar* szIn, size_t len)
+        inline wxChar* wxTmemmove(wxChar* szOut, const wxChar* szIn, size_t len)
         {
             return (wxChar*) memmove(szOut, szIn, len * sizeof(wxChar));
         }
 
         {
             return (wxChar*) memmove(szOut, szIn, len * sizeof(wxChar));
         }
 
-        inline wxChar* wxMemset(wxChar* szOut, const wxChar cIn, size_t len)
+        inline wxChar* wxTmemset(wxChar* szOut, const wxChar cIn, size_t len)
         {
             wxChar* szRet = szOut;
 
         {
             wxChar* szRet = szOut;
 
@@ -1127,11 +1155,11 @@ WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
         }
 
     #else //!wxUSE_UNICODE
         }
 
     #else //!wxUSE_UNICODE
-    #   define wxMemchr memchr
-    #   define wxMemcmp memcmp
-    #   define wxMemcpy memcpy
-    #   define wxMemmove memmove
-    #   define wxMemset memset
+    #   define wxTmemchr memchr
+    #   define wxTmemcmp memcmp
+    #   define wxTmemcpy memcpy
+    #   define wxTmemmove memmove
+    #   define wxTmemset memset
     #endif
 
 #endif /*__cplusplus*/
     #endif
 
 #endif /*__cplusplus*/