| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690 | 
							- /*
 
-  * Name:        wx/wxcrtbase.h
 
-  * Purpose:     Type-safe ANSI and Unicode builds compatible wrappers for
 
-  *              CRT functions
 
-  * Author:      Joel Farley, Ove Kaaven
 
-  * Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee
 
-  * Created:     1998/06/12
 
-  * Copyright:   (c) 1998-2006 wxWidgets dev team
 
-  * Licence:     wxWindows licence
 
-  */
 
- /* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
 
- #ifndef _WX_WXCRTBASE_H_
 
- #define _WX_WXCRTBASE_H_
 
- /* -------------------------------------------------------------------------
 
-                         headers and missing declarations
 
-    ------------------------------------------------------------------------- */
 
- #include "wx/chartype.h"
 
- /*
 
-     Standard headers we need here.
 
-     NB: don't include any wxWidgets headers here because almost all of them
 
-         include this one!
 
-     NB2: User code should include wx/crt.h instead of including this
 
-          header directly.
 
-  */
 
- #include <stdio.h>
 
- #include <string.h>
 
- #include <ctype.h>
 
- #include <wctype.h>
 
- #include <time.h>
 
- #if defined(__WINDOWS__) && !defined(__WXWINCE__)
 
-     #include <io.h>
 
- #endif
 
- #if defined(HAVE_STRTOK_R) && defined(__DARWIN__) && defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS
 
-     char *strtok_r(char *, const char *, char **);
 
- #endif
 
- /*
 
-     Using -std=c++{98,0x} option with mingw32 disables most of standard
 
-     library extensions, so we can't rely on the presence of common non-ANSI
 
-     functions, define a special symbol to test for this. Notice that this
 
-     doesn't need to be done for g++ under Linux where _GNU_SOURCE (which is
 
-     defined by default) still makes all common extensions available even in
 
-     ANSI mode.
 
-  */
 
- #if defined(__MINGW32__) && defined(__STRICT_ANSI__)
 
-     #define __WX_STRICT_ANSI_GCC__
 
- #endif
 
- /*
 
-    a few compilers don't have the (non standard but common) isascii function,
 
-    define it ourselves for them
 
-  */
 
- #ifndef isascii
 
-     #if defined(__WX_STRICT_ANSI_GCC__)
 
-         #define wxNEED_ISASCII
 
-     #elif defined(_WIN32_WCE)
 
-         #if _WIN32_WCE <= 211
 
-             #define wxNEED_ISASCII
 
-         #endif
 
-     #endif
 
- #endif /* isascii */
 
- #ifdef wxNEED_ISASCII
 
-     inline int isascii(int c) { return (unsigned)c < 0x80; }
 
- #endif
 
- #ifdef _WIN32_WCE
 
-     #if _WIN32_WCE <= 211
 
-         #define isspace(c) ((c) == wxT(' ') || (c) == wxT('\t'))
 
-     #endif
 
- #endif /* _WIN32_WCE */
 
- /* string.h functions */
 
- #ifndef strdup
 
-     #if defined(__WXWINCE__)
 
-         #if _WIN32_WCE <= 211
 
-             #define wxNEED_STRDUP
 
-         #endif
 
-     #endif
 
- #endif /* strdup */
 
- #ifdef wxNEED_STRDUP
 
-     WXDLLIMPEXP_BASE char *strdup(const char* s);
 
- #endif
 
- /* missing functions in some WinCE versions */
 
- #ifdef _WIN32_WCE
 
- #if (_WIN32_WCE < 300)
 
- WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size );
 
- #endif
 
- #endif /* _WIN32_WCE */
 
- /* -------------------------------------------------------------------------
 
-                             UTF-8 locale handling
 
-    ------------------------------------------------------------------------- */
 
- #ifdef __cplusplus
 
-     #if wxUSE_UNICODE_UTF8
 
-         /* flag indicating whether the current locale uses UTF-8 or not; must be
 
-            updated every time the locale is changed! */
 
-         #if wxUSE_UTF8_LOCALE_ONLY
 
