sdl.c
author matthijs
Wed, 22 Mar 2006 22:26:16 +0000
branch0.4.5
changeset 9958 bed516c67d61
parent 2903 db2cfe04de2e
child 4256 877a6c0f4991
permissions -rw-r--r--
(svn r4041) [Debian] Change next version number to 0.4.6 instead of 0.4.5.1.
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
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     3
#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
     4
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
     5
#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
     6
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1881
diff changeset
     7
#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
     8
#include "sdl.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     9
#include <SDL.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    10
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    11
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    12
#include <signal.h>
443
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    13
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    14
#ifdef __MORPHOS__
454
cf4f1bf2111f (svn r664) Fix warning on MorphOS
tron
parents: 444
diff changeset
    15
	// The system supplied definition of SIG_DFL is wrong on MorphOS
cf4f1bf2111f (svn r664) Fix warning on MorphOS
tron
parents: 444
diff changeset
    16
	#undef SIG_DFL
443
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    17
	#define SIG_DFL (void (*)(int))0
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    18
#endif
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    19
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    20
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    21
static int _sdl_usage;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    22
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    23
#ifdef DYNAMICALLY_LOADED_SDL
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    24
2183
6fba9150225b (svn r2697) Make compiling with SDL on Windows work again (missing #includes) and fix some warnings
tron
parents: 2171
diff changeset
    25
#include "win32.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    26
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    27
#define M(x) x "\0"
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
    28
static const char sdl_files[] =
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    29
	M("sdl.dll")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    30
	M("SDL_Init")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
	M("SDL_InitSubSystem")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    32
	M("SDL_GetError")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    33
	M("SDL_QuitSubSystem")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    34
	M("SDL_UpdateRect")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    35
	M("SDL_UpdateRects")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    36
	M("SDL_SetColors")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    37
	M("SDL_WM_SetCaption")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    38
	M("SDL_ShowCursor")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
	M("SDL_FreeSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
	M("SDL_PollEvent")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
	M("SDL_WarpMouse")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    42
	M("SDL_GetTicks")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
	M("SDL_OpenAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
	M("SDL_PauseAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
	M("SDL_CloseAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    46
	M("SDL_LockSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
	M("SDL_UnlockSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
	M("SDL_GetModState")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
	M("SDL_Delay")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
	M("SDL_Quit")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
	M("SDL_SetVideoMode")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    52
	M("SDL_EnableKeyRepeat")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    53
	M("SDL_EnableUNICODE")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
	M("SDL_VideoDriverName")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    55
	M("SDL_ListModes")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
	M("SDL_GetKeyState")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
	M("")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    59
#undef M
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    60
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    61
SDLProcs sdl_proc;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    62
1301
313804601383 (svn r1805) Teach the driver layer a few things about const correctness
tron
parents: 1299
diff changeset
    63
static const char *LoadSdlDLL(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    64
{
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    65
	if (sdl_proc.SDL_Init != NULL)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    66
		return NULL;
2903
db2cfe04de2e (svn r3458) -Fix: forgot one instance in last commit
truelight
parents: 2189
diff changeset
    67
	if (!LoadLibraryList((Function *)(void *)&sdl_proc, sdl_files))
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    68
		return "Unable to load sdl.dll";
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    69
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    70
}
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
#endif // DYNAMICALLY_LOADED_SDL
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    73
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    74
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    75
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    76
static void SdlAbort(int sig)
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
	/* 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
    79
	SDL_CALL SDL_Quit();
444
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    80
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    81
	switch (sig) {
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    82
		case SIGSEGV:
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    83
		case SIGFPE:
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    84
			signal(sig, SIG_DFL);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    85
			raise(sig);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    86
			break;
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
		default:
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    89
			break;
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    90
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    91
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    92
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    93
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    94
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    95
const char* SdlOpen(uint32 x)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    96
{
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
    97
#ifdef DYNAMICALLY_LOADED_SDL
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
    98
	{
1301
313804601383 (svn r1805) Teach the driver layer a few things about const correctness
tron
parents: 1299
diff changeset
    99
		const char *s = LoadSdlDLL();
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   100
		if (s != NULL) return s;
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   101
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   102
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
	if (_sdl_usage++ == 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   104
		if (SDL_CALL SDL_Init(x) == -1)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   105
			return SDL_CALL SDL_GetError();
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   106
	} else if (x != 0) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   107
		if (SDL_CALL SDL_InitSubSystem(x) == -1)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   108
			return SDL_CALL SDL_GetError();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   109
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   110
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   111
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   112
	signal(SIGABRT, SdlAbort);
444
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   113
	signal(SIGSEGV, SdlAbort);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   114
	signal(SIGFPE, SdlAbort);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   115
#endif
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
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   118
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   119
2171
008122046f7f (svn r2685) -Codechange: Split the music/sound/video drivers into separate files and move them into subfolders.
tron
parents: 2169
diff changeset
   120
void SdlClose(uint32 x)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   121
{
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   122
	if (x != 0)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
		SDL_CALL SDL_QuitSubSystem(x);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   124
	if (--_sdl_usage == 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
		SDL_CALL SDL_Quit();
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   126
		#ifdef UNIX
443
a45be556a111 (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
   127
		signal(SIGABRT, SIG_DFL);
444
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   128
		signal(SIGSEGV, SIG_DFL);
b4589ccaff3a (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   129
		signal(SIGFPE, SIG_DFL);
423
9e28d68fa333 (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   130
		#endif
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   131
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   132
}
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
   133
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
   134
#endif