src/sdl.cpp
author rubidium
Fri, 04 Jul 2008 19:00:11 +0000
changeset 11118 f66e0a4ce878
parent 10429 1b99254f9607
permissions -rw-r--r--
(svn r13676) -Fix [FS#2126]: inactive companies from old (TTD) saves could be marked active in some cases, which then loads garbage in their statistics and such.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2183
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2183
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: 6916
diff changeset
     3
/** @file sdl.cpp Implementation of SDL support. */
6916
e87d54a598ea (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents: 6573
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
2189
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
     6
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
     7
#ifdef WITH_SDL
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
     8
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1881
diff changeset
     9
#include "openttd.h"
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    10
#include "sdl.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    11
#include <SDL.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    12
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    13
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    14
#include <signal.h>
443
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    15
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    16
#ifdef __MORPHOS__
454
cf4f1bf2111f (svn r664) Fix warning on MorphOS
tron
parents: 444
diff changeset
    17
	// The system supplied definition of SIG_DFL is wrong on MorphOS
cf4f1bf2111f (svn r664) Fix warning on MorphOS
tron
parents: 444
diff changeset
    18
	#undef SIG_DFL
443
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    19
	#define SIG_DFL (void (*)(int))0
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    20
#endif
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    21
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    22
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    23
static int _sdl_usage;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    24
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    25
#ifdef DYNAMICALLY_LOADED_SDL
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    26
2183
6fba9150225b (svn r2697) Make compiling with SDL on Windows work again (missing #includes) and fix some warnings
tron
parents: 2171
diff changeset
    27
#include "win32.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    28
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    29
#define M(x) x "\0"
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
    30
static const char sdl_files[] =
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
	M("sdl.dll")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    32
	M("SDL_Init")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    33
	M("SDL_InitSubSystem")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    34
	M("SDL_GetError")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    35
	M("SDL_QuitSubSystem")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    36
	M("SDL_UpdateRect")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    37
	M("SDL_UpdateRects")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    38
	M("SDL_SetColors")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
	M("SDL_WM_SetCaption")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
	M("SDL_ShowCursor")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
	M("SDL_FreeSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    42
	M("SDL_PollEvent")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
	M("SDL_WarpMouse")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
	M("SDL_GetTicks")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
	M("SDL_OpenAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    46
	M("SDL_PauseAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
	M("SDL_CloseAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
	M("SDL_LockSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
	M("SDL_UnlockSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
	M("SDL_GetModState")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
	M("SDL_Delay")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    52
	M("SDL_Quit")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    53
	M("SDL_SetVideoMode")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
	M("SDL_EnableKeyRepeat")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    55
	M("SDL_EnableUNICODE")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
	M("SDL_VideoDriverName")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
	M("SDL_ListModes")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
	M("SDL_GetKeyState")
4256
877a6c0f4991 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    59
	M("SDL_LoadBMP_RW")
877a6c0f4991 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    60
	M("SDL_RWFromFile")
877a6c0f4991 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    61
	M("SDL_SetColorKey")
877a6c0f4991 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    62
	M("SDL_WM_SetIcon")
877a6c0f4991 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    63
	M("SDL_MapRGB")
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    64
	M("")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    65
;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    66
#undef M
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    67
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    68
SDLProcs sdl_proc;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    69
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 5835
diff changeset
    70
static const char *LoadSdlDLL()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    71
{
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    72
	if (sdl_proc.SDL_Init != NULL)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    73
		return NULL;
2903
db2cfe04de2e (svn r3458) -Fix: forgot one instance in last commit
truelight
parents: 2189
diff changeset
    74
	if (!LoadLibraryList((Function *)(void *)&sdl_proc, sdl_files))
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    75
		return "Unable to load sdl.dll";
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    76
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    77
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    78
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    79
#endif // DYNAMICALLY_LOADED_SDL
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    80
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    81
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    82
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    83
static void SdlAbort(int sig)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    84
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    85
	/* Own hand-made parachute for the cases of failed assertions. */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    86
	SDL_CALL SDL_Quit();
444
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    87
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    88
	switch (sig) {
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    89
		case SIGSEGV:
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    90
		case SIGFPE:
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    91
			signal(sig, SIG_DFL);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    92
			raise(sig);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    93
			break;
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    94
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    95
		default:
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    96
			break;
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    97
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    98
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    99
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   100
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   101
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
   102
const char* SdlOpen(uint32 x)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
{
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
   104
#ifdef DYNAMICALLY_LOADED_SDL
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   105
	{
1301
313804601383 (svn r1805) Teach the driver layer a few things about const correctness
tron
parents: 1299
diff changeset
   106
		const char *s = LoadSdlDLL();
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   107
		if (s != NULL) return s;
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   108
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   109
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   110
	if (_sdl_usage++ == 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   111
		if (SDL_CALL SDL_Init(x) == -1)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   112
			return SDL_CALL SDL_GetError();
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   113
	} else if (x != 0) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   114
		if (SDL_CALL SDL_InitSubSystem(x) == -1)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   115
			return SDL_CALL SDL_GetError();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   116
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   117
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   118
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   119
	signal(SIGABRT, SdlAbort);
444
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   120
	signal(SIGSEGV, SdlAbort);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   121
	signal(SIGFPE, SdlAbort);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   122
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   124
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   126
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
   127
void SdlClose(uint32 x)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   128
{
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   129
	if (x != 0)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   130
		SDL_CALL SDL_QuitSubSystem(x);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   131
	if (--_sdl_usage == 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   132
		SDL_CALL SDL_Quit();
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   133
		#ifdef UNIX
443
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
   134
		signal(SIGABRT, SIG_DFL);
444
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   135
		signal(SIGSEGV, SIG_DFL);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   136
		signal(SIGFPE, SIG_DFL);
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   137
		#endif
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   138
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   139
}
2189
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
   140
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
   141
#endif