-         #define wxLocaleIsUtf8 true
 
-         #else
 
-         extern WXDLLIMPEXP_BASE bool wxLocaleIsUtf8;
 
-         #endif
 
-         /* function used to update the flag: */
 
-         extern WXDLLIMPEXP_BASE void wxUpdateLocaleIsUtf8();
 
-     #else /* !wxUSE_UNICODE_UTF8 */
 
-         inline void wxUpdateLocaleIsUtf8() {}
 
-     #endif /* wxUSE_UNICODE_UTF8/!wxUSE_UNICODE_UTF8 */
 
- #endif /* __cplusplus */
 
- /* -------------------------------------------------------------------------
 
-                                  string.h
 
-    ------------------------------------------------------------------------- */
 
- #define wxCRT_StrcatA    strcat
 
- #define wxCRT_StrchrA    strchr
 
- #define wxCRT_StrcmpA    strcmp
 
- #define wxCRT_StrcpyA    strcpy
 
- #define wxCRT_StrcspnA   strcspn
 
- #define wxCRT_StrlenA    strlen
 
- #define wxCRT_StrncatA   strncat
 
- #define wxCRT_StrncmpA   strncmp
 
- #define wxCRT_StrncpyA   strncpy
 
- #define wxCRT_StrpbrkA   strpbrk
 
- #define wxCRT_StrrchrA   strrchr
 
- #define wxCRT_StrspnA    strspn
 
- #define wxCRT_StrstrA    strstr
 
- #define wxCRT_StrcatW    wcscat
 
- #define wxCRT_StrchrW    wcschr
 
- #define wxCRT_StrcmpW    wcscmp
 
- #define wxCRT_StrcpyW    wcscpy
 
- #define wxCRT_StrcspnW   wcscspn
 
- #define wxCRT_StrncatW   wcsncat
 
- #define wxCRT_StrncmpW   wcsncmp
 
- #define wxCRT_StrncpyW   wcsncpy
 
- #define wxCRT_StrpbrkW   wcspbrk
 
- #define wxCRT_StrrchrW   wcsrchr
 
- #define wxCRT_StrspnW    wcsspn
 
- #define wxCRT_StrstrW    wcsstr
 
- /* these functions are not defined under CE, at least in VC8 CRT */
 
- #if !defined(__WXWINCE__)
 
-     #define wxCRT_StrcollA   strcoll
 
-     #define wxCRT_StrxfrmA   strxfrm
 
-     #define wxCRT_StrcollW   wcscoll
 
-     #define wxCRT_StrxfrmW   wcsxfrm
 
- #endif /* __WXWINCE__ */
 
- /* Almost all compilers have strdup(), but VC++ and MinGW call it _strdup().
 
-    And it's not available in MinGW strict ANSI mode nor under Windows CE. */
 
- #if (defined(__VISUALC__) && __VISUALC__ >= 1400)
 
-     #define wxCRT_StrdupA _strdup
 
- #elif defined(__MINGW32__)
 
-     #ifndef __WX_STRICT_ANSI_GCC__
 
-         #define wxCRT_StrdupA _strdup
 
-     #endif
 
- #elif !defined(__WXWINCE__)
 
-     #define wxCRT_StrdupA strdup
 
- #endif
 
- /* most Windows compilers provide _wcsdup() */
 
- #if defined(__WINDOWS__) && \
 
-         !(defined(__CYGWIN__) || defined(__WX_STRICT_ANSI_GCC__))
 
-     #define wxCRT_StrdupW _wcsdup
 
- #elif defined(HAVE_WCSDUP)
 
-     #define wxCRT_StrdupW wcsdup
 
- #endif
 
- #ifdef wxHAVE_TCHAR_SUPPORT
 
-     /* we surely have wchar_t if we have TCHAR have wcslen() */
 
-     #ifndef HAVE_WCSLEN
 
-         #define HAVE_WCSLEN
 
-     #endif
 
- #endif /* wxHAVE_TCHAR_SUPPORT */
 
- #ifdef HAVE_WCSLEN
 
