15 #if defined(__APPLE__) 19 #if defined(__BEOS__) || defined(__HAIKU__) 20 #include <SupportDefs.h> 25 #elif defined(__NDS__) 26 #include <nds/jtypes.h> 34 #if !defined(__APPLE__) && (!defined(_MSC_VER) || _MSC_VER >= 1600) && !defined(__MORPHOS__) 40 #define __STDC_LIMIT_MACROS 46 #if !defined(UINT64_MAX) 47 #define UINT64_MAX (18446744073709551615ULL) 49 #if !defined(INT64_MAX) 50 #define INT64_MAX (9223372036854775807LL) 52 #if !defined(INT64_MIN) 53 #define INT64_MIN (-INT64_MAX - 1) 55 #if !defined(UINT32_MAX) 56 #define UINT32_MAX (4294967295U) 58 #if !defined(INT32_MAX) 59 #define INT32_MAX (2147483647) 61 #if !defined(INT32_MIN) 62 #define INT32_MIN (-INT32_MAX - 1) 64 #if !defined(UINT16_MAX) 65 #define UINT16_MAX (65535U) 67 #if !defined(INT16_MAX) 68 #define INT16_MAX (32767) 70 #if !defined(INT16_MIN) 71 #define INT16_MIN (-INT16_MAX - 1) 73 #if !defined(UINT8_MAX) 74 #define UINT8_MAX (255) 76 #if !defined(INT8_MAX) 77 #define INT8_MAX (127) 79 #if !defined(INT8_MIN) 80 #define INT8_MIN (-INT8_MAX - 1) 91 #define SIZE_MAX ((size_t)-1) 94 #if defined(UNIX) || defined(__MINGW32__) 95 #include <sys/types.h> 100 #define strcasecmp stricmp 103 #if defined(SUNOS) || defined(HPUX) 107 #if defined(__MORPHOS__) 114 #if defined(__amigaos__) 117 #if defined(__AMIGA__) 128 #define CLIB_USERGROUP_PROTOS_H 132 #if defined(__GNUC__) 133 #define NORETURN __attribute__ ((noreturn)) 135 #define __int64 long long 138 #define WARN_FORMAT(string, args) __attribute__ ((format (printf, string, args))) 139 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) 147 #if __cplusplus > 201402L // C++17 148 #define FALLTHROUGH [[fallthrough]] 150 #define FALLTHROUGH __attribute__((fallthrough)) 157 #if defined(__WATCOMC__) 160 #define WARN_FORMAT(string, args) 166 #if defined(__MINGW32__) || defined(__CYGWIN__) 171 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 175 #if defined(_MSC_VER) 179 #define NTDDI_VERSION NTDDI_WINXP // Windows XP 180 #define _WIN32_WINNT 0x501 // Windows XP 181 #define _WIN32_WINDOWS 0x501 // Windows XP 182 #define WINVER 0x0501 // Windows XP 183 #define _WIN32_IE_ 0x0600 // 6.0 (XP+) 187 #define NTDDI_VERSION NTDDI_WIN2K // Windows 2000 188 #define _WIN32_WINNT 0x0500 // Windows 2000 189 #define _WIN32_WINDOWS 0x400 // Windows 95 190 #define WINVER 0x0400 // Windows NT 4.0 / Windows 95 191 #define _WIN32_IE_ 0x0401 // 4.01 (win98 and NT4SP5+) 193 #define NOMINMAX // Disable min/max macros in windows.h. 195 #pragma warning(disable: 4244) // 'conversion' conversion from 'type1' to 'type2', possible loss of data 196 #pragma warning(disable: 4761) // integral size mismatch in argument : conversion supplied 197 #pragma warning(disable: 4200) // nonstandard extension used : zero-sized array in struct/union 198 #pragma warning(disable: 4355) // 'this' : used in base member initializer list 200 #if (_MSC_VER < 1400) // MSVC 2005 safety checks 201 #error "Only MSVC 2005 or higher are supported. MSVC 2003 and earlier are not! Upgrade your compiler." 203 #pragma warning(disable: 4291) // no matching operator delete found; memory will not be freed if initialization throws an exception (reason: our overloaded functions never throw an exception) 204 #pragma warning(disable: 4996) // 'function': was declared deprecated 205 #define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions 206 #pragma warning(disable: 6308) // code analyzer: 'realloc' might return null pointer: assigning null pointer to 't_ptr', which is passed as an argument to 'realloc', will cause the original memory block to be leaked 207 #pragma warning(disable: 6011) // code analyzer: Dereferencing NULL pointer 'pfGetAddrInfo': Lines: 995, 996, 998, 999, 1001 208 #pragma warning(disable: 6326) // code analyzer: potential comparison of a constant with another constant 209 #pragma warning(disable: 6031) // code analyzer: Return value ignored: 'ReadFile' 210 #pragma warning(disable: 6255) // code analyzer: _alloca indicates failure by raising a stack overflow exception. Consider using _malloca instead 211 #pragma warning(disable: 6246) // code analyzer: Local declaration of 'statspec' hides declaration of the same name in outer scope. For additional information, see previous declaration at ... 213 #if (_MSC_VER == 1500) // Addresses item #13 on http://blogs.msdn.com/b/vcblog/archive/2008/08/11/tr1-fixes-in-vc9-sp1.aspx, for Visual Studio 2008 214 #define _DO_NOT_DECLARE_INTERLOCKED_INTRINSICS_IN_MEMORY 219 #define NORETURN __declspec(noreturn) 220 #if (_MSC_VER < 1900) 221 #define inline __forceinline 225 #define WARN_FORMAT(string, args) 229 #if (_MSC_VER >= 1910) 230 #define FALLTHROUGH [[fallthrough]] 235 # if defined(_WIN32) && !defined(_WIN64) 240 typedef _W64
int INT_PTR, *PINT_PTR;
241 typedef _W64
unsigned int UINT_PTR, *PUINT_PTR;
245 #define fseek _fseeki64 249 # if defined(WITH_ZLIB) 250 # if !defined(ZEXPORT) 251 # define ZEXPORT CDECL 256 # if defined(WITH_FREETYPE) 257 # if !defined(FT_EXPORT) 258 # define FT_EXPORT( x ) extern "C" x CDECL 263 # if defined(WITH_LZMA) 264 # if !defined(LZMA_API_STATIC) 265 # define LZMA_API_STATIC 269 #define strcasecmp stricmp 270 #define strncasecmp strnicmp 271 #define strtoull _strtoui64 274 #define S_ISDIR(mode) (mode & S_IFDIR) 275 #define S_ISREG(mode) (mode & S_IFREG) 281 #define strsignal(sig) "" 285 #define SIGBUS SIGNOFP 290 #if !defined(STRGEN) && !defined(SETTINGSGEN) 292 char *getcwd(
char *buf,
size_t size);
296 namespace std { using ::_tfopen; }
297 #define fopen(file, mode) _tfopen(OTTD2FS(file), _T(mode)) 298 #define unlink(file) _tunlink(OTTD2FS(file)) 300 const char *
FS2OTTD(
const TCHAR *name);
301 const TCHAR *
OTTD2FS(
const char *name,
bool console_cp =
false);
303 #define fopen(file, mode) fopen(OTTD2FS(file), mode) 304 const char *
FS2OTTD(
const char *name);
305 const char *
OTTD2FS(
const char *name);
309 #if defined(_WIN32) || defined(__OS2__) && !defined(__INNOTEK_LIBC__) 311 #define PATHSEPCHAR '\\' 314 #define PATHSEPCHAR '/' 317 #if defined(_MSC_VER) || defined(__WATCOMC__) 318 # define PACK_N(type_dec, n) __pragma(pack(push, n)) type_dec; __pragma(pack(pop)) 319 #elif defined(__MINGW32__) 320 # define PRAGMA(x) _Pragma(#x) 321 # define PACK_N(type_dec, n) PRAGMA(pack(push, n)) type_dec; PRAGMA(pack(pop)) 323 # define PACK_N(type_dec, n) type_dec __attribute__((__packed__, aligned(n))) 325 #define PACK(type_dec) PACK_N(type_dec, 1) 328 #if defined(_MSC_VER) || defined(__MINGW32__) 329 # define OTTD_PRINTF64 "%I64d" 330 # define OTTD_PRINTFHEX64 "%I64x" 331 # define PRINTF_SIZE "%Iu" 332 # define PRINTF_SIZEX "%IX" 334 # define OTTD_PRINTF64 "%lld" 335 # define OTTD_PRINTFHEX64 "%llx" 336 # define PRINTF_SIZE "%zu" 337 # define PRINTF_SIZEX "%zX" 340 typedef unsigned char byte;
343 #if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__MORPHOS__)) || defined(__QNXNTO__) 344 typedef unsigned int uint;
347 #if defined(TROUBLED_INTS) 350 #define uint32 uint32_ugly_hack 351 #define int32 int32_ugly_hack 352 typedef unsigned int uint32_ugly_hack;
353 typedef signed int int32_ugly_hack;
355 typedef unsigned char uint8;
356 typedef signed char int8;
357 typedef unsigned short uint16;
358 typedef signed short int16;
359 typedef unsigned int uint32;
360 typedef signed int int32;
361 typedef unsigned __int64 uint64;
362 typedef signed __int64 int64;
365 #if !defined(WITH_PERSONAL_DIR) 366 #define PERSONAL_DIR "" 372 #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600) 373 #define assert_compile(expr) static_assert(expr, #expr ) 374 #define assert_tcompile(expr) assert_compile(expr) 375 #elif defined(__OS2__) 377 #define assert_compile(expr) 378 #define assert_tcompile(expr) assert_compile(expr) 380 #define assert_compile(expr) typedef int __ct_assert__[1 - 2 * !(expr)] 381 #define assert_tcompile(expr) assert(expr) 385 assert_compile(
sizeof(uint64) == 8);
386 assert_compile(
sizeof(uint32) == 4);
387 assert_compile(
sizeof(uint16) == 2);
388 assert_compile(
sizeof(uint8) == 1);
389 assert_compile(SIZE_MAX >= UINT32_MAX);
392 #define M_PI_2 1.57079632679489661923 393 #define M_PI 3.14159265358979323846 404 #define lengthof(x) (sizeof(x) / sizeof(x[0])) 412 #define endof(x) (&x[lengthof(x)]) 420 #define lastof(x) (&x[lengthof(x) - 1]) 422 #define cpp_offsetof(s, m) (((size_t)&reinterpret_cast<const volatile char&>((((s*)(char*)8)->m))) - 8) 423 #if !defined(offsetof) 424 #define offsetof(s, m) cpp_offsetof(s, m) 433 #define cpp_sizeof(base, variable) (sizeof(((base*)8)->variable)) 441 #define cpp_lengthof(base, variable) (cpp_sizeof(base, variable) / cpp_sizeof(base, variable[0])) 445 #if defined(__APPLE__) 446 #define GetString OTTD_GetString 447 #define DrawString OTTD_DrawString 448 #define CloseConnection OTTD_CloseConnection 451 void NORETURN CDECL
usererror(
const char *str, ...) WARN_FORMAT(1, 2);
452 void NORETURN CDECL error(const
char *str, ...) WARN_FORMAT(1, 2);
453 #define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__) 459 #if (defined(_MSC_VER) && defined(NDEBUG) && defined(WITH_ASSERT)) || (!defined(_MSC_VER) && !defined(NDEBUG) && !defined(_DEBUG)) 461 #define assert(expression) if (!(expression)) error("Assertion failed at line %i of %s: %s", __LINE__, __FILE__, #expression); 465 #if !defined(NDEBUG) || (defined(_MSC_VER) && defined(WITH_ASSERT)) 469 #if defined(MORPHOS) || defined(__NDS__) || defined(__DJGPP__) 471 #define _stricmp stricmp 472 #elif defined(OPENBSD) 474 #define _stricmp strcasecmp 477 #if defined(MAX_PATH) 479 #elif defined(PATH_MAX) && PATH_MAX > 0 481 #define MAX_PATH PATH_MAX 491 static inline void free(
const void *ptr)
493 free(const_cast<void *>(ptr));
500 #define MAX_UVALUE(type) ((type)~(type)0) 502 #if defined(_MSC_VER) && !defined(_DEBUG) 503 #define IGNORE_UNINITIALIZED_WARNING_START __pragma(warning(push)) __pragma(warning(disable:4700)) 504 #define IGNORE_UNINITIALIZED_WARNING_STOP __pragma(warning(pop)) 505 #elif defined(__GNUC__) && !defined(_DEBUG) 506 #define HELPER0(x) #x 507 #define HELPER1(x) HELPER0(GCC diagnostic ignored x) 508 #define HELPER2(y) HELPER1(#y) 509 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) 510 #define IGNORE_UNINITIALIZED_WARNING_START \ 511 _Pragma("GCC diagnostic push") \ 512 _Pragma(HELPER2(-Wuninitialized)) \ 513 _Pragma(HELPER2(-Wmaybe-uninitialized)) 514 #define IGNORE_UNINITIALIZED_WARNING_STOP _Pragma("GCC diagnostic pop") 518 #ifndef IGNORE_UNINITIALIZED_WARNING_START 519 #define IGNORE_UNINITIALIZED_WARNING_START 520 #define IGNORE_UNINITIALIZED_WARNING_STOP const char * FS2OTTD(const TCHAR *name)
Convert to OpenTTD's encoding from that of the local environment.
static void free(const void *ptr)
Version of the standard free that accepts const pointers.
void CDECL usererror(const char *s,...)
Error handling for fatal user errors.
const TCHAR * OTTD2FS(const char *name, bool console_cp)
Convert from OpenTTD's encoding to that of the local environment.
OSX is different on some places.