mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			2260 lines
		
	
	
	
		
			64 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			2260 lines
		
	
	
	
		
			64 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff -ruN SDL-1.2.7-orig/src/audio/windib/SDL_dibaudio.c SDL-1.2.7/src/audio/windib/SDL_dibaudio.c
 | 
						|
--- SDL-1.2.7-orig/src/audio/windib/SDL_dibaudio.c	Wed Feb 18 09:22:00 2004
 | 
						|
+++ SDL-1.2.7/src/audio/windib/SDL_dibaudio.c	Thu Nov 18 12:07:29 2004
 | 
						|
@@ -146,8 +146,16 @@
 | 
						|
 
 | 
						|
 /* Set high priority for the audio thread */
 | 
						|
 static void DIB_ThreadInit(_THIS)
 | 
						|
-{
 | 
						|
-	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
 | 
						|
+{
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+#ifdef SH3
 | 
						|
+	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL);
 | 
						|
+#else
 | 
						|
+	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
 | 
						|
+#endif
 | 
						|
+#else
 | 
						|
+	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
 | 
						|
+#endif
 | 
						|
 }
 | 
						|
 
 | 
						|
 void DIB_WaitAudio(_THIS)
 | 
						|
diff -ruN SDL-1.2.7-orig/src/cpuinfo/SDL_cpuinfo.c SDL-1.2.7/src/cpuinfo/SDL_cpuinfo.c
 | 
						|
--- SDL-1.2.7-orig/src/cpuinfo/SDL_cpuinfo.c	Tue Feb 10 07:31:36 2004
 | 
						|
+++ SDL-1.2.7/src/cpuinfo/SDL_cpuinfo.c	Fri Nov 19 20:53:01 2004
 | 
						|
@@ -38,6 +38,10 @@
 | 
						|
 
 | 
						|
 #ifdef MACOSX
 | 
						|
 #include <sys/sysctl.h> /* For AltiVec check */
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+#if defined(_MSC_VER) && (defined(ARM) || defined(MIPS) || defined(SHx))
 | 
						|
+#undef _MSC_VER
 | 
						|
 #endif
 | 
						|
 
 | 
						|
 #define CPU_HAS_RDTSC	0x00000001
 | 
						|
diff -ruN SDL-1.2.7-orig/src/joystick/win32/SDL_mmjoystick.c SDL-1.2.7/src/joystick/win32/SDL_mmjoystick.c
 | 
						|
--- SDL-1.2.7-orig/src/joystick/win32/SDL_mmjoystick.c	Wed Feb 18 09:22:02 2004
 | 
						|
+++ SDL-1.2.7/src/joystick/win32/SDL_mmjoystick.c	Fri Nov 19 20:47:22 2004
 | 
						|
@@ -37,6 +37,7 @@
 | 
						|
 
 | 
						|
 #include <windows.h>
 | 
						|
 #include <mmsystem.h>
 | 
						|
+#include <regstr.h>
 | 
						|
 
 | 
						|
 #define MAX_JOYSTICKS	16
 | 
						|
 #define MAX_AXES	6	/* each joystick can have up to 6 axes */
 | 
						|
@@ -51,6 +52,7 @@
 | 
						|
 /* array to hold joystick ID values */
 | 
						|
 static UINT	SYS_JoystickID[MAX_JOYSTICKS];
 | 
						|
 static JOYCAPS	SYS_Joystick[MAX_JOYSTICKS];
 | 
						|
+static char	*SYS_JoystickName[MAX_JOYSTICKS];
 | 
						|
 
 | 
						|
 /* The private structure used to keep track of a joystick */
 | 
						|
 struct joystick_hwdata
 | 
						|
@@ -69,6 +71,78 @@
 | 
						|
 /* Convert a win32 Multimedia API return code to a text message */
 | 
						|
 static void SetMMerror(char *function, int code);
 | 
						|
 
 | 
						|
+static char *GetJoystickName(int index, const char *szRegKey)
 | 
						|
+{
 | 
						|
+	/* added 7/24/2004 by Eckhard Stolberg */
 | 
						|
+	/*
 | 
						|
+		see if there is a joystick for the current
 | 
						|
+		index (1-16) listed in the registry
 | 
						|
+	*/
 | 
						|
+	char *name = NULL;
 | 
						|
+	HKEY hKey;
 | 
						|
+	DWORD regsize;
 | 
						|
+	LONG regresult;
 | 
						|
+	unsigned char regkey[256];
 | 
						|
+	unsigned char regvalue[256];
 | 
						|
+	unsigned char regname[256];
 | 
						|
+
 | 
						|
+	sprintf(regkey, "%s\\%s\\%s",
 | 
						|
+		REGSTR_PATH_JOYCONFIG,
 | 
						|
+		szRegKey,
 | 
						|
+		REGSTR_KEY_JOYCURR);
 | 
						|
+	regresult = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
 | 
						|
+		(LPTSTR) ®key, 0, KEY_READ, &hKey);
 | 
						|
+	if (regresult == ERROR_SUCCESS)
 | 
						|
+	{
 | 
						|
+		/*
 | 
						|
+			find the registry key name for the
 | 
						|
+			joystick's properties
 | 
						|
+		*/
 | 
						|
+		regsize = sizeof(regname);
 | 
						|
+		sprintf(regvalue,
 | 
						|
+			"Joystick%d%s", index+1,
 | 
						|
+			REGSTR_VAL_JOYOEMNAME);
 | 
						|
+		regresult = RegQueryValueExA(hKey,
 | 
						|
+			regvalue, 0, 0, (LPBYTE) ®name,
 | 
						|
+			(LPDWORD) ®size);
 | 
						|
+		RegCloseKey(hKey);
 | 
						|
+		if (regresult == ERROR_SUCCESS)
 | 
						|
+		{
 | 
						|
+			/* open that registry key */
 | 
						|
+			sprintf(regkey, "%s\\%s",
 | 
						|
+				REGSTR_PATH_JOYOEM, regname);
 | 
						|
+			regresult = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
 | 
						|
+				regkey, 0, KEY_READ, &hKey);
 | 
						|
+			if (regresult == ERROR_SUCCESS)
 | 
						|
+			{
 | 
						|
+				/* find the size for the OEM name text */
 | 
						|
+				regsize = sizeof(regvalue);
 | 
						|
+				regresult =
 | 
						|
+					RegQueryValueExA(hKey,
 | 
						|
+					REGSTR_VAL_JOYOEMNAME,
 | 
						|
+					0, 0, NULL,
 | 
						|
+					(LPDWORD) ®size);
 | 
						|
+				if (regresult == ERROR_SUCCESS)
 | 
						|
+				{
 | 
						|
+					/*
 | 
						|
+						allocate enough memory
 | 
						|
+						for the OEM name text ...
 | 
						|
+					*/
 | 
						|
+					name = (char *) malloc(regsize);
 | 
						|
+					/* ... and read it from the registry */
 | 
						|
+					regresult =
 | 
						|
+						RegQueryValueExA(hKey,
 | 
						|
+						REGSTR_VAL_JOYOEMNAME, 0, 0,
 | 
						|
+						(LPBYTE) name,
 | 
						|
+						(LPDWORD) ®size);
 | 
						|
+					RegCloseKey(hKey);
 | 
						|
+				}
 | 
						|
+			}
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+	return(name);
 | 
						|
+}
 | 
						|