-     #define wxCRT_StrlenW wcslen
 
- #endif
 
- #define wxCRT_StrtodA    strtod
 
- #define wxCRT_StrtolA    strtol
 
- #define wxCRT_StrtoulA   strtoul
 
- #define wxCRT_StrtodW    wcstod
 
- #define wxCRT_StrtolW    wcstol
 
- #define wxCRT_StrtoulW   wcstoul
 
- #ifdef __VISUALC__
 
-     #if __VISUALC__ >= 1300 && !defined(__WXWINCE__)
 
-         #define wxCRT_StrtollA   _strtoi64
 
-         #define wxCRT_StrtoullA  _strtoui64
 
-         #define wxCRT_StrtollW   _wcstoi64
 
-         #define wxCRT_StrtoullW  _wcstoui64
 
-     #endif /* VC++ 7+ */
 
- #else
 
-     #ifdef HAVE_STRTOULL
 
-         #define wxCRT_StrtollA   strtoll
 
-         #define wxCRT_StrtoullA  strtoull
 
-     #endif /* HAVE_STRTOULL */
 
-     #ifdef HAVE_WCSTOULL
 
-         /* assume that we have wcstoull(), which is also C99, too */
 
-         #define wxCRT_StrtollW   wcstoll
 
-         #define wxCRT_StrtoullW  wcstoull
 
-     #endif /* HAVE_WCSTOULL */
 
- #endif
 
- /*
 
-     Only VC8 and later provide strnlen() and wcsnlen() functions under Windows
 
-     and it's also only available starting from Windows CE 6.0 only in CE build.
 
-  */
 
- #if wxCHECK_VISUALC_VERSION(8) && (!defined(_WIN32_WCE) || (_WIN32_WCE >= 0x600))
 
-     #ifndef HAVE_STRNLEN
 
-         #define HAVE_STRNLEN
 
-     #endif
 
-     #ifndef HAVE_WCSNLEN
 
-         #define HAVE_WCSNLEN
 
-     #endif
 
- #endif
 
- #ifdef HAVE_STRNLEN
 
-     #define wxCRT_StrnlenA  strnlen
 
- #endif
 
- #ifdef HAVE_WCSNLEN
 
-     #define wxCRT_StrnlenW  wcsnlen
 
- #endif
 
- /* define wxCRT_StricmpA/W and wxCRT_StrnicmpA/W for various compilers */
 
- #if defined(__BORLANDC__) || defined(__WATCOMC__) || \
 
-         defined(__VISAGECPP__) || \
 
-         defined(__EMX__) || defined(__DJGPP__)
 
-     #define wxCRT_StricmpA stricmp
 
-     #define wxCRT_StrnicmpA strnicmp
 
- #elif defined(__SYMANTEC__) || (defined(__VISUALC__) && !defined(__WXWINCE__))
 
-     #define wxCRT_StricmpA _stricmp
 
-     #define wxCRT_StrnicmpA _strnicmp
 
- #elif defined(__UNIX__) || (defined(__GNUWIN32__) && !defined(__WX_STRICT_ANSI_GCC__))
 
-     #define wxCRT_StricmpA strcasecmp
 
-     #define wxCRT_StrnicmpA strncasecmp
 
- /* #else -- use wxWidgets implementation */
 
- #endif
 
- #ifdef __VISUALC__
 
-     #define wxCRT_StricmpW _wcsicmp
 
-     #define wxCRT_StrnicmpW _wcsnicmp
 
- #elif defined(__UNIX__)
 
-     #ifdef HAVE_WCSCASECMP
 
-         #define wxCRT_StricmpW wcscasecmp
 
-     #endif
 
-     #ifdef HAVE_WCSNCASECMP
 
-         #define wxCRT_StrnicmpW wcsncasecmp
 
-     #endif
 
- /* #else -- use wxWidgets implementation */
 
- #endif
 
- #ifdef HAVE_STRTOK_R
 
-     #define  wxCRT_StrtokA(str, sep, last)    strtok_r(str, sep, last)
 
- #endif
 
