From 8b2e7ffe0be993fe09e3a6067ce4e722d337bf46 Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Tue, 3 Feb 2004 10:25:57 +0000 Subject: [PATCH] New ACC version. committer: mfx 1075803957 +0000 --- src/acc/acc.h | 4 +- src/acc/acc_auto.h | 25 +++++++++- src/acc/acc_cc.h | 36 +++++++------- src/acc/acc_chk.ch | 10 +++- src/acc/acc_cxx.h | 97 +++++++++++++++----------------------- src/acc/acc_defs.h | 74 +++++++++++++++++------------ src/acc/acc_ince.h | 3 ++ src/acc/acc_inci.h | 30 ++++-------- src/acc/acc_init.h | 18 +++++-- src/acc/acc_lib.h | 26 +++++++--- src/acc/acc_type.h | 4 +- src/acc/acclib/dosalloc.ch | 10 ++-- src/acc/acclib/halloc.ch | 72 +++++++++++++++++++++++++++- src/acc/acclib/misc.ch | 32 ++++++------- src/acc/acclib/uclock.ch | 14 ++++-- 15 files changed, 286 insertions(+), 169 deletions(-) diff --git a/src/acc/acc.h b/src/acc/acc.h index a5bad691..9a52d709 100644 --- a/src/acc/acc.h +++ b/src/acc/acc.h @@ -27,7 +27,7 @@ #ifndef __ACC_H_INCLUDED #define __ACC_H_INCLUDED 1 -#define ACC_VERSION 20040113L +#define ACC_VERSION 20040202L #if !defined(ACC_CONFIG_INCLUDE) # define ACC_CONFIG_INCLUDE(file) file @@ -55,7 +55,7 @@ # endif #endif #if 0 && defined(__WATCOMC__) -# if (__WATCOMC__ < 1000) +# if (__WATCOMC__ < 1060) # pragma warning 203 9 /* W203: Preprocessing symbol '%s' has not been declared */ # endif #endif diff --git a/src/acc/acc_auto.h b/src/acc/acc_auto.h index 5f34d04d..f7c9288d 100644 --- a/src/acc/acc_auto.h +++ b/src/acc/acc_auto.h @@ -181,10 +181,16 @@ # undef HAVE_UTIME_H # define HAVE_SYS_UTIME_H 1 #elif (ACC_OS_WIN32 && ACC_CC_MWERKS) && defined(__MSL__) +# define HAVE_ALLOCA_H 1 # undef HAVE_DOS_H # undef HAVE_SHARE_H # undef HAVE_SYS_TIME_H -# define HAVE_ALLOCA_H 1 +#elif (ACC_CC_NDPC) +# undef HAVE_DIRENT_H +# undef HAVE_DOS_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H #elif (ACC_CC_PACIFICC) # undef HAVE_DIRECT_H # undef HAVE_DIRENT_H @@ -323,6 +329,10 @@ # undef HAVE_LSTAT # endif #elif (ACC_OS_CYGWIN) +# if (ACC_CC_GNUC < 0x025a00ul) +# undef HAVE_GETTIMEOFDAY +# undef HAVE_LSTAT +# endif # if (ACC_CC_GNUC < 0x025f00ul) # undef HAVE_SNPRINTF # undef HAVE_VSNPRINTF @@ -421,7 +431,18 @@ # define vsnprintf _vsnprintf # endif #elif (ACC_OS_WIN32 && ACC_CC_MWERKS) && defined(__MSL__) -# undef HAVE_SETMODE +# if (__MSL__ < 0x8000ul) +# undef HAVE_CHMOD /* which in turn pulls in */ +# endif +#elif (ACC_CC_NDPC) +# undef HAVE_ALLOCA +# undef HAVE_SNPRINTF +# undef HAVE_STRNICMP +# undef HAVE_UTIME +# undef HAVE_VSNPRINTF +# if defined(__cplusplus) +# undef HAVE_STAT +# endif #elif (ACC_CC_PACIFICC) # undef HAVE_ACCESS # undef HAVE_ALLOCA diff --git a/src/acc/acc_cc.h b/src/acc/acc_cc.h index 2f77144c..108818e5 100644 --- a/src/acc/acc_cc.h +++ b/src/acc/acc_cc.h @@ -24,7 +24,7 @@ #if defined(__INTEL_COMPILER) # define ACC_CC_INTELC 1 # define ACC_INFO_CC "Intel C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__INTEL_COMPILER) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__INTEL_COMPILER) #elif defined(__GNUC__) && defined(__VERSION__) # if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) # define ACC_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) @@ -38,19 +38,19 @@ #elif defined(__AZTEC_C__) # define ACC_CC_AZTECC 1 # define ACC_INFO_CC "Aztec C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__AZTEC_C__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__AZTEC_C__) #elif defined(__BORLANDC__) # define ACC_CC_BORLANDC 1 # define ACC_INFO_CC "Borland C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__BORLANDC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__BORLANDC__) #elif defined(__DMC__) # define ACC_CC_DMC 1 # define ACC_INFO_CC "Digital Mars C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__DMC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__DMC__) #elif defined(__DECC) # define ACC_CC_DECC 1 # define ACC_INFO_CC "DEC C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__DECC) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__DECC) #elif defined(__HIGHC__) # define ACC_CC_HIGHC 1 # define ACC_INFO_CC "MetaWare High C" @@ -58,7 +58,7 @@ #elif defined(__IBMC__) # define ACC_CC_IBMC 1 # define ACC_INFO_CC "IBM C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__IBMC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__IBMC__) #elif defined(__LCC__) # define ACC_CC_LCC 1 # define ACC_INFO_CC "lcc" @@ -66,15 +66,19 @@ #elif defined(_MSC_VER) # define ACC_CC_MSC 1 # define ACC_INFO_CC "Microsoft C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(_MSC_VER) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(_MSC_VER) #elif defined(__MWERKS__) # define ACC_CC_MWERKS 1 # define ACC_INFO_CC "Metrowerks C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__MWERKS__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__MWERKS__) +#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) +# define ACC_CC_NDPC 1 +# define ACC_INFO_CC "Microway NDP C" +# define ACC_INFO_CCVER "unknown" #elif defined(__PACIFIC__) # define ACC_CC_PACIFICC 1 # define ACC_INFO_CC "Pacific C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__PACIFIC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__PACIFIC__) #elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) # define ACC_CC_PGI 1 # define ACC_INFO_CC "Portland Group PGI C" @@ -82,11 +86,11 @@ #elif defined(__PUREC__) # define ACC_CC_PUREC 1 # define ACC_INFO_CC "Pure C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__PUREC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__PUREC__) #elif defined(__SC__) # define ACC_CC_SYMANTECC 1 # define ACC_INFO_CC "Symantec C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__SC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__SC__) #elif defined(__SUNPRO_C) # define ACC_CC_SUNPROC 1 # define ACC_INFO_CC "Sun C" @@ -94,26 +98,26 @@ #elif defined(__TINYC__) # define ACC_CC_TINYC 1 # define ACC_INFO_CC "Tiny C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__TINYC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__TINYC__) #elif defined(__TSC__) # define ACC_CC_TOPSPEEDC 1 # define ACC_INFO_CC "TopSpeed C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__TSC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__TSC__) #elif defined(__WATCOMC__) # define ACC_CC_WATCOMC 1 # define ACC_INFO_CC "Watcom C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__WATCOMC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__WATCOMC__) #elif defined(__TURBOC__) # define ACC_CC_TURBOC 1 # define ACC_INFO_CC "Turbo C" -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__TURBOC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__TURBOC__) #elif defined(__ZTC__) # define ACC_CC_ZORTECHC 1 # define ACC_INFO_CC "Zortech C" # if (__ZTC__ == 0x310) # define ACC_INFO_CCVER "0x310" # else -# define ACC_INFO_CCVER ACC_MACRO_EXPAND(__ZTC__) +# define ACC_INFO_CCVER ACC_CPP_MACRO_EXPAND(__ZTC__) # endif #else # define ACC_CC_UNKNOWN 1 diff --git a/src/acc/acc_chk.ch b/src/acc/acc_chk.ch index 7ee10507..97d3cb40 100644 --- a/src/acc/acc_chk.ch +++ b/src/acc/acc_chk.ch @@ -108,7 +108,7 @@ ACCCHK_ASSERT(sizeof('\0') == sizeof(char)) #else # if (ACC_CC_DMC) - /* Digital Mars is broken */ + /* Digital Mars C is broken */ # else ACCCHK_ASSERT(sizeof('\0') == sizeof(int)) # endif @@ -417,10 +417,16 @@ // check promotion rules **************************************************************************/ +#if (ACC_CC_NDPC) + /* NDP C is broken */ +#else /* check that the compiler correctly casts signed to unsigned */ ACCCHK_ASSERT( (int) ((unsigned char) ((signed char) -1)) == 255) +#endif -#if !defined(ACC_BROKEN_INTEGRAL_PROMOTION) && (SIZEOF_INT > 1) +#if (ACC_CC_NDPC) + /* NDP C is broken */ +#elif !defined(ACC_BROKEN_INTEGRAL_PROMOTION) && (SIZEOF_INT > 1) /* check that the compiler correctly promotes integrals */ ACCCHK_ASSERT( (((unsigned char)128) << (int)(8*sizeof(int)-8)) < 0) #endif diff --git a/src/acc/acc_cxx.h b/src/acc/acc_cxx.h index 38e808aa..ef1dbf09 100644 --- a/src/acc/acc_cxx.h +++ b/src/acc/acc_cxx.h @@ -19,29 +19,25 @@ /************************************************************************* -// exceptions +// exception specification // ACC_CXX_NOTHROW **************************************************************************/ #if defined(ACC_CXX_NOTHROW) #elif (ACC_CC_GNUC && (ACC_CC_GNUC < 0x020800ul)) -# define ACC_CXX_NOTHROW #elif (ACC_CC_BORLANDC && (__BORLANDC__ < 0x0450)) -# define ACC_CXX_NOTHROW #elif (ACC_CC_HIGHC) -# define ACC_CXX_NOTHROW #elif (ACC_CC_MSC && (_MSC_VER < 1100)) -# define ACC_CXX_NOTHROW +#elif (ACC_CC_NDPC) #elif (ACC_CC_TURBOC) -# define ACC_CXX_NOTHROW #elif (ACC_CC_WATCOMC && !defined(_CPPUNWIND)) -# define ACC_CXX_NOTHROW #elif (ACC_CC_ZORTECHC) -# define ACC_CXX_NOTHROW +#else +# define ACC_CXX_NOTHROW throw() #endif #if !defined(ACC_CXX_NOTHROW) -# define ACC_CXX_NOTHROW throw() +# define ACC_CXX_NOTHROW #endif @@ -52,7 +48,7 @@ **************************************************************************/ #if defined(__ACC_CXX_DO_NEW) -#elif (ACC_CC_PGI) +#elif (ACC_CC_NDPC || ACC_CC_PGI) # define __ACC_CXX_DO_NEW { return 0; } #else # define __ACC_CXX_DO_NEW ; @@ -71,17 +67,19 @@ /************************************************************************* // disable dynamic allocation of an object // ACC_CXX_DISABLE_NEW_DELETE -// ACC_CXX_DISABLE_NEW_DELETE_STRICT **************************************************************************/ +/* #undef __ACC_CXX_HAVE_ARRAY_NEW #undef __ACC_CXX_HAVE_PLACEMENT_NEW #undef __ACC_CXX_HAVE_PLACEMENT_DELETE +*/ #if (ACC_CC_BORLANDC && (__BORLANDC__ < 0x0450)) #elif (ACC_CC_MSC && ACC_MM_HUGE) # define ACC_CXX_DISABLE_NEW_DELETE private: #elif (ACC_CC_MSC && (_MSC_VER < 1100)) +#elif (ACC_CC_NDPC) #elif (ACC_CC_SYMANTECC || ACC_CC_ZORTECHC) #elif (ACC_CC_TURBOC) #elif (ACC_CC_WATCOMC && (__WATCOMC__ < 1100)) @@ -106,65 +104,48 @@ #endif -#if !defined(__ACC_CXX_PLACEMENT_NEW) && (__ACC_CXX_HAVE_PLACEMENT_NEW) -# define __ACC_CXX_PLACEMENT_NEW \ - static void* operator new(size_t, void*) __ACC_CXX_DO_NEW -#endif -#if !defined(__ACC_CXX_PLACEMENT_DELETE) && (__ACC_CXX_HAVE_PLACEMENT_DELETE) -# define __ACC_CXX_PLACEMENT_DELETE \ - static void operator delete(void*, void*) __ACC_CXX_DO_DELETE -#endif -#if !defined(__ACC_CXX_PLACEMENT_NEW) -# define __ACC_CXX_PLACEMENT_NEW -#endif -#if !defined(__ACC_CXX_PLACEMENT_DELETE) -# define __ACC_CXX_PLACEMENT_DELETE -#endif - - -#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && (defined(new) || defined(delete)) +#if defined(ACC_CXX_DISABLE_NEW_DELETE) +#elif defined(new) || defined(delete) # define ACC_CXX_DISABLE_NEW_DELETE private: -#endif - -#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && (ACC_CC_GNUC && (ACC_CC_GNUC < 0x025b00ul)) +#elif (ACC_CC_GNUC && (ACC_CC_GNUC < 0x025b00ul)) # define ACC_CXX_DISABLE_NEW_DELETE private: -#endif -#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && (ACC_CC_HIGHC) +#elif (ACC_CC_HIGHC) # define ACC_CXX_DISABLE_NEW_DELETE private: -#endif - - -#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && !(__ACC_CXX_HAVE_ARRAY_NEW) -/* for old compilers use `protected' instead of `private' */ +#elif !defined(__ACC_CXX_HAVE_ARRAY_NEW) + /* for old compilers use `protected' instead of `private' */ # define ACC_CXX_DISABLE_NEW_DELETE \ protected: static void operator delete(void*) __ACC_CXX_DO_DELETE \ protected: static void* operator new(size_t) __ACC_CXX_DO_NEW \ private: -#endif - -#if !defined(ACC_CXX_DISABLE_NEW_DELETE) +#else # define ACC_CXX_DISABLE_NEW_DELETE \ - protected: \ - static void operator delete(void*) __ACC_CXX_DO_DELETE \ - static void operator delete[](void*) __ACC_CXX_DO_DELETE \ - private: \ - static void* operator new(size_t) __ACC_CXX_DO_NEW \ - static void* operator new[](size_t) __ACC_CXX_DO_NEW -# define ACC_CXX_DISABLE_NEW_DELETE_STRICT \ - protected: \ - static void operator delete(void*) __ACC_CXX_DO_DELETE \ - static void operator delete[](void*) __ACC_CXX_DO_DELETE \ - __ACC_CXX_PLACEMENT_DELETE \ - private: \ - static void* operator new(size_t) __ACC_CXX_DO_NEW \ - static void* operator new[](size_t) __ACC_CXX_DO_NEW \ - __ACC_CXX_PLACEMENT_NEW + protected: static void operator delete(void*) __ACC_CXX_DO_DELETE \ + static void operator delete[](void*) __ACC_CXX_DO_DELETE \ + private: static void* operator new(size_t) __ACC_CXX_DO_NEW \ + static void* operator new[](size_t) __ACC_CXX_DO_NEW #endif -#if !defined(ACC_CXX_DISABLE_NEW_DELETE_STRICT) -# define ACC_CXX_DISABLE_NEW_DELETE_STRICT ACC_CXX_DISABLE_NEW_DELETE + +/************************************************************************* +// Assist the compiler by defining a unique location for vtables and RTTI. +// Every class which has virtual member functions or derives from a class +// with virtual members should put this macro at the very top of its +// class declaration. +// ACC_CXX_TRIGGER_FUNCTION +**************************************************************************/ + +#if defined(ACC_CXX_TRIGGER_FUNCTION) +#else +# define ACC_CXX_TRIGGER_FUNCTION \ + protected: virtual const void* acc_cxx_trigger_function() const; \ + private: #endif +#if defined(ACC_CXX_TRIGGER_FUNCTION_IMPL) +#else +# define ACC_CXX_TRIGGER_FUNCTION_IMPL(klass) \ + const void* klass::acc_cxx_trigger_function() const { return 0; } +#endif #endif /* __cplusplus */ diff --git a/src/acc/acc_defs.h b/src/acc/acc_defs.h index 7766b0ab..bf80445b 100644 --- a/src/acc/acc_defs.h +++ b/src/acc/acc_defs.h @@ -14,11 +14,43 @@ /*********************************************************************** -// +// acc_alignof() / acc_inline +************************************************************************/ + +#if (ACC_CC_GNUC) +# define acc_alignof(e) __alignof__(e) +#elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 700)) +# define acc_alignof(e) __alignof__(e) +#elif (ACC_CC_MSC && (_MSC_VER >= 1300)) +# define acc_alignof(e) __alignof(e) +#elif (ACC_CC_PGI) +# define acc_alignof(e) __alignof__(e) +#endif + +#if (ACC_CC_TURBOC && (__TURBOC__ <= 0x0295)) +#elif defined(__cplusplus) +# define acc_inline inline +#elif (ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) +# define acc_inline __inline +#elif (ACC_CC_DMC) +# define acc_inline __inline +#elif (ACC_CC_GNUC) +# define acc_inline __inline__ +#elif (ACC_CC_INTELC) +# define acc_inline __inline +#elif (ACC_CC_MSC && (_MSC_VER >= 1000)) +# define acc_inline __inline +#elif (ACC_CC_PGI) +# define acc_inline __inline__ +#endif + + +/*********************************************************************** +// ACC_UNUSED / ACC_UNUSED_FUNC ************************************************************************/ #if !defined(ACC_UNUSED) -# if (ACC_CC_BORLANDC || ACC_CC_HIGHC || ACC_CC_TURBOC) +# if (ACC_CC_BORLANDC || ACC_CC_HIGHC || ACC_CC_NDPC || ACC_CC_TURBOC) # define ACC_UNUSED(var) if (&var) ; else # elif (ACC_CC_MSC && (_MSC_VER < 900)) # define ACC_UNUSED(var) if (&var) ; else @@ -29,7 +61,7 @@ # endif #endif #if !defined(ACC_UNUSED_FUNC) -# if (ACC_CC_BORLANDC || ACC_CC_TURBOC) +# if (ACC_CC_BORLANDC || ACC_CC_NDPC || ACC_CC_TURBOC) # define ACC_UNUSED_FUNC(func) if (func) ; else # elif (ACC_CC_MSC && (_MSC_VER < 900)) # define ACC_UNUSED_FUNC(func) if (func) ; else @@ -128,34 +160,18 @@ /*********************************************************************** -// +// acc_auto.h supplements ************************************************************************/ -#if (ACC_CC_GNUC) -# define acc_alignof(e) __alignof__(e) -#elif (ACC_CC_INTELC && (__INTEL_COMPILER >= 700)) -# define acc_alignof(e) __alignof__(e) -#elif (ACC_CC_MSC && (_MSC_VER >= 1300)) -# define acc_alignof(e) __alignof(e) -#elif (ACC_CC_PGI) -# define acc_alignof(e) __alignof__(e) -#endif - -#if (ACC_CC_TURBOC && (__TURBOC__ <= 0x0295)) -#elif defined(__cplusplus) -# define acc_inline inline -#elif (ACC_CC_BORLANDC && ACC_MM_FLAT && (__BORLANDC__ >= 0x0550)) -# define acc_inline __inline -#elif (ACC_CC_DMC) -# define acc_inline __inline -#elif (ACC_CC_GNUC) -# define acc_inline __inline__ -#elif (ACC_CC_INTELC) -# define acc_inline __inline -#elif (ACC_CC_MSC && (_MSC_VER >= 1000)) -# define acc_inline __inline -#elif (ACC_CC_PGI) -# define acc_inline __inline__ +#if (ACC_OS_CYGWIN || (ACC_OS_EMX && defined(__RSXNT__)) || ACC_OS_WIN32 || ACC_OS_WIN64) +# if (ACC_CC_WATCOMC && (__WATCOMC__ < 1000)) +# elif (ACC_OS_WIN32 && ACC_CC_GNUC) && defined(__PW32__) + /* ancient pw32 version */ +# elif ((ACC_OS_CYGWIN || defined(__MINGW32__)) && (ACC_CC_GNUC && (ACC_CC_GNUC < 0x025f00ul))) + /* ancient cygwin/mingw version */ +# else +# define ACC_HAVE_WINDOWS_H 1 +# endif #endif diff --git a/src/acc/acc_ince.h b/src/acc/acc_ince.h index f5e1c548..a0d2f5d6 100644 --- a/src/acc/acc_ince.h +++ b/src/acc/acc_ince.h @@ -67,6 +67,9 @@ #if defined(HAVE_SHARE_H) # include #endif +#if defined(ACC_CC_NDPC) +# include +#endif /* TOS */ #if defined(__TOS__) && (defined(__PUREC__) || defined(__TURBOC__)) diff --git a/src/acc/acc_inci.h b/src/acc/acc_inci.h index af2a30da..1cfcd45c 100644 --- a/src/acc/acc_inci.h +++ b/src/acc/acc_inci.h @@ -23,23 +23,15 @@ #if (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC)) # include -#elif (ACC_OS_WIN32 || ACC_OS_WIN64 || ACC_OS_CYGWIN || (ACC_OS_EMX && defined(__RSXNT__))) -# if (ACC_CC_WATCOMC && (__WATCOMC__ < 1000)) -# elif (ACC_OS_WIN32 && ACC_CC_GNUC) && defined(__PW32__) - /* ancient pw32 version */ -# elif ((ACC_OS_CYGWIN || defined(__MINGW32__)) && (ACC_CC_GNUC && (ACC_CC_GNUC < 0x025f00ul))) - /* ancient cygwin/mingw version */ -# else -# if 1 && !defined(WIN32_LEAN_AND_MEAN) -# define WIN32_LEAN_AND_MEAN 1 -# endif -# if 1 && !defined(_WIN32_WINNT) - /* Restrict to a subset of Windows NT 4.0 header files */ -# define _WIN32_WINNT 0x0400 -# endif -# include -# define ACC_H_WINDOWS_H 1 +#elif (ACC_HAVE_WINDOWS_H) +# if 1 && !defined(WIN32_LEAN_AND_MEAN) +# define WIN32_LEAN_AND_MEAN 1 # endif +# if 1 && !defined(_WIN32_WINNT) + /* Restrict to a subset of Windows NT 4.0 header files */ +# define _WIN32_WINNT 0x0400 +# endif +# include # if (ACC_CC_BORLANDC || ACC_CC_TURBOC) # include # endif @@ -63,12 +55,6 @@ # if (ACC_CC_WATCOMC) # include # endif -# if 0 -# include -# else - ACC_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short); - ACC_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short); -# endif #endif diff --git a/src/acc/acc_init.h b/src/acc/acc_init.h index 4e10c948..cc15aec9 100644 --- a/src/acc/acc_init.h +++ b/src/acc/acc_init.h @@ -190,11 +190,23 @@ /*********************************************************************** -// preprocessor macros +// ANSI C preprocessor macros (cpp) ************************************************************************/ -#define ACC_STRINGIZE(x) #x -#define ACC_MACRO_EXPAND(x) ACC_STRINGIZE(x) +#define ACC_CPP_STRINGIZE(x) #x +#define ACC_CPP_MACRO_EXPAND(x) ACC_CPP_STRINGIZE(x) + +/* concatenate */ +#define ACC_CPP_CONCAT2(a,b) a ## b +#define ACC_CPP_CONCAT3(a,b,c) a ## b ## c +#define ACC_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d +#define ACC_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e + +/* expand and concatenate (by using one level of indirection) */ +#define ACC_CPP_ECONCAT2(a,b) ACC_CPP_CONCAT2(a,b) +#define ACC_CPP_ECONCAT3(a,b,c) ACC_CPP_CONCAT3(a,b,c) +#define ACC_CPP_ECONCAT4(a,b,c,d) ACC_CPP_CONCAT4(a,b,c,d) +#define ACC_CPP_ECONCAT5(a,b,c,d,e) ACC_CPP_CONCAT5(a,b,c,d,e) /*********************************************************************** diff --git a/src/acc/acc_lib.h b/src/acc/acc_lib.h index e93bf227..a16d6f3a 100644 --- a/src/acc/acc_lib.h +++ b/src/acc/acc_lib.h @@ -217,7 +217,7 @@ ACCLIB_EXTERN(int, acc_fnmatch) (const acc_hchar_p, const acc_hchar_p, int); # elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__) # elif (ACC_OS_OS2 || ACC_OS_OS216) # elif (ACC_OS_TOS && ACC_CC_GNUC) -# elif (ACC_OS_WIN32 && !defined(ACC_H_WINDOWS_H)) +# elif (ACC_OS_WIN32 && !defined(ACC_HAVE_WINDOWS_H)) # elif (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_TOS || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64) # undef __ACCLIB_USE_OPENDIR # endif @@ -278,14 +278,28 @@ ACCLIB_EXTERN(int, acc_closedir) (acc_dir_p); #if (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__) # define acc_stackavail() stackavail() -#elif ((ACC_ARCH_IA16) && ACC_CC_MSC && (_MSC_VER < 700)) +#elif (ACC_ARCH_IA16 && ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0410)) # define acc_stackavail() stackavail() -#elif ((ACC_ARCH_IA16) && ACC_CC_MSC && (_MSC_VER < 900)) -# define acc_stackavail() _stackavail() +#elif (ACC_ARCH_IA16 && ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0400)) +# if (ACC_OS_WIN16) && (ACC_MM_TINY || ACC_MM_SMALL || ACC_MM_MEDIUM) +# else +# define acc_stackavail() stackavail() +# endif #elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && (ACC_CC_DMC || ACC_CC_SYMANTECC)) # define acc_stackavail() stackavail() +#elif ((ACC_ARCH_IA16) && ACC_CC_MSC && (_MSC_VER >= 700)) +# define acc_stackavail() _stackavail() +#elif ((ACC_ARCH_IA16) && ACC_CC_MSC) +# define acc_stackavail() stackavail() +#elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && ACC_CC_TURBOC && (__TURBOC__ >= 0x0450)) +# define acc_stackavail() stackavail() +#elif (ACC_ARCH_IA16 && ACC_CC_TURBOC && (__TURBOC__ >= 0x0400)) + ACC_EXTERN_C size_t __cdecl stackavail(void); +# define acc_stackavail() stackavail() #elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && (ACC_CC_WATCOMC)) # define acc_stackavail() stackavail() +#elif (ACC_ARCH_IA16 && ACC_CC_ZORTECHC) +# define acc_stackavail() _chkstack() #endif ACCLIB_EXTERN(acclib_handle_t, acc_get_osfhandle) (int); @@ -305,7 +319,7 @@ ACCLIB_EXTERN(acc_uint32l_t, acc_umuldiv32) (acc_uint32l_t, acc_uint32l_t, acc_u typedef struct { /* all private */ acclib_handle_t h; int mode; -#if (ACC_H_WINDOWS_H) && defined(acc_int64l_t) +#if (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t) double qpf; #endif } acc_uclock_handle_t; @@ -320,7 +334,7 @@ typedef struct { /* all private */ # endif #endif } ticks; -#if (ACC_H_WINDOWS_H) && defined(acc_int64l_t) +#if (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t) acc_int64l_t qpc; #endif } acc_uclock_t; diff --git a/src/acc/acc_type.h b/src/acc/acc_type.h index 4ce7640f..db1d1459 100644 --- a/src/acc/acc_type.h +++ b/src/acc/acc_type.h @@ -246,7 +246,7 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t; ************************************************************************/ #if (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64) -# if (ACC_CC_GNUC || ACC_CC_HIGHC || ACC_CC_PACIFICC) +# if (ACC_CC_GNUC || ACC_CC_HIGHC || ACC_CC_NDPC || ACC_CC_PACIFICC) # elif (ACC_CC_DMC || ACC_CC_SYMANTECC || ACC_CC_ZORTECHC) # define __acc_cdecl __cdecl # define __acc_cdecl_atexit @@ -266,7 +266,7 @@ __acc_gnuc_extension__ typedef unsigned long long acc_ullong_t; # define __acc_cdecl_main __cdecl # define __acc_cdecl_qsort __cdecl # endif -# if (ACC_CC_GNUC || ACC_CC_HIGHC || ACC_CC_PACIFICC || ACC_CC_WATCOMC) +# if (ACC_CC_GNUC || ACC_CC_HIGHC || ACC_CC_NDPC || ACC_CC_PACIFICC || ACC_CC_WATCOMC) # elif (ACC_OS_OS2 && (ACC_CC_DMC || ACC_CC_SYMANTECC)) # define __acc_cdecl_sighandler __pascal # elif (ACC_OS_OS2 && (ACC_CC_ZORTECHC)) diff --git a/src/acc/acclib/dosalloc.ch b/src/acc/acclib/dosalloc.ch index 51c31875..0c43a909 100644 --- a/src/acc/acclib/dosalloc.ch +++ b/src/acc/acclib/dosalloc.ch @@ -19,11 +19,17 @@ #endif +#if (ACC_OS_OS216) +ACC_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short); +ACC_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short); +#endif + + /*********************************************************************** // dos_alloc ************************************************************************/ -#if (ACC_OS_DOS16) +#if (ACC_OS_DOS16 || ACC_OS_WIN16) #if !defined(ACC_CC_AZTECC) ACCLIB_PUBLIC(void __far*, acc_dos_alloc) (unsigned long size) @@ -73,11 +79,9 @@ ACCLIB_PUBLIC(void __far*, acc_dos_alloc) (unsigned long size) { void __far* p = 0; unsigned short sel = 0; - unsigned long pmask = 0xffffu >> ACC_MM_AHSHIFT; /* 8191 */ if ((long)size <= 0) return p; - size = (size + pmask) &~ pmask; /* align up to paragraph size */ if (DosAllocHuge((unsigned short)(size >> 16), (unsigned short)size, &sel, 0, 0) == 0) p = (void __far*) ACC_MK_FP(sel, 0); return p; diff --git a/src/acc/acclib/halloc.ch b/src/acc/acclib/halloc.ch index 8d3eb093..a1005863 100644 --- a/src/acc/acclib/halloc.ch +++ b/src/acc/acclib/halloc.ch @@ -19,6 +19,44 @@ #endif +#if (ACC_HAVE_MM_HUGE_PTR) +#if 1 && (ACC_OS_DOS16 && defined(BLX286)) +# define __ACCLIB_HALLOC_USE_DAH 1 +#elif 1 && (ACC_OS_DOS16 && defined(DOSX286)) +# define __ACCLIB_HALLOC_USE_DAH 1 +#elif 1 && (ACC_OS_OS216) +# define __ACCLIB_HALLOC_USE_DAH 1 +#elif 1 && (ACC_OS_WIN16) +# define __ACCLIB_HALLOC_USE_GA 1 +#elif 1 && (ACC_OS_DOS16) && (ACC_CC_BORLANDC) && defined(__DPMI16__) +# define __ACCLIB_HALLOC_USE_GA 1 +#endif +#endif + + +#if (__ACCLIB_HALLOC_USE_DAH) +#if 0 && (ACC_OS_OS216) +#include +#else +ACC_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short); +ACC_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short); +#endif +#endif + +#if (__ACCLIB_HALLOC_USE_GA) +#if 0 +#define STRICT 1 +#include +#else +ACC_EXTERN_C const void __near* __far __pascal GlobalAlloc(unsigned, unsigned long); +ACC_EXTERN_C const void __near* __far __pascal GlobalFree(const void __near*); +ACC_EXTERN_C unsigned long __far __pascal GlobalHandle(unsigned); +ACC_EXTERN_C void __far* __far __pascal GlobalLock(const void __near*); +ACC_EXTERN_C int __far __pascal GlobalUnlock(const void __near*); +#endif +#endif + + /*********************************************************************** // halloc ************************************************************************/ @@ -36,7 +74,25 @@ ACCLIB_PUBLIC(acc_hvoid_p, acc_halloc) (acc_hsize_t size) if (size < (size_t) -1) p = malloc((size_t) size); #else -#if (ACC_CC_MSC && _MSC_VER >= 700) + if ((long)size <= 0) + return p; +{ +#if (__ACCLIB_HALLOC_USE_DAH) + unsigned short sel = 0; + if (DosAllocHuge((unsigned short)(size >> 16), (unsigned short)size, &sel, 0, 0) == 0) + p = (acc_hvoid_p) ACC_MK_FP(sel, 0); +#elif (__ACCLIB_HALLOC_USE_GA) + const void __near* h = GlobalAlloc(2, size); + if (h) { + p = GlobalLock(h); + if (p && ACC_FP_OFF(p) != 0) { + GlobalUnlock(h); + p = 0; + } + if (!p) + GlobalFree(h); + } +#elif (ACC_CC_MSC && (_MSC_VER >= 700)) p = _halloc(size, 1); #elif (ACC_CC_MSC || ACC_CC_WATCOMC) p = halloc(size, 1); @@ -50,6 +106,7 @@ ACCLIB_PUBLIC(acc_hvoid_p, acc_halloc) (acc_hsize_t size) if (size < (size_t) -1) p = malloc((size_t) size); #endif +} #endif return p; @@ -66,7 +123,18 @@ ACCLIB_PUBLIC(void, acc_hfree) (acc_hvoid_p p) #elif !defined(ACC_HAVE_MM_HUGE_PTR) free(p); #else -#if (ACC_CC_MSC && (_MSC_VER >= 700)) +#if (__ACCLIB_HALLOC_USE_DAH) + if (ACC_FP_OFF(p) == 0) + DosFreeSeg((unsigned short) ACC_FP_SEG(p)); +#elif (__ACCLIB_HALLOC_USE_GA) + if (ACC_FP_OFF(p) == 0) { + const void __near* h = (const void __near*) (unsigned) GlobalHandle(ACC_FP_SEG(p)); + if (h) { + GlobalUnlock(h); + GlobalFree(h); + } + } +#elif (ACC_CC_MSC && (_MSC_VER >= 700)) _hfree(p); #elif (ACC_CC_MSC || ACC_CC_WATCOMC) hfree(p); diff --git a/src/acc/acclib/misc.ch b/src/acc/acclib/misc.ch index c1b875a7..a2ced8a0 100644 --- a/src/acc/acclib/misc.ch +++ b/src/acc/acclib/misc.ch @@ -34,8 +34,10 @@ ACCLIB_PUBLIC(acclib_handle_t, acc_get_osfhandle) (int fd) #elif (ACC_OS_WIN32 && ACC_CC_GNUC) && defined(__PW32__) return -1; /* FIXME */ #elif (ACC_OS_WIN32 || ACC_OS_WIN64) -# if (ACC_CC_WATCOMC && (__WATCOMC__ < 1100)) +# if (ACC_CC_WATCOMC && (__WATCOMC__ < 1000)) return -1; /* FIXME */ +# elif (ACC_CC_WATCOMC && (__WATCOMC__ < 1100)) + return _os_handle(fd); # else return _get_osfhandle(fd); # endif @@ -48,8 +50,7 @@ ACCLIB_PUBLIC(acclib_handle_t, acc_get_osfhandle) (int fd) ACCLIB_PUBLIC(int, acc_set_binmode) (int fd, int binary) { #if (ACC_OS_TOS && defined(__MINT__)) - int old_binary; - FILE* fp; + FILE* fp; int old_binary; if (fd == STDIN_FILENO) fp = stdin; else if (fd == STDOUT_FILENO) fp = stdout; else if (fd == STDERR_FILENO) fp = stderr; @@ -64,37 +65,35 @@ ACCLIB_PUBLIC(int, acc_set_binmode) (int fd, int binary) ACC_UNUSED(fd); ACC_UNUSED(binary); return -1; /* FIXME */ #elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__) - int r; - unsigned old_flags = __djgpp_hwint_flags; + int r; unsigned old_flags = __djgpp_hwint_flags; ACC_COMPILE_TIME_ASSERT(O_BINARY > 0) ACC_COMPILE_TIME_ASSERT(O_TEXT > 0) - if (fd < 0) - return -1; + if (fd < 0) return -1; r = setmode(fd, binary ? O_BINARY : O_TEXT); if ((old_flags & 1u) != (__djgpp_hwint_flags & 1u)) __djgpp_set_ctrl_c(!(old_flags & 1)); - if (r == -1) - return -1; + if (r == -1) return -1; return (r & O_TEXT) ? 0 : 1; #elif (ACC_OS_WIN32 && ACC_CC_GNUC) && defined(__PW32__) if (fd < 0) return -1; ACC_UNUSED(binary); return 1; #elif (ACC_OS_DOS32 && ACC_CC_HIGHC) - int r; - FILE* fp; + FILE* fp; int r; if (fd == fileno(stdin)) fp = stdin; else if (fd == fileno(stdout)) fp = stdout; else if (fd == fileno(stderr)) fp = stderr; else return -1; r = _setmode(fp, binary ? _BINARY : _TEXT); - if (r == -1) - return -1; + if (r == -1) return -1; return (r & _BINARY) ? 1 : 0; #elif (ACC_OS_WIN32 && ACC_CC_MWERKS) && defined(__MSL__) ACC_UNUSED(fd); ACC_UNUSED(binary); return -1; /* FIXME */ -#elif (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64 || ACC_OS_CYGWIN || ACC_OS_EMX) +#elif (ACC_OS_CYGWIN && (ACC_CC_GNUC < 0x025a00ul)) + ACC_UNUSED(fd); ACC_UNUSED(binary); + return -1; /* FIXME */ +#elif (ACC_OS_CYGWIN || ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_EMX || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64) int r; #if !defined(ACC_CC_ZORTECHC) ACC_COMPILE_TIME_ASSERT(O_BINARY > 0) @@ -102,8 +101,7 @@ ACCLIB_PUBLIC(int, acc_set_binmode) (int fd, int binary) ACC_COMPILE_TIME_ASSERT(O_TEXT > 0) if (fd < 0) return -1; r = setmode(fd, binary ? O_BINARY : O_TEXT); - if (r == -1) - return -1; + if (r == -1) return -1; return (r & O_TEXT) ? 0 : 1; #else if (fd < 0) return -1; @@ -137,7 +135,7 @@ ACCLIB_PUBLIC(int, acc_isatty) (int fd) if ((ro.w.ax & 0x83) != 0x83) return 0; } -#elif (ACC_H_WINDOWS_H) +#elif (ACC_HAVE_WINDOWS_H) { acclib_handle_t h = __ACCLIB_FUNCNAME(acc_get_osfhandle)(fd); if ((HANDLE)h != INVALID_HANDLE_VALUE) diff --git a/src/acc/acclib/uclock.ch b/src/acc/acclib/uclock.ch index 82a18f77..e9034e42 100644 --- a/src/acc/acclib/uclock.ch +++ b/src/acc/acclib/uclock.ch @@ -21,7 +21,7 @@ #if (ACC_OS_DOS16 || ACC_OS_WIN16) #elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__) -#elif (ACC_OS_WIN32 || ACC_OS_WIN64) && (ACC_H_WINDOWS_H) +#elif (ACC_OS_CYGWIN || ACC_OS_WIN32 || ACC_OS_WIN64) && (ACC_HAVE_WINDOWS_H) # if defined(acc_int64l_t) /* See also: KB Q274323: PRB: Performance Counter Value May * Unexpectedly Leap Forward */ @@ -51,15 +51,19 @@ # endif # if (ACC_CC_DMC) # pragma DMC includelib "winmm.lib" -# elif (ACC_CC_INTELC || ACC_CC_MSC || ACC_CC_MWERKS) -# pragma comment(lib, "winmm") +# elif (ACC_CC_INTELC || ACC_CC_MSC) +# pragma comment(lib, "winmm.lib") +# elif (ACC_CC_MWERKS && (__MWERKS__ >= 0x3000)) +# pragma comment(lib, "winmm.lib") # elif (ACC_CC_SYMANTECC) # pragma SC includelib "winmm.lib" -# elif (ACC_CC_WATCOMC) +# elif (ACC_CC_WATCOMC && (__WATCOMC__ >= 1050)) # pragma library("winmm.lib") # endif # endif -#elif (ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_TOS || ACC_OS_WIN32 || ACC_OS_WIN64) +#elif (ACC_OS_EMX) && (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t) +# define __ACCLIB_UCLOCK_USE_QPC 1 +#elif (ACC_OS_CYGWIN || ACC_OS_DOS32 || ACC_OS_EMX || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_TOS || ACC_OS_WIN32 || ACC_OS_WIN64) # define __ACCLIB_UCLOCK_USE_CLOCK 1 #endif