+
 | 
						|
 
 | 
						|
 /* Function to scan the system for joysticks.
 | 
						|
  * This function should set SDL_numjoysticks to the number of available
 | 
						|
@@ -94,6 +168,7 @@
 | 
						|
 
 | 
						|
 	for ( i = 0; i < MAX_JOYSTICKS; i++ ) {
 | 
						|
 		SYS_JoystickID[i] = JOYSTICKID1 + i;
 | 
						|
+		SYS_JoystickName[i] = NULL;
 | 
						|
 	}
 | 
						|
 
 | 
						|
 
 | 
						|
@@ -110,6 +185,7 @@
 | 
						|
 			if ( result == JOYERR_NOERROR ) {
 | 
						|
 				SYS_JoystickID[numdevs] = SYS_JoystickID[i];
 | 
						|
 				SYS_Joystick[numdevs] = joycaps;
 | 
						|
+				SYS_JoystickName[numdevs] = GetJoystickName(numdevs, joycaps.szRegKey);
 | 
						|
 				numdevs++;
 | 
						|
 			}
 | 
						|
 		}
 | 
						|
@@ -120,8 +196,11 @@
 | 
						|
 /* Function to get the device-dependent name of a joystick */
 | 
						|
 const char *SDL_SYS_JoystickName(int index)
 | 
						|
 {
 | 
						|
-	/***-> test for invalid index ? */
 | 
						|
+	if ( SYS_JoystickName[index] != NULL ) {
 | 
						|
+		return(SYS_JoystickName[index]);
 | 
						|
+	} else {
 | 
						|
 	return(SYS_Joystick[index].szPname);
 | 
						|
+	}
 | 
						|
 }
 | 
						|
 
 | 
						|
 /* Function to open a joystick for use.
 | 
						|
@@ -292,7 +371,12 @@
 | 
						|
 /* Function to perform any system-specific joystick related cleanup */
 | 
						|
 void SDL_SYS_JoystickQuit(void)
 | 
						|
 {
 | 
						|
-	return;
 | 
						|
+	int i;
 | 
						|
+	for (i = 0; i < MAX_JOYSTICKS; i++) {
 | 
						|
+		if ( SYS_JoystickName[i] != NULL ) {
 | 
						|
+			free(SYS_JoystickName[i]);
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
 }
 | 
						|
 
 | 
						|
 
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/SDL_sysvideo.h SDL-1.2.7/src/video/SDL_sysvideo.h
 | 
						|
--- SDL-1.2.7-orig/src/video/SDL_sysvideo.h	Wed Feb 18 09:22:04 2004
 | 
						|
+++ SDL-1.2.7/src/video/SDL_sysvideo.h	Thu Nov 18 12:08:48 2004
 | 
						|
@@ -361,6 +361,9 @@
 | 
						|
 #endif
 | 
						|
 #ifdef ENABLE_WINDIB
 | 
						|
 extern VideoBootStrap WINDIB_bootstrap;
 | 
						|
+#endif
 | 
						|
+#ifdef ENABLE_WINGAPI
 | 
						|
+extern VideoBootStrap WINGAPI_bootstrap;
 | 
						|
 #endif
 | 
						|
 #ifdef ENABLE_DIRECTX
 | 
						|
 extern VideoBootStrap DIRECTX_bootstrap;
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/SDL_video.c SDL-1.2.7/src/video/SDL_video.c
 | 
						|
--- SDL-1.2.7-orig/src/video/SDL_video.c	Wed Feb 18 09:22:04 2004
 | 
						|
+++ SDL-1.2.7/src/video/SDL_video.c	Thu Nov 18 12:11:01 2004
 | 
						|
@@ -80,6 +80,9 @@
 | 
						|
 #endif
 | 
						|
 #ifdef ENABLE_DIRECTX
 | 
						|
 	&DIRECTX_bootstrap,
 | 
						|
+#endif
 | 
						|
+#ifdef ENABLE_WINGAPI
 | 
						|
+	&WINGAPI_bootstrap,
 | 
						|
 #endif
 | 
						|
 #ifdef ENABLE_WINDIB
 | 
						|
 	&WINDIB_bootstrap,
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/wincommon/SDL_sysevents.c SDL-1.2.7/src/video/wincommon/SDL_sysevents.c
 | 
						|
--- SDL-1.2.7-orig/src/video/wincommon/SDL_sysevents.c	Wed Feb 18 09:22:10 2004
 | 
						|
+++ SDL-1.2.7/src/video/wincommon/SDL_sysevents.c	Thu Nov 18 12:28:03 2004
 | 
						|
@@ -40,6 +40,9 @@
 | 
						|
 #include "SDL_lowvideo.h"
 | 
						|
 #include "SDL_syswm_c.h"
 | 
						|
 #include "SDL_main.h"
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+#include "SDL_dibvideo.h"
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 #ifdef WMMSG_DEBUG
 | 
						|
 #include "wmmsg.h"
 | 
						|
@@ -173,6 +176,39 @@
 | 
						|
 	SDL_SetModState(state);
 | 
						|
 #endif /* !NO_GETKEYBOARDSTATE */
 | 
						|
 }
 | 
						|
+
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+void transform(SDL_RotateAttr rotate, char ozone, Sint16 *x, Sint16 *y) {
 | 
						|
+	Sint16 rotatedX;
 | 
						|
+	Sint16 rotatedY;
 | 
						|
+
 | 
						|
+	if (ozone) {
 | 
						|
+		*x = *x * 2;
 | 
						|
+		*y = *y * 2;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	switch(rotate) {
 | 
						|
+		case SDL_ROTATE_NONE:
 | 
						|
+			break;
 | 
						|
+		case SDL_ROTATE_LEFT:
 | 
						|
+			if (!SDL_VideoSurface)
 | 
						|
+				break;
 | 
						|
+			rotatedX = SDL_VideoSurface->w - *y;
 | 
						|
+			rotatedY = *x;
 | 
						|
+			*x = rotatedX;
 | 
						|
+			*y = rotatedY;
 | 
						|
+			break;
 | 
						|
+		case SDL_ROTATE_RIGHT:
 | 
						|
+			if (!SDL_VideoSurface)
 | 
						|
+				break;
 | 
						|
+			rotatedX = *y;
 | 
						|
+			rotatedY = SDL_VideoSurface->h - *x;
 | 
						|
+			*x = rotatedX;
 | 
						|
+			*y = rotatedY;
 | 
						|
+			break;
 | 
						|
+	}
 | 
						|
+}
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 /* The main Win32 event handler
 | 
						|
 DJM: This is no longer static as (DX5/DIB)_CreateWindow needs it
 | 
						|
@@ -273,7 +309,11 @@
 | 
						|
 						SetCursorPos(center.x, center.y);
 | 
						|
 						posted = SDL_PrivateMouseMotion(0, 1, x, y);
 | 
						|
 					}
 | 
						|
-				} else {
 | 
						|
+				} else {
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+					if (SDL_VideoSurface)
 | 
						|
+						transform(rotation, ozoneHack, &x, &y);
 | 
						|
+#endif
 | 
						|
 					posted = SDL_PrivateMouseMotion(0, 0, x, y);
 | 
						|
 				}
 | 
						|
 			}
 | 
						|
@@ -361,8 +401,16 @@
 | 
						|
 					x = 0; y = 0;
 | 
						|
 				} else {
 | 
						|
 					x = (Sint16)LOWORD(lParam);
 | 
						|
-					y = (Sint16)HIWORD(lParam);
 | 
						|
-				}
 | 
						|
+					y = (Sint16)HIWORD(lParam);
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+					if (SDL_VideoSurface)
 | 
						|
+						transform(rotation, ozoneHack, &x, &y);
 | 
						|
+#endif
 | 
						|
+				}
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+				/* Since stylus movements are not continuous */
 | 
						|
+				posted = SDL_PrivateMouseMotion(0, 0, x, y);
 | 
						|
+#endif
 | 
						|
 				posted = SDL_PrivateMouseButton(
 | 
						|
 							state, button, x, y);
 | 
						|
 			}
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/wincommon/SDL_sysmouse.c SDL-1.2.7/src/video/wincommon/SDL_sysmouse.c
 | 
						|
--- SDL-1.2.7-orig/src/video/wincommon/SDL_sysmouse.c	Sat Aug 30 13:13:12 2003
 | 
						|
+++ SDL-1.2.7/src/video/wincommon/SDL_sysmouse.c	Thu Nov 18 12:29:20 2004
 | 
						|
@@ -250,12 +250,16 @@
 | 
						|
 
 | 
						|
 /* Check to see if we need to enter or leave mouse relative mode */
 | 
						|
 void WIN_CheckMouseMode(_THIS)
 | 
						|
-{
 | 
						|
+{
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+		mouse_relative = 0;
 | 
						|
+#else
 | 
						|
         /* If the mouse is hidden and input is grabbed, we use relative mode */
 | 
						|
         if ( !(SDL_cursorstate & CURSOR_VISIBLE) &&
 | 
						|
              (this->input_grab != SDL_GRAB_OFF) ) {
 | 
						|
                 mouse_relative = 1;
 | 
						|
         } else {
 | 
						|
                 mouse_relative = 0;
 | 
						|
-        }
 | 
						|
+        }
 | 
						|
+#endif
 | 
						|
 }
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/windib/SDL_dibevents.c SDL-1.2.7/src/video/windib/SDL_dibevents.c
 | 
						|
--- SDL-1.2.7-orig/src/video/windib/SDL_dibevents.c	Wed Feb 18 09:22:10 2004
 | 
						|
+++ SDL-1.2.7/src/video/windib/SDL_dibevents.c	Thu Nov 18 13:12:28 2004
 | 
						|
@@ -58,6 +58,29 @@
 | 
						|
 /* DJM: If the user setup the window for us, we want to save his window proc,
 | 
						|
    and give him a chance to handle some messages. */
 | 
						|
 static WNDPROC userWindowProc = NULL;
 | 
						|
+
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+
 | 
						|
+WPARAM rotateKey(WPARAM key, SDL_RotateAttr direction) {
 | 
						|
+	if (direction != SDL_ROTATE_LEFT)
 | 
						|
+		return key;
 | 
						|
+
 | 
						|
+	switch (key) {
 | 
						|
+		case 0x26: /* up */
 | 
						|
+			return 0x27;
 | 
						|
+		case 0x27: /* right */
 | 
						|
+			return 0x28;
 | 
						|
+		case 0x28: /* down */
 | 
						|
+			return 0x25;
 | 
						|
+		case 0x25: /* left */
 | 
						|
+			return 0x26;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	return key;
 | 
						|
+}
 | 
						|
+
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 
 | 
						|
 /* The main Win32 event handler */
 | 
						|
 LONG
 | 
						|
@@ -69,6 +92,16 @@
 | 
						|
 		case WM_SYSKEYDOWN:
 | 
						|
 		case WM_KEYDOWN: {
 | 
						|
 			SDL_keysym keysym;
 | 
						|
+
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+			// Drop GAPI artefacts
 | 
						|
+			if (wParam == 0x84 || wParam == 0x5B)
 | 
						|
+				return 0;
 | 
						|
+
 | 
						|
+			// Rotate key if necessary
 | 
						|
+			if (rotation != SDL_ROTATE_NONE)
 | 
						|
+				wParam = rotateKey(wParam, rotation);	
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 			/* Ignore repeated keys */
 | 
						|
 			if ( lParam&REPEATED_KEYMASK ) {
 | 
						|
@@ -129,6 +162,16 @@
 | 
						|
 		case WM_KEYUP: {
 | 
						|
 			SDL_keysym keysym;
 | 
						|
 
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+			// Drop GAPI artefacts
 | 
						|
+			if (wParam == 0x84 || wParam == 0x5B)
 | 
						|
+				return 0;
 | 
						|
+
 | 
						|
+			// Rotate key if necessary
 | 
						|
+			if (rotation != SDL_ROTATE_NONE)
 | 
						|
+				wParam = rotateKey(wParam, rotation);
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 			switch (wParam) {
 | 
						|
 				case VK_CONTROL:
 | 
						|
 					if ( lParam&EXTENDED_KEYMASK )
 | 
						|
@@ -333,7 +376,16 @@
 | 
						|
 	VK_keymap[VK_APPS] = SDLK_MENU;
 | 
						|
 
 | 
						|
 	prev_shiftstates[0] = FALSE;
 | 
						|
-	prev_shiftstates[1] = FALSE;
 | 
						|
+	prev_shiftstates[1] = FALSE;
 | 
						|
+
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+	/* Hardcode the 4 magic keys to F1 F2 F3 F4 - the actual location of the keys varies ... */
 | 
						|
+	VK_keymap[0xC1] = SDLK_F1;
 | 
						|
+	VK_keymap[0xC2] = SDLK_F2;
 | 
						|
+	VK_keymap[0xC3] = SDLK_F3;
 | 
						|
+	VK_keymap[0xC4] = SDLK_F4;
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 }
 | 
						|
 
 | 
						|
 static SDL_keysym *TranslateKey(UINT vkey, UINT scancode, SDL_keysym *keysym, int pressed)
 | 
						|
@@ -364,9 +416,15 @@
 | 
						|
 {
 | 
						|
 #ifndef CS_BYTEALIGNCLIENT
 | 
						|
 #define CS_BYTEALIGNCLIENT	0
 | 
						|
+#endif
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+	SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT | CS_HREDRAW | CS_VREDRAW, 0);
 | 
						|
+#else
 | 
						|
+	SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0);
 | 
						|
 #endif
 | 
						|
-	SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0);
 | 
						|
-	if ( SDL_windowid ) {
 | 
						|
+	if ( SDL_windowid ) {
 | 
						|
+// FIXME 
 | 
						|
+#ifndef _WIN32_WCE
 | 
						|
 		SDL_Window = (HWND)strtol(SDL_windowid, NULL, 0);
 | 
						|
 
 | 
						|
       /* DJM: we want all event's for the user specified
 | 
						|
@@ -375,11 +433,19 @@
 | 
						|
       if (SDL_Window) {
 | 
						|
          userWindowProc = (WNDPROC)GetWindowLong(SDL_Window, GWL_WNDPROC);
 | 
						|
          SetWindowLong(SDL_Window, GWL_WNDPROC, (LONG)WinMessage);
 | 
						|
-      }
 | 
						|
-	} else {
 | 
						|
+      }
 | 
						|
+ #endif
 | 
						|
+	} else {
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+
 | 
						|
+		SDL_Window = CreateWindow(SDL_Appname, SDL_Appname, (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX),
 | 
						|
+						0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 
 | 
						|
+						NULL, NULL, SDL_Instance, NULL);
 | 
						|
+#else
 | 
						|
 		SDL_Window = CreateWindow(SDL_Appname, SDL_Appname,
 | 
						|
                         (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX),
 | 
						|
-                        CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, SDL_Instance, NULL);
 | 
						|
+                        CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, SDL_Instance, NULL);
 | 
						|
+#endif
 | 
						|
 		if ( SDL_Window == NULL ) {
 | 
						|
 			SDL_SetError("Couldn't create window");
 | 
						|
 			return(-1);
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/windib/SDL_dibvideo.c SDL-1.2.7/src/video/windib/SDL_dibvideo.c
 | 
						|
--- SDL-1.2.7-orig/src/video/windib/SDL_dibvideo.c	Wed Feb 18 09:22:10 2004
 | 
						|
+++ SDL-1.2.7/src/video/windib/SDL_dibvideo.c	Mon Aug  8 18:27:52 2005
 | 
						|
@@ -29,15 +29,26 @@
 | 
						|
 #include <stdlib.h>
 | 
						|
 #include <malloc.h>
 | 
						|
 #include <windows.h>
 | 
						|
-#if defined(WIN32_PLATFORM_PSPC)
 | 
						|
+#if (defined (UNDER_CE) && (UNDER_CE >= 420))
 | 
						|
 #include <aygshell.h>                      // Add Pocket PC includes
 | 
						|
 #pragma comment( lib, "aygshell" )         // Link Pocket PC library
 | 
						|
 #endif
 | 
						|
+
 | 
						|
+#ifdef _MSC_VER
 | 
						|
+#pragma warning(disable: 4244)
 | 
						|
+#define inline __inline
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 
 | 
						|
 /* Not yet in the mingw32 cross-compile headers */
 | 
						|
 #ifndef CDS_FULLSCREEN
 | 
						|
 #define CDS_FULLSCREEN	4
 | 
						|
 #endif
 | 
						|
+
 | 
						|
+#ifndef WS_THICKFRAME
 | 
						|
+#define WS_THICKFRAME 0
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 
 | 
						|
 #include "SDL.h"
 | 
						|
 #include "SDL_mutex.h"
 | 
						|
@@ -55,7 +66,18 @@
 | 
						|
 #ifdef _WIN32_WCE
 | 
						|
 #define NO_GETDIBITS
 | 
						|
 #define NO_CHANGEDISPLAYSETTINGS
 | 
						|
-#define NO_GAMMA_SUPPORT
 | 
						|
+#define NO_GAMMA_SUPPORT
 | 
						|
+
 | 
						|
+/* uncomment this line if you target WinCE 3.x platform: */
 | 
						|
+//#define NO_SETDIBCOLORTABLE
 | 
						|
+
 | 
						|
+/* these 2 variables are used to suport paletted DIBs on WinCE 3.x that 
 | 
						|
+   does not implement SetDIBColorTable, and when SetDIBColorTable is not working.
 | 
						|
+   Slow. DIB is recreated every time.
 | 
						|
+*/
 | 
						|
+static BITMAPINFO *last_bitmapinfo;
 | 
						|
+static void** last_bits;
 | 
						|
+
 | 
						|
 #endif
 | 
						|
 #ifndef WS_MAXIMIZE
 | 
						|
 #define WS_MAXIMIZE	0
 | 
						|
@@ -96,6 +118,13 @@
 | 
						|
 
 | 
						|
 /* helper fn */
 | 
						|
 static int DIB_SussScreenDepth();
 | 
						|
+
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+void DIB_ShowTaskBar(BOOL taskBarShown);
 | 
						|
+#ifdef ENABLE_WINGAPI
 | 
						|
+extern void GAPI_GrabHardwareKeys(BOOL grab);
 | 
						|
+#endif
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 /* DIB driver bootstrap functions */
 | 
						|
 
 | 
						|
@@ -352,6 +381,9 @@
 | 
						|
 
 | 
						|
 	/* Fill in some window manager capabilities */
 | 
						|
 	this->info.wm_available = 1;
 | 
						|
+
 | 
						|
+	/* Rotation information */
 | 
						|
+	rotation = SDL_ROTATE_NONE;
 | 
						|
 
 | 
						|
 	/* We're done! */
 | 
						|
 	return(0);
 | 
						|
@@ -370,7 +402,43 @@
 | 
						|
 	}
 | 
						|
 #endif
 | 
						|
 }
 | 
						|
-
 | 
						|
+
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+
 | 
						|
+void DIB_ShowTaskBar(BOOL taskBarShown) {
 | 
						|
+#if (UNDER_CE < 420)
 | 
						|
+	// Hide taskbar, WinCE 2.x style - from EasyCE
 | 
						|
+	HKEY hKey=0;
 | 
						|
+	DWORD dwValue = 0;
 | 
						|
+	unsigned long lSize = sizeof( DWORD );
 | 
						|
+	DWORD dwType = REG_DWORD;
 | 
						|
+	HWND hWnd;
 | 
						|
+
 | 
						|
+	RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("\\software\\microsoft\\shell"), 0, KEY_ALL_ACCESS, &hKey );
 | 
						|
+	RegQueryValueEx( hKey, TEXT("TBOpt"), 0, &dwType, (BYTE*)&dwValue, &lSize );
 | 
						|
+	if (taskBarShown)
 | 
						|
+		dwValue &= 0xFFFFFFFF - 8;	// reset bit to show taskbar
 | 
						|
+    else 
 | 
						|
+		dwValue |= 8;	// set bit to hide taskbar
 | 
						|
+	RegSetValueEx( hKey, TEXT("TBOpt"), 0, REG_DWORD, (BYTE*)&dwValue, lSize );
 | 
						|
+	hWnd = FindWindow( TEXT("HHTaskBar"), NULL );
 | 
						|
+	SendMessage(hWnd, WM_COMMAND, 0x03EA, 0 );
 | 
						|
+	SetForegroundWindow(SDL_Window);
 | 
						|
+#else
 | 
						|
+	if (taskBarShown) 
 | 
						|
+		SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON);
 | 
						|
+	else 
 | 
						|
+		SHFullScreen(SDL_Window, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);
 | 
						|
+#endif
 | 
						|
+	if (FindWindow(TEXT("HHTaskBar"), NULL)) { // is it valid for HPC ?
 | 
						|
+		if (taskBarShown) 
 | 
						|
+			ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL);
 | 
						|
+		else 
 | 
						|
+			ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE);
 | 
						|
+	}
 | 
						|
+}
 | 
						|
+
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 /*
 | 
						|
   Helper fn to work out which screen depth windows is currently using.
 | 
						|
@@ -444,7 +512,8 @@
 | 
						|
 
 | 
						|
 
 | 
						|
 /* Various screen update functions available */
 | 
						|
-static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects);
 | 
						|
+static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects);
 | 
						|
+static void DIB_RotatedUpdate(_THIS, int numrects, SDL_Rect *rects);
 | 
						|
 
 | 
						|
 SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current,
 | 
						|
 				int width, int height, int bpp, Uint32 flags)
 | 
						|
@@ -463,12 +532,20 @@
 | 
						|
 	HDC hdc;
 | 
						|
 	RECT bounds;
 | 
						|
 	int x, y;
 | 
						|
-	Uint32 Rmask, Gmask, Bmask;
 | 
						|
-
 | 
						|
+	Uint32 Rmask, Gmask, Bmask;
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+	int screenWidth, screenHeight;
 | 
						|
+#endif
 | 
						|
+#ifdef UNDER_CE
 | 
						|
+	int	i;
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+#ifdef HAVE_OPENGL
 | 
						|
 	/* Clean up any GL context that may be hanging around */
 | 
						|
 	if ( current->flags & SDL_OPENGL ) {
 | 
						|
 		WIN_GL_ShutDown(this);
 | 
						|
-	}
 | 
						|
