111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * File to have Microsoft eMbedded Visual C++ 3.0 and .NET working with STLport
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * May 2004
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Origin : Zdenek Nemec - zero@mapfactor.com
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *          Michael Fink - vividos@users.sourceforge.net
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_EVC_H
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_EVC_H
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_COMPILER "eMbedded Visual C++"
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This flag is being used by STLport to support
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// old-fashioned Windows CE SDK (see stl_wince.h)
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// do not use with eMebedded Visual C++ 3 or 4!
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef _STLP_WINCE
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  undef _STLP_WINCE
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Compiler dependent define. The following defines may be available:
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * _STLP_WCE_EVC3 when compiling under eMbedded Visual C++ 3
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * _STLP_WCE_NET  when compiling under eMbedded Visual C++ .NET
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * _STLP_WCE      always defined when compiling with one of the above
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_WCE_EVC3
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_WCE_NET
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if (_WIN32_WCE > 300)
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_WCE_NET UNDER_CE
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif (_WIN32_WCE == 300)
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_WCE_EVC3 UNDER_CE
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  error No support for Windows CE below 3.0!
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This is defined for all platforms using Windows CE
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_WCE
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* All Windows CE versions up to at least version 5 are little-endian, even
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * if the hardware (like e.g. MIPS) can be configured for big-endian, too. */
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_LITTLE_ENDIAN
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Ensure _DEBUG is defined.
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (DEBUG) && !defined (_DEBUG)
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _DEBUG
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// inherit all msvc6 options
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stl/config/_msvc.h>
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// CE up to at least version 5 has no C locale support
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_NO_LOCALE_SUPPORT
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if _WIN32_WCE >= 420
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   // SDKs built with PB5 have terminate&co in namespace std...
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_VENDOR_TERMINATE_STD _STLP_VENDOR_STD
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_VENDOR_UNCAUGHT_EXCEPTION_STD _STLP_VENDOR_STD
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   // ...and new_handler/set_new_handler in the global namespace.
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_GLOBAL_NEW_HANDLER 1
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Always threaded in eMbedded Visual C++ 3.0 and .NET
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _MT
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _MT
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// we don't have a static native runtime library
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_USING_CROSS_NATIVE_RUNTIME_LIB
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if _WIN32_WCE < 400
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// no long double under CE3 and older
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_LONG_DOUBLE
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// no *f and *l math functions available
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_NO_VENDOR_MATH_F
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_NO_VENDOR_MATH_L
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Redirect cout, cerr and clog:
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * If defined redirect cout, cerr and clog to
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * files stdout.txt, stderr.txt and stdlog.txt
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//# define _STLP_REDIRECT_STDSTREAMS
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Static class members may generate LNK1179:
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Wrong COMDAT packing may cause LNK1179 error.
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * For details see http://groups.google.com/groups?th=8a05c82c4ffee280
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * example P78. This define is not used/needed at this moment
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * but may came handy in future...
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//# define _STLP_STATIC_MEMBERS_BUG
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Use wide-string interface of windows native functions (CreateFile...).
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Note that this should be defined all the time while under CE.
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (UNICODE)
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_USE_WIDE_INTERFACE
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Force exception std to std instead of __std_alias.
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (__cplusplus) && !defined (_STLP_HAS_NO_NAMESPACES)
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifdef _STLP_VENDOR_EXCEPT_STD
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    undef _STLP_VENDOR_EXCEPT_STD
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_VENDOR_EXCEPT_STD std
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// short string optimization bug under evc3, evc4 using ARM compiler
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if _MSC_VER < 1400 && (defined (ARM) || defined (_ARM_))
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_DONT_USE_SHORT_STRING_OPTIM
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// when using MFC, disable another placement new declaration, since there is one in wcealt.h
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (__BUILDING_STLPORT) && defined (_MFC_VER)
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define __PLACEMENT_NEW_INLINE
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// threads
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _REENTRANT
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _REENTRANT
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _NOTHREADS
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Use old fashioned headers (ctime vs. time.h).
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_NO_NEW_C_HEADERS
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_NO_NEW_C_HEADERS
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// exception handling support: only on evc4 and user added /GX to project settings
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_WCE_EVC3) || !defined (_CPPUNWIND)
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_EXCEPTION_HEADER
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_EXCEPTIONS
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  undef _STLP_USE_EXCEPTIONS
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _STLP_THROW_BAD_ALLOC
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _STLP_THROW_BAD_ALLOC { _STLP_WINCE_TRACE(L"out of memory"); ExitThread(1); }
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_WINCE_TRACE(msg) OutputDebugString(msg)
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * eMbedded Visual C++ .NET specific settings
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_WCE_NET)
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// evc4 has no locale and time support
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_LOCALE_SUPPORT
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_TIME_SUPPORT
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// ptrdiff_t is not defined in evc4 headers
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _PTRDIFF_T_DEFINED
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   typedef int ptrdiff_t;
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _PTRDIFF_T_DEFINED
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Helper macros for including the native headers in cases where a file with
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * the same name also exists in the STLport include folder. The idea behind
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * this is that we first go up one directory and then down into a dir that
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * is only present in the native install but not in STLport.
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  if !defined (_STLP_NATIVE_INCLUDE_PATH)
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    if defined (_X86_)
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      if defined (_STLP_WCE_TARGET_PROC_SUBTYPE_EMULATOR)
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../Emulator
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      else
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../X86
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      endif
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    elif defined (_ARM_)
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      if _MSC_VER < 1400
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert         // eVC3/4
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        if defined (ARMV4)
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        elif defined (ARMV4I)
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        elif defined (ARMV4T)
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4t
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        else
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          error Unknown ARM SDK.
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        endif
18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      else
18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert         // VC8 crosscompiling for CE
18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        if defined (ARMV4)
18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert           // VC8 bundled Pocket PC 2003 SDK don't have a target CPU subfolder.
18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          if defined(WIN32_PLATFORM_PSPC)
18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#            define _STLP_NATIVE_INCLUDE_PATH ../Include
18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          else
18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#            define _STLP_NATIVE_INCLUDE_PATH ../Armv4
18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          endif
19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        elif defined(ARMV4I) || defined(ARMV4T)
19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          define _STLP_NATIVE_INCLUDE_PATH ../Armv4i
19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        else
19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#          error Unknown ARM SDK.
19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        endif
19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      endif
19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    elif defined (_MIPS_)
19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      if defined (MIPS16)
19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../mips16
19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      elif defined (MIPSII)
20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../mipsII
20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      elif defined (MIPSII_FP)
20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../mipsII_fp
20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      elif defined (MIPSIV)
20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV
20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      elif defined (MIPSIV_FP)
20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../mipsIV_fp
20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      else
20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        error Unknown MIPS SDK.
20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      endif
21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    elif defined (SHx)
21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      if defined (SH3)
21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../sh3
21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      elif defined (SH4)
21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        define _STLP_NATIVE_INCLUDE_PATH ../sh4
21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      else
21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#        error Unknown SHx SDK.
21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      endif
21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    else
21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      error Unknown SDK.
22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    endif
22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif /* !_STLP_NATIVE_INCLUDE_PATH */
22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Workaround when using MFCCE and using <new> together: MFCCE's wcealt.h doesn't
22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * check for __PLACEMENT_NEW_INLINE before defining operator new, so when <new>
22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * defines the operatore before, there will be an error C2084:
22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * "function 'void *__cdecl operator new(unsigned int,void *)' already has a body".
22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifdef _STLP_USE_MFC
22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define __PLACEMENT_NEW_INLINE
23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_WCE_NET */
23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * eMbedded Visual C++ 3.0 specific settings
23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_WCE_EVC3)
23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_NATIVE_MBSTATE_T
24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// evc3 has no locale and time support
24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_LOCALE_SUPPORT
24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_TIME_SUPPORT
24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// evc3 has new, but no explicit header
24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_NEW_HEADER
24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_NEW_NEW_HEADER
24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// evc3 has no bad_alloc and no typeinfo
25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  undef _STLP_NO_BAD_ALLOC
25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_BAD_ALLOC
25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  undef _STLP_NO_TYPEINFO
25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_TYPEINFO
25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// missing things in eMbedded Visual C++ 3.0 headers
25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _SIZE_T_DEFINED
25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   typedef unsigned int size_t;
25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _SIZE_T_DEFINED
26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _WCHAR_T_DEFINED
26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   typedef unsigned short wchar_t;
26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _WCHAR_T_DEFINED
26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// ptrdiff_t is not defined in evc3 headers
26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _PTRDIFF_T_DEFINED
26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   typedef int ptrdiff_t;
27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _PTRDIFF_T_DEFINED
27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// clock_t is not defined in evc3 headers
27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _CLOCK_T_DEFINED
27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   typedef long clock_t;
27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _CLOCK_T_DEFINED
27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Struct tm is not defined in evc3 headers
28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _TM_DEFINED
28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct tm {
28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_sec;     /* seconds after the minute - [0,59] */
28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_min;     /* minutes after the hour - [0,59] */
28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_hour;    /* hours since midnight - [0,23] */
28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_mday;    /* day of the month - [1,31] */
28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_mon;     /* months since January - [0,11] */
28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_year;    /* years since 1900 */
28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_wday;    /* days since Sunday - [0,6] */
28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_yday;    /* days since January 1 - [0,365] */
29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   int tm_isdst;   /* daylight savings time flag */
29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _TM_DEFINED
29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// define placement new and delete operator
29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// note: when MFCCE headers are included first, don't define the new operator,
29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//       since it was already defined in wcealt.h
29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifdef __cplusplus
29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    ifndef __PLACEMENT_NEW_INLINE
30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      ifndef _MFC_VER
30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline void *__cdecl operator new(size_t, void *_P) { return (_P); }
30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      endif /* _MFC_VER */
30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline void __cdecl operator delete(void *, void *) { return; }
30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#      define __PLACEMENT_NEW_INLINE
30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    endif
30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif /* __cplusplus */
30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// evc3 doesn't have native wide functions, e.g. fgetwc, wmemmove
30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_NO_NATIVE_WIDE_FUNCTIONS
31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// evc3 doesn't have assert.h
31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  ifndef _ASSERT_DEFINED
31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define assert(expr) _STLP_ASSERT(expr)
31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _ASSERT_DEFINED
31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_WCE_EVC3 */
31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * original call: TerminateProcess(GetCurrentProcess(), 0);
32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * we substitute the GetCurrentProcess() with the result of the inline function
32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * defined in kfuncs.h, since we then can avoid including <windows.h> at all.
32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * all needed Win32 API functions are defined in <stl/_windows.h>
32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _ABORT_DEFINED
32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _STLP_ABORT() TerminateProcess(reinterpret_cast<HANDLE>(66), 0)
32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _ABORT_DEFINED
32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Notice: windows.h isn't included here anymore; all needed defines are in
33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// stl/_windows.h now
33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_EVC_H */
334