sdl.c
author Darkvater
Thu, 26 Jan 2006 16:19:24 +0000
changeset 2887 d5967e472eee
parent 2189 d240b9097139
child 2903 db2cfe04de2e
permissions -rw-r--r--
(svn r3439) - CodeChange: Remove a whole bunch of global variables and put them into the WP() macro. Also combine more than one WP-custom element. For this the maximum size of w->custom (WP) has been increased, and multiple types put inside one with possibly moved to the corresponding gui file if it is only used there.
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;
2183
6fba9150225b (svn r2697) Make compiling with SDL on Windows work again (missing #includes) and fix some warnings
tron
parents: 2171
diff changeset
    67
	if (!LoadLibraryList((Function*)&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