src/stdafx.h
author Tero Marttila <terom@fixme.fi>
Fri, 18 Jul 2008 22:41:08 +0300
changeset 11177 6d9a43c48924
parent 10839 a62547c31fdb
permissions -rw-r--r--
set the GRFConfig's next ptr to NULL
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2125
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2125
diff changeset
     2
10429
1b99254f9607 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 10388
diff changeset
     3
/** @file stdafx.h Definition of base types and functions in a cross-platform compatible way. */
6916
e87d54a598ea (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents: 6611
diff changeset
     4
2436
177cb6a8339f (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2225
diff changeset
     5
#ifndef STDAFX_H
177cb6a8339f (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2225
diff changeset
     6
#define STDAFX_H
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
8869
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
     8
#if defined(__NDS__)
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
     9
	#include <nds/jtypes.h>
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    10
	/* NDS' types for uint32/int32 are based on longs, which causes
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    11
	 * trouble all over the place in OpenTTD. */
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    12
	#define uint32 uint32_ugly_hack
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    13
	#define int32 int32_ugly_hack
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    14
	typedef unsigned int uint32_ugly_hack;
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    15
	typedef signed int int32_ugly_hack;
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    16
#endif /* __NDS__ */
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
    17
6071
c37b45d0109b (svn r8382) -Fix (r8374): moved the include of stdint.h to the front of stdafx.h
bjarni
parents: 6063
diff changeset
    18
/* It seems that we need to include stdint.h before anything else
c37b45d0109b (svn r8382) -Fix (r8374): moved the include of stdint.h to the front of stdafx.h
bjarni
parents: 6063
diff changeset
    19
 * We need INT64_MAX, which for most systems comes from stdint.h. However, MSVC
c37b45d0109b (svn r8382) -Fix (r8374): moved the include of stdint.h to the front of stdafx.h
bjarni
parents: 6063
diff changeset
    20
 * does not have stdint.h and apparently neither does MorphOS, so define
8271
393440621fb9 (svn r11325) -Fix (r11312)[FS#1357]: [OSX] fixed compilation on OSX
bjarni
parents: 7901
diff changeset
    21
 * INT64_MAX for them ourselves.
393440621fb9 (svn r11325) -Fix (r11312)[FS#1357]: [OSX] fixed compilation on OSX
bjarni
parents: 7901
diff changeset
    22
 * Sometimes OSX headers manages to include stdint.h before this but without
393440621fb9 (svn r11325) -Fix (r11312)[FS#1357]: [OSX] fixed compilation on OSX
bjarni
parents: 7901
diff changeset
    23
 * __STDC_LIMIT_MACROS so it will be without INT64_*. We need to define those
393440621fb9 (svn r11325) -Fix (r11312)[FS#1357]: [OSX] fixed compilation on OSX
bjarni
parents: 7901
diff changeset
    24
 * too if this is the case. */
393440621fb9 (svn r11325) -Fix (r11312)[FS#1357]: [OSX] fixed compilation on OSX
bjarni
parents: 7901
diff changeset
    25
#if !defined(_MSC_VER) && !defined( __MORPHOS__) && !defined(_STDINT_H_)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    26
	#if defined(SUNOS)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    27
		/* SunOS/Solaris does not have stdint.h, but inttypes.h defines everything
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    28
		 * stdint.h defines and we need. */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    29
		#include <inttypes.h>
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    30
	# else
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    31
		#define __STDC_LIMIT_MACROS
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    32
		#include <stdint.h>
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    33
	#endif
6071
c37b45d0109b (svn r8382) -Fix (r8374): moved the include of stdint.h to the front of stdafx.h
bjarni
parents: 6063
diff changeset
    34
#else
9321
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    35
	#define UINT64_MAX (18446744073709551615ULL)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    36
	#define INT64_MAX  (9223372036854775807LL)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    37
	#define INT64_MIN  (-INT64_MAX - 1)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    38
	#define UINT32_MAX (4294967295U)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    39
	#define INT32_MAX  (2147483647)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    40
	#define INT32_MIN  (-INT32_MAX - 1)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    41
	#define UINT16_MAX (65535U)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    42
	#define INT16_MAX  (32767)
3bc631f0ef34 (svn r12573) -Codechange: use defined constants instead of numbers in math_func.hpp
smatz
parents: 9319
diff changeset
    43
	#define INT16_MIN  (-INT16_MAX - 1)
6071
c37b45d0109b (svn r8382) -Fix (r8374): moved the include of stdint.h to the front of stdafx.h
bjarni
parents: 6063
diff changeset
    44
#endif
c37b45d0109b (svn r8382) -Fix (r8374): moved the include of stdint.h to the front of stdafx.h
bjarni
parents: 6063
diff changeset
    45
6184
3cfe1dfa7a04 (svn r8572) -Fix: use the C++ version of the Standard C Library headers. This due to the fact that some stl headers will include them anyway and #undef several defines made in stdafx.h.
rubidium
parents: 6094
diff changeset
    46
#include <cstdio>
3cfe1dfa7a04 (svn r8572) -Fix: use the C++ version of the Standard C Library headers. This due to the fact that some stl headers will include them anyway and #undef several defines made in stdafx.h.
rubidium
parents: 6094
diff changeset
    47
#include <cstddef>
3cfe1dfa7a04 (svn r8572) -Fix: use the C++ version of the Standard C Library headers. This due to the fact that some stl headers will include them anyway and #undef several defines made in stdafx.h.
rubidium
parents: 6094
diff changeset
    48
#include <cstring>
3cfe1dfa7a04 (svn r8572) -Fix: use the C++ version of the Standard C Library headers. This due to the fact that some stl headers will include them anyway and #undef several defines made in stdafx.h.
rubidium
parents: 6094
diff changeset
    49
#include <cstdlib>
3cfe1dfa7a04 (svn r8572) -Fix: use the C++ version of the Standard C Library headers. This due to the fact that some stl headers will include them anyway and #undef several defines made in stdafx.h.
rubidium
parents: 6094
diff changeset
    50
#include <climits>
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
6185
be6627364fa3 (svn r8573) -Cleanup: obey the comment style in stdafx.h.
rubidium
parents: 6184
diff changeset
    52
/* MacOS X will use an NSAlert to display failed assertaions since they're lost unless running from a terminal
be6627364fa3 (svn r8573) -Cleanup: obey the comment style in stdafx.h.
rubidium
parents: 6184
diff changeset
    53
 * strgen always runs from terminal and don't need a window for asserts */
2731
97a409a62741 (svn r3276) reverted the last two commits. OSX 10.2 kept finding new stuff to prevent it from running OpenTTD, so now it's not supported anymore
bjarni
parents: 2730
diff changeset
    54
#if !defined(__APPLE__) || defined(STRGEN)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    55
	#include <cassert>
2223
29d61b962cb0 (svn r2741) -Feature: [OSX] added a window to display asserts on OSX (Tobin)
bjarni
parents: 2186
diff changeset
    56
#else
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    57
	#include "os/macosx/macos.h"
2223
29d61b962cb0 (svn r2741) -Feature: [OSX] added a window to display asserts on OSX (Tobin)
bjarni
parents: 2186
diff changeset
    58
#endif
29d61b962cb0 (svn r2741) -Feature: [OSX] added a window to display asserts on OSX (Tobin)
bjarni
parents: 2186
diff changeset
    59
858
329ff519fb45 (svn r1339) -Fix: compilation with networking works on MinGW32 again (thx orudge).
darkvater
parents: 796
diff changeset
    60
#if defined(UNIX) || defined(__MINGW32__)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    61
	#include <sys/types.h>
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    62
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
781
9717ff353c17 (svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents: 770
diff changeset
    64
#if defined(__OS2__)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    65
	#include <types.h>
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    66
	#define strcasecmp stricmp
781
9717ff353c17 (svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents: 770
diff changeset
    67
#endif
9717ff353c17 (svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents: 770
diff changeset
    68
6227
ab74f5faf662 (svn r8674) [PSP] -Add: added network code for PSP, based on the work of Turulo
truelight
parents: 6218
diff changeset
    69
#if defined(PSP)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    70
	#include <psptypes.h>
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    71
	#include <pspdebug.h>
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    72
	#include <pspthreadman.h>
446
20304ea8e94e (svn r655) Add the necessary bits to make building on SunOS/Solaris work
tron
parents: 425
diff changeset
    73
#endif
20304ea8e94e (svn r655) Add the necessary bits to make building on SunOS/Solaris work
tron
parents: 425
diff changeset
    74
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    75
#if defined(__BEOS__)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    76
	#include <SupportDefs.h>
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    77
#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    78
10388
e21a5b763f76 (svn r12930) -Add: build support for NetBSD and HP-UX. Patch by ahoka.
rubidium
parents: 10245
diff changeset
    79
#if defined(SUNOS) || defined(HPUX)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    80
	#include <alloca.h>
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    81
#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    82
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    83
#if defined(__MORPHOS__)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    84
	/* MorphOS defines certain Amiga defines per default, we undefine them
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    85
	 * here to make the rest of source less messy and more clear what is
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    86
	 * required for morphos and what for AmigaOS */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    87
	#if defined(amigaos)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    88
		#undef amigaos
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    89
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    90
	#if defined(__amigaos__)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    91
		#undef __amigaos__
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    92
	# endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    93
	#if defined(__AMIGA__)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    94
		#undef __AMIGA__
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    95
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    96
	#if defined(AMIGA)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    97
		#undef AMIGA
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    98
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
    99
	#if defined(amiga)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   100
		#undef amiga
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   101
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   102
	/* Act like we already included this file, as it somehow gives linkage problems
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   103
	 *  (mismatch linkage of C++ and C between this include and unistd.h). */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   104
	#define CLIB_USERGROUP_PROTOS_H
770
89dab23f04ca (svn r1236) MorphOS: added make release like in OSX (tokai)
bjarni
parents: 569
diff changeset
   105
#endif /* __MORPHOS__ */
89dab23f04ca (svn r1236) MorphOS: added make release like in OSX (tokai)
bjarni
parents: 569
diff changeset
   106
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   107
#if defined(__APPLE__)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   108
	#include "os/macosx/osx_stdafx.h"
3289
8c0707257253 (svn r4003) - Minor codebeautifier@work
Darkvater
parents: 3016
diff changeset
   109
#endif /* __APPLE__ */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   110
6218
89dc931b8d78 (svn r8647) -Codechange: add a general way to handle platforms who can only have a limited amount of file-descripters open at any given time.
truelight
parents: 6198
diff changeset
   111
#if defined(PSP)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   112
	/* PSP can only have 10 file-descriptors open at any given time, but this
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   113
	 *  switch only limits reads via the Fio system. So keep 2 fds free for things
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   114
	 *  like saving a game. */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   115
	#define LIMITED_FDS 8
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   116
	#define printf pspDebugScreenPrintf
6218
89dc931b8d78 (svn r8647) -Codechange: add a general way to handle platforms who can only have a limited amount of file-descripters open at any given time.
truelight
parents: 6198
diff changeset
   117
#endif /* PSP */
89dc931b8d78 (svn r8647) -Codechange: add a general way to handle platforms who can only have a limited amount of file-descripters open at any given time.
truelight
parents: 6198
diff changeset
   118
6185
be6627364fa3 (svn r8573) -Cleanup: obey the comment style in stdafx.h.
rubidium
parents: 6184
diff changeset
   119
/* by default we use [] var arrays */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   120
#define VARARRAY_SIZE
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   121
6185
be6627364fa3 (svn r8573) -Cleanup: obey the comment style in stdafx.h.
rubidium
parents: 6184
diff changeset
   122
/* Stuff for GCC */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
#if defined(__GNUC__)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   124
	#define NORETURN __attribute__ ((noreturn))
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   125
	#define FORCEINLINE inline
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   126
	#define CDECL
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   127
	#define __int64 long long
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   128
	#define GCC_PACK __attribute__((packed))
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   129
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   130
	#if (__GNUC__ == 2)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   131
		#undef VARARRAY_SIZE
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   132
		#define VARARRAY_SIZE 0
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   133
	#endif
2485
fd92a70a064a (svn r3011) Refix last revision's fix of VS6 which broke compilation on MinGW. Also beautify stdafx.h with nice indentation and comments after big #ifdef blocks. Hope it didn't break compilation on any OS's.
Darkvater
parents: 2483
diff changeset
   134
#endif /* __GNUC__ */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   135
781
9717ff353c17 (svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents: 770
diff changeset
   136
#if defined(__WATCOMC__)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   137
	#define NORETURN
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   138
	#define FORCEINLINE inline
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   139
	#define CDECL
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   140
	#define GCC_PACK
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   141
	#include <malloc.h>
2485
fd92a70a064a (svn r3011) Refix last revision's fix of VS6 which broke compilation on MinGW. Also beautify stdafx.h with nice indentation and comments after big #ifdef blocks. Hope it didn't break compilation on any OS's.
Darkvater
parents: 2483
diff changeset
   142
#endif /* __WATCOMC__ */
781
9717ff353c17 (svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents: 770
diff changeset
   143
796
42a3669a939f (svn r1266) -Fix: fix some cygwin/mingw warnings
darkvater
parents: 781
diff changeset
   144
#if defined(__MINGW32__) || defined(__CYGWIN__)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   145
	#include <malloc.h> // alloca()
796
42a3669a939f (svn r1266) -Fix: fix some cygwin/mingw warnings
darkvater
parents: 781
diff changeset
   146
#endif
42a3669a939f (svn r1266) -Fix: fix some cygwin/mingw warnings
darkvater
parents: 781
diff changeset
   147
10578
1b38dea6fa0b (svn r13122) -Fix: WIN32_LEAN_AND_MEAN define is needed for all WIN32 compilers
glx
parents: 10435
diff changeset
   148
#if defined(WIN32)
1b38dea6fa0b (svn r13122) -Fix: WIN32_LEAN_AND_MEAN define is needed for all WIN32 compilers
glx
parents: 10435
diff changeset
   149
	#define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers
1b38dea6fa0b (svn r13122) -Fix: WIN32_LEAN_AND_MEAN define is needed for all WIN32 compilers
glx
parents: 10435
diff changeset
   150
#endif
1b38dea6fa0b (svn r13122) -Fix: WIN32_LEAN_AND_MEAN define is needed for all WIN32 compilers
glx
parents: 10435
diff changeset
   151
6185
be6627364fa3 (svn r8573) -Cleanup: obey the comment style in stdafx.h.
rubidium
parents: 6184
diff changeset
   152
/* Stuff for MSVC */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   153
#if defined(_MSC_VER)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   154
	#pragma once
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   155
	/* Define a win32 target platform, to override defaults of the SDK
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   156
	 * We need to define NTDDI version for Vista SDK, but win2k is minimum */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   157
	#define NTDDI_VERSION NTDDI_WIN2K // Windows 2000
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   158
	#define _WIN32_WINNT 0x0500       // Windows 2000
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   159
	#define _WIN32_WINDOWS 0x400      // Windows 95
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   160
	#if !defined(WINCE)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   161
		#define WINVER 0x0400     // Windows NT 4.0 / Windows 95
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   162
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   163
	#define _WIN32_IE_ 0x0401         // 4.01 (win98 and NT4SP5+)
2695
395110265c87 (svn r3237) - CodeChange: remove silencing of some warnings. MSVC6 once again has some issues with enums, and other things as usual, so silence those still.
Darkvater
parents: 2694
diff changeset
   164
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   165
	#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   166
	#pragma warning(disable: 4761)  // integral size mismatch in argument : conversion supplied
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   167
	#pragma warning(disable: 4200)  // nonstandard extension used : zero-sized array in struct/union
2485
fd92a70a064a (svn r3011) Refix last revision's fix of VS6 which broke compilation on MinGW. Also beautify stdafx.h with nice indentation and comments after big #ifdef blocks. Hope it didn't break compilation on any OS's.
Darkvater
parents: 2483
diff changeset
   168
8905
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   169
	#if (_MSC_VER < 1400)                   // MSVC 2005 safety checks
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   170
		#error "Only MSVC 2005 or higher are supported. MSVC 2003 and earlier are not!. Upgrade your compiler."
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   171
	#endif /* (_MSC_VER < 1400) */
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   172
	#pragma warning(disable: 4996)   // 'strdup' was declared deprecated
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   173
	#define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   174
	#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
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   175
	#pragma warning(disable: 6011)   // code analyzer: Dereferencing NULL pointer 'pfGetAddrInfo': Lines: 995, 996, 998, 999, 1001
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   176
	#pragma warning(disable: 6326)   // code analyzer: potential comparison of a constant with another constant
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   177
	#pragma warning(disable: 6031)   // code analyzer: Return value ignored: 'ReadFile'
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   178
	#pragma warning(disable: 6255)   // code analyzer: _alloca indicates failure by raising a stack overflow exception. Consider using _malloca instead
a6974b6041d9 (svn r11979) -Codechange: drop MSVC 2003 support because MSVC 2003 is broken in such a manner that it triggers an internal compiler error without any clue what of the code is wrong. Even trying to bisect the problem does not give a single line of code that causes the trouble.
rubidium
parents: 8869
diff changeset
   179
	#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 ...
2694
99d88a9d5337 (svn r3236) - Fix: warnings about 'CDECL must be used with ...' on VS6
Darkvater
parents: 2639
diff changeset
   180
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   181
	#include <malloc.h> // alloca()
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   182
	#define NORETURN __declspec(noreturn)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   183
	#define FORCEINLINE __forceinline
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   184
	#define inline _inline
2694
99d88a9d5337 (svn r3236) - Fix: warnings about 'CDECL must be used with ...' on VS6
Darkvater
parents: 2639
diff changeset
   185
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   186
	#if !defined(WINCE)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   187
		#define CDECL _cdecl
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   188
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   189
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   190
	int CDECL snprintf(char *str, size_t size, const char *format, ...);
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   191
	#if (_MSC_VER < 1400) || defined(WINCE)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   192
		int CDECL vsnprintf(char *str, size_t size, const char *format, va_list ap);
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   193
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   194
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   195
	#if defined(WIN32) && !defined(_WIN64) && !defined(WIN64)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   196
		#if !defined(_W64)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   197
			#define _W64
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   198
		#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   199
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   200
		typedef _W64 int INT_PTR, *PINT_PTR;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   201
		typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   202
	#endif /* WIN32 && !_WIN64 && !WIN64 */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   203
10751
ebd94f2d6385 (svn r13301) -Fix [FS#1997]: resolve more MSVC 9 x64 warnings.
rubidium
parents: 10578
diff changeset
   204
	#if defined(_WIN64) || defined(WIN64)
ebd94f2d6385 (svn r13301) -Fix [FS#1997]: resolve more MSVC 9 x64 warnings.
rubidium
parents: 10578
diff changeset
   205
		#define fseek _fseeki64
ebd94f2d6385 (svn r13301) -Fix [FS#1997]: resolve more MSVC 9 x64 warnings.
rubidium
parents: 10578
diff changeset
   206
	#endif /* _WIN64 || WIN64 */
ebd94f2d6385 (svn r13301) -Fix [FS#1997]: resolve more MSVC 9 x64 warnings.
rubidium
parents: 10578
diff changeset
   207
ebd94f2d6385 (svn r13301) -Fix [FS#1997]: resolve more MSVC 9 x64 warnings.
rubidium
parents: 10578
diff changeset
   208
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   209
	#define GCC_PACK
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   210
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   211
	/* This is needed to zlib uses the stdcall calling convention on visual studio */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   212
	#if defined(WITH_ZLIB) || defined(WITH_PNG)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   213
		#if !defined(ZLIB_WINAPI)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   214
			#define ZLIB_WINAPI
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   215
		#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   216
	#endif
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   217
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   218
	#if defined(WINCE)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   219
		#define strcasecmp _stricmp
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   220
		#define strncasecmp _strnicmp
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   221
		#undef DEBUG
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   222
	#else
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   223
		#define strcasecmp stricmp
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   224
		#define strncasecmp strnicmp
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   225
	#endif
8547
41d5e08fff3b (svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
glx
parents: 8546
diff changeset
   226
41d5e08fff3b (svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
glx
parents: 8546
diff changeset
   227
	void SetExceptionString(const char* s, ...);
41d5e08fff3b (svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
glx
parents: 8546
diff changeset
   228
41d5e08fff3b (svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
glx
parents: 8546
diff changeset
   229
	#if defined(NDEBUG) && defined(WITH_ASSERT)
41d5e08fff3b (svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
glx
parents: 8546
diff changeset
   230
		#undef assert
41d5e08fff3b (svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
glx
parents: 8546
diff changeset
   231
		#define assert(expression) if (!(expression)) { SetExceptionString("Assertion failed at %s:%d: %s", __FILE__, __LINE__, #expression); *(byte*)0 = 0; }
41d5e08fff3b (svn r11611) -Codechange: it is now possible to use a define to enable asserts and show them in crash.log for MSVC release builds
glx
parents: 8546
diff changeset
   232
	#endif
2485
fd92a70a064a (svn r3011) Refix last revision's fix of VS6 which broke compilation on MinGW. Also beautify stdafx.h with nice indentation and comments after big #ifdef blocks. Hope it didn't break compilation on any OS's.
Darkvater
parents: 2483
diff changeset
   233
#endif /* defined(_MSC_VER) */
2483
ee0517ddfa92 (svn r3009) DIEEEEEEEEEEE VS6 (you good-for-nothing compiler)
Darkvater
parents: 2482
diff changeset
   234
6006
56ccbc3ec899 (svn r8306) [WinCE] -Fix: some functions don't exists in WinCE, so give an alternative where possible
truelight
parents: 5922
diff changeset
   235
#if defined(WINCE)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   236
	#define strdup _strdup
6006
56ccbc3ec899 (svn r8306) [WinCE] -Fix: some functions don't exists in WinCE, so give an alternative where possible
truelight
parents: 5922
diff changeset
   237
#endif /* WINCE */
56ccbc3ec899 (svn r8306) [WinCE] -Fix: some functions don't exists in WinCE, so give an alternative where possible
truelight
parents: 5922
diff changeset
   238
5167
2b9d61386688 (svn r7274) -Codechange [utf8]: Add input/output unicode support. This actually only changes win32
Darkvater
parents: 5138
diff changeset
   239
/* NOTE: the string returned by these functions is only valid until the next
2b9d61386688 (svn r7274) -Codechange [utf8]: Add input/output unicode support. This actually only changes win32
Darkvater
parents: 5138
diff changeset
   240
 * call to the same function and is not thread- or reentrancy-safe */
2b9d61386688 (svn r7274) -Codechange [utf8]: Add input/output unicode support. This actually only changes win32
Darkvater
parents: 5138
diff changeset
   241
#if !defined(STRGEN)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   242
	#if defined(WIN32) || defined(WIN64)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   243
		char *getcwd(char *buf, size_t size);
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   244
		#include <tchar.h>
6577
ee768d653dd0 (svn r9055) -Codechange: Change windows unicode handling and allow a pure non-unicode build to function. Win9x binaries will be possible with mingw/nightly system.
Darkvater
parents: 6559
diff changeset
   245
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   246
		/* XXX - WinCE without MSVCRT doesn't support wfopen, so it seems */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   247
		#if !defined(WINCE)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   248
			#define fopen(file, mode) _tfopen(OTTD2FS(file), _T(mode))
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   249
		#endif /* WINCE */
6577
ee768d653dd0 (svn r9055) -Codechange: Change windows unicode handling and allow a pure non-unicode build to function. Win9x binaries will be possible with mingw/nightly system.
Darkvater
parents: 6559
diff changeset
   250
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   251
		const char *FS2OTTD(const TCHAR *name);
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   252
		const TCHAR *OTTD2FS(const char *name);
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   253
	#else
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   254
		#define fopen(file, mode) fopen(OTTD2FS(file), mode)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   255
		const char *FS2OTTD(const char *name);
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   256
		const char *OTTD2FS(const char *name);
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   257
	#endif /* WIN32 */
5167
2b9d61386688 (svn r7274) -Codechange [utf8]: Add input/output unicode support. This actually only changes win32
Darkvater
parents: 5138
diff changeset
   258
#endif /* STRGEN */
2482
dffcca243dbc (svn r3008) [ 1247535 ] Native Support for Win64 (compile&run only) (michi_cc)
Darkvater
parents: 2436
diff changeset
   259
5842
180c71b8fc14 (svn r8042) - Fix: OS/2 compilation with GCC (thanks to Paul Smedley and TrueBrain for their help)
orudge
parents: 5838
diff changeset
   260
#if defined(WIN32) || defined(WIN64) || defined(__OS2__) && !defined(__INNOTEK_LIBC__)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   261
	#define PATHSEP "\\"
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   262
	#define PATHSEPCHAR '\\'
4379
2866185c1377 (svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents: 4316
diff changeset
   263
#else
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   264
	#define PATHSEP "/"
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   265
	#define PATHSEPCHAR '/'
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   266
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   267
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   268
typedef unsigned char byte;
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   269
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   270
/* This is already defined in unix, but not in QNX Neutrino (6.x)*/
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   271
#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__MORPHOS__)) || defined(__QNXNTO__)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   272
	typedef unsigned int uint;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   273
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   274
8869
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
   275
#if !defined(__BEOS__) && !defined(__NDS__) /* Already defined on BEOS and NDS */
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   276
	typedef unsigned char    uint8;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   277
	typedef   signed char     int8;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   278
	typedef unsigned short   uint16;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   279
	typedef   signed short    int16;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   280
	typedef unsigned int     uint32;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   281
	typedef   signed int      int32;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   282
	typedef unsigned __int64 uint64;
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   283
	typedef   signed __int64  int64;
8869
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
   284
#endif /* !__BEOS__ && !__NDS__ */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   285
7425
350b9265b7a2 (svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents: 7330
diff changeset
   286
#if !defined(WITH_PERSONAL_DIR)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   287
	#define PERSONAL_DIR ""
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   288
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   289
6185
be6627364fa3 (svn r8573) -Cleanup: obey the comment style in stdafx.h.
rubidium
parents: 6184
diff changeset
   290
/* Compile time assertions */
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   291
#if defined(__OS2__)
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   292
	#define assert_compile(expr)
781
9717ff353c17 (svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents: 770
diff changeset
   293
#else
10435
0e2b98df9707 (svn r12977) -Codechange: remove quite some redundant (duplicate) function declarations.
rubidium
parents: 10429
diff changeset
   294
	#define assert_compile(expr) extern const int __ct_assert__[1 - 2 * !(expr)]
3900
4984308f9125 (svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents: 3624
diff changeset
   295
#endif /* __OS2__ */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   296
9174
4a7b5962abd6 (svn r12344) -Codechange: Check uint64 bitsize on compiletime too.
skidd13
parents: 8905
diff changeset
   297
/* Check if the types have the bitsizes like we are using them */
4a7b5962abd6 (svn r12344) -Codechange: Check uint64 bitsize on compiletime too.
skidd13
parents: 8905
diff changeset
   298
assert_compile(sizeof(uint64) == 8);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   299
assert_compile(sizeof(uint32) == 4);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   300
assert_compile(sizeof(uint16) == 2);
2639
8a7342eb3a78 (svn r3181) -Bracing
tron
parents: 2485
diff changeset
   301
assert_compile(sizeof(uint8)  == 1);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   302
10435
0e2b98df9707 (svn r12977) -Codechange: remove quite some redundant (duplicate) function declarations.
rubidium
parents: 10429
diff changeset
   303
#define lengthof(x) (sizeof(x) / sizeof(x[0]))
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   304
#define endof(x) (&x[lengthof(x)])
1317
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents: 1022
diff changeset
   305
#define lastof(x) (&x[lengthof(x) - 1])
5922
510e1bbc5992 (svn r8131) -Fix (r8125): g++ warning: 'invalid access to non-static data member ?<class>::<member>? of NULL object'. It is weird, but renaming the 'offsetof' macro helped.
KUDr
parents: 5842
diff changeset
   306
10229
fba3f9fa44d7 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 9321
diff changeset
   307
#define cpp_offsetof(s, m)   (((size_t)&reinterpret_cast<const volatile char&>((((s*)(char*)8)->m))) - 8)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   308
#if !defined(offsetof)
10229
fba3f9fa44d7 (svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents: 9321
diff changeset
   309
	#define offsetof(s, m) cpp_offsetof(s, m)
6409
55217fea8342 (svn r8818) -Codechange: remove the #ifdef _cplusplus remnants.
rubidium
parents: 6227
diff changeset
   310
#endif /* offsetof */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   311
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   312
6185
be6627364fa3 (svn r8573) -Cleanup: obey the comment style in stdafx.h.
rubidium
parents: 6184
diff changeset
   313
/* take care of some name clashes on MacOS */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   314
#if defined(__APPLE__)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   315
	#define GetString OTTD_GetString
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   316
	#define DrawString OTTD_DrawString
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   317
	#define CloseConnection OTTD_CloseConnection
8622
b917f0b0dd6b (svn r11687) -Codechange: move some defines to a better place
skidd13
parents: 8619
diff changeset
   318
#endif /* __APPLE__ */
569
2e86ae517874 (svn r980) Fixed issues where MorphOS would get problems if AmigaOS would get a port, since MorphOS also have the flag __AMIGA__ defined (Tokai)
bjarni
parents: 543
diff changeset
   319
10839
a62547c31fdb (svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents: 10751
diff changeset
   320
void NORETURN CDECL usererror(const char *str, ...);
10245
e8220bd92071 (svn r12777) -Codechange: rename fatal() and error() in strgen, so it can always have the NORETURN attribute
smatz
parents: 10229
diff changeset
   321
void NORETURN CDECL error(const char *str, ...);
7118
2cc02ab0557d (svn r9842) -Codechange: now NOT_REACHED is also triggered when debugging is disabled.
rubidium
parents: 7020
diff changeset
   322
#define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__)
2cc02ab0557d (svn r9842) -Codechange: now NOT_REACHED is also triggered when debugging is disabled.
rubidium
parents: 7020
diff changeset
   323
8869
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
   324
#if defined(MORPHOS) || defined(__NDS__)
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
   325
	/* MorphOS and NDS don't have C++ conformant _stricmp... */
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   326
	#define _stricmp stricmp
7771
e6f9227cf0fc (svn r10605) -Fix [FS#1046]: also OpenBSD does not know wchar. Patch by Matthias.
rubidium
parents: 7762
diff changeset
   327
#elif defined(OPENBSD)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   328
	/* OpenBSD uses strcasecmp(3) */
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   329
	#define _stricmp strcasecmp
7771
e6f9227cf0fc (svn r10605) -Fix [FS#1046]: also OpenBSD does not know wchar. Patch by Matthias.
rubidium
parents: 7762
diff changeset
   330
#endif
e6f9227cf0fc (svn r10605) -Fix [FS#1046]: also OpenBSD does not know wchar. Patch by Matthias.
rubidium
parents: 7762
diff changeset
   331
8869
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
   332
#if !defined(MORPHOS) && !defined(OPENBSD) && !defined(__NDS__)
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
   333
	/* NDS, MorphOS & OpenBSD don't know wchars, the rest does :( */
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   334
	#define HAS_WCHAR
8869
1e62a45d7599 (svn r11939) -Codechange: some type fixes and very initial steps into supporting NDS by default. Based on work by Dominik.
rubidium
parents: 8788
diff changeset
   335
#endif /* !defined(MORPHOS) && !defined(OPENBSD) && !defined(__NDS__) */
7751
99bcdf28a226 (svn r10562) -Fix: most of the MorphOS issues; MorphOS doesn't know about wchars, so disable all code that has to use wchars for MorphOS.
rubidium
parents: 7650
diff changeset
   336
7762
03721db0ac1c (svn r10587) -Codechange: move the string/dparam related stuff from variables.h to strings.h
rubidium
parents: 7751
diff changeset
   337
#if !defined(MAX_PATH)
8500
39a092b5cc2f (svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
skidd13
parents: 8423
diff changeset
   338
	#define MAX_PATH 260
7762
03721db0ac1c (svn r10587) -Codechange: move the string/dparam related stuff from variables.h to strings.h
rubidium
parents: 7751
diff changeset
   339
#endif
03721db0ac1c (svn r10587) -Codechange: move the string/dparam related stuff from variables.h to strings.h
rubidium
parents: 7751
diff changeset
   340
8619
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8547
diff changeset
   341
/**
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8547
diff changeset
   342
 * The largest value that can be entered in a variable
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8547
diff changeset
   343
 * @param type the type of the variable
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8547
diff changeset
   344
 */
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8547
diff changeset
   345
#define MAX_UVALUE(type) ((type)~(type)0)
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8547
diff changeset
   346
2436
177cb6a8339f (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2225
diff changeset
   347
#endif /* STDAFX_H */