sdl.c
author darkvater
Tue, 04 Jan 2005 00:07:58 +0000
changeset 880 f3d9b97fff06
parent 810 a1494b19bd2a
child 902 8890bc153647
permissions -rw-r--r--
(svn r1365) -Fix: very, very nasty buffer overflow bug introduced with replace vehicles. You CANNOT access the i[255] of an array that only has 255 elements! I will kick the next person that does that so hard...goddammit (I only noticed it because it screwed up my console in the debug build and took me at least an hour to fix)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     1
#include "stdafx.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     2
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     3
#if defined(WITH_SDL)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     4
#include "ttd.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "gfx.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     6
#include "sound.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
#include "window.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     8
#include <SDL.h>
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     9
#include "player.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    10
#include "hal.h"
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 454
diff changeset
    11
#include "network.h"
0
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
#define DYNAMICALLY_LOADED_SDL
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    24
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    25
static SDL_Surface *_sdl_screen;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    26
static int _sdl_usage;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    27
static bool _all_modes;
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 MAX_DIRTY_RECTS 100
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    30
static SDL_Rect _dirty_rects[MAX_DIRTY_RECTS];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
static int _num_dirty_rects;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    32
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
    33
#define SDL_CALL
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    34
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    35
#if defined(DYNAMICALLY_LOADED_SDL) && defined(WIN32)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    36
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    37
bool LoadLibraryList(void **proc, const char *dll);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    38
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
typedef struct {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
	int (SDLCALL *SDL_Init)(Uint32);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
	int (SDLCALL *SDL_InitSubSystem)(Uint32);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    42
	char *(SDLCALL *SDL_GetError)();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
	void (SDLCALL *SDL_QuitSubSystem)(Uint32);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
	void (SDLCALL *SDL_UpdateRect)(SDL_Surface *, Sint32, Sint32, Uint32, Uint32);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
	void (SDLCALL *SDL_UpdateRects)(SDL_Surface *, int, SDL_Rect *);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    46
	int (SDLCALL *SDL_SetColors)(SDL_Surface *, SDL_Color *, int, int);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
	void (SDLCALL *SDL_WM_SetCaption)(const char *, const char *);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
	int (SDLCALL *SDL_ShowCursor)(int);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
	void (SDLCALL *SDL_FreeSurface)(SDL_Surface *);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
	int (SDLCALL *SDL_PollEvent)(SDL_Event *);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
	void (SDLCALL *SDL_WarpMouse)(Uint16, Uint16);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    52
	uint32 (SDLCALL *SDL_GetTicks)();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    53
	int (SDLCALL *SDL_OpenAudio)(SDL_AudioSpec *, SDL_AudioSpec*);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
	void (SDLCALL *SDL_PauseAudio)(int);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    55
	void (SDLCALL *SDL_CloseAudio)();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
	int (SDLCALL *SDL_LockSurface)(SDL_Surface*);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
	void (SDLCALL *SDL_UnlockSurface)(SDL_Surface*);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
	SDLMod (SDLCALL *SDL_GetModState)();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    59
	void (SDLCALL *SDL_Delay)(Uint32);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    60
	void (SDLCALL *SDL_Quit)();
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
    61
	SDL_Surface *(SDLCALL *SDL_SetVideoMode)(int, int, int, Uint32);
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
    62
	int (SDLCALL *SDL_EnableKeyRepeat)(int, int);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
	void (SDLCALL *SDL_EnableUNICODE)(int);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    64
	void (SDLCALL *SDL_VideoDriverName)(char *, int);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    65
	SDL_Rect **(SDLCALL *SDL_ListModes)(void *, int);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    66
	Uint8 *(SDLCALL *SDL_GetKeyState)(int *);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    67
} SDLProcs;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    68
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    69
#define M(x) x "\0"
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
    70