- /* FIXME-UTF8: detect and use wcstok() if available for wxCRT_StrtokW */
 
- /* these are extern "C" because they are used by regex lib: */
 
- #ifdef __cplusplus
 
- extern "C" {
 
- #endif
 
- #ifndef wxCRT_StrlenW
 
- WXDLLIMPEXP_BASE size_t wxCRT_StrlenW(const wchar_t *s);
 
- #endif
 
- #ifndef wxCRT_StrncmpW
 
- WXDLLIMPEXP_BASE int wxCRT_StrncmpW(const wchar_t *s1, const wchar_t *s2, size_t n);
 
- #endif
 
- #ifdef __cplusplus
 
- }
 
- #endif
 
- /* FIXME-UTF8: remove this once we are Unicode only */
 
- #if wxUSE_UNICODE
 
-     #define wxCRT_StrlenNative  wxCRT_StrlenW
 
-     #define wxCRT_StrncmpNative wxCRT_StrncmpW
 
-     #define wxCRT_ToupperNative wxCRT_ToupperW
 
-     #define wxCRT_TolowerNative wxCRT_TolowerW
 
- #else
 
-     #define wxCRT_StrlenNative  wxCRT_StrlenA
 
-     #define wxCRT_StrncmpNative wxCRT_StrncmpA
 
-     #define wxCRT_ToupperNative toupper
 
-     #define wxCRT_TolowerNative tolower
 
- #endif
 
- #ifndef wxCRT_StrcatW
 
- WXDLLIMPEXP_BASE wchar_t *wxCRT_StrcatW(wchar_t *dest, const wchar_t *src);
 
- #endif
 
- #ifndef wxCRT_StrchrW
 
- WXDLLIMPEXP_BASE const wchar_t *wxCRT_StrchrW(const wchar_t *s, wchar_t c);
 
- #endif
 
- #ifndef wxCRT_StrcmpW
 
- WXDLLIMPEXP_BASE int wxCRT_StrcmpW(const wchar_t *s1, const wchar_t *s2);
 
- #endif
 
- #ifndef wxCRT_StrcollW
 
- WXDLLIMPEXP_BASE int wxCRT_StrcollW(const wchar_t *s1, const wchar_t *s2);
 
- #endif
 
- #ifndef wxCRT_StrcpyW
 
- WXDLLIMPEXP_BASE wchar_t *wxCRT_StrcpyW(wchar_t *dest, const wchar_t *src);
 
- #endif
 
- #ifndef wxCRT_StrcspnW
 
- WXDLLIMPEXP_BASE size_t wxCRT_StrcspnW(const wchar_t *s, const wchar_t *reject);
 
- #endif
 
- #ifndef wxCRT_StrncatW
 
- WXDLLIMPEXP_BASE wchar_t *wxCRT_StrncatW(wchar_t *dest, const wchar_t *src, size_t n);
 
- #endif
 
- #ifndef wxCRT_StrncpyW
 
- WXDLLIMPEXP_BASE wchar_t *wxCRT_StrncpyW(wchar_t *dest, const wchar_t *src, size_t n);
 
- #endif
 
- #ifndef wxCRT_StrpbrkW
 
- WXDLLIMPEXP_BASE const wchar_t *wxCRT_StrpbrkW(const wchar_t *s, const wchar_t *accept);
 
- #endif
 
- #ifndef wxCRT_StrrchrW
 
- WXDLLIMPEXP_BASE const wchar_t *wxCRT_StrrchrW(const wchar_t *s, wchar_t c);
 
- #endif
 
- #ifndef wxCRT_StrspnW
 
- WXDLLIMPEXP_BASE size_t wxCRT_StrspnW(const wchar_t *s, const wchar_t *accept);
 
- #endif
 
- #ifndef wxCRT_StrstrW
 
- WXDLLIMPEXP_BASE const wchar_t *wxCRT_StrstrW(const wchar_t *haystack, const wchar_t *needle);
 
- #endif
 
- #ifndef wxCRT_StrtodW
 