+	}
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 	/* Recalculate the bitmasks if necessary */
 | 
						|
 	if ( bpp == current->format->BitsPerPixel ) {
 | 
						|
@@ -517,20 +594,16 @@
 | 
						|
 	video->h = height;
 | 
						|
 	video->pitch = SDL_CalculatePitch(video);
 | 
						|
 
 | 
						|
-#ifdef WIN32_PLATFORM_PSPC
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
 	 /* Stuff to hide that $#!^%#$ WinCE taskbar in fullscreen... */
 | 
						|
 	if ( flags & SDL_FULLSCREEN ) {
 | 
						|
 		if ( !(prev_flags & SDL_FULLSCREEN) ) {
 | 
						|
-			SHFullScreen(SDL_Window, SHFS_HIDETASKBAR);
 | 
						|
-			SHFullScreen(SDL_Window, SHFS_HIDESIPBUTTON);
 | 
						|
-			ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE);
 | 
						|
+			DIB_ShowTaskBar(FALSE);
 | 
						|
 		}
 | 
						|
 		video->flags |= SDL_FULLSCREEN;
 | 
						|
 	} else {
 | 
						|
 		if ( prev_flags & SDL_FULLSCREEN ) {
 | 
						|
-			SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR);
 | 
						|
-			SHFullScreen(SDL_Window, SHFS_SHOWSIPBUTTON);
 | 
						|
-			ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL);
 | 
						|
+			DIB_ShowTaskBar(TRUE);
 | 
						|
 		}
 | 
						|
 	}
 | 
						|
 #endif
 | 
						|
@@ -640,28 +713,82 @@
 | 
						|
 			((Uint32*)binfo->bmiColors)[0] = video->format->Rmask;
 | 
						|
 			((Uint32*)binfo->bmiColors)[1] = video->format->Gmask;
 | 
						|
 			((Uint32*)binfo->bmiColors)[2] = video->format->Bmask;
 | 
						|
-		} else {
 | 
						|
+		} else {
 | 
						|
+#ifdef UNDER_CE
 | 
						|
+			binfo->bmiHeader.biCompression = BI_RGB;	/* 332 */
 | 
						|
+			if ( video->format->palette ) {
 | 
						|
+				binfo->bmiHeader.biClrUsed = video->format->palette->ncolors;
 | 
						|
+				for(i=0; i<video->format->palette->ncolors; i++)
 | 
						|
+				{
 | 
						|
+					binfo->bmiColors[i].rgbRed=i&(7<<5);
 | 
						|
+					binfo->bmiColors[i].rgbGreen=(i&(7<<2))<<3;
 | 
						|
+					binfo->bmiColors[i].rgbBlue=(i&3)<<5;
 | 
						|
+					binfo->bmiColors[i].rgbReserved=0;
 | 
						|
+			   }
 | 
						|
+			}
 | 
						|
+#else
 | 
						|
 			binfo->bmiHeader.biCompression = BI_RGB;	/* BI_BITFIELDS for 565 vs 555 */
 | 
						|
 			if ( video->format->palette ) {
 | 
						|
 				memset(binfo->bmiColors, 0,
 | 
						|
 					video->format->palette->ncolors*sizeof(RGBQUAD));
 | 
						|
-			}
 | 
						|
+			}
 | 
						|
+#endif
 | 
						|
 		}
 | 
						|
 
 | 
						|
 		/* Create the offscreen bitmap buffer */
 | 
						|
-		hdc = GetDC(SDL_Window);
 | 
						|
+		hdc = GetDC(SDL_Window);
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+		/* See if we need to rotate the buffer (WinCE specific) */
 | 
						|
+		screenWidth = GetDeviceCaps(hdc, HORZRES);
 | 
						|
+		screenHeight = GetDeviceCaps(hdc, VERTRES);
 | 
						|
+		rotation = SDL_ROTATE_NONE;
 | 
						|
+		work_pixels = NULL;
 | 
						|
+		if (rotation_pixels) {
 | 
						|
+		free(rotation_pixels);
 | 
						|
+			rotation_pixels = NULL;
 | 
						|
+		}
 | 
						|
+
 | 
						|
+		if ((flags & SDL_FULLSCREEN) && (width>height) && (width > screenWidth) ) {
 | 
						|
+			/* OK, we rotate the screen */
 | 
						|
+		video->pixels = malloc(video->h * video->pitch);
 | 
						|
+			rotation_pixels = video->pixels;
 | 
						|
+			if (video->pixels)
 | 
						|
+				rotation = SDL_ROTATE_LEFT;
 | 
						|
+			OutputDebugString(TEXT("will rotate\r\n"));
 | 
						|
+		}
 | 
						|
+		screen_bmp = CreateDIBSection(hdc, binfo, DIB_RGB_COLORS,
 | 
						|
+			(rotation == SDL_ROTATE_NONE ? (void **)(&video->pixels) : (void**)&work_pixels), NULL, 0);
 | 
						|
+#else
 | 
						|
 		screen_bmp = CreateDIBSection(hdc, binfo, DIB_RGB_COLORS,
 | 
						|
-					(void **)(&video->pixels), NULL, 0);
 | 
						|
-		ReleaseDC(SDL_Window, hdc);
 | 
						|
-		free(binfo);
 | 
						|
+					(void **)(&video->pixels), NULL, 0);
 | 
						|
+#endif
 | 
						|
+		ReleaseDC(SDL_Window, hdc);
 | 
						|
+#ifdef UNDER_CE
 | 
						|
+/* keep bitmapinfo for palette in 8-bit modes for devices that don't have SetDIBColorTable */
 | 
						|
+		last_bits = (rotation == SDL_ROTATE_NONE ? (void **)(&video->pixels) : (void**)&work_pixels);
 | 
						|
+		if(last_bitmapinfo)
 | 
						|
+			free(last_bitmapinfo);
 | 
						|
+		if(is16bitmode)
 | 
						|
+		{
 | 
						|
+			last_bitmapinfo = 0;
 | 
						|
+			free(binfo);
 | 
						|
+		} else
 | 
						|
+			last_bitmapinfo = binfo;
 | 
						|
+#else
 | 
						|
+		free(binfo);
 | 
						|
+#endif
 | 
						|
 		if ( screen_bmp == NULL ) {
 | 
						|
 			if ( video != current ) {
 | 
						|
 				SDL_FreeSurface(video);
 | 
						|
 			}
 | 
						|
 			SDL_SetError("Couldn't create DIB section");
 | 
						|
 			return(NULL);
 | 
						|
-		}
 | 
						|
-		this->UpdateRects = DIB_NormalUpdate;
 | 
						|
+		}
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+		this->UpdateRects = (work_pixels ? DIB_RotatedUpdate : DIB_NormalUpdate);
 | 
						|
+#else
 | 
						|
+		this->UpdateRects = DIB_NormalUpdate;
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 		/* Set video surface flags */
 | 
						|
 		if ( bpp <= 8 ) {
 | 
						|
@@ -695,7 +822,15 @@
 | 
						|
 		bounds.left = SDL_windowX;
 | 
						|
 		bounds.top = SDL_windowY;
 | 
						|
 		bounds.right = SDL_windowX+video->w;
 | 
						|
-		bounds.bottom = SDL_windowY+video->h;
 | 
						|
+		bounds.bottom = SDL_windowY+video->h;
 | 
						|
+#ifdef UNDER_CE
 | 
						|
+		if(rotation != SDL_ROTATE_NONE)
 | 
						|
+		{   
 | 
						|
+			int t=bounds.right;
 | 
						|
+			bounds.right = bounds.bottom;
 | 
						|
+			bounds.bottom=t;
 | 
						|
+		}
 | 
						|
+#endif
 | 
						|
 		AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), FALSE, 0);
 | 
						|
 		width = bounds.right-bounds.left;
 | 
						|
 		height = bounds.bottom-bounds.top;
 | 
						|
@@ -709,8 +844,10 @@
 | 
						|
 			x = (GetSystemMetrics(SM_CXSCREEN)-width)/2;
 | 
						|
 			y = (GetSystemMetrics(SM_CYSCREEN)-height)/2;
 | 
						|
 		} else {
 | 
						|
-			x = y = -1;
 | 
						|
-			swp_flags |= SWP_NOMOVE;
 | 
						|
+			x = y = -1;
 | 
						|
+#ifndef UNDER_CE
 | 
						|
+			swp_flags |= SWP_NOMOVE;
 | 
						|
+#endif
 | 
						|
 		}
 | 
						|
 		if ( y < 0 ) { /* Cover up title bar for more client area */
 | 
						|
 			y -= GetSystemMetrics(SM_CYCAPTION)/2;
 | 
						|
@@ -719,19 +856,44 @@
 | 
						|
 			top = HWND_TOPMOST;
 | 
						|
 		} else {
 | 
						|
 			top = HWND_NOTOPMOST;
 | 
						|
-		}
 | 
						|
-		SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags);
 | 
						|
+		}
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+		if (flags & SDL_FULLSCREEN) {
 | 
						|
+/* When WinCE program switches resolution from larger to smaller we should move its window so it would be visible in fullscreen */
 | 
						|
+//			SetWindowPos(SDL_Window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
 | 
						|
+			DIB_ShowTaskBar(FALSE);
 | 
						|
+			if(x>0) x=0;	// remove space from the left side of a screen in 320x200 mode
 | 
						|
+			if(y>0) y=0;
 | 
						|
+			SetWindowPos(SDL_Window, HWND_TOPMOST, x, y, width, height, SWP_NOCOPYBITS);
 | 
						|
+			ShowWindow(SDL_Window, SW_SHOW);
 | 
						|
+		}
 | 
						|
+		else
 | 
						|
+			SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags);
 | 
						|
+#else
 | 
						|
+		SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags);
 | 
						|
+#endif
 | 
						|
 		SDL_resizing = 0;
 | 
						|
 		SetForegroundWindow(SDL_Window);
 | 
						|
 	}
 | 
						|
 
 | 
						|
 	/* Set up for OpenGL */
 | 
						|
-	if ( flags & SDL_OPENGL ) {
 | 
						|
+	if ( flags & SDL_OPENGL ) {
 | 
						|
+#ifdef HAVE_OPENGL
 | 
						|
 		if ( WIN_GL_SetupWindow(this) < 0 ) {
 | 
						|
 			return(NULL);
 | 
						|
 		}
 | 
						|
-		video->flags |= SDL_OPENGL;
 | 
						|
-	}
 | 
						|
+		video->flags |= SDL_OPENGL;
 | 
						|
+#else
 | 
						|
+		return NULL;
 | 
						|
+#endif
 | 
						|
+	}
 | 
						|
+
 | 
						|
+#ifdef ENABLE_WINGAPI
 | 
						|
+	/* Grab hardware keys if necessary */
 | 
						|
+	if ( flags & SDL_FULLSCREEN ) {
 | 
						|
+		GAPI_GrabHardwareKeys(TRUE);
 | 
						|
+	}
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 	/* We're live! */
 | 
						|
 	return(video);
 | 
						|
@@ -754,22 +916,169 @@
 | 
						|
 {
 | 
						|
 	return;
 | 
						|
 }
 | 
						|
+
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+ 
 | 
						|
