src/sdl.cpp
author truelight
Wed, 20 Jun 2007 12:09:47 +0000
changeset 6979 c4abd9b85a7a
parent 6420 456c275f3313
child 9111 48ce04029fe4
permissions -rw-r--r--
(svn r10235) -Fix: the 32bpp-anim blitter repainted pixel color 0, which is transparency and therefor should never be repainted (spotted by Rubidium)
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2183
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2183
diff changeset
     2
6420
456c275f3313 (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents: 6247
diff changeset
     3
/** @file sdl.cpp */
456c275f3313 (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents: 6247
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
2189
5cdc11ffeaa4 (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
5cdc11ffeaa4 (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
5cdc11ffeaa4 (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
862800791170 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1881
diff changeset
     9
#include "openttd.h"
2171
60334c9ca477 (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
157b031c03de (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    15
157b031c03de (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    16
#ifdef __MORPHOS__
454
82bc8d535ff4 (svn r664) Fix warning on MorphOS
tron
parents: 444
diff changeset
    17
	// The system supplied definition of SIG_DFL is wrong on MorphOS
82bc8d535ff4 (svn r664) Fix warning on MorphOS
tron
parents: 444
diff changeset
    18
	#undef SIG_DFL
443
157b031c03de (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
    19
	#define SIG_DFL (void (*)(int))0
157b031c03de (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
60334c9ca477 (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
b88b90aba8bc (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
5e29191a88a1 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    59
	M("SDL_LoadBMP_RW")
5e29191a88a1 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    60
	M("SDL_RWFromFile")
5e29191a88a1 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    61
	M("SDL_SetColorKey")
5e29191a88a1 (svn r5872) - Feature: Add an icon to the SDL openttd executable.
Darkvater
parents: 2903
diff changeset
    62
	M("SDL_WM_SetIcon")
5e29191a88a1 (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
60334c9ca477 (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
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 5584
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
60334c9ca477 (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
be4870228b9e (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
60334c9ca477 (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
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    87
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    88
	switch (sig) {
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    89
		case SIGSEGV:
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    90
		case SIGFPE:
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    91
			signal(sig, SIG_DFL);
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    92
			raise(sig);
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    93
			break;
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    94
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    95
		default:
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
    96
			break;
6590870379ad (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
60334c9ca477 (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
60334c9ca477 (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
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   105
	{
1301
bf64ba5b6774 (svn r1805) Teach the driver layer a few things about const correctness
tron
parents: 1299
diff changeset
   106
		const char *s = LoadSdlDLL();
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   107
		if (s != NULL) return s;
f99aa417225f (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
f99aa417225f (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
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   120
	signal(SIGSEGV, SdlAbort);
6590870379ad (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
60334c9ca477 (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
f99aa417225f (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
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   133
		#ifdef UNIX
443
157b031c03de (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
   134
		signal(SIGABRT, SIG_DFL);
444
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   135
		signal(SIGSEGV, SIG_DFL);
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   136
		signal(SIGFPE, SIG_DFL);
423
f99aa417225f (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
5cdc11ffeaa4 (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
5cdc11ffeaa4 (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