- WXDLLIMPEXP_BASE double wxCRT_StrtodW(const wchar_t *nptr, wchar_t **endptr);
 
- #endif
 
- #ifndef wxCRT_StrtolW
 
- WXDLLIMPEXP_BASE long int wxCRT_StrtolW(const wchar_t *nptr, wchar_t **endptr, int base);
 
- #endif
 
- #ifndef wxCRT_StrtoulW
 
- WXDLLIMPEXP_BASE unsigned long int wxCRT_StrtoulW(const wchar_t *nptr, wchar_t **endptr, int base);
 
- #endif
 
- #ifndef wxCRT_StrxfrmW
 
- WXDLLIMPEXP_BASE size_t wxCRT_StrxfrmW(wchar_t *dest, const wchar_t *src, size_t n);
 
- #endif
 
- #ifndef wxCRT_StrdupA
 
- WXDLLIMPEXP_BASE char *wxCRT_StrdupA(const char *psz);
 
- #endif
 
- #ifndef wxCRT_StrdupW
 
- WXDLLIMPEXP_BASE wchar_t *wxCRT_StrdupW(const wchar_t *pwz);
 
- #endif
 
- #ifndef wxCRT_StricmpA
 
- WXDLLIMPEXP_BASE int wxCRT_StricmpA(const char *psz1, const char *psz2);
 
- #endif
 
- #ifndef wxCRT_StricmpW
 
- WXDLLIMPEXP_BASE int wxCRT_StricmpW(const wchar_t *psz1, const wchar_t *psz2);
 
- #endif
 
- #ifndef wxCRT_StrnicmpA
 
- WXDLLIMPEXP_BASE int wxCRT_StrnicmpA(const char *psz1, const char *psz2, size_t len);
 
- #endif
 
- #ifndef wxCRT_StrnicmpW
 
- WXDLLIMPEXP_BASE int wxCRT_StrnicmpW(const wchar_t *psz1, const wchar_t *psz2, size_t len);
 
- #endif
 
- #ifndef wxCRT_StrtokA
 
- WXDLLIMPEXP_BASE char *wxCRT_StrtokA(char *psz, const char *delim, char **save_ptr);
 
- #endif
 
- #ifndef wxCRT_StrtokW
 
- WXDLLIMPEXP_BASE wchar_t *wxCRT_StrtokW(wchar_t *psz, const wchar_t *delim, wchar_t **save_ptr);
 
- #endif
 
- /* supply strtoll and strtoull, if needed */
 
- #ifdef wxLongLong_t
 
-     #ifndef wxCRT_StrtollA
 
-         WXDLLIMPEXP_BASE wxLongLong_t wxCRT_StrtollA(const char* nptr,
 
-                                                      char** endptr,
 
-                                                      int base);
 
-         WXDLLIMPEXP_BASE wxULongLong_t wxCRT_StrtoullA(const char* nptr,
 
-                                                        char** endptr,
 
-                                                        int base);
 
-     #endif
 
-     #ifndef wxCRT_StrtollW
 
-         WXDLLIMPEXP_BASE wxLongLong_t wxCRT_StrtollW(const wchar_t* nptr,
 
-                                                      wchar_t** endptr,
 
-                                                      int base);
 
-         WXDLLIMPEXP_BASE wxULongLong_t wxCRT_StrtoullW(const wchar_t* nptr,
 
-                                                        wchar_t** endptr,
 
-                                                        int base);
 
-     #endif
 
- #endif /* wxLongLong_t */
 
- /* -------------------------------------------------------------------------
 
-                                   stdio.h
 
-    ------------------------------------------------------------------------- */
 
- #if defined(__UNIX__) || defined(__WXMAC__)
 
-     #define wxMBFILES 1
 
- #else
 
-     #define wxMBFILES 0
 
- #endif
 
- /* these functions are only needed in the form used for filenames (i.e. char*
 
-    on Unix, wchar_t* on Windows), so we don't need to use A/W suffix: */
 
- #if wxMBFILES || !wxUSE_UNICODE /* ANSI filenames */
 
-     #define wxCRT_Fopen   fopen
 