+static inline void rotateBlit(unsigned short *src, unsigned short *dest, SDL_Rect *rect, int pitch) {
 | 
						|
+	int i=rect->w, j=rect->h;
 | 
						|
+	src+=i;
 | 
						|
+
 | 
						|
+	for (;i--;) {
 | 
						|
+		register unsigned short *S=src--;
 | 
						|
+// I use loop unrolling to spedup things a little
 | 
						|
+		int cnt = j;
 | 
						|
+		if(cnt&1)
 | 
						|
+		{
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+		}
 | 
						|
+		cnt>>=1;
 | 
						|
+		if(cnt&1)
 | 
						|
+		{
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+		}
 | 
						|
+		cnt>>=1;
 | 
						|
+		for (; cnt--; ) {
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+/* tiny optimization
 | 
						|
+	int i, j;
 | 
						|
+	src+=rect->w;
 | 
						|
+
 | 
						|
+	for (i=0; i<rect->w; i++) {
 | 
						|
+		register unsigned short *S=src--;
 | 
						|
+		for (j=0; j<rect->h; j++) {
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+*/
 | 
						|
+/* original unoptimized version
 | 
						|
+	int i, j;
 | 
						|
+
 | 
						|
+	for (i=0; i<rect->w; i++) {
 | 
						|
+		for (j=0; j<rect->h; j++) {
 | 
						|
+			dest[i * rect->h + j] = src[pitch * j + (rect->w - i)];
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+*/
 | 
						|
+}
 | 
						|
+
 | 
						|
+static inline void rotateBlit8(unsigned char *src, unsigned char *dest, SDL_Rect *rect, int pitch) {
 | 
						|
+	int i=rect->w, j=rect->h;
 | 
						|
+	src+=i;
 | 
						|
+
 | 
						|
+	for (;i--;) {
 | 
						|
+		register unsigned char *S=src--;
 | 
						|
+// I use loop unrolling to spedup things a little
 | 
						|
+		int cnt = j;
 | 
						|
+		if(cnt&1)
 | 
						|
+		{
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+		}
 | 
						|
+		cnt>>=1;
 | 
						|
+		if(cnt&1)
 | 
						|
+		{
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+		}
 | 
						|
+		cnt>>=1;
 | 
						|
+		for (; cnt--; ) {
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+			*(dest++) = *S;
 | 
						|
+			S+=pitch;
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+}
 | 
						|
+
 | 
						|
+static void DIB_RotatedUpdate(_THIS, int numrects, SDL_Rect *rects) 
 | 
						|
+{
 | 
						|
+	HDC hdc, mdc;
 | 
						|
+	HBITMAP hb, old;
 | 
						|
+	int i;
 | 
						|
+
 | 
						|
+	hdc = GetDC(SDL_Window);
 | 
						|
+	if ( screen_pal ) {
 | 
						|
+		SelectPalette(hdc, screen_pal, FALSE);
 | 
						|
+	}
 | 
						|
+	mdc = CreateCompatibleDC(hdc);
 | 
						|
+	/*SelectObject(mdc, screen_bmp);*/
 | 
						|
+	if(this->screen->format->BytesPerPixel == 2) {
 | 
						|
+		for ( i=0; i<numrects; ++i ) {	
 | 
						|
+			unsigned short *src = (unsigned short*)this->screen->pixels;
 | 
						|
+			rotateBlit(src + (this->screen->w * rects[i].y) + rects[i].x, work_pixels, &rects[i], this->screen->w);		
 | 
						|
+			hb = CreateBitmap(rects[i].h, rects[i].w, 1, 16, work_pixels);
 | 
						|
+			old = (HBITMAP)SelectObject(mdc, hb);
 | 
						|
+			BitBlt(hdc, rects[i].y, this->screen->w - (rects[i].x + rects[i].w), rects[i].h, rects[i].w,
 | 
						|
+					mdc, 0, 0, SRCCOPY);
 | 
						|
+			SelectObject(mdc, old);
 | 
						|
+			DeleteObject(hb);
 | 
						|
+		}
 | 
						|
+	} else {
 | 
						|
+		if ( screen_pal ) {
 | 
						|
+			SelectPalette(mdc, screen_pal, FALSE);
 | 
						|
+		}
 | 
						|
+		for ( i=0; i<numrects; ++i ) {	
 | 
						|
+			unsigned char *src = (unsigned char*)this->screen->pixels;
 | 
						|
+			rotateBlit8(src + (this->screen->w * rects[i].y) + rects[i].x, work_pixels, &rects[i], this->screen->w);
 | 
						|
+			hb = CreateBitmap(rects[i].h, rects[i].w, 1, 8, work_pixels);
 | 
						|
+			old = (HBITMAP)SelectObject(mdc, hb);
 | 
						|
+			BitBlt(hdc, rects[i].y, this->screen->w - (rects[i].x + rects[i].w), rects[i].h, rects[i].w,
 | 
						|
+					mdc, 0, 0, SRCCOPY);
 | 
						|
+			SelectObject(mdc, old);
 | 
						|
+			DeleteObject(hb); 
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+	DeleteDC(mdc);
 | 
						|
+	ReleaseDC(SDL_Window, hdc);
 | 
						|
+}
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 
 | 
						|
 static void DIB_NormalUpdate(_THIS, int numrects, SDL_Rect *rects)
 | 
						|
 {
 | 
						|
 	HDC hdc, mdc;
 | 
						|
-	int i;
 | 
						|
+	int i;
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+	HBITMAP old;
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 	hdc = GetDC(SDL_Window);
 | 
						|
 	if ( screen_pal ) {
 | 
						|
 		SelectPalette(hdc, screen_pal, FALSE);
 | 
						|
 	}
 | 
						|
-	mdc = CreateCompatibleDC(hdc);
 | 
						|
-	SelectObject(mdc, screen_bmp);
 | 
						|
+	mdc = CreateCompatibleDC(hdc);
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+	old = (HBITMAP)SelectObject(mdc, screen_bmp);
 | 
						|
+#else
 | 
						|
+	SelectObject(mdc, screen_bmp);
 | 
						|
+#endif
 | 
						|
 	for ( i=0; i<numrects; ++i ) {
 | 
						|
 		BitBlt(hdc, rects[i].x, rects[i].y, rects[i].w, rects[i].h,
 | 
						|
 					mdc, rects[i].x, rects[i].y, SRCCOPY);
 | 
						|
-	}
 | 
						|
+	}
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+	SelectObject(mdc, old);
 | 
						|
+#endif
 | 
						|
 	DeleteDC(mdc);
 | 
						|
 	ReleaseDC(SDL_Window, hdc);
 | 
						|
 }
 | 
						|
@@ -778,11 +1087,11 @@
 | 
						|
 {
 | 
						|
 	RGBQUAD *pal;
 | 
						|
 	int i;
 | 
						|
-#ifndef _WIN32_WCE
 | 
						|
-	HDC hdc, mdc;
 | 
						|
-#else
 | 
						|
-	HDC hdc;
 | 
						|
-#endif
 | 
						|
+	HDC hdc, mdc;
 | 
						|
+#if defined(UNDER_CE) && defined(NO_SETDIBCOLORTABLE)
 | 
						|
+	if(last_bitmapinfo==0)
 | 
						|
+		return 0;
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 	/* Update the display palette */
 | 
						|
 	hdc = GetDC(SDL_Window);
 | 
						|
@@ -811,14 +1120,38 @@
 | 
						|
 	}
 | 
						|
 
 | 
						|
 	/* Set the DIB palette and update the display */
 | 
						|
-#ifndef _WIN32_WCE
 | 
						|
-	mdc = CreateCompatibleDC(hdc);
 | 
						|
+	mdc = CreateCompatibleDC(hdc);
 | 
						|
+#ifdef UNDER_CE
 | 
						|
+#ifdef NO_SETDIBCOLORTABLE
 | 
						|
+	if(1)
 | 
						|
+#else
 | 
						|
+/* BUG: For some reason SetDIBColorTable is not working when screen is not rotated */
 | 
						|
+	if(rotation == SDL_ROTATE_NONE && last_bitmapinfo)
 | 
						|
+#endif
 | 
						|
+	{
 | 
						|
+		DeleteObject(screen_bmp);
 | 
						|
+		last_bitmapinfo->bmiHeader.biClrUsed=256;
 | 
						|
+		for ( i=firstcolor; i<firstcolor+ncolors; ++i )
 | 
						|
+			last_bitmapinfo->bmiColors[i]=pal[i];
 | 
						|
+		screen_bmp = CreateDIBSection(hdc, last_bitmapinfo, DIB_RGB_COLORS,
 | 
						|
+			last_bits, NULL, 0);
 | 
						|
+    }
 | 
						|
+#else
 | 
						|
 	SelectObject(mdc, screen_bmp);
 | 
						|
-	SetDIBColorTable(mdc, firstcolor, ncolors, pal);
 | 
						|
+	SetDIBColorTable(mdc, firstcolor, ncolors, pal);
 | 
						|
+#endif
 | 
						|
+#ifndef UNDER_CE
 | 
						|
 	BitBlt(hdc, 0, 0, this->screen->w, this->screen->h,
 | 
						|
-	       mdc, 0, 0, SRCCOPY);
 | 
						|
+	       mdc, 0, 0, SRCCOPY);
 | 
						|
+#else
 | 
						|
+	{
 | 
						|
+		SDL_Rect rect;
 | 
						|
+		rect.x=0; rect.y=0;
 | 
						|
+		rect.w=this->screen->w; rect.h=this->screen->h;
 | 
						|
+// Fixme: screen flickers:		(this->UpdateRects)(this, 1, &rect) ;
 | 
						|
+	}
 | 
						|
+#endif
 | 
						|
 	DeleteDC(mdc);
 | 
						|
-#endif
 | 
						|
 	ReleaseDC(SDL_Window, hdc);
 | 
						|
 	return(1);
 | 
						|
 }
 | 
						|
@@ -937,27 +1270,27 @@
 | 
						|
 
 | 
						|
 void DIB_VideoQuit(_THIS)
 | 
						|
 {
 | 
						|
-	/* Destroy the window and everything associated with it */
 | 
						|
+	/* Destroy the window and everything associated with it */
 | 
						|
+#ifdef _WIN32_CE
 | 
						|
+	DIB_ShowTaskBar(TRUE);
 | 
						|
+#ifdef ENABLE_WINGAPI
 | 
						|
+	GAPI_GrabHardwareKeys(FALSE);
 | 
						|
+#endif
 | 
						|
+#endif
 | 
						|
 	if ( SDL_Window ) {
 | 
						|
 		/* Delete the screen bitmap (also frees screen->pixels) */
 | 
						|
 		if ( this->screen ) {
 | 
						|
-#ifdef WIN32_PLATFORM_PSPC
 | 
						|
-			if ( this->screen->flags & SDL_FULLSCREEN ) {
 | 
						|
-				/* Unhide taskbar, etc. */
 | 
						|
-				SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR);
 | 
						|
-				SHFullScreen(SDL_Window, SHFS_SHOWSIPBUTTON);
 | 
						|
-				ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL);
 | 
						|
-			}
 | 
						|
-#endif
 | 
						|
 #ifndef NO_CHANGEDISPLAYSETTINGS
 | 
						|
 			if ( this->screen->flags & SDL_FULLSCREEN ) {
 | 
						|
 				ChangeDisplaySettings(NULL, 0);
 | 
						|
 				ShowWindow(SDL_Window, SW_HIDE);
 | 
						|
 			}
 | 
						|
-#endif
 | 
						|
+#endif
 | 
						|
+#ifdef HAVE_OPENGL
 | 
						|
 			if ( this->screen->flags & SDL_OPENGL ) {
 | 
						|
 				WIN_GL_ShutDown(this);
 | 
						|
-			}
 | 
						|
+			}
 | 
						|
+#endif
 | 
						|
 			this->screen->pixels = NULL;
 | 
						|
 		}
 | 
						|
 		if ( screen_bmp ) {
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/windib/SDL_dibvideo.h SDL-1.2.7/src/video/windib/SDL_dibvideo.h
 | 
						|
--- SDL-1.2.7-orig/src/video/windib/SDL_dibvideo.h	Wed Feb 18 09:22:10 2004
 | 
						|
+++ SDL-1.2.7/src/video/windib/SDL_dibvideo.h	Thu Nov 18 13:13:42 2004
 | 
						|
@@ -29,11 +29,26 @@
 | 
						|
 #define _SDL_dibvideo_h
 | 
						|
 
 | 
						|
 #include <windows.h>
 | 
						|
+
 | 
						|
+//#ifdef _WIN32_CE
 | 
						|
+/* Rotation direction */
 | 
						|
+typedef enum {
 | 
						|
+	SDL_ROTATE_NONE,
 | 
						|
+	SDL_ROTATE_LEFT,
 | 
						|
+	SDL_ROTATE_RIGHT
 | 
						|
+} SDL_RotateAttr;
 | 
						|
+//#endif
 | 
						|
 
 | 
						|
 /* Private display data */
 | 
						|
 struct SDL_PrivateVideoData {
 | 
						|
     HBITMAP screen_bmp;
 | 
						|
-    HPALETTE screen_pal;
 | 
						|
+    HPALETTE screen_pal;
 | 
						|
+//#ifdef _WIN32_CE
 | 
						|
+	void *work_pixels; /* if the display needs to be rotated, memory allocated by the API */
 | 
						|
+	void *rotation_pixels; /* if the display needs to be rotated, memory allocated by the code */
 | 
						|
+	SDL_RotateAttr rotation;
 | 
						|
+	char ozoneHack; /* force stylus translation if running without Hi Res flag */
 | 
						|
+//#endif
 | 
						|
 
 | 
						|
 #define NUM_MODELISTS	4		/* 8, 16, 24, and 32 bits-per-pixel */
 | 
						|
     int SDL_nummodes[NUM_MODELISTS];
 | 
						|
@@ -43,6 +58,12 @@
 | 
						|
 #define screen_bmp		(this->hidden->screen_bmp)
 | 
						|
 #define screen_pal		(this->hidden->screen_pal)
 | 
						|
 #define SDL_nummodes		(this->hidden->SDL_nummodes)
 | 
						|
-#define SDL_modelist		(this->hidden->SDL_modelist)
 | 
						|
+#define SDL_modelist		(this->hidden->SDL_modelist)
 | 
						|
+//#ifdef _WIN32_CE
 | 
						|
+#define work_pixels			(this->hidden->work_pixels)
 | 
						|
+#define rotation			(this->hidden->rotation)
 | 
						|
+#define rotation_pixels		(this->hidden->rotation_pixels)
 | 
						|
+#define ozoneHack			(this->hidden->ozoneHack)
 | 
						|
+//#endif
 | 
						|
 
 | 
						|
 #endif /* _SDL_dibvideo_h */
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/wingapi/SDL_gapivideo.c SDL-1.2.7/src/video/wingapi/SDL_gapivideo.c
 | 
						|
--- SDL-1.2.7-orig/src/video/wingapi/SDL_gapivideo.c	Wed Dec 31 19:00:00 1969
 | 
						|
+++ SDL-1.2.7/src/video/wingapi/SDL_gapivideo.c	Thu Nov 18 13:43:27 2004
 | 
						|
@@ -0,0 +1,956 @@
 | 
						|
+/*
 | 
						|
+    SDL - Simple DirectMedia Layer
 | 
						|
+    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga
 | 
						|
+
 | 
						|
+    This library is free software; you can redistribute it and/or
 | 
						|
+    modify it under the terms of the GNU Library General Public
 | 
						|
+    License as published by the Free Software Foundation; either
 | 
						|
+    version 2 of the License, or (at your option) any later version.
 | 
						|
+
 | 
						|
+    This library is distributed in the hope that it will be useful,
 | 
						|
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
+    Library General Public License for more details.
 | 
						|
+
 | 
						|
+    You should have received a copy of the GNU Library General Public
 | 
						|
+    License along with this library; if not, write to the Free
 | 
						|
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
						|
+
 | 
						|
+    Sam Lantinga
 | 
						|
+    slouken@libsdl.org
 | 
						|
+*/
 | 
						|
+
 | 
						|
+#ifdef SAVE_RCSID
 | 
						|
+static char rcsid =
 | 
						|
+ "@(#) $Id: SDL_gapivideo.c,v 1.5 2004/02/29 21:54:11 lemure Exp $";
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+/* Dummy SDL video driver implementation; this is just enough to make an
 | 
						|
+ *  SDL-based application THINK it's got a working video driver, for
 | 
						|
+ *  applications that call SDL_Init(SDL_INIT_VIDEO) when they don't need it,
 | 
						|
+ *  and also for use as a collection of stubs when porting SDL to a new
 | 
						|
+ *  platform for which you haven't yet written a valid video driver.
 | 
						|
+ *
 | 
						|
+ * This is also a great way to determine bottlenecks: if you think that SDL
 | 
						|
+ *  is a performance problem for a given platform, enable this driver, and
 | 
						|
+ *  then see if your application runs faster without video overhead.
 | 
						|
+ *
 | 
						|
+ * Initial work by Ryan C. Gordon (icculus@linuxgames.com). A good portion
 | 
						|
+ *  of this was cut-and-pasted from Stephane Peter's work in the AAlib
 | 
						|
+ *  SDL video driver.  Renamed to "DUMMY" by Sam Lantinga.
 | 
						|
+ */
 | 
						|
+
 | 
						|
+#include <stdio.h>
 | 
						|
+#include <stdlib.h>
 | 
						|
+#include <malloc.h>
 | 
						|
+#include <windows.h>
 | 
						|
+
 | 
						|
+/* Not yet in the mingw32 cross-compile headers */
 | 
						|
+#ifndef CDS_FULLSCREEN
 | 
						|
+#define CDS_FULLSCREEN	4
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+#ifndef WS_THICKFRAME
 | 
						|
+#define WS_THICKFRAME 0
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+#include "SDL.h"
 | 
						|
+#include "SDL_mutex.h"
 | 
						|
+#include "SDL_syswm.h"
 | 
						|
+#include "SDL_sysvideo.h"
 | 
						|
+#include "SDL_sysevents.h"
 | 
						|
+#include "SDL_events_c.h"
 | 
						|
+#include "SDL_pixels_c.h"
 | 
						|
+#include "SDL_syswm_c.h"
 | 
						|
+#include "SDL_sysmouse_c.h"
 | 
						|
+#include "SDL_dibevents_c.h"
 | 
						|
+#include "SDL_gapivideo.h"
 | 
						|
+
 | 
						|
+#if defined(WIN32_PLATFORM_PSPC)
 | 
						|
+#include <aygshell.h>                      // Add Pocket PC includes
 | 
						|
+#pragma comment( lib, "aygshell" )         // Link Pocket PC library
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+#ifdef _WIN32_WCE
 | 
						|
+extern void DIB_ShowTaskBar(BOOL taskBarShown);
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+
 | 
						|
+/* Initialization/Query functions */
 | 
						|
+static int GAPI_VideoInit(_THIS, SDL_PixelFormat *vformat);
 | 
						|
+static SDL_Rect **GAPI_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
 | 
						|
+static SDL_Surface *GAPI_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags);
 | 
						|
+static int GAPI_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors);
 | 
						|
+static void GAPI_VideoQuit(_THIS);
 | 
						|
+
 | 
						|
+
 | 
						|
+/* Hardware surface functions */
 | 
						|
+static int GAPI_AllocHWSurface(_THIS, SDL_Surface *surface);
 | 
						|
+static int GAPI_LockHWSurface(_THIS, SDL_Surface *surface);
 | 
						|
+static void GAPI_UnlockHWSurface(_THIS, SDL_Surface *surface);
 | 
						|
+static void GAPI_FreeHWSurface(_THIS, SDL_Surface *surface);
 | 
						|
+
 | 
						|
+/* Windows message handling functions, will not be processed */
 | 
						|
+static void GAPI_RealizePalette(_THIS);
 | 
						|
+static void GAPI_PaletteChanged(_THIS, HWND window);
 | 
						|
+static void GAPI_WinPAINT(_THIS, HDC hdc);
 | 
						|
+
 | 
						|
+static void GAPI_UpdateRects(_THIS, int numrects, SDL_Rect *rects); 
 | 
						|
+/*static void GAPI_UpdateRectsMono(_THIS, int numrects, SDL_Rect *rects);*/
 | 
						|
+
 | 
						|
+static int GAPI_Available(void);
 | 
						|
+static SDL_VideoDevice *GAPI_CreateDevice(int devindex);
 | 
						|
+
 | 
						|
+void GAPI_GrabHardwareKeys(BOOL grab);
 | 
						|
+
 | 
						|
+VideoBootStrap WINGAPI_bootstrap = {
 | 
						|
+	"wingapi", "WinCE GAPI",
 | 
						|
+	GAPI_Available, GAPI_CreateDevice
 | 
						|
+};
 | 
						|
+
 | 
						|
+/* 2003 SE GAPI emulation */
 | 
						|
+
 | 
						|
+#define GETRAWFRAMEBUFFER   0x00020001
 | 
						|
+
 | 
						|
+#define FORMAT_565 1
 | 
						|
+#define FORMAT_555 2
 | 
						|
+#define FORMAT_OTHER 3
 | 
						|
+
 | 
						|
+static void* _OzoneFrameBuffer = NULL;
 | 
						|
+static struct GXDisplayProperties _OzoneDisplayProperties;
 | 
						|
+static char _OzoneAvailable = 0;
 | 
						|
+
 | 
						|
+typedef struct _RawFrameBufferInfo
 | 
						|
+{
 | 
						|
+   WORD wFormat;
 | 
						|
+   WORD wBPP;
 | 
						|
+   VOID *pFramePointer;
 | 
						|
+   int  cxStride;
 | 
						|
+   int  cyStride;
 | 
						|
+   int  cxPixels;
 | 
						|
+   int  cyPixels;
 | 
						|
+} RawFrameBufferInfo;
 | 
						|
+
 | 
						|
+
 | 
						|
+struct GXDisplayProperties Ozone_GetDisplayProperties(void) {
 | 
						|
+	return _OzoneDisplayProperties;
 | 
						|
+}
 | 
						|
+
 | 
						|
+int Ozone_OpenDisplay(HWND window, unsigned long flag) {
 | 
						|
+	return 1;
 | 
						|
+}
 | 
						|
+
 | 
						|
+int Ozone_CloseDisplay(void) {
 | 
						|
+	return 1;
 | 
						|
+}
 | 
						|
+
 | 
						|
+void* Ozone_BeginDraw(void) {
 | 
						|
+	return _OzoneFrameBuffer;
 | 
						|
+}
 | 
						|
+
 | 
						|
+int Ozone_EndDraw(void) {
 | 
						|
+	return 1;
 | 
						|
+}
 | 
						|
+
 | 
						|
+int Ozone_Suspend(void) {
 | 
						|
+	return 1;
 | 
						|
+}
 | 
						|
+
 | 
						|
+int Ozone_Resume(void) {
 | 
						|
+	return 1;
 | 
						|
+}
 | 
						|
+
 | 
						|
+static HINSTANCE checkOzone(tGXDisplayProperties *gxGetDisplayProperties, tGXOpenDisplay *gxOpenDisplay,
 | 
						|
+					  tGXVoidFunction *gxCloseDisplay, tGXBeginDraw *gxBeginDraw, 
 | 
						|
+					  tGXVoidFunction *gxEndDraw, tGXVoidFunction *gxSuspend, tGXVoidFunction *gxResume) {
 | 
						|
+#ifdef ARM
 | 
						|
+
 | 
						|
+	int result;
 | 
						|
+	RawFrameBufferInfo frameBufferInfo;
 | 
						|
+	HDC hdc = GetDC(NULL);
 | 
						|
+	result = ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, NULL, sizeof(RawFrameBufferInfo), (char *)&frameBufferInfo);
 | 
						|
+	ReleaseDC(NULL, hdc);
 | 
						|
+	if (result < 0)
 | 
						|
+		return NULL;
 | 
						|
+	OutputDebugString(TEXT("Running on Ozone\r\n"));
 | 
						|
+	_OzoneAvailable = 1;
 | 
						|
+
 | 
						|
+	// Initializing global parameters
 | 
						|
+	_OzoneFrameBuffer = frameBufferInfo.pFramePointer;
 | 
						|
+	_OzoneDisplayProperties.cBPP = frameBufferInfo.wBPP;
 | 
						|
+	_OzoneDisplayProperties.cbxPitch = frameBufferInfo.cxStride;
 | 
						|
+	_OzoneDisplayProperties.cbyPitch = frameBufferInfo.cyStride;
 | 
						|
+	_OzoneDisplayProperties.cxWidth = frameBufferInfo.cxPixels;
 | 
						|
+	_OzoneDisplayProperties.cyHeight = frameBufferInfo.cyPixels;
 | 
						|
+	if (frameBufferInfo.wFormat == FORMAT_565)
 | 
						|
+		_OzoneDisplayProperties.ffFormat = kfDirect565;
 | 
						|
+	else
 | 
						|
+	if (frameBufferInfo.wFormat == FORMAT_555)
 | 
						|
+		_OzoneDisplayProperties.ffFormat = kfDirect555;
 | 
						|
+	else {
 | 
						|
+		OutputDebugString(TEXT("Ozone unknown screen format"));
 | 
						|
+		return NULL;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	if (gxGetDisplayProperties)
 | 
						|
+		*gxGetDisplayProperties = Ozone_GetDisplayProperties;
 | 
						|
+	if (gxOpenDisplay)
 | 
						|
+		*gxOpenDisplay = Ozone_OpenDisplay;
 | 
						|
+	if (gxCloseDisplay)
 | 
						|
+		*gxCloseDisplay = Ozone_CloseDisplay;
 | 
						|
+	if (gxBeginDraw)
 | 
						|
+		*gxBeginDraw = Ozone_BeginDraw;
 | 
						|
+	if (gxEndDraw)
 | 
						|
+		*gxEndDraw = Ozone_EndDraw;
 | 
						|
+	if (gxSuspend)
 | 
						|
+		*gxSuspend = Ozone_Suspend;
 | 
						|
+	if (gxResume)
 | 
						|
+		*gxResume = Ozone_Resume;
 | 
						|
+
 | 
						|
+	return (HINSTANCE)1;
 | 
						|
+
 | 
						|
+#else
 | 
						|
+
 | 
						|
+	return NULL;
 | 
						|
+
 | 
						|
+#endif
 | 
						|
+}
 | 
						|
+
 | 
						|
+int getScreenWidth() {
 | 
						|
+	return (_OzoneFrameBuffer ? _OzoneDisplayProperties.cxWidth : GetSystemMetrics(SM_CXSCREEN));
 | 
						|
+}
 | 
						|
+
 | 
						|
+int getScreenHeight() {
 | 
						|
+	return (_OzoneFrameBuffer ? _OzoneDisplayProperties.cyHeight : GetSystemMetrics(SM_CYSCREEN));
 | 
						|
+}
 | 
						|
+
 | 
						|
+
 | 
						|
+/* Check GAPI library */
 | 
						|
+
 | 
						|
+#define IMPORT(Handle,Variable,Type,Function, Store) \
 | 
						|
+        Variable = GetProcAddress(Handle, TEXT(Function)); \
 | 
						|
+		if (!Variable) { \
 | 
						|
+			FreeLibrary(Handle); \
 | 
						|
+			return NULL; \
 | 
						|
+		} \
 | 
						|
+		if (Store) \
 | 
						|
+			*Store = (Type)Variable;
 | 
						|
+
 | 
						|
+static HINSTANCE checkGAPI(tGXDisplayProperties *gxGetDisplayProperties, tGXOpenDisplay *gxOpenDisplay,
 | 
						|
+					  tGXVoidFunction *gxCloseDisplay, tGXBeginDraw *gxBeginDraw, 
 | 
						|
+					  tGXVoidFunction *gxEndDraw, tGXVoidFunction *gxSuspend, tGXVoidFunction *gxResume,
 | 
						|
+					  BOOL bypassOzone) {
 | 
						|
+	HMODULE gapiLibrary;
 | 
						|
+	FARPROC proc;
 | 
						|
+	HINSTANCE result;
 | 
						|
+	// FIXME paletted !
 | 
						|
+	tGXDisplayProperties temp_gxGetDisplayProperties;
 | 
						|
+
 | 
						|
+	// Workaround for Windows Mobile 2003 SE
 | 
						|
+	_OzoneFrameBuffer = NULL;
 | 
						|
+	if (!bypassOzone) {
 | 
						|
+		result = checkOzone(gxGetDisplayProperties, gxOpenDisplay, gxCloseDisplay, gxBeginDraw, gxEndDraw, gxSuspend, gxResume);
 | 
						|
+		if (result)
 | 
						|
+			return result;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	gapiLibrary = LoadLibrary(TEXT("gx.dll"));
 | 
						|
+	if (!gapiLibrary)
 | 
						|
+		return NULL;
 | 
						|
+
 | 
						|
+	IMPORT(gapiLibrary, proc, tGXDisplayProperties, "?GXGetDisplayProperties@@YA?AUGXDisplayProperties@@XZ", gxGetDisplayProperties)
 | 
						|
+	IMPORT(gapiLibrary, proc, tGXOpenDisplay, "?GXOpenDisplay@@YAHPAUHWND__@@K@Z", gxOpenDisplay)
 | 
						|
+	IMPORT(gapiLibrary, proc, tGXVoidFunction, "?GXCloseDisplay@@YAHXZ", gxCloseDisplay)
 | 
						|
+	IMPORT(gapiLibrary, proc, tGXBeginDraw, "?GXBeginDraw@@YAPAXXZ", gxBeginDraw)
 | 
						|
+	IMPORT(gapiLibrary, proc, tGXVoidFunction, "?GXEndDraw@@YAHXZ", gxEndDraw)
 | 
						|
+	IMPORT(gapiLibrary, proc, tGXVoidFunction, "?GXSuspend@@YAHXZ", gxSuspend)
 | 
						|
+	IMPORT(gapiLibrary, proc, tGXVoidFunction, "?GXResume@@YAHXZ", gxResume)
 | 
						|
+	
 | 
						|
+	// FIXME paletted ! for the moment we just bail out	
 | 
						|
+	if (!gxGetDisplayProperties) {
 | 
						|
+		IMPORT(gapiLibrary, proc, tGXDisplayProperties, "?GXGetDisplayProperties@@YA?AUGXDisplayProperties@@XZ", &temp_gxGetDisplayProperties)
 | 
						|
+		if (temp_gxGetDisplayProperties().ffFormat & kfPalette) {
 | 
						|
+			FreeLibrary(gapiLibrary);
 | 
						|
+			return NULL;
 | 
						|
+		}
 | 
						|
+		FreeLibrary(gapiLibrary);		
 | 
						|
+		gapiLibrary = (HINSTANCE)1;
 | 
						|
+	}
 | 
						|
+	
 | 
						|
+	return gapiLibrary;
 | 
						|
+}
 | 
						|
+
 | 
						|
+
 | 
						|
+/* GAPI driver bootstrap functions */
 | 
						|
+
 | 
						|
+static int GAPI_Available(void)
 | 
						|
+{
 | 
						|
+	/* Check if the GAPI library is available */
 | 
						|
+
 | 
						|
+	if (!checkGAPI(NULL, NULL, NULL, NULL, NULL, NULL, NULL, FALSE)) {
 | 
						|
+		OutputDebugString(TEXT("GAPI driver not available\r\n"));
 | 
						|
+		return 0;
 | 
						|
+	}
 | 
						|
+	else {
 | 
						|
+		OutputDebugString(TEXT("GAPI driver available\r\n"));
 | 
						|
+		return 1;
 | 
						|
+	}
 | 
						|
+}
 | 
						|
+
 | 
						|
+static void GAPI_DeleteDevice(SDL_VideoDevice *device)
 | 
						|
+{
 | 
						|
+	if (device && device->hidden && device->hidden->gapiFuncs.dynamicGXCloseDisplay)
 | 
						|
+		device->hidden->gapiFuncs.dynamicGXCloseDisplay();
 | 
						|
+
 | 
						|
+	if (device && device->hidden)	
 | 
						|
+		free(device->hidden);
 | 
						|
+	if (device)
 | 
						|
+		free(device);
 | 
						|
+
 | 
						|
+}
 | 
						|
+
 | 
						|
+static SDL_VideoDevice *GAPI_CreateDevice(int devindex)
 | 
						|
+{
 | 
						|
+	SDL_VideoDevice *device;
 | 
						|
+
 | 
						|
+	/* Initialize all variables that we clean on shutdown */
 | 
						|
+	device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice));
 | 
						|
+	if ( device ) {
 | 
						|
+		memset(device, 0, (sizeof *device));
 | 
						|
+		device->hidden = (struct SDL_PrivateVideoData *)
 | 
						|
+				malloc((sizeof *device->hidden));
 | 
						|
+	}
 | 
						|
+	if ( (device == NULL) || (device->hidden == NULL) ) {
 | 
						|
+		SDL_OutOfMemory();
 | 
						|
+		if ( device ) {
 | 
						|
+			free(device);
 | 
						|
+		}
 | 
						|
+		return(0);
 | 
						|
+	}
 | 
						|
+	memset(device->hidden, 0, (sizeof *device->hidden));
 | 
						|
+
 | 
						|
+	/* Set GAPI pointers */
 | 
						|
+
 | 
						|
+	checkGAPI(&device->hidden->gapiFuncs.dynamicGXGetDisplayProperties, 
 | 
						|
+			  &device->hidden->gapiFuncs.dynamicGXOpenDisplay, 
 | 
						|
+			  &device->hidden->gapiFuncs.dynamicGXCloseDisplay, 
 | 
						|
+			  &device->hidden->gapiFuncs.dynamicGXBeginDraw, 
 | 
						|
+			  &device->hidden->gapiFuncs.dynamicGXEndDraw, 
 | 
						|
+			  &device->hidden->gapiFuncs.dynamicGXSuspend, 
 | 
						|
+			  &device->hidden->gapiFuncs.dynamicGXResume, 
 | 
						|
+			  FALSE);
 | 
						|
+	device->hidden->displayProps = device->hidden->gapiFuncs.dynamicGXGetDisplayProperties();
 | 
						|
+
 | 
						|
+	/* Set the function pointers */
 | 
						|
+
 | 
						|
+	device->VideoInit = GAPI_VideoInit;
 | 
						|
+	device->ListModes = GAPI_ListModes;
 | 
						|
+	device->SetVideoMode = GAPI_SetVideoMode;
 | 
						|
+	device->UpdateMouse = WIN_UpdateMouse;
 | 
						|
+	device->SetColors = GAPI_SetColors;
 | 
						|
+	device->UpdateRects = NULL;
 | 
						|
+	device->VideoQuit = GAPI_VideoQuit;
 | 
						|
+	device->AllocHWSurface = GAPI_AllocHWSurface;
 | 
						|
+	device->CheckHWBlit = NULL;
 | 
						|
+	device->FillHWRect = NULL;
 | 
						|
+	device->SetHWColorKey = NULL;
 | 
						|
+	device->SetHWAlpha = NULL;
 | 
						|
+	device->LockHWSurface = GAPI_LockHWSurface;
 | 
						|
+	device->UnlockHWSurface = GAPI_UnlockHWSurface;
 | 
						|
+	device->FlipHWSurface = NULL;
 | 
						|
+	device->FreeHWSurface = GAPI_FreeHWSurface;
 | 
						|
+	device->SetCaption = WIN_SetWMCaption;
 | 
						|
+	device->SetIcon = WIN_SetWMIcon;
 | 
						|
+	device->IconifyWindow = WIN_IconifyWindow;
 | 
						|
+	device->GrabInput = WIN_GrabInput;
 | 
						|
+	device->GetWMInfo = WIN_GetWMInfo;
 | 
						|
+	device->FreeWMCursor = WIN_FreeWMCursor;
 | 
						|
+	device->CreateWMCursor = WIN_CreateWMCursor;
 | 
						|
+	device->ShowWMCursor = WIN_ShowWMCursor;
 | 
						|
+	device->WarpWMCursor = WIN_WarpWMCursor;
 | 
						|
+	device->CheckMouseMode = WIN_CheckMouseMode;
 | 
						|
+	device->InitOSKeymap = DIB_InitOSKeymap;
 | 
						|
+	device->PumpEvents = DIB_PumpEvents;
 | 
						|
+
 | 
						|
+	device->SetColors = GAPI_SetColors;
 | 
						|
+
 | 
						|
+	/* Set up the windows message handling functions */
 | 
						|
+	WIN_RealizePalette = GAPI_RealizePalette;
 | 
						|
+	WIN_PaletteChanged = GAPI_PaletteChanged;
 | 
						|
+	WIN_WinPAINT = GAPI_WinPAINT;
 | 
						|
+	HandleMessage = DIB_HandleMessage;
 | 
						|
+
 | 
						|
+	device->free = GAPI_DeleteDevice;
 | 
						|
+	
 | 
						|
+	
 | 
						|
+	/*
 | 
						|
+	device->VideoInit = GAPI_VideoInit;
 | 
						|
+	device->ListModes = GAPI_ListModes;
 | 
						|
+	device->SetVideoMode = GAPI_SetVideoMode;
 | 
						|
+	device->CreateYUVOverlay = NULL;
 | 
						|
+	device->SetColors = DUMMY_SetColors;
 | 
						|
+	device->UpdateRects = DUMMY_UpdateRects;
 | 
						|
+	device->VideoQuit = DUMMY_VideoQuit;
 | 
						|
+	device->AllocHWSurface = DUMMY_AllocHWSurface;
 | 
						|
+	device->CheckHWBlit = NULL;
 | 
						|
+	device->FillHWRect = NULL;
 | 
						|
+	device->SetHWColorKey = NULL;
 | 
						|
+	device->SetHWAlpha = NULL;
 | 
						|
+	device->LockHWSurface = DUMMY_LockHWSurface;
 | 
						|
+	device->UnlockHWSurface = DUMMY_UnlockHWSurface;
 | 
						|
+	device->FlipHWSurface = NULL;
 | 
						|
+	device->FreeHWSurface = DUMMY_FreeHWSurface;
 | 
						|
+	device->SetCaption = NULL;
 | 
						|
+	device->SetIcon = NULL;
 | 
						|
+	device->IconifyWindow = NULL;
 | 
						|
+	device->GrabInput = NULL;
 | 
						|
+	device->GetWMInfo = NULL;
 | 
						|
+	device->InitOSKeymap = DUMMY_InitOSKeymap;
 | 
						|
+	device->PumpEvents = DUMMY_PumpEvents;
 | 
						|
+
 | 
						|
+	device->free = DUMMY_DeleteDevice;
 | 
						|
+	*/
 | 
						|
+
 | 
						|
+	return device;
 | 
						|
+}
 | 
						|
+
 | 
						|
+
 | 
						|
+int GAPI_VideoInit(_THIS, SDL_PixelFormat *vformat)
 | 
						|
+{
 | 
						|
+
 | 
						|
+	/* Create the window */
 | 
						|
+	if ( DIB_CreateWindow(this) < 0 ) {
 | 
						|
+		return(-1);
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	vformat->BitsPerPixel = (unsigned char)displayProperties.cBPP;	
 | 
						|
+
 | 
						|
+	// Get color mask
 | 
						|
+	if (displayProperties.ffFormat & kfDirect565) {
 | 
						|
+		vformat->BitsPerPixel = 16;
 | 
						|
+		vformat->Rmask = 0x0000f800;
 | 
						|
+		vformat->Gmask = 0x000007e0;
 | 
						|
+		vformat->Bmask = 0x0000001f;
 | 
						|
+		videoMode = GAPI_DIRECT_565;
 | 
						|
+	}
 | 
						|
+	else
 | 
						|
+	if (displayProperties.ffFormat & kfDirect555) {
 | 
						|
+		vformat->BitsPerPixel = 16;
 | 
						|
+		vformat->Rmask = 0x00007c00;
 | 
						|
+		vformat->Gmask = 0x000003e0;
 | 
						|
+		vformat->Bmask = 0x0000001f;
 | 
						|
+		videoMode = GAPI_DIRECT_555;
 | 
						|
+	}
 | 
						|
+	else
 | 
						|
+	if ((displayProperties.ffFormat & kfDirect) && (displayProperties.cBPP <= 8)) {
 | 
						|
+		// We'll perform the conversion
 | 
						|
+		vformat->BitsPerPixel = 24;
 | 
						|
+		vformat->Rmask = 0x00ff0000;
 | 
						|
+		vformat->Gmask = 0x0000ff00;
 | 
						|
+		vformat->Bmask = 0x000000ff;
 | 
						|
+		if (displayProperties.ffFormat & kfDirectInverted)
 | 
						|
+			invert = (1 << displayProperties.cBPP) - 1;
 | 
						|
+		colorscale = displayProperties.cBPP < 8 ? 8 - displayProperties.cBPP : 0;
 | 
						|
+		videoMode = GAPI_MONO;
 | 
						|
+	}
 | 
						|
+	else
 | 
						|
+	if (displayProperties.ffFormat & kfPalette) {
 | 
						|
+		videoMode = GAPI_PALETTE;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	/* Set UpdateRect callback */
 | 
						|
+	// FIXME
 | 
						|
+	/*
 | 
						|
+	if (videoMode != GAPI_MONO)
 | 
						|
+		this->UpdateRects = GAPI_UpdateRects;
 | 
						|
+	else
 | 
						|
+		this->UpdateRects = GAPI_UpdateRectsMono;
 | 
						|
+	*/
 | 
						|
+
 | 
						|
+	this->UpdateRects = GAPI_UpdateRects;
 | 
						|
+	
 | 
						|
+	/* We're done! */
 | 
						|
+	return(0);
 | 
						|
+}
 | 
						|
+
 | 
						|
+SDL_Rect **GAPI_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags)
 | 
						|
+{
 | 
						|
+   	 return (SDL_Rect **) -1;
 | 
						|
+}
 | 
						|
+
 | 
						|
+SDL_Surface *GAPI_SetVideoMode(_THIS, SDL_Surface *current,
 | 
						|
+				int width, int height, int bpp, Uint32 flags)
 | 
						|
+{
 | 
						|
+	SDL_Surface *video;
 | 
						|
+	Uint32 Rmask, Gmask, Bmask;
 | 
						|
+	Uint32 prev_flags;
 | 
						|
+	DWORD style;
 | 
						|
+	const DWORD directstyle =
 | 
						|
+			(WS_POPUP);
 | 
						|
+	const DWORD windowstyle = 
 | 
						|
+			(WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX);
 | 
						|
+	const DWORD resizestyle =
 | 
						|
+			(WS_THICKFRAME|WS_MAXIMIZEBOX);
 | 
						|
+	int screenWidth, screenHeight;
 | 
						|
+	BOOL was_visible;
 | 
						|
+
 | 
						|
+	/* We negociate legacy GAPI if we want a screen that fits in QVGA */
 | 
						|
+	if (_OzoneAvailable && _OzoneFrameBuffer && (width <= GetSystemMetrics(SM_CXSCREEN) || width <= GetSystemMetrics(SM_CYSCREEN)) &&
 | 
						|
+						     (height <= GetSystemMetrics(SM_CXSCREEN) || height <= GetSystemMetrics(SM_CYSCREEN))) {
 | 
						|
+			OutputDebugString(TEXT("Ozone workaround, switching back to GAPI\r\n"));
 | 
						|
+			ozoneHack = 0;
 | 
						|
+			checkGAPI(&this->hidden->gapiFuncs.dynamicGXGetDisplayProperties, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXOpenDisplay, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXCloseDisplay, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXBeginDraw, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXEndDraw, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXSuspend, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXResume, 
 | 
						|
+				TRUE);
 | 
						|
+			this->hidden->displayProps = this->hidden->gapiFuncs.dynamicGXGetDisplayProperties();
 | 
						|
+	}
 | 
						|
+	/* Otherwise we'll use the new system call */
 | 
						|
+	if (_OzoneAvailable && !_OzoneFrameBuffer && (width > GetSystemMetrics(SM_CXSCREEN) && width > GetSystemMetrics(SM_CYSCREEN)) && 
 | 
						|
+		                                         (height > GetSystemMetrics(SM_CXSCREEN) && height > GetSystemMetrics(SM_CYSCREEN))) {
 | 
						|
+			OutputDebugString(TEXT("Ozone workaround, switching back to true Ozone\r\n"));
 | 
						|
+			checkGAPI(&this->hidden->gapiFuncs.dynamicGXGetDisplayProperties, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXOpenDisplay, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXCloseDisplay, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXBeginDraw, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXEndDraw, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXSuspend, 
 | 
						|
+				&this->hidden->gapiFuncs.dynamicGXResume, 
 | 
						|
+				FALSE);
 | 
						|
+			this->hidden->displayProps = this->hidden->gapiFuncs.dynamicGXGetDisplayProperties();
 | 
						|
+	}
 | 
						|
+	/* Which will need a tiny input hack if the original code does not have the "Hi Res" aware ressource property set */
 | 
						|
+	ozoneHack = 0;
 | 
						|
+	if (_OzoneFrameBuffer && (GetSystemMetrics(SM_CXSCREEN) != (signed) _OzoneDisplayProperties.cxWidth ||
 | 
						|
+							  GetSystemMetrics(SM_CYSCREEN) != (signed) _OzoneDisplayProperties.cyHeight)) {
 | 
						|
+				OutputDebugString(TEXT("Running true Ozone with stylus hack\r\n"));
 | 
						|
+				ozoneHack = 1;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	/* See whether or not we should center the window */
 | 
						|
+	was_visible = IsWindowVisible(SDL_Window);
 | 
						|
+
 | 
						|
+	/* Recalculate bitmasks if necessary */
 | 
						|
+	if (bpp == current->format->BitsPerPixel) {
 | 
						|
+		video = current;
 | 
						|
+	}
 | 
						|
+	else {
 | 
						|
+		switch(bpp) {
 | 
						|
+			case 8:
 | 
						|
+				Rmask = 0;
 | 
						|
+				Gmask = 0;
 | 
						|
+				Bmask = 0;
 | 
						|
+				break;
 | 
						|
+			case 15:				
 | 
						|
+			case 16:
 | 
						|
+				/* Default is 565 unless the display is specifically 555 */
 | 
						|
+				if (displayProperties.ffFormat & kfDirect555) {
 | 
						|
+					Rmask = 0x00007c00;
 | 
						|
+					Gmask = 0x000003e0;
 | 
						|
+					Bmask = 0x0000001f;
 | 
						|
+				}
 | 
						|
+				else {
 | 
						|
+					Rmask = 0x0000f800;
 | 
						|
+					Gmask = 0x000007e0;
 | 
						|
+					Bmask = 0x0000001f;
 | 
						|
+				}
 | 
						|
+				break;
 | 
						|
+			case 24:
 | 
						|
+			case 32:
 | 
						|
+				Rmask = 0x00ff0000;
 | 
						|
+				Gmask = 0x0000ff00;
 | 
						|
+				Bmask = 0x000000ff;
 | 
						|
+				break;
 | 
						|
+			default:
 | 
						|
+				SDL_SetError("Unsupported Bits Per Pixel format requested");
 | 
						|
+				return NULL;
 | 
						|
+		}
 | 
						|
+		video = SDL_CreateRGBSurface(SDL_SWSURFACE,
 | 
						|
+					0, 0, bpp, Rmask, Gmask, Bmask, 0);
 | 
						|
+		if ( video == NULL ) {
 | 
						|
+			SDL_OutOfMemory();
 | 
						|
+			return(NULL);
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+	
 | 
						|
+	/* Fill in part of the video surface */
 | 
						|
+	prev_flags = video->flags;
 | 
						|
+	video->flags = 0;	/* Clear flags */
 | 
						|
+	video->w = width;
 | 
						|
+	video->h = height;
 | 
						|
+	video->pitch = SDL_CalculatePitch(video);
 | 
						|
+	mainSurfaceWidth = width;
 | 
						|
+	mainSurfaceHeight = height;	
 | 
						|
+
 | 
						|
+//#ifdef WIN32_PLATFORM_PSPC
 | 
						|
+	/* Hide taskbar */	
 | 
						|
+	if ( flags & SDL_FULLSCREEN ) {
 | 
						|
+		if ( !(prev_flags & SDL_FULLSCREEN) ) {
 | 
						|
+			//SHFullScreen(SDL_Window, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);
 | 
						|
+			//ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE);
 | 
						|
+			DIB_ShowTaskBar(FALSE);
 | 
						|
+		}
 | 
						|
+		video->flags |= SDL_FULLSCREEN;
 | 
						|
+	} else {
 | 
						|
+		if ( prev_flags & SDL_FULLSCREEN ) {
 | 
						|
+			//SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON);
 | 
						|
+			//ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL);
 | 
						|
+			DIB_ShowTaskBar(TRUE);
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+//#endif
 | 
						|
+
 | 
						|
+	/* Reset the palette and create a new one if necessary */	
 | 
						|
+	if (screenPal != NULL) {
 | 
						|
+		DeleteObject(screenPal);
 | 
						|
+		screenPal = NULL;
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	/* See if we need to create a translation palette */
 | 
						|
+	if (convertPalette != NULL) {
 | 
						|
+		free(convertPalette);
 | 
						|
+	}
 | 
						|
+	if (bpp == 8) {
 | 
						|
+		OutputDebugString(TEXT("creating palette\r\n"));
 | 
						|
+		convertPalette = (unsigned short*)malloc(256 * sizeof(unsigned short));
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	if (displayProperties.ffFormat & kfPalette) {
 | 
						|
+		/* Will only be able to support 256 colors in this mode */
 | 
						|
+		// FIXME
 | 
						|
+		//screenPal = GAPI_CreatePalette();
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	/* Set Window style */
 | 
						|
+	style = GetWindowLong(SDL_Window, GWL_STYLE);
 | 
						|
+	if ( (video->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) {
 | 
						|
+		style &= ~windowstyle;
 | 
						|
+		style |= directstyle;
 | 
						|
+	} else {
 | 
						|
+		if ( flags & SDL_NOFRAME ) {
 | 
						|
+			style &= ~windowstyle;
 | 
						|
+			style |= directstyle;
 | 
						|
+			video->flags |= SDL_NOFRAME;
 | 
						|
+		} else {
 | 
						|
+			style &= ~directstyle;
 | 
						|
+			style |= windowstyle;
 | 
						|
+			if ( flags & SDL_RESIZABLE ) {
 | 
						|
+				style |= resizestyle;
 | 
						|
+				video->flags |= SDL_RESIZABLE;
 | 
						|
+			}
 | 
						|
+		}
 | 
						|
+#if WS_MAXIMIZE
 | 
						|
+		if (IsZoomed(SDL_Window)) style |= WS_MAXIMIZE;
 | 
						|
+#endif
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	if (!SDL_windowid)
 | 
						|
+		SetWindowLong(SDL_Window, GWL_STYLE, style);
 | 
						|
+
 | 
						|
+	/* Allocate bitmap */
 | 
						|
+	if (gapiBuffer) {
 | 
						|
+		free(gapiBuffer);
 | 
						|
+		gapiBuffer = NULL;
 | 
						|
+	}
 | 
						|
+	gapiBuffer = malloc(video->h * video->pitch);
 | 
						|
+	video->pixels = gapiBuffer;
 | 
						|
+
 | 
						|
+	/* See if we will rotate */
 | 
						|
+	rotation = SDL_ROTATE_NONE;
 | 
						|
+	screenWidth = getScreenWidth();
 | 
						|
+	screenHeight = getScreenHeight();
 | 
						|
+	if ((flags & SDL_FULLSCREEN) && 
 | 
						|
+		(width > screenWidth && width <= screenHeight)
 | 
						|
+		) 
 | 
						|
+	{
 | 
						|
+			rotation = SDL_ROTATE_LEFT;
 | 
						|
+	}
 | 
						|
+	/* Compute the different drawing properties */
 | 
						|
+	switch(rotation) {
 | 
						|
+		case SDL_ROTATE_NONE:
 | 
						|
+			dstPixelstep = displayProperties.cbxPitch;
 | 
						|
+			dstLinestep = displayProperties.cbyPitch;
 | 
						|
+			startOffset = 0;
 | 
						|
+			break;
 | 
						|
+		case SDL_ROTATE_LEFT:
 | 
						|
+			dstPixelstep = -displayProperties.cbyPitch;
 | 
						|
+			dstLinestep = displayProperties.cbxPitch;
 | 
						|
+			startOffset = displayProperties.cbyPitch * (displayProperties.cyHeight - 1);
 | 
						|
+			break;
 | 
						|
+		case SDL_ROTATE_RIGHT:
 | 
						|
+			dstPixelstep = displayProperties.cbyPitch;
 | 
						|
+			dstLinestep = -displayProperties.cbxPitch;
 | 
						|
+			startOffset = displayProperties.cbxPitch * (displayProperties.cxWidth - 1);
 | 
						|
+			break;
 | 
						|
+	}
 | 
						|
+	/* Compute padding */
 | 
						|
+	padWidth = 0;
 | 
						|
+	padHeight = 0;
 | 
						|
+	if (rotation == SDL_ROTATE_NONE) {
 | 
						|
+		if (getScreenWidth() > width)
 | 
						|
+			padWidth = (getScreenWidth() - width) / 2;
 | 
						|
+		if (getScreenHeight() > height)
 | 
						|
+			padHeight = (getScreenHeight() - height) / 2;
 | 
						|
+	}
 | 
						|
+	else {
 | 
						|
+		if (getScreenWidth() > height)
 | 
						|
+			padWidth = (getScreenWidth() - height) / 2;
 | 
						|
+		if (getScreenHeight() > width)
 | 
						|
+			padHeight = (getScreenHeight() - width) / 2;
 | 
						|
+	}
 | 
						|
+	srcLinestep = video->pitch;
 | 
						|
+	srcPixelstep = (bpp == 15 ? 2 : bpp / 8);
 | 
						|
+	
 | 
						|
+	MoveWindow(SDL_Window, 0, 0, getScreenWidth(), getScreenHeight(), FALSE);
 | 
						|
+	ShowWindow(SDL_Window, SW_SHOW);
 | 
						|
+
 | 
						|
+	/* Resize the window */
 | 
						|
+	//if ( SDL_windowid == NULL ) {
 | 
						|
+	if (0) {
 | 
						|
+		HWND top;
 | 
						|
+		UINT swp_flags;
 | 
						|
+		RECT bounds;
 | 
						|
+		int x,y;
 | 
						|
+
 | 
						|
+		SDL_resizing = 1;
 | 
						|
+		bounds.left = 0;
 | 
						|
+		bounds.top = 0;
 | 
						|
+		bounds.right = video->w;
 | 
						|
+		bounds.bottom = video->h;
 | 
						|
+		AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), FALSE, 0);
 | 
						|
+		width = bounds.right-bounds.left;
 | 
						|
+		height = bounds.bottom-bounds.top;
 | 
						|
+		x = (getScreenWidth()-width)/2;
 | 
						|
+		y = (getScreenHeight()-height)/2;
 | 
						|
+		if ( y < 0 ) { /* Cover up title bar for more client area */
 | 
						|
+			y -= GetSystemMetrics(SM_CYCAPTION)/2;
 | 
						|
+		}
 | 
						|
+		swp_flags = (SWP_FRAMECHANGED | SWP_SHOWWINDOW);
 | 
						|
+		if ( was_visible && !(flags & SDL_FULLSCREEN) ) {
 | 
						|
+			swp_flags |= SWP_NOMOVE;
 | 
						|
+		}
 | 
						|
+		if ( flags & SDL_FULLSCREEN ) {
 | 
						|
+			top = HWND_TOPMOST;
 | 
						|
+		} else {
 | 
						|
+			top = HWND_NOTOPMOST;
 | 
						|
+		}
 | 
						|
+
 | 
						|
+		if (flags & SDL_FULLSCREEN) {
 | 
						|
+			SetWindowPos(SDL_Window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
 | 
						|
+			ShowWindow(SDL_Window, SW_SHOW);
 | 
						|
+		}
 | 
						|
+		else
 | 
						|
+			SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags);
 | 
						|
+		
 | 
						|
+		SDL_resizing = 0;
 | 
						|
+		SetForegroundWindow(SDL_Window);
 | 
						|
+	}
 | 
						|
+	
 | 
						|
+	/* Open GAPI display */
 | 
						|
+	GXOpenDisplay(SDL_Window, (flags & SDL_FULLSCREEN ? GX_FULLSCREEN : 0));
 | 
						|
+
 | 
						|
+	/* Grab hardware keys if necessary */
 | 
						|
+	if (flags & SDL_FULLSCREEN)
 | 
						|
+		GAPI_GrabHardwareKeys(TRUE);
 | 
						|
+
 | 
						|
+	/* Blank screen */
 | 
						|
+	memset(GXBeginDraw(), 0, getScreenWidth() * getScreenHeight() * 2);
 | 
						|
+	GXEndDraw();
 | 
						|
+
 | 
						|
+	/* We're done */
 | 
						|
+	return(video);
 | 
						|
+}
 | 
						|
+
 | 
						|
+/* We don't actually allow hardware surfaces other than the main one */
 | 
						|
+static int GAPI_AllocHWSurface(_THIS, SDL_Surface *surface)
 | 
						|
+{
 | 
						|
+	return(-1);
 | 
						|
+}
 | 
						|
+static void GAPI_FreeHWSurface(_THIS, SDL_Surface *surface)
 | 
						|
+{
 | 
						|
+	return;
 | 
						|
+}
 | 
						|
+
 | 
						|
+/* We need to wait for vertical retrace on page flipped displays */
 | 
						|
+static int GAPI_LockHWSurface(_THIS, SDL_Surface *surface)
 | 
						|
+{
 | 
						|
+	return(0);
 | 
						|
+}
 | 
						|
+
 | 
						|
+static void GAPI_UnlockHWSurface(_THIS, SDL_Surface *surface)
 | 
						|
+{
 | 
						|
+	return;
 | 
						|
+}
 | 
						|
+
 | 
						|
+static void updateLine(_THIS, unsigned char *srcPointer, unsigned char *destPointer, int width) {
 | 
						|
+	// FIXME, we assume everything is in the correct format, either 16 bits 565 or 555, or 8 bits
 | 
						|
+	int i;
 | 
						|
+	for (i=0; i<width; i++) {
 | 
						|
+		if (!convertPalette) {
 | 
						|
+			*(unsigned short*)destPointer = *(unsigned short*)srcPointer;
 | 
						|
+		}
 | 
						|
+		else {
 | 
						|
+			*(unsigned short*)destPointer = convertPalette[*srcPointer];
 | 
						|
+		}
 | 
						|
+			
 | 
						|
+		destPointer += dstPixelstep;
 | 
						|
+		srcPointer += srcPixelstep;
 | 
						|
+	}
 | 
						|
+}
 | 
						|
+
 | 
						|
+static void GAPI_UpdateRects(_THIS, int numrects, SDL_Rect *rects)
 | 
						|
+{
 | 
						|
+	int i;
 | 
						|
+	unsigned char *screenBuffer;
 | 
						|
+
 | 
						|
+	screenBuffer = GXBeginDraw();
 | 
						|
+
 | 
						|
+	for (i=0; i<numrects; i++) {
 | 
						|
+		unsigned char *destPointer = screenBuffer + startOffset + ((rects[i].x + padWidth) * dstPixelstep) + ((rects[i].y + padHeight) * dstLinestep);
 | 
						|
+		unsigned char *srcPointer = (unsigned char*)gapiBuffer + (rects[i].x * srcPixelstep) + (rects[i].y * srcLinestep);
 | 
						|
+		int height = rects[i].h;
 | 
						|
+
 | 
						|
+		while (height) {
 | 
						|
+			updateLine(this, srcPointer, destPointer, rects[i].w);
 | 
						|
+			destPointer += dstLinestep;
 | 
						|
+			srcPointer += srcLinestep;
 | 
						|
+			height--;
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	GXEndDraw();
 | 
						|
+}
 | 
						|
+
 | 
						|
+/*
 | 
						|
+#define ADVANCE_PARTIAL(address, step) \
 | 
						|
+	bitshift += displayProperties.cBPP;             \
 | 
						|
+	if(bitshift >= 8)                  \
 | 
						|
+	{                                  \
 | 
						|
+		bitshift = 0;                  \
 | 
						|
+		bitmask = (1<<displayProperties.cBPP)-1;    \
 | 
						|
+		address += step;               \
 | 
						|
+	}                                  \
 | 
						|
+	else                               \
 | 
						|
+		bitmask <<= displayProperties.cBPP;
 | 
						|
+
 | 
						|
+#define ADVANCE_REV_PARTIAL(address, step)        \
 | 
						|
+	bitshift -= gxdp.cBPP;                        \
 | 
						|
+	if(bitshift < 0)                              \
 | 
						|
+	{                                             \
 | 
						|
+		bitshift = 8-displayProperties.cBPP;                   \
 | 
						|
+		bitmask = ((1<<displayProperties.cBPP)-1)<<bitshift;   \
 | 
						|
+		address += step;                          \
 | 
						|
+	}                                             \
 | 
						|
+	else                                          \
 | 
						|
+		bitmask >>= displayProperties.cBPP;
 | 
						|
+
 | 
						|
+
 | 
						|
+static void GAPI_UpdateRectsMono(_THIS, int numrects, SDL_Rect *rects)
 | 
						|
+{
 | 
						|
+	int i;
 | 
						|
+	unsigned char *screenBuffer;
 | 
						|
+
 | 
						|
+	screenBuffer = GXBeginDraw();
 | 
						|
+
 | 
						|
+	for (i=0; i<numrects; i++) {
 | 
						|
+		unsigned char *destPointer = screenBuffer + startOffset + (rects[i].x * dstPixelstep) + (rects[i].y * dstLinestep);
 | 
						|
+		unsigned char *srcPointer = (unsigned char*)gapiBuffer + (rects[i].x * srcPixelstep) + (rects[i].y * srcLinestep);
 | 
						|
+		unsigned char bitmask;
 | 
						|
+		int bitshift;
 | 
						|
+
 | 
						|
+		int height = rects[i].h;
 | 
						|
+		while (height) {
 | 
						|
+			updateLine(_THIS, srcPointer, destPointer, rects[i].w);
 | 
						|
+			destPointer += dstLinestep;
 | 
						|
+			srcPointer += srcLinestep;
 | 
						|
+			height--;
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+
 | 
						|
+	GXEndDraw();
 | 
						|
+}
 | 
						|
+*/
 | 
						|
+
 | 
						|
+/* -------------------------------------------------------------------------------- */
 | 
						|
+// Global fixme for paletted mode !
 | 
						|
+
 | 
						|
+#define COLORCONV565(r,g,b) (((r&0xf8)<<(11-3))|((g&0xfc)<<(5-2))|((b&0xf8)>>3))
 | 
						|
+
 | 
						|
+#define COLORCONV555(r,g,b) (((r&0xf8)<<(10-3))|((g&0xf8)<<(5-2))|((b&0xf8)>>3))
 | 
						|
+
 | 
						|
+int GAPI_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
 | 
						|
+{
 | 
						|
+	int i;
 | 
						|
+	/* Convert colors to appropriate 565 or 555 mapping */
 | 
						|
+	for (i=0; i<ncolors; i++) 
 | 
						|
+		convertPalette[firstcolor + i] = (videoMode == GAPI_DIRECT_565 ? 
 | 
						|
+			COLORCONV565(colors[i].r, colors[i].g, colors[i].b) :
 | 
						|
+			COLORCONV555(colors[i].r, colors[i].g, colors[i].b));
 | 
						|
+	return(1);
 | 
						|
+}
 | 
						|
+
 | 
						|
+static void GAPI_RealizePalette(_THIS)
 | 
						|
+{
 | 
						|
+	OutputDebugString(TEXT("GAPI_RealizePalette NOT IMPLEMENTED !\r\n"));
 | 
						|
+}
 | 
						|
+
 | 
						|
+static void GAPI_PaletteChanged(_THIS, HWND window)
 | 
						|
+{
 | 
						|
+	OutputDebugString(TEXT("GAPI_PaletteChanged NOT IMPLEMENTED !\r\n"));
 | 
						|
+}
 | 
						|
+
 | 
						|
+/* Exported for the windows message loop only */
 | 
						|
+static void GAPI_WinPAINT(_THIS, HDC hdc)
 | 
						|
+{
 | 
						|
+	OutputDebugString(TEXT("GAPI_WinPAINT NOT IMPLEMENTED !\r\n"));
 | 
						|
+}
 | 
						|
+
 | 
						|
+
 | 
						|
+/* Note:  If we are terminated, this could be called in the middle of
 | 
						|
+   another SDL video routine -- notably UpdateRects.
 | 
						|
+*/
 | 
						|
+void GAPI_VideoQuit(_THIS)
 | 
						|
+{
 | 
						|
+	/* Destroy the window and everything associated with it */
 | 
						|
+	if ( SDL_Window ) {
 | 
						|
+		/* Delete the screen bitmap (also frees screen->pixels) */
 | 
						|
+		if ( this->screen ) {
 | 
						|
+//#ifdef WIN32_PLATFORM_PSPC
 | 
						|
+			if ( this->screen->flags & SDL_FULLSCREEN ) {
 | 
						|
+				/* Unhide taskbar, etc. */
 | 
						|
+				//SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON);
 | 
						|
+				//ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL);
 | 
						|
+				DIB_ShowTaskBar(TRUE);
 | 
						|
+				GAPI_GrabHardwareKeys(FALSE);
 | 
						|
+			}
 | 
						|
+//#endif
 | 
						|
+
 | 
						|
+			if (this->screen->pixels != NULL)
 | 
						|
+			{
 | 
						|
+				free(this->screen->pixels);
 | 
						|
+				this->screen->pixels = NULL;
 | 
						|
+			}
 | 
						|
+
 | 
						|
+			if (GXCloseDisplay)
 | 
						|
+				GXCloseDisplay();
 | 
						|
+		}
 | 
						|
+	}
 | 
						|
+}
 | 
						|
+
 | 
						|
+void GAPI_GrabHardwareKeys(BOOL grab) {
 | 
						|
+	HINSTANCE GAPI_handle;
 | 
						|
+	tGXVoidFunction GAPIActionInput;
 | 
						|
+
 | 
						|
+	GAPI_handle = LoadLibrary(TEXT("gx.dll"));
 | 
						|
+	if (!GAPI_handle)
 | 
						|
+		return;
 | 
						|
+	GAPIActionInput = (tGXVoidFunction)GetProcAddress(GAPI_handle, (grab ? TEXT("?GXOpenInput@@YAHXZ") : TEXT("?GXCloseInput@@YAHXZ")));
 | 
						|
+	if (GAPIActionInput) {
 | 
						|
+		GAPIActionInput();
 | 
						|
+	}
 | 
						|
+	FreeLibrary(GAPI_handle);
 | 
						|
+}
 | 
						|
diff -ruN SDL-1.2.7-orig/src/video/wingapi/SDL_gapivideo.h SDL-1.2.7/src/video/wingapi/SDL_gapivideo.h
 | 
						|
--- SDL-1.2.7-orig/src/video/wingapi/SDL_gapivideo.h	Wed Dec 31 19:00:00 1969
 | 
						|
+++ SDL-1.2.7/src/video/wingapi/SDL_gapivideo.h	Sun May 30 17:57:48 2004
 | 
						|
@@ -0,0 +1,192 @@
 | 
						|
+/*
 | 
						|
+    SDL - Simple DirectMedia Layer
 | 
						|
+    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga
 | 
						|
+
 | 
						|
+    This library is free software; you can redistribute it and/or
 | 
						|
+    modify it under the terms of the GNU Library General Public
 | 
						|
+    License as published by the Free Software Foundation; either
 | 
						|
+    version 2 of the License, or (at your option) any later version.
 | 
						|
+
 | 
						|
+    This library is distributed in the hope that it will be useful,
 | 
						|
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
+    Library General Public License for more details.
 | 
						|
+
 | 
						|
+    You should have received a copy of the GNU Library General Public
 | 
						|
+    License along with this library; if not, write to the Free
 | 
						|
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
						|
+
 | 
						|
+    Sam Lantinga
 | 
						|
+    slouken@libsdl.org
 | 
						|
+*/
 | 
						|
+
 | 
						|
+#ifdef SAVE_RCSID
 | 
						|
+static char rcsid =
 | 
						|
+ "@(#) $Id: SDL_gapivideo.h,v 1.1 2004/02/02 23:25:35 lemure Exp $";
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+#ifndef _SDL_gapivideo_h
 | 
						|
+#define _SDL_gapivideo_h
 | 
						|
+
 | 
						|
+#include <windows.h>
 | 
						|
+
 | 
						|
+/* -------------------------------------------------------------------------------------------- */
 | 
						|
+
 | 
						|
+/* From gx.h, since it's not really C compliant */
 | 
						|
+
 | 
						|
+struct GXDisplayProperties {
 | 
						|
+    DWORD cxWidth;
 | 
						|
+    DWORD cyHeight;         // notice lack of 'th' in the word height.
 | 
						|
+    long cbxPitch;          // number of bytes to move right one x pixel - can be negative.
 | 
						|
+    long cbyPitch;          // number of bytes to move down one y pixel - can be negative.
 | 
						|
+    long cBPP;              // # of bits in each pixel
 | 
						|
+    DWORD ffFormat;         // format flags.
 | 
						|
+};
 | 
						|
+
 | 
						|
+struct GXKeyList {
 | 
						|
+    short vkUp;             // key for up
 | 
						|
+    POINT ptUp;             // x,y position of key/button.  Not on screen but in screen coordinates.
 | 
						|
+    short vkDown;
 | 
						|
+    POINT ptDown;
 | 
						|
+    short vkLeft;
 | 
						|
+    POINT ptLeft;
 | 
						|
+    short vkRight;
 | 
						|
+    POINT ptRight;
 | 
						|
+    short vkA;
 | 
						|
+    POINT ptA;
 | 
						|
+    short vkB;
 | 
						|
+    POINT ptB;
 | 
						|
+    short vkC;
 | 
						|
+    POINT ptC;
 | 
						|
+    short vkStart;
 | 
						|
+    POINT ptStart;
 | 
						|
+};
 | 
						|
+
 | 
						|
+#define kfLandscape	0x8			// Screen is rotated 270 degrees
 | 
						|
+#define kfPalette	0x10		// Pixel values are indexes into a palette
 | 
						|
+#define kfDirect	0x20		// Pixel values contain actual level information
 | 
						|
+#define kfDirect555	0x40		// 5 bits each for red, green and blue values in a pixel.
 | 
						|
+#define kfDirect565	0x80		// 5 red bits, 6 green bits and 5 blue bits per pixel
 | 
						|
+#define kfDirect888	0x100		// 8 bits each for red, green and blue values in a pixel.
 | 
						|
+#define kfDirect444	0x200		// 4 red, 4 green, 4 blue
 | 
						|
+#define kfDirectInverted 0x400
 | 
						|
+
 | 
						|
+#define GX_FULLSCREEN	0x01		// for OpenDisplay()
 | 
						|
+
 | 
						|
+/* -------------------------------------------------------------------------------------------- */
 | 
						|
+
 | 
						|
+/* Rotation direction */
 | 
						|
+typedef enum {
 | 
						|
+	SDL_ROTATE_NONE,
 | 
						|
+	SDL_ROTATE_LEFT,
 | 
						|
+	SDL_ROTATE_RIGHT
 | 
						|
+} SDL_RotateAttr;
 | 
						|
+
 | 
						|
+/* GAPI video mode */
 | 
						|
+typedef enum {
 | 
						|
+	GAPI_NONE = 0,
 | 
						|
+	GAPI_DIRECT_565,
 | 
						|
+	GAPI_DIRECT_555,
 | 
						|
+	GAPI_MONO,
 | 
						|
+	GAPI_PALETTE
 | 
						|
+} SDL_GAPIVideoMode;
 | 
						|
+
 | 
						|
+
 | 
						|
+/* Hidden "this" pointer for the video functions */
 | 
						|
+#define _THIS	SDL_VideoDevice *this
 | 
						|
+
 | 
						|
+/* GAPI functions definitions */
 | 
						|
+
 | 
						|
+typedef struct GXDisplayProperties (*tGXDisplayProperties)(void);
 | 
						|
+typedef int (*tGXOpenDisplay)(HWND, unsigned long);
 | 
						|
+typedef void* (*tGXBeginDraw)(void);
 | 
						|
+typedef int (*tGXVoidFunction)(void);
 | 
						|
+
 | 
						|
+/* Private display data */
 | 
						|
+
 | 
						|
+struct GAPI_funcs {
 | 
						|
+	tGXDisplayProperties dynamicGXGetDisplayProperties;
 | 
						|
+	tGXOpenDisplay	dynamicGXOpenDisplay;
 | 
						|
+	tGXVoidFunction	dynamicGXCloseDisplay;
 | 
						|
+	tGXBeginDraw	dynamicGXBeginDraw;
 | 
						|
+	tGXVoidFunction	dynamicGXEndDraw;
 | 
						|
+	tGXVoidFunction	dynamicGXSuspend;
 | 
						|
+	tGXVoidFunction	dynamicGXResume;
 | 
						|
+};
 | 
						|
+
 | 
						|
+struct GAPI_properties {
 | 
						|
+	unsigned char invert;
 | 
						|
+	int colorscale;
 | 
						|
+	int dstPixelstep;
 | 
						|
+	int dstLinestep;
 | 
						|
+	int startOffset;
 | 
						|
+	SDL_GAPIVideoMode videoMode;
 | 
						|
+};
 | 
						|
+
 | 
						|
+#define MAX_CLR         0x100
 | 
						|
+
 | 
						|
+struct palette_properties {
 | 
						|
+	unsigned char *palRed;
 | 
						|
+	unsigned char *palGreen;
 | 
						|
+	unsigned char *palBlue;
 | 
						|
+	unsigned short *pal;
 | 
						|
+};
 | 
						|
+
 | 
						|
+
 | 
						|
+struct SDL_PrivateVideoData {
 | 
						|
+	/* --- <Hack> --- begin with DIB private structure to allow DIB events code sharing */
 | 
						|
+	HBITMAP screen_bmp;
 | 
						|
+    HPALETTE screen_pal;
 | 
						|
+	void *work_pixels; /* if the display needs to be rotated, memory allocated by the API */
 | 
						|
+	void *rotation_pixels; /* if the display needs to be rotated, memory allocated by the code */
 | 
						|
+	SDL_RotateAttr rotation;
 | 
						|
+	char ozoneHack; /* force stylus translation if running without Hi Res flag */
 | 
						|
+
 | 
						|
+#define NUM_MODELISTS	4		/* 8, 16, 24, and 32 bits-per-pixel */
 | 
						|
+    int SDL_nummodes[NUM_MODELISTS];
 | 
						|
+    SDL_Rect **SDL_modelist[NUM_MODELISTS];
 | 
						|
+
 | 
						|
+	/* --- </Hack> --- */
 | 
						|
+
 | 
						|
+    int w, h;
 | 
						|
+    void *gapiBuffer;
 | 
						|
+	HPALETTE screenPal;
 | 
						|
+	struct GAPI_funcs gapiFuncs;
 | 
						|
+	struct GAPI_properties gapiProperties;
 | 
						|
+	struct GXDisplayProperties displayProps;
 | 
						|
+	int srcLinestep;
 | 
						|
+	int srcPixelstep;
 | 
						|
+
 | 
						|
+	int padWidth;
 | 
						|
+	int padHeight;
 | 
						|
+
 | 
						|
+	unsigned short *convertPalette;
 | 
						|
+};
 | 
						|
+
 | 
						|
+#define gapiBuffer (this->hidden->gapiBuffer)
 | 
						|
+#define mainSurfaceWidth (this->hidden->w)
 | 
						|
+#define mainSurfaceHeight (this->hidden->h)
 | 
						|
+#define rotation (this->hidden->rotation)
 | 
						|
+#define ozoneHack (this->hidden->ozoneHack)
 | 
						|
+#define displayProperties (this->hidden->displayProps)
 | 
						|
+#define screenPal (this->hidden->screenPal)
 | 
						|
+#define GXGetDisplayProperties (this->hidden->gapiFuncs.dynamicGXGetDisplayProperties)
 | 
						|
+#define GXOpenDisplay (this->hidden->gapiFuncs.dynamicGXOpenDisplay)
 | 
						|
+#define GXCloseDisplay (this->hidden->gapiFuncs.dynamicGXCloseDisplay)
 | 
						|
+#define GXBeginDraw (this->hidden->gapiFuncs.dynamicGXBeginDraw)
 | 
						|
+#define GXEndDraw (this->hidden->gapiFuncs.dynamicGXEndDraw)
 | 
						|
+#define GXSuspend (this->hidden->gapiFuncs.dynamicGXSuspend)
 | 
						|
+#define GXResume (this->hidden->gapiFuncs.dynamicGXResume)
 | 
						|
+#define invert (this->hidden->gapiProperties.invert)
 | 
						|
+#define colorscale (this->hidden->gapiProperties.colorscale)
 | 
						|
+#define videoMode (this->hidden->gapiProperties.videoMode)
 | 
						|
+#define srcPixelstep (this->hidden->srcPixelstep)
 | 
						|
+#define srcLinestep (this->hidden->srcLinestep)
 | 
						|
+#define dstPixelstep (this->hidden->gapiProperties.dstPixelstep)
 | 
						|
+#define dstLinestep (this->hidden->gapiProperties.dstLinestep)
 | 
						|
+#define startOffset (this->hidden->gapiProperties.startOffset)
 | 
						|
+#define padWidth (this->hidden->padWidth)
 | 
						|
+#define padHeight (this->hidden->padHeight)
 | 
						|
+#define convertPalette (this->hidden->convertPalette)
 | 
						|
+
 | 
						|
+#endif /* _SDL_gapivideo_h */
 |