Incorporated slightly modified version of Rainer's WinCE patch
authorSam Lantinga <slouken@lokigames.com>
Wed, 18 Jul 2001 20:04:23 +0000
changeset 112 9ef74357a5fb
parent 111 53e3d8ba4321
child 113 e21ac1dd30f1
Incorporated slightly modified version of Rainer's WinCE patch
src/main/win32/SDL_main.c
src/video/windib/SDL_dibevents.c
src/video/windib/SDL_dibvideo.c
--- a/src/main/win32/SDL_main.c	Sat Jul 14 20:37:24 2001 +0000
+++ b/src/main/win32/SDL_main.c	Wed Jul 18 20:04:23 2001 +0000
@@ -16,8 +16,10 @@
 #include "SDL.h"
 #include "SDL_main.h"
 #ifdef main
+#ifndef _WIN32_WCE_EMULATION
 #undef main
 #endif
+#endif
 
 /* Do we really not want stdio redirection with Windows CE? */
 #ifdef _WIN32_WCE
@@ -28,7 +30,7 @@
 #define STDOUT_FILE	TEXT("stdout.txt")
 #define STDERR_FILE	TEXT("stderr.txt")
 
-#ifdef _WIN32_WCE
+#if defined(_WIN32_WCE) && _WIN32_WCE < 300
 /* seems to be undefined in Win CE although in online help */
 #define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t'))
 
@@ -52,7 +54,7 @@
 	}
 	return p;
 }
-#endif /* _WIN32_WCE */
+#endif /* _WIN32_WCE < 300 */
 
 /* Parse a command line buffer into arguments */
 static int ParseCommandLine(char *cmdline, char **argv)
@@ -274,7 +276,7 @@
 	nLen = wcslen(szCmdLine)+128+1;
 	bufp = (wchar_t *)alloca(nLen*2);
 	GetModuleFileName(NULL, bufp, 128);
-	wcsncpy(bufp+wcslen(bufp), szCmdLine,nLen);
+	wcsncpy(bufp+wcslen(bufp), szCmdLine,nLen-wcslen(bufp));
 	nLen = wcslen(bufp)+1;
 	cmdline = (char *)alloca(nLen);
 	if ( cmdline == NULL ) {
--- a/src/video/windib/SDL_dibevents.c	Sat Jul 14 20:37:24 2001 +0000
+++ b/src/video/windib/SDL_dibevents.c	Wed Jul 18 20:04:23 2001 +0000
@@ -87,6 +87,26 @@
 						wParam = VK_LMENU;
 					break;
 			}
+#ifdef NO_GETKEYBOARDSTATE
+			/* this is the workaround for the missing ToAscii() and ToUnicode() in CE (not necessary at KEYUP!) */
+			if ( SDL_TranslateUNICODE ) {
+				MSG msg;
+
+				msg.hwnd = hwnd;
+				msg.message = msg;
+				msg.wParam = wParam;
+				msg.lParam = lParam;
+				msg.time = 0;
+				if ( TranslateMessage(&m) && PeekMessage(&msg, hwnd, 0, WM_USER, PM_NOREMOVE) && (m.message == WM_CHAR) ) {
+					GetMessage(&m, hwnd, 0, WM_USER);
+			    		wParam = m.wParam;
+				} else {
+					wParam = 0;
+				}
+			} else {
+				wParam = 0;
+			}
+#endif /* NO_GETKEYBOARDSTATE */
 			posted = SDL_PrivateKeyboard(SDL_PRESSED,
 				TranslateKey(wParam,HIWORD(lParam),&keysym,1));
 		}
--- a/src/video/windib/SDL_dibvideo.c	Sat Jul 14 20:37:24 2001 +0000
+++ b/src/video/windib/SDL_dibvideo.c	Wed Jul 18 20:04:23 2001 +0000
@@ -375,9 +375,12 @@
 	hdc = GetDC(SDL_Window);
 	depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL);
 	ReleaseDC(SDL_Window, hdc);
+#ifndef _WIN32_WCE
+	// AFAIK 16 bit CE devices have indeed RGB 565
 	if ( depth == 16 ) {
 		depth = 15;	/* GDI defined as RGB 555 */
 	}
+#endif
 	return(depth);
 #else
     int dib_size;