-     #define wxCRT_Freopen freopen
 
-     #define wxCRT_Remove  remove
 
-     #define wxCRT_Rename  rename
 
- #else /* Unicode filenames */
 
-     /* special case: these functions are missing under Win9x with Unicows so we
 
-        have to implement them ourselves */
 
-     #if wxUSE_UNICODE_MSLU || defined(__WX_STRICT_ANSI_GCC__)
 
-             WXDLLIMPEXP_BASE FILE* wxMSLU__wfopen(const wchar_t *name, const wchar_t *mode);
 
-             WXDLLIMPEXP_BASE FILE* wxMSLU__wfreopen(const wchar_t *name, const wchar_t *mode, FILE *stream);
 
-             WXDLLIMPEXP_BASE int wxMSLU__wrename(const wchar_t *oldname, const wchar_t *newname);
 
-             WXDLLIMPEXP_BASE int wxMSLU__wremove(const wchar_t *name);
 
-             #define wxCRT_Fopen     wxMSLU__wfopen
 
-             #define wxCRT_Freopen   wxMSLU__wfreopen
 
-             #define wxCRT_Remove    wxMSLU__wremove
 
-             #define wxCRT_Rename    wxMSLU__wrename
 
-     #else
 
-         /* WinCE CRT doesn't provide these functions so use our own */
 
-         #ifdef __WXWINCE__
 
-             WXDLLIMPEXP_BASE int wxCRT_Rename(const wchar_t *src,
 
-                                               const wchar_t *dst);
 
-             WXDLLIMPEXP_BASE int wxCRT_Remove(const wchar_t *path);
 
-         #else
 
-             #define wxCRT_Rename   _wrename
 
-             #define wxCRT_Remove _wremove
 
-         #endif
 
-         #define wxCRT_Fopen    _wfopen
 
-         #define wxCRT_Freopen  _wfreopen
 
-     #endif
 
- #endif /* wxMBFILES/!wxMBFILES */
 
- #define wxCRT_PutsA       puts
 
- #define wxCRT_FputsA      fputs
 
- #define wxCRT_FgetsA      fgets
 
- #define wxCRT_FputcA      fputc
 
- #define wxCRT_FgetcA      fgetc
 
- #define wxCRT_UngetcA     ungetc
 
- #ifdef wxHAVE_TCHAR_SUPPORT
 
-     #define wxCRT_PutsW   _putws
 
-     #define wxCRT_FputsW  fputws
 
-     #define wxCRT_FputcW  fputwc
 
- #endif
 
- #ifdef HAVE_FPUTWS
 
-     #define wxCRT_FputsW  fputws
 
- #endif
 
- #ifdef HAVE_PUTWS
 
-     #define wxCRT_PutsW   putws
 
- #endif
 
- #ifdef HAVE_FPUTWC
 
-     #define wxCRT_FputcW  fputwc
 
- #endif
 
- #define wxCRT_FgetsW  fgetws
 
- #ifndef wxCRT_PutsW
 
- WXDLLIMPEXP_BASE int wxCRT_PutsW(const wchar_t *ws);
 
- #endif
 
- #ifndef wxCRT_FputsW
 
- WXDLLIMPEXP_BASE int wxCRT_FputsW(const wchar_t *ch, FILE *stream);
 
- #endif
 
- #ifndef wxCRT_FputcW
 
- WXDLLIMPEXP_BASE int wxCRT_FputcW(wchar_t wc, FILE *stream);
 
- #endif
 
- /*
 
-    NB: tmpnam() is unsafe and thus is not wrapped!
 
-        Use other wxWidgets facilities instead:
 
-         wxFileName::CreateTempFileName, wxTempFile, or wxTempFileOutputStream
 
- */
 
- #define wxTmpnam(x)         wxTmpnam_is_insecure_use_wxTempFile_instead
 
- /* FIXME-CE: provide our own perror() using ::GetLastError() */
 
- #ifndef __WXWINCE__
 
- #define wxCRT_PerrorA   perror
 
- #ifdef wxHAVE_TCHAR_SUPPORT
 
