truelight@0: #if !defined(_STDAFX_H) truelight@0: #define _STDAFX_H truelight@0: truelight@0: #if defined(_MSC_VER) truelight@0: #pragma once truelight@0: truelight@0: #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers truelight@0: #pragma warning(disable: 4100) // parameter not used truelight@0: #pragma warning(disable: 4244) // conversion truelight@0: #pragma warning(disable: 4245) // conversion truelight@0: #pragma warning(disable: 4201) // nameless union truelight@0: #pragma warning(disable: 4514) // removed unref inline truelight@0: #pragma warning(disable: 4127) // constant conditional expression truelight@0: #pragma warning(disable: 4276) // MSVC BUG??? Complains about function body not declared when using function pointers truelight@0: #pragma warning(disable: 4761) // warning C4761: integral size mismatch in argument; conversion supplied truelight@0: #endif truelight@0: truelight@0: #include truelight@0: #include truelight@0: #include truelight@0: #include truelight@0: truelight@0: #if defined(UNIX) truelight@0: # include truelight@0: #endif truelight@0: truelight@781: #if defined(__OS2__) truelight@781: # include truelight@781: #endif truelight@781: truelight@0: #ifdef __BEOS__ truelight@0: #include truelight@0: #endif truelight@0: tron@446: #ifdef SUNOS tron@446: #include tron@446: #endif tron@446: bjarni@770: #ifdef __MORPHOS__ bjarni@770: // morphos defines certain amiga defines per default, we undefine them bjarni@770: // here to make the rest of source less messy and more clear what is bjarni@770: // required for morphos and what for amigaos bjarni@770: # ifdef amigaos bjarni@770: # undef amigaos bjarni@770: # endif bjarni@770: # ifdef __amigaos__ bjarni@770: # undef __amigaos__ bjarni@770: # endif bjarni@770: # ifdef __AMIGA__ bjarni@770: # undef __AMIGA__ bjarni@770: # endif bjarni@770: # ifdef AMIGA bjarni@770: # undef AMIGA bjarni@770: # endif bjarni@770: # ifdef amiga bjarni@770: # undef amiga bjarni@770: # endif bjarni@770: #endif /* __MORPHOS__ */ bjarni@770: truelight@0: #define BSWAP32(x) ((((x) >> 24) & 0xFF) | (((x) >> 8) & 0xFF00) | (((x) << 8) & 0xFF0000) | (((x) << 24) & 0xFF000000)) truelight@0: #define BSWAP16(x) ((x) >> 8 | (x) << 8) truelight@0: truelight@0: // by default we use [] var arrays truelight@0: #define VARARRAY_SIZE truelight@0: truelight@0: truelight@0: // Stuff for GCC truelight@0: #if defined(__GNUC__) truelight@0: # define NORETURN truelight@0: # define FORCEINLINE inline truelight@0: # define CDECL truelight@0: //#include truelight@0: //#include truelight@0: # define __int64 long long truelight@0: # define NOT_REACHED() truelight@0: # define GCC_PACK __attribute__((packed)) truelight@0: truelight@0: # if (__GNUC__ == 2) truelight@0: # undef VARARRAY_SIZE truelight@0: # define VARARRAY_SIZE 0 truelight@0: # endif truelight@0: #endif truelight@0: truelight@781: #if defined(__WATCOMC__) truelight@781: # define NORETURN truelight@781: # define FORCEINLINE inline truelight@781: # define CDECL truelight@781: # define NOT_REACHED() truelight@781: # define GCC_PACK truelight@781: # undef TTD_ALIGNMENT_4 truelight@781: # undef TTD_ALIGNMENT_2 truelight@781: truelight@781: # include truelight@781: #endif truelight@781: truelight@0: // Stuff for MSVC truelight@0: #if defined(_MSC_VER) truelight@0: # include // alloca() truelight@0: # define NORETURN __declspec(noreturn) truelight@0: # define FORCEINLINE __forceinline tron@500: # define inline _inline truelight@0: # define CDECL _cdecl truelight@0: # define NOT_REACHED() _assume(0) truelight@543: int snprintf(char *str, size_t size, const char *format, ...); truelight@543: int vsnprintf(char *str, size_t size, const char *format, va_list ap); truelight@0: # undef TTD_ALIGNMENT_4 truelight@0: # undef TTD_ALIGNMENT_2 truelight@0: # define GCC_PACK truelight@0: #endif truelight@0: truelight@157: // Windows has always LITTLE_ENDIAN truelight@781: #if defined(WIN32) || defined(__OS2__) truelight@157: #define TTD_LITTLE_ENDIAN truelight@157: #else truelight@157: // Else include endian.h, which has the endian-type, autodetected by the Makefile truelight@157: #include "endian.h" truelight@0: #endif truelight@0: truelight@0: #if defined(UNIX) truelight@0: #define PATHSEP "/" truelight@0: #else truelight@0: #define PATHSEP "\\" truelight@0: #endif truelight@0: truelight@0: truelight@0: typedef unsigned char byte; truelight@0: #ifndef __BEOS__ // already defined truelight@0: typedef unsigned char uint8; truelight@0: typedef unsigned short uint16; truelight@0: typedef unsigned int uint32; truelight@0: #endif truelight@0: truelight@0: // This is already defined in unix truelight@0: #if !defined(UNIX) && !defined(__CYGWIN__) truelight@0: typedef unsigned int uint; truelight@0: #endif truelight@543: // Not defined in QNX Neutrino (6.x) truelight@543: #if defined(__QNXNTO__) truelight@543: typedef unsigned int uint; truelight@543: #endif truelight@0: truelight@0: #ifndef __BEOS__ truelight@0: typedef signed char int8; truelight@0: typedef signed short int16; truelight@0: typedef signed int int32; truelight@0: #ifndef __cplusplus truelight@0: typedef unsigned char bool; truelight@0: #endif truelight@0: typedef signed __int64 int64; truelight@0: typedef unsigned __int64 uint64; truelight@0: #endif truelight@0: truelight@0: // Setup alignment and conversion macros truelight@0: #if defined(TTD_BIG_ENDIAN) signde@275: truelight@0: # define TTD_ALIGNMENT_2 truelight@0: # define TTD_ALIGNMENT_4 signde@275: tron@500: static inline uint32 TO_LE32(uint32 x) { return BSWAP32(x); } tron@500: static inline uint16 TO_LE16(uint16 x) { return BSWAP16(x); } tron@500: static inline uint32 FROM_LE32(uint32 x) { return BSWAP32(x); } tron@500: static inline uint16 FROM_LE16(uint16 x) { return BSWAP16(x); } signde@275: #define TO_BE32(x) x signde@275: #define TO_BE16(x) x signde@275: #define FROM_BE32(x) x signde@275: #define FROM_BE16(x) x truelight@193: #define TO_BE32X(x) x signde@275: truelight@0: #else signde@275: tron@536: static inline uint32 TO_BE32(uint32 x) { return BSWAP32(x); } tron@536: static inline uint16 TO_BE16(uint16 x) { return BSWAP16(x); } tron@536: static inline uint32 FROM_BE32(uint32 x) { return BSWAP32(x); } tron@536: static inline uint16 FROM_BE16(uint16 x) { return BSWAP16(x); } signde@275: #define TO_LE32(x) x signde@275: #define TO_LE16(x) x signde@275: #define TO_BE32X(x) BSWAP32(x) signde@275: #define FROM_LE32(x) x signde@275: #define FROM_LE16(x) x signde@275: truelight@0: #endif truelight@0: truelight@0: #if !defined(GAME_DATA_DIR) truelight@0: #define GAME_DATA_DIR "" truelight@0: #endif truelight@0: truelight@0: #if !defined(PERSONAL_DIR) truelight@0: #define PERSONAL_DIR "" truelight@0: #endif truelight@0: truelight@0: #ifndef __cplusplus truelight@0: #ifndef __BEOS__ truelight@0: enum { truelight@0: false = 0, truelight@0: true = 1, truelight@0: }; truelight@0: #endif truelight@0: #endif truelight@0: truelight@0: // Compile time assertions truelight@781: #ifdef __OS2__ truelight@781: # define assert_compile(expr) truelight@781: #else truelight@781: # define assert_compile(expr) void __ct_assert__(int a[1 - 2 * !(expr)]) truelight@781: #endif truelight@0: truelight@0: assert_compile(sizeof(uint32) == 4); truelight@0: assert_compile(sizeof(uint16) == 2); truelight@0: assert_compile(sizeof(uint8) == 1); truelight@0: truelight@0: #define lengthof(x) (sizeof(x)/sizeof(x[0])) truelight@0: #define endof(x) (&x[lengthof(x)]) truelight@0: #ifndef offsetof truelight@0: #define offsetof(s,m) (size_t)&(((s *)0)->m) truelight@0: #endif truelight@0: truelight@0: truelight@0: // take care of some name clashes on macos truelight@0: #if defined(__APPLE__) truelight@0: #define GetString OTTD_GetString truelight@0: #define DrawString OTTD_DrawString truelight@0: #define Random OTTD_Random truelight@543: #define CloseConnection OTTD_CloseConnection truelight@0: #endif truelight@0: bjarni@770: #ifdef __AMIGA__ bjarni@569: // it seems AmigaOS already have a Point declared bjarni@569: #define Point OTTD_AMIGA_POINT bjarni@569: #endif bjarni@569: truelight@0: #endif // !defined(_STDAFX_H)