static const char sdl_files[] =
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    71
	M("sdl.dll")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    72
	M("SDL_Init")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    73
	M("SDL_InitSubSystem")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    74
	M("SDL_GetError")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    75
	M("SDL_QuitSubSystem")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    76
	M("SDL_UpdateRect")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    77
	M("SDL_UpdateRects")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    78
	M("SDL_SetColors")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    79
	M("SDL_WM_SetCaption")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    80
	M("SDL_ShowCursor")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    81
	M("SDL_FreeSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    82
	M("SDL_PollEvent")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    83
	M("SDL_WarpMouse")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    84
	M("SDL_GetTicks")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    85
	M("SDL_OpenAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    86
	M("SDL_PauseAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    87
	M("SDL_CloseAudio")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    88
	M("SDL_LockSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    89
	M("SDL_UnlockSurface")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    90
	M("SDL_GetModState")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    91
	M("SDL_Delay")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    92
	M("SDL_Quit")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    93
	M("SDL_SetVideoMode")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    94
	M("SDL_EnableKeyRepeat")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    95
	M("SDL_EnableUNICODE")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    96
	M("SDL_VideoDriverName")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    97
	M("SDL_ListModes")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    98
	M("SDL_GetKeyState")
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    99
	M("")
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
#undef M
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   102
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
static SDLProcs _proc;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   104
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   105
static char *LoadSdlDLL(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   106
{
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   107
	if (_proc.SDL_Init != NULL)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   108
		return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   109
	if (!LoadLibraryList((void**)&_proc, sdl_files))
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   110
		return "Unable to load sdl.dll";
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   111
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   112
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   113
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   114
#undef SDL_CALL
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   115
#define SDL_CALL _proc.
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
#endif
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
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   120
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   121
static void SdlAbort(int sig)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   122
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
	/* 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
   124
	SDL_CALL SDL_Quit();
444
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   125
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   126
	switch (sig) {
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   127
		case SIGSEGV:
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   128
		case SIGFPE:
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   129
			signal(sig, SIG_DFL);
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   130
			raise(sig);
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   131
			break;
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   132
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   133
		default:
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   134
			break;
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   135
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   136
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   137
#endif
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
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   140
static char *SdlOpen(uint32 x)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   141
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   142
#if defined(DYNAMICALLY_LOADED_SDL) && defined(WIN32)
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   143
	{
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   144
		char *s = LoadSdlDLL();
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   145
		if (s != NULL) return s;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   146
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   147
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   148
	if (_sdl_usage++ == 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   149
		if (SDL_CALL SDL_Init(x) == -1)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   150
			return SDL_CALL SDL_GetError();
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   151
	} else if (x != 0) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   152
		if (SDL_CALL SDL_InitSubSystem(x) == -1)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   153
			return SDL_CALL SDL_GetError();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   154
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   155
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   156
#ifdef UNIX
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   157
	signal(SIGABRT, SdlAbort);
444
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   158
	signal(SIGSEGV, SdlAbort);
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   159
	signal(SIGFPE, SdlAbort);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   160
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   161
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   162
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   163
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   164
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   165
static void SdlClose(uint32 x)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   166
{
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   167
	if (x != 0)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   168
		SDL_CALL SDL_QuitSubSystem(x);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   169
	if (--_sdl_usage == 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   170
		SDL_CALL SDL_Quit();
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   171
		#ifdef UNIX
443
157b031c03de (svn r652) Factorise special case for MorphOS regarding signal() handling
tron
parents: 435
diff changeset
   172
		signal(SIGABRT, SIG_DFL);
444
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   173
		signal(SIGSEGV, SIG_DFL);
6590870379ad (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky)
tron
parents: 443
diff changeset
   174
		signal(SIGFPE, SIG_DFL);
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   175
		#endif
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   176
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   177
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   178
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   179
static void SdlVideoMakeDirty(int left, int top, int width, int height)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   180
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   181
//	printf("(%d,%d)-(%d,%d)\n", left, top, width, height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   182
//	_pixels_redrawn += width*height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   183
	if (_num_dirty_rects < MAX_DIRTY_RECTS) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   184
		_dirty_rects[_num_dirty_rects].x = left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   185
		_dirty_rects[_num_dirty_rects].y = top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   186
		_dirty_rects[_num_dirty_rects].w = width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   187
		_dirty_rects[_num_dirty_rects].h = height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   188
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   189
	_num_dirty_rects++;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   190
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   191
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   192
static SDL_Color pal[256];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   193
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   194
static void UpdatePalette(uint start, uint end)
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   195
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   196
	uint i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   197
	byte *b;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   198
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   199
	for (i = start, b = _cur_palette + start * 3; i != end; i++, b += 3) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   200
		pal[i].r = b[0];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   201
		pal[i].g = b[1];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   202
		pal[i].b = b[2];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   203
		pal[i].unused = b[3];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   204
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   205
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   206
	SDL_CALL SDL_SetColors(_sdl_screen, pal, start, end);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   207
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   208
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   209
static void InitPalette(void)
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   210
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   211
	UpdatePalette(0, 256);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   212
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   213
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   214
static void CheckPaletteAnim(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   215
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   216
	if(_pal_last_dirty != -1) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   217
		UpdatePalette(_pal_first_dirty, _pal_last_dirty + 1);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   218
		_pal_last_dirty = -1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   219
	}
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   220
}
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   221
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   222
static void DrawSurfaceToScreen(void)
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   223
{
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   224
	int n = _num_dirty_rects;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   225
	if (n != 0) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   226
		_num_dirty_rects = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   227
		if (n > MAX_DIRTY_RECTS)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   228
			SDL_CALL SDL_UpdateRect(_sdl_screen, 0, 0, 0, 0);
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   229
		else
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   230
			SDL_CALL SDL_UpdateRects(_sdl_screen, n, _dirty_rects);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   231
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   232
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   233
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   234
static int CDECL compare_res(const void *pa, const void *pb)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   235
{
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 196
diff changeset
   236
	int x = ((const uint16*)pa)[0] - ((const uint16*)pb)[0];
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   237
	if (x != 0) return x;
222
b88456001397 (svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents: 196
diff changeset
   238
	return ((const uint16*)pa)[1] - ((const uint16*)pb)[1];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   239
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   240
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   241
static const uint16 default_resolutions[][2] = {
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   242
	{ 640,  480},
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   243
	{ 800,  600},
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   244
	{1024,  768},
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   245
	{1152,  864},
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   246
	{1280,  960},
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   247
	{1280, 1024},
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   248
	{1400, 1050},
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   249
	{1600, 1200}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   250
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   251
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   252
static void GetVideoModes(void)
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   253
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   254
	int i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   255
	SDL_Rect **modes;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   256
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   257
	modes = SDL_CALL SDL_ListModes(NULL, SDL_SWSURFACE + (_fullscreen ? SDL_FULLSCREEN : 0));
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   258
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   259
	if (modes == NULL)
245
4f6f81046437 (svn r246) -Fix: 64bit machine warnings for sdl.c (Tron)
darkvater
parents: 222
diff changeset
   260
		error("sdl: no modes available");
119
82c0f4713cad (svn r120) Fix: (SDL) same resolution was displayed more than once in game options
dominik
parents: 60
diff changeset
   261
245
4f6f81046437 (svn r246) -Fix: 64bit machine warnings for sdl.c (Tron)
darkvater
parents: 222
diff changeset
   262
	_all_modes = (modes == (void*)-1);
4f6f81046437 (svn r246) -Fix: 64bit machine warnings for sdl.c (Tron)
darkvater
parents: 222
diff changeset
   263
4f6f81046437 (svn r246) -Fix: 64bit machine warnings for sdl.c (Tron)
darkvater
parents: 222
diff changeset
   264
	if (_all_modes) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   265
		// all modes available, put some default ones here
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   266
		memcpy(_resolutions, default_resolutions, sizeof(default_resolutions));
245
4f6f81046437 (svn r246) -Fix: 64bit machine warnings for sdl.c (Tron)
darkvater
parents: 222
diff changeset
   267
		_num_resolutions = lengthof(default_resolutions);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   268
	} else {
128
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   269
		int n = 0;
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   270
		for (i = 0; modes[i]; i++) {
128
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   271
			int w = modes[i]->w;
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   272
			int h = modes[i]->h;
306
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   273
			if (IS_INT_INSIDE(w, 640, MAX_SCREEN_WIDTH + 1) &&
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   274
					IS_INT_INSIDE(h, 480, MAX_SCREEN_HEIGHT + 1)) {
128
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   275
				int j;
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   276
				for (j = 0; j < n; ++j)
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   277
					if (_resolutions[j][0] == w && _resolutions[j][1] == h)
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   278
						break;
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   279
				if (j == n) {
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   280
					_resolutions[n][0] = w;
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   281
					_resolutions[n][1] = h;
245
4f6f81046437 (svn r246) -Fix: 64bit machine warnings for sdl.c (Tron)
darkvater
parents: 222
diff changeset
   282
					if (++n == lengthof(_resolutions)) break;
128
28ebd80f6521 (svn r129) Fix: no more same multiple resolutions due to incorrect SDL implementation (Tron)
dominik
parents: 119
diff changeset
   283
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   284
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   285
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   286
		_num_resolutions = n;
245
4f6f81046437 (svn r246) -Fix: 64bit machine warnings for sdl.c (Tron)
darkvater
parents: 222
diff changeset
   287
		qsort(_resolutions, n, sizeof(_resolutions[0]), compare_res);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   288
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   289
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   290
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   291
static int GetAvailableVideoMode(int *w, int *h)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   292
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   293
	int i;
306
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   294
	int best;
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   295
	uint delta;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   296
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   297
	// all modes available?
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   298
	if (_all_modes)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   299
		return 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   300
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   301
	// is the wanted mode among the available modes?
306
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   302
	for (i = 0; i != _num_resolutions; i++) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   303
		if(*w == _resolutions[i][0] && *h == _resolutions[i][1])
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   304
			return 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   305
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   306
306
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   307
	// use the closest possible resolution
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   308
	best = 0;
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   309
	delta = abs((_resolutions[0][0] - *w) * (_resolutions[0][1] - *h));
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   310
	for (i = 1; i != _num_resolutions; ++i) {
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   311
		uint newdelta = abs((_resolutions[i][0] - *w) * (_resolutions[i][1] - *h));
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   312
		if (newdelta < delta) {
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   313
			best = i;
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   314
			delta = newdelta;
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   315
		}
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   316
	}
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   317
	*w = _resolutions[best][0];
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   318
	*h = _resolutions[best][1];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   319
	return 2;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   320
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   321
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   322
static bool CreateMainSurface(int w, int h)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   323
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   324
	SDL_Surface *newscreen;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   325
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   326
	GetAvailableVideoMode(&w, &h);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   327
798
8331baea2dc9 (svn r1268) -Fix: some warnings in gfx.c fixed
darkvater
parents: 643
diff changeset
   328
	DEBUG(misc, 1) ("sdl: using mode %dx%d", w, h);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   329
36
c1b3b884584e (svn r37) Do not change to HWSURFACE since it's not working!
darkvater
parents: 34
diff changeset
   330
	// DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   331
	newscreen = SDL_CALL SDL_SetVideoMode(w, h, 8, SDL_SWSURFACE | SDL_HWPALETTE | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE));
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   332
	if (newscreen == NULL)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   333
		return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   334
306
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   335
	_screen.width = newscreen->w;
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   336
	_screen.height = newscreen->h;
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   337
	_screen.pitch = newscreen->pitch;
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   338
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   339
	_sdl_screen = newscreen;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   340
	InitPalette();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   341
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   342
	SDL_CALL SDL_WM_SetCaption("OpenTTD", "OpenTTD");
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   343
	SDL_CALL SDL_ShowCursor(0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   344
306
9ba288cacf0a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
darkvater
parents: 302
diff changeset
   345
	GameSizeChanged();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   346
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   347
	return true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   348
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   349
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   350
typedef struct VkMapping {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   351
	uint16 vk_from;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   352
	byte vk_count;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   353
	byte map_to;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   354
} VkMapping;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   355
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   356
#define AS(x, z) {x, 0, z}
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   357
#define AM(x, y, z, w) {x, y - x, z}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   358
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   359
static const VkMapping _vk_mapping[] = {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   360
	// Pageup stuff + up/down
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   361
	AM(SDLK_PAGEUP, SDLK_PAGEDOWN, WKC_PAGEUP, WKC_PAGEDOWN),
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   362
	AS(SDLK_UP,			WKC_UP),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   363
	AS(SDLK_DOWN,		WKC_DOWN),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   364
	AS(SDLK_LEFT,		WKC_LEFT),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   365
	AS(SDLK_RIGHT,	WKC_RIGHT),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   366
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   367
	AS(SDLK_HOME,		WKC_HOME),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   368
	AS(SDLK_END,		WKC_END),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   369
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   370
	AS(SDLK_INSERT,	WKC_INSERT),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   371
	AS(SDLK_DELETE,	WKC_DELETE),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   372
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   373
	// Map letters & digits
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   374
	AM(SDLK_a, SDLK_z, 'A', 'Z'),
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   375
	AM(SDLK_0, SDLK_9, '0', '9'),
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   376
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   377
	AS(SDLK_ESCAPE,	WKC_ESC),
424
a3095d8c1c6a (svn r623) -Feature: [ 1066504 ] Pause key pauses the game
tron
parents: 423
diff changeset
   378
	AS(SDLK_PAUSE,  WKC_PAUSE),
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   379
	AS(SDLK_BACKSPACE,	WKC_BACKSPACE),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   380
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   381
	AS(SDLK_SPACE,		WKC_SPACE),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   382
	AS(SDLK_RETURN,		WKC_RETURN),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   383
	AS(SDLK_TAB,			WKC_TAB),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   384
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   385
	// Function keys
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   386
	AM(SDLK_F1, SDLK_F12, WKC_F1, WKC_F12),
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   387
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   388
	// Numeric part.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   389
	// What is the virtual keycode for numeric enter??
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   390
	AM(SDLK_KP0, SDLK_KP9, WKC_NUM_0, WKC_NUM_9),
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   391
	AS(SDLK_KP_DIVIDE,		WKC_NUM_DIV),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   392
	AS(SDLK_KP_MULTIPLY,	WKC_NUM_MUL),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   393
	AS(SDLK_KP_MINUS,			WKC_NUM_MINUS),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   394
	AS(SDLK_KP_PLUS,			WKC_NUM_PLUS),
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   395
	AS(SDLK_KP_ENTER,			WKC_NUM_ENTER),
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   396
	AS(SDLK_KP_PERIOD,		WKC_NUM_DECIMAL)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   397
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   398
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   399
static uint32 ConvertSdlKeyIntoMy(SDL_keysym *sym)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   400
{
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   401
	const VkMapping	*map;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   402
	uint key = 0;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   403
	for (map = _vk_mapping; map != endof(_vk_mapping); ++map) {
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   404
		if ((uint)(sym->sym - map->vk_from) <= map->vk_count) {
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   405
			key = sym->sym - map->vk_from + map->map_to;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   406
			break;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   407
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   408
	}
129
df1a60bc0d70 (svn r130) Change: hotkey for console is Backquote (the key left to '1', regardless of keyboard layout
dominik
parents: 128
diff changeset
   409
df1a60bc0d70 (svn r130) Change: hotkey for console is Backquote (the key left to '1', regardless of keyboard layout
dominik
parents: 128
diff changeset
   410
	// check scancode for BACKQUOTE key, because we want the key left of "1", not anything else (on non-US keyboards)
810
a1494b19bd2a (svn r1281) -Fix: the OS/2 is now finished. Fixes:
truelight
parents: 798
diff changeset
   411
#if defined(WIN32) || defined(__OS2__)
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   412
	if (sym->scancode == 41) key |= WKC_BACKQUOTE;
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   413
#elif defined(__APPLE__)
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   414
	if (sym->scancode == 10) key |= WKC_BACKQUOTE;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   415
#elif defined(__MORPHOS__)
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   416
	if (sym->scancode == 0)  key |= WKC_BACKQUOTE;  // yes, that key is code '0' under MorphOS :)
435
0623b29c5515 (svn r637) Add keycode for the key to open the console on BeOS
tron
parents: 424
diff changeset
   417
#elif defined(__BEOS__)
0623b29c5515 (svn r637) Add keycode for the key to open the console on BeOS
tron
parents: 424
diff changeset
   418
	if (sym->scancode == 17)  key |= WKC_BACKQUOTE;
570
7bf6ec3045c9 (svn r981) SunOS: fixed the hotkey for console (Oskar)
bjarni
parents: 543
diff changeset
   419
#elif defined(__SVR4) && defined(__sun)
7bf6ec3045c9 (svn r981) SunOS: fixed the hotkey for console (Oskar)
bjarni
parents: 543
diff changeset
   420
	if (sym->scancode == 60) key |= WKC_BACKQUOTE;
572
39524c0f9c3f (svn r983) SunOS: fixed backspace key (Oskar)
bjarni
parents: 570
diff changeset
   421
	if (sym->scancode == 49) key |= WKC_BACKSPACE;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   422
#else
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   423
	if (sym->scancode == 49) key |= WKC_BACKQUOTE;
135
638fb31434eb (svn r136) -Feature/Fix: Console Rev #2 and WKC_BACKQUOTE this patch adds new features to the ingame console and inserts a new keymanagement for windows pcs... (sign_de)
darkvater
parents: 129
diff changeset
   424
#endif
572
39524c0f9c3f (svn r983) SunOS: fixed backspace key (Oskar)
bjarni
parents: 570
diff changeset
   425
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   426
	// META are the command keys on mac
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   427
	if (sym->mod & KMOD_META) key |= WKC_META;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   428
	if (sym->mod & KMOD_SHIFT) key |= WKC_SHIFT;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   429
	if (sym->mod & KMOD_CTRL) key |= WKC_CTRL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   430
	if (sym->mod & KMOD_ALT) key |= WKC_ALT;
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   431
	// these two lines really help porting hotkey combos. Uncomment to use -- Bjarni
167
a38a34da7282 (svn r168) added a console hotkey on mac
bjarni
parents: 135
diff changeset
   432
	//printf("scancode character pressed %d\n", sym->scancode);
a38a34da7282 (svn r168) added a console hotkey on mac
bjarni
parents: 135
diff changeset
   433
	//printf("unicode character pressed %d\n", sym->unicode);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   434
	return (key << 16) + sym->unicode;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   435
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   436
643
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   437
void DoExitSave();
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   438
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   439
static int PollEvent(void)
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   440
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   441
	SDL_Event ev;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   442
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   443
	if (!SDL_CALL SDL_PollEvent(&ev))
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   444
		return -2;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   445
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   446
	switch (ev.type) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   447
	case SDL_MOUSEMOTION:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   448
		if (_cursor.fix_at) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   449
			int dx = ev.motion.x - _cursor.pos.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   450
			int dy = ev.motion.y - _cursor.pos.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   451
			if (dx != 0 || dy != 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   452
				_cursor.delta.x += dx;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   453
				_cursor.delta.y += dy;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   454
				SDL_CALL SDL_WarpMouse(_cursor.pos.x, _cursor.pos.y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   455
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   456
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   457
			_cursor.delta.x = ev.motion.x - _cursor.pos.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   458
			_cursor.delta.y = ev.motion.y - _cursor.pos.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   459
			_cursor.pos.x = ev.motion.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   460
			_cursor.pos.y = ev.motion.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   461
			_cursor.dirty = true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   462
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   463
		break;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   464
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   465
	case SDL_MOUSEBUTTONDOWN:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   466
		if (_rightclick_emulate && (SDL_CALL SDL_GetModState() & (KMOD_LCTRL | KMOD_RCTRL)))
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   467
			ev.button.button = SDL_BUTTON_RIGHT;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   468
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   469
		switch (ev.button.button) {
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   470
			case SDL_BUTTON_LEFT:
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   471
				_left_button_down = true;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   472
				break;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   473
			case SDL_BUTTON_RIGHT:
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   474
				_right_button_down = true;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   475
				_right_button_clicked = true;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   476
				break;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   477
#if !defined(WIN32)
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   478
			case SDL_BUTTON_WHEELUP:
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   479
				_cursor.wheel--;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   480
				break;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   481
			case SDL_BUTTON_WHEELDOWN:
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   482
				_cursor.wheel++;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   483
				break;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   484
#endif
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   485
			default:
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   486
				break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   487
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   488
		break;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   489
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   490
	case SDL_MOUSEBUTTONUP:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   491
		if (_rightclick_emulate) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   492
			_right_button_down = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   493
			_left_button_down = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   494
			_left_button_clicked = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   495
		} else if (ev.button.button == SDL_BUTTON_LEFT) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   496
			_left_button_down = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   497
			_left_button_clicked = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   498
		} else if (ev.button.button == SDL_BUTTON_RIGHT) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   499
			_right_button_down = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   500
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   501
		break;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   502
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   503
	case SDL_QUIT:
291
a2d7a83e2b55 (svn r297) Fix (SDL): Added a confirmation dialog when quitting the game
dominik
parents: 245
diff changeset
   504
		// do not ask to quit on the main screen
643
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   505
		if (_game_mode != GM_MENU) {
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   506
			if(_patches.autosave_on_exit) {
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   507
				DoExitSave();
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   508
				return ML_QUIT;
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   509
			} else
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   510
				AskExitGame();
a9c84d04eacb (svn r1076) Feature: Patch setting to autosave the game on exit
dominik
parents: 572
diff changeset
   511
		} else
291
a2d7a83e2b55 (svn r297) Fix (SDL): Added a confirmation dialog when quitting the game
dominik
parents: 245
diff changeset
   512
			return ML_QUIT;
a2d7a83e2b55 (svn r297) Fix (SDL): Added a confirmation dialog when quitting the game
dominik
parents: 245
diff changeset
   513
		break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   514
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   515
	case SDL_KEYDOWN:
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   516
		if ((ev.key.keysym.mod & (KMOD_ALT | KMOD_META)) &&
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   517
				(ev.key.keysym.sym == SDLK_RETURN || ev.key.keysym.sym == SDLK_f)) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   518
			_fullscreen ^= true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   519
			GetVideoModes();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   520
			CreateMainSurface(_screen.width, _screen.height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   521
			MarkWholeScreenDirty();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   522
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   523
			_pressed_key = ConvertSdlKeyIntoMy(&ev.key.keysym);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   524
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   525
		break;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   526
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   527
	case SDL_VIDEORESIZE: {
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   528
		int w = clamp(ev.resize.w, 64, MAX_SCREEN_WIDTH);
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   529
		int h = clamp(ev.resize.h, 64, MAX_SCREEN_HEIGHT);
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   530
		ChangeResInGame(w, h);
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   531
		break;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   532
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   533
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   534
	return -1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   535
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   536
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   537
static const char *SdlVideoStart(char **parm)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   538
{
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   539
	char buf[30];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   540
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   541
	const char *s = SdlOpen(SDL_INIT_VIDEO);
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   542
	if (s != NULL) return s;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   543
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   544
	SDL_CALL SDL_VideoDriverName(buf, 30);
798
8331baea2dc9 (svn r1268) -Fix: some warnings in gfx.c fixed
darkvater
parents: 643
diff changeset
   545
	DEBUG(misc, 1) ("sdl: using driver '%s'", buf);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   546
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   547
	GetVideoModes();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   548
	CreateMainSurface(_cur_resolution[0], _cur_resolution[1]);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   549
	MarkWholeScreenDirty();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   550
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   551
	SDL_CALL SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   552
	SDL_CALL SDL_EnableUNICODE(1);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   553
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   554
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   555
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   556
static void SdlVideoStop(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   557
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   558
	SdlClose(SDL_INIT_VIDEO);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   559
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   560
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   561
static int SdlVideoMainLoop(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   562
{
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   563
	uint32 next_tick = SDL_CALL SDL_GetTicks() + 30;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   564
	uint32 cur_ticks;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   565
	uint32 pal_tick = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   566
	int i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   567
	uint32 mod;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   568
	int numkeys;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   569
	Uint8 *keys;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   570
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   571
	for (;;) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   572
		InteractiveRandom(); // randomness
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   573
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   574
		while ((i = PollEvent()) == -1) {}
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   575
		if (i >= 0) return i;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   576
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   577
		if (_exit_game)	return ML_QUIT;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   578
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   579
		mod = SDL_CALL SDL_GetModState();
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   580
		keys = SDL_CALL SDL_GetKeyState(&numkeys);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   581
#if defined(_DEBUG)
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   582
		if (_shift_pressed)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   583
#else
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   584
		if (keys[SDLK_TAB])
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   585
#endif
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   586
		{
196
c4c33c0764a0 (svn r197) -Fix: Disable Fast Forward in network games visually (didn't work anyways, just showed graphical output)
darkvater
parents: 193
diff changeset
   587
			if (!_networking) _fast_forward |= 2;
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   588
		} else if (_fast_forward & 2) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   589
			_fast_forward = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   590
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   591
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   592
		cur_ticks = SDL_CALL SDL_GetTicks();
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   593
		if ((_fast_forward && !_pause) || cur_ticks > next_tick)
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   594
			next_tick = cur_ticks;
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   595
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   596
		if (cur_ticks == next_tick) {
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   597
			next_tick += 30;
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   598
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   599
			_ctrl_pressed = !!(mod & (KMOD_LCTRL | KMOD_RCTRL));
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   600
			_shift_pressed = !!(mod & (KMOD_LSHIFT | KMOD_RSHIFT));
302
8f4d0a7e47f0 (svn r308) Added debug hotkey 'caps lock' for sdl builds as well
dominik
parents: 291
diff changeset
   601
			_dbg_screen_rect = !!(mod & KMOD_CAPS);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   602
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   603
			// determine which directional keys are down
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   604
			_dirkeys =
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   605
				(keys[SDLK_LEFT]  ? 1 : 0) |
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   606
				(keys[SDLK_UP]    ? 2 : 0) |
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   607
				(keys[SDLK_RIGHT] ? 4 : 0) |
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   608
				(keys[SDLK_DOWN]  ? 8 : 0);
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   609
			GameLoop();
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   610
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   611
			_screen.dst_ptr = _sdl_screen->pixels;
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   612
			UpdateWindows();
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   613
			if (++pal_tick > 4) {
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   614
				CheckPaletteAnim();
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   615
				pal_tick = 1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   616
			}
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   617
 			DrawSurfaceToScreen();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   618
		} else {
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   619
			SDL_CALL SDL_Delay(1);
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   620
			_screen.dst_ptr = _sdl_screen->pixels;
543
946badd71033 (svn r942) -Merged branch/network back into the trunk
truelight
parents: 454
diff changeset
   621
			DrawTextMessage();
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   622
			DrawMouseCursor();
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   623
			DrawSurfaceToScreen();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   624
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   625
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   626
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   627
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   628
static bool SdlVideoChangeRes(int w, int h)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   629
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   630
	// see if the mode is available
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   631
	if (GetAvailableVideoMode(&w, &h) != 1)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   632
		return false;
18
7428dd7c5732 (svn r19) SDL performance fix fo palette animation and mouse jumping (jirif)
dominik
parents: 0
diff changeset
   633
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   634
	CreateMainSurface(w, h);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   635
	return true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   636
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   637
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   638
const HalVideoDriver _sdl_video_driver = {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   639
	SdlVideoStart,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   640
	SdlVideoStop,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   641
	SdlVideoMakeDirty,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   642
	SdlVideoMainLoop,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   643
	SdlVideoChangeRes,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   644
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   645
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   646
static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   647
{
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   648
	MxMixSamples(_mixer, stream, len / 4);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   649
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   650
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   651
static char *SdlSoundStart(char **parm)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   652
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   653
	SDL_AudioSpec spec;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 179
diff changeset
   654
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   655
	char *s = SdlOpen(SDL_INIT_AUDIO);
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   656
	if (s != NULL) return s;
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   657
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   658
	spec.freq = GetDriverParamInt(parm, "hz", 11025);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   659
	spec.format = AUDIO_S16SYS;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   660
	spec.channels = 2;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   661
	spec.samples = 512;
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   662
	spec.callback = fill_sound_buffer;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   663
	SDL_CALL SDL_OpenAudio(&spec, &spec);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   664
	SDL_CALL SDL_PauseAudio(0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   665
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   666
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   667
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   668
static void SdlSoundStop(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   669
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   670
	SDL_CALL SDL_CloseAudio();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   671
	SdlClose(SDL_INIT_AUDIO);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   672
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   673
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   674
const HalSoundDriver _sdl_sound_driver = {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   675
	SdlSoundStart,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   676
	SdlSoundStop,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   677
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   678
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   679
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   680
#if 0 /* XXX what the heck is that? */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   681
#include "viewport.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   682
void redsq_debug(int tile)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   683
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   684
	_thd.redsq = tile;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   685
	MarkWholeScreenDirty();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   686
	_screen.dst_ptr = _sdl_screen->pixels;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   687
	UpdateWindows();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   688
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   689
	SdlVideoMakeDirty(0,0,_screen.width,_screen.height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   690
	DrawSurfaceToScreen();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   691
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   692
410
0efd84450b01 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 306
diff changeset
   693
static void DbgRedraw()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   694
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   695
	SdlVideoMakeDirty(0,0,_screen.width,_screen.height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   696
	DrawSurfaceToScreen();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   697
}
423
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   698
#endif
f99aa417225f (svn r621) Merge r450 to trunk:
tron
parents: 410
diff changeset
   699
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   700
#endif // WITH_SDL