-     #define wxCRT_PerrorW _wperror
 
- #endif
 
- #endif /* !__WXWINCE__ */
 
- /* -------------------------------------------------------------------------
 
-                                   stdlib.h
 
-    ------------------------------------------------------------------------- */
 
- /* there are no env vars at all under CE, so no _tgetenv neither */
 
- #ifdef __WXWINCE__
 
-     /* can't define as inline function as this is a C file... */
 
-     #define wxCRT_GetenvA(name)     (name, NULL)
 
-     #define wxCRT_GetenvW(name)     (name, NULL)
 
- #else
 
-     #define wxCRT_GetenvA           getenv
 
-     #ifdef _tgetenv
 
-         #define wxCRT_GetenvW       _wgetenv
 
-     #endif
 
- #endif
 
- #ifndef wxCRT_GetenvW
 
- WXDLLIMPEXP_BASE wchar_t * wxCRT_GetenvW(const wchar_t *name);
 
- #endif
 
- #define wxCRT_SystemA               system
 
- /* mingw32 doesn't provide _tsystem() or _wsystem(): */
 
- #if defined(_tsystem)
 
-     #define  wxCRT_SystemW          _wsystem
 
- #endif
 
- #define wxCRT_AtofA                 atof
 
- #define wxCRT_AtoiA                 atoi
 
- #define wxCRT_AtolA                 atol
 
- #if defined(wxHAVE_TCHAR_SUPPORT) && !defined(__WX_STRICT_ANSI_GCC__)
 
-     #define  wxCRT_AtoiW           _wtoi
 
-     #define  wxCRT_AtolW           _wtol
 
-     /* _wtof doesn't exist */
 
- #else
 
- #ifndef __VMS
 
-     #define wxCRT_AtofW(s)         wcstod(s, NULL)
 
- #endif
 
-     #define wxCRT_AtolW(s)         wcstol(s, NULL, 10)
 
-     /* wcstoi doesn't exist */
 
- #endif
 
- /* -------------------------------------------------------------------------
 
-                                 time.h
 
-    ------------------------------------------------------------------------- */
 
- #define wxCRT_StrftimeA  strftime
 
- #ifdef __SGI__
 
-     /*
 
-         IRIX provides not one but two versions of wcsftime(): XPG4 one which
 
-         uses "const char*" for the third parameter and so can't be used and the
 
-         correct, XPG5, one. Unfortunately we can't just define _XOPEN_SOURCE
 
-         high enough to get XPG5 version as this undefines other symbols which
 
-         make other functions we use unavailable (see <standards.h> for gory
 
-         details). So just declare the XPG5 version ourselves, we're extremely
 
-         unlikely to ever be compiled on a system without it. But if we ever do,
 
-         a configure test would need to be added for it (and _MIPS_SYMBOL_PRESENT
 
-         should be used to check for its presence during run-time, i.e. it would
 
-         probably be simpler to just always use our own wxCRT_StrftimeW() below
 
-         if it does ever become a problem).
 
-      */
 
- #ifdef __cplusplus
 
-     extern "C"
 
- #endif
 
-     size_t
 
-     _xpg5_wcsftime(wchar_t *, size_t, const wchar_t *, const struct tm * );
 
-     #define wxCRT_StrftimeW _xpg5_wcsftime
 
- #else
 
-     /*
 
-         Assume it's always available under non-Unix systems as this does seem
 
-         to be the case for now. And under Unix we trust configure to detect it
 
-         (except for SGI special case above).
 
-      */
 
-     #if defined(HAVE_WCSFTIME) || !defined(__UNIX__)
 
-         #define wxCRT_StrftimeW  wcsftime
 
-     #endif
 
- #endif
 
- #ifndef wxCRT_StrftimeW
 
- WXDLLIMPEXP_BASE size_t wxCRT_StrftimeW(wchar_t *s, size_t max,
 
-                                         const wchar_t *fmt,
 
-                                         const struct tm *tm);
 
- #endif
 
- /* -------------------------------------------------------------------------
 
-                                 ctype.h
 
-    ------------------------------------------------------------------------- */
 
- #ifdef __WATCOMC__
 
-   #define WXWCHAR_T_CAST(c) (wint_t)(c)
 
- #else
 
-   #define WXWCHAR_T_CAST(c) c
 
- #endif
 
- #define wxCRT_IsalnumW(c)   iswalnum(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IsalphaW(c)   iswalpha(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IscntrlW(c)   iswcntrl(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IsdigitW(c)   iswdigit(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IsgraphW(c)   iswgraph(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IslowerW(c)   iswlower(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IsprintW(c)   iswprint(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IspunctW(c)   iswpunct(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IsspaceW(c)   iswspace(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IsupperW(c)   iswupper(WXWCHAR_T_CAST(c))
 
- #define wxCRT_IsxdigitW(c)  iswxdigit(WXWCHAR_T_CAST(c))
 
- #ifdef __GLIBC__
 
-     #if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)
 
-         /* /usr/include/wctype.h incorrectly declares translations */
 
-         /* tables which provokes tons of compile-time warnings -- try */
 
-         /* to correct this */
 
-         #define wxCRT_TolowerW(wc) towctrans((wc), (wctrans_t)__ctype_tolower)
 
-         #define wxCRT_ToupperW(wc) towctrans((wc), (wctrans_t)__ctype_toupper)
 
-     #else /* !glibc 2.0 */
 
-         #define wxCRT_TolowerW   towlower
 
-         #define wxCRT_ToupperW   towupper
 
-     #endif
 
- #else /* !__GLIBC__ */
 
-     /* There is a bug in VC6 C RTL: toxxx() functions dosn't do anything
 
-        with signed chars < 0, so "fix" it here. */
 
-     #define wxCRT_TolowerW(c)   towlower((wxUChar)(wxChar)(c))
 
-     #define wxCRT_ToupperW(c)   towupper((wxUChar)(wxChar)(c))
 
- #endif /* __GLIBC__/!__GLIBC__ */
 
- /* -------------------------------------------------------------------------
 
-        wx wrappers for CRT functions in both char* and wchar_t* versions
 
-    ------------------------------------------------------------------------- */
 
- #ifdef __cplusplus
 
- /* NB: this belongs to wxcrt.h and not this header, but it makes life easier
 
-  *     for buffer.h and stringimpl.h (both of which must be included before
 
-  *     string.h, which is required by wxcrt.h) to have them here: */
 
- /* safe version of strlen() (returns 0 if passed NULL pointer) */
 
- inline size_t wxStrlen(const char *s) { return s ? wxCRT_StrlenA(s) : 0; }
 
- inline size_t wxStrlen(const wchar_t *s) { return s ? wxCRT_StrlenW(s) : 0; }
 
- #ifndef wxWCHAR_T_IS_WXCHAR16
 
-        WXDLLIMPEXP_BASE size_t wxStrlen(const wxChar16 *s );
 
- #endif
 
- #ifndef wxWCHAR_T_IS_WXCHAR32
 
-        WXDLLIMPEXP_BASE size_t wxStrlen(const wxChar32 *s );
 
- #endif
 
- #define wxWcslen wxCRT_StrlenW
 
- #define wxStrdupA wxCRT_StrdupA
 
- #define wxStrdupW wxCRT_StrdupW
 
- inline char* wxStrdup(const char *s) { return wxCRT_StrdupA(s); }
 
- inline wchar_t* wxStrdup(const wchar_t *s) { return wxCRT_StrdupW(s); }
 
- #ifndef wxWCHAR_T_IS_WXCHAR16
 
-        WXDLLIMPEXP_BASE wxChar16* wxStrdup(const wxChar16* s);
 
- #endif
 
- #ifndef wxWCHAR_T_IS_WXCHAR32
 
-        WXDLLIMPEXP_BASE wxChar32* wxStrdup(const wxChar32* s);
 
- #endif
 
- #endif /* __cplusplus */
 
- #endif /* _WX_WXCRTBASE_H_ */
 
 
  |