From 3d4ca0e69006f3989deb1e28d5b0c1875c5dd4da Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 29 Sep 2005 09:43:00 +0000 Subject: [PATCH] Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at activekitten.com. --- VisualCE.zip | Bin 9350 -> 26984 bytes src/SDL_fatal.c | 4 ++ src/SDL_loadso.c | 50 ++++++++++++++++++++- src/cdrom/dummy/SDL_syscdrom.c | 4 ++ src/cpuinfo/SDL_cpuinfo.c | 6 +-- src/events/SDL_quit.c | 4 ++ src/joystick/dummy/SDL_sysjoystick.c | 2 + src/video/wincommon/SDL_sysevents.c | 49 ++++++++++++++++++++- src/video/wincommon/SDL_syswm.c | 39 +++++++++++++++++ src/video/windib/SDL_dibevents.c | 13 ++++++ src/video/windib/SDL_dibvideo.c | 62 +++++++++++++-------------- test/testalpha.c | 10 ++++- test/testwin.c | 9 +++- 13 files changed, 211 insertions(+), 41 deletions(-) diff --git a/VisualCE.zip b/VisualCE.zip index 834b4fb60d5828afe608600d36e7bf5023706464..4350a8702af16bd7c097bd8a39d4c705c3b8cad5 100644 GIT binary patch literal 26984 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 diff --git a/src/SDL_fatal.c b/src/SDL_fatal.c index 74f90ed7d..3f1e1f6bb 100644 --- a/src/SDL_fatal.c +++ b/src/SDL_fatal.c @@ -25,6 +25,10 @@ static char rcsid = "@(#) $Id$"; #endif +#ifdef _WIN32_WCE +#define NO_SIGNAL_H +#endif + /* General fatal signal handling code for SDL */ #ifdef NO_SIGNAL_H diff --git a/src/SDL_loadso.c b/src/SDL_loadso.c index b38120743..9f87f87fc 100644 --- a/src/SDL_loadso.c +++ b/src/SDL_loadso.c @@ -31,7 +31,7 @@ static char rcsid = #include #if defined(USE_DLOPEN) # include -#elif defined(WIN32) +#elif defined(WIN32) || defined(_WIN32_WCE) # include #elif defined(__BEOS__) # include @@ -60,6 +60,30 @@ void *SDL_LoadObject(const char *sofile) /* * */ handle = dlopen(sofile, RTLD_NOW); loaderror = (char *)dlerror(); +#elif defined(_WIN32_WCE) +/* * */ + char errbuf[512]; + + wchar_t *errbuf_t = malloc(512 * sizeof(wchar_t)); + wchar_t *sofile_t = malloc((MAX_PATH+1) * sizeof(wchar_t)); + + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, sofile, -1, sofile_t, MAX_PATH); + handle = (void *)LoadLibrary(sofile_t); + + /* Generate an error message if all loads failed */ + if ( handle == NULL ) { + FormatMessage((FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM), + NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + errbuf_t, SDL_TABLESIZE(errbuf), NULL); + WideCharToMultiByte(CP_ACP, 0, errbuf_t, -1, errbuf, 511, NULL, NULL); + loaderror = errbuf; + } + + free(sofile_t); + free(errbuf_t); + #elif defined(WIN32) /* * */ char errbuf[512]; @@ -139,6 +163,30 @@ void *SDL_LoadFunction(void *handle, const char *name) if ( symbol == NULL ) { loaderror = (char *)dlerror(); } +#elif defined(_WIN32_WCE) +/* * */ + char errbuf[512]; + int length = strlen(name); + + wchar_t *name_t = malloc((length + 1) * sizeof(wchar_t)); + wchar_t *errbuf_t = malloc(512 * sizeof(wchar_t)); + + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, name_t, length); + + symbol = (void *)GetProcAddress((HMODULE)handle, name_t); + if ( symbol == NULL ) { + FormatMessage((FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM), + NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + errbuf_t, SDL_TABLESIZE(errbuf), NULL); + WideCharToMultiByte(CP_ACP, 0, errbuf_t, -1, errbuf, 511, NULL, NULL); + loaderror = errbuf; + } + + free(name_t); + free(errbuf_t); + #elif defined(WIN32) /* * */ char errbuf[512]; diff --git a/src/cdrom/dummy/SDL_syscdrom.c b/src/cdrom/dummy/SDL_syscdrom.c index cceb89592..adccd6608 100644 --- a/src/cdrom/dummy/SDL_syscdrom.c +++ b/src/cdrom/dummy/SDL_syscdrom.c @@ -40,3 +40,7 @@ void SDL_SYS_CDQuit(void) return; } +int SDL_CDROMInit(void) +{ + return 0; +} \ No newline at end of file diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index a8fa97203..cbb87371b 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -101,7 +101,7 @@ CPUid by definition. But it's nice to be able to prove it. :) */ : : "%rax", "%rcx" ); -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) __asm { pushfd ; Get original EFLAGS pop eax @@ -140,7 +140,7 @@ static __inline__ int CPU_getCPUIDFeatures() : : "%eax", "%ecx", "%edx", "%edi" ); -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) __asm { xor eax, eax ; Set up for CPUID instruction cpuid ; Get and save vendor ID @@ -175,7 +175,7 @@ static __inline__ int CPU_getCPUIDFeaturesExt() : : "%eax", "%ecx", "%edx", "%edi" ); -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_)) __asm { mov eax,80000000h ; Query for extended functions cpuid ; Get extended function limit diff --git a/src/events/SDL_quit.c b/src/events/SDL_quit.c index 1689df946..9204498da 100644 --- a/src/events/SDL_quit.c +++ b/src/events/SDL_quit.c @@ -27,6 +27,10 @@ static char rcsid = /* General quit handling code for SDL */ +#if defined (_WIN32_WCE) +#define NO_SIGNAL_H +#endif + #include #ifndef NO_SIGNAL_H #include diff --git a/src/joystick/dummy/SDL_sysjoystick.c b/src/joystick/dummy/SDL_sysjoystick.c index 2c1eeffb1..5f7d104b1 100644 --- a/src/joystick/dummy/SDL_sysjoystick.c +++ b/src/joystick/dummy/SDL_sysjoystick.c @@ -34,6 +34,8 @@ static char rcsid = #include "SDL_sysjoystick.h" #include "SDL_joystick_c.h" +Uint8 SDL_numjoysticks = 0; + /* Function to scan the system for joysticks. * This function should set SDL_numjoysticks to the number of available * joysticks. Joystick 0 should be the system default joystick. diff --git a/src/video/wincommon/SDL_sysevents.c b/src/video/wincommon/SDL_sysevents.c index 65472515f..16dcfb21a 100644 --- a/src/video/wincommon/SDL_sysevents.c +++ b/src/video/wincommon/SDL_sysevents.c @@ -40,6 +40,7 @@ static char rcsid = #include "SDL_lowvideo.h" #include "SDL_syswm_c.h" #include "SDL_main.h" +#include "SDL_loadso.h" #ifdef WMMSG_DEBUG #include "wmmsg.h" @@ -71,13 +72,37 @@ WORD *gamma_saved = NULL; /* Functions called by the message processing function */ -LONG -(*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL; +LONG (*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL; void (*WIN_RealizePalette)(_THIS); void (*WIN_PaletteChanged)(_THIS, HWND window); void (*WIN_WinPAINT)(_THIS, HDC hdc); extern void DIB_SwapGamma(_THIS); +#if defined(_WIN32_WCE) + +// dynamically load aygshell dll because we want SDL to work on HPC and be300 +HINSTANCE aygshell = NULL; +BOOL (WINAPI *SHFullScreen)(HWND hwndRequester, DWORD dwState) = 0; + +#define SHFS_SHOWTASKBAR 0x0001 +#define SHFS_HIDETASKBAR 0x0002 +#define SHFS_SHOWSIPBUTTON 0x0004 +#define SHFS_HIDESIPBUTTON 0x0008 +#define SHFS_SHOWSTARTICON 0x0010 +#define SHFS_HIDESTARTICON 0x0020 + +static void LoadAygshell(void) +{ + if( !aygshell ) + aygshell = SDL_LoadObject("aygshell.dll"); + if( aygshell ) + { + SHFullScreen = (int (WINAPI *)(struct HWND__ *,unsigned long)) SDL_LoadFunction(aygshell, "SHFullScreen"); + } +} + +#endif + static void SDL_RestoreGameMode(void) { #ifndef NO_CHANGEDISPLAYSETTINGS @@ -213,6 +238,18 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) SDL_RestoreGameMode(); } } +#if defined(_WIN32_WCE) + if ( WINDIB_FULLSCREEN() ) + { + LoadAygshell(); + if( aygshell ) + SHFullScreen(SDL_Window, SHFS_HIDESTARTICON|SHFS_HIDETASKBAR|SHFS_HIDESIPBUTTON); + else + ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE); + + } +#endif + posted = SDL_PrivateAppActive(1, appstate); WIN_GetKeyboardState(); } else { @@ -230,6 +267,14 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } if ( WINDIB_FULLSCREEN() ) { SDL_RestoreDesktopMode(); +#if defined(_WIN32_WCE) + LoadAygshell(); + if( aygshell ) + SHFullScreen(SDL_Window, SHFS_SHOWSTARTICON|SHFS_SHOWTASKBAR|SHFS_SHOWSIPBUTTON); + else + ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOW); + +#endif } } posted = SDL_PrivateAppActive(0, appstate); diff --git a/src/video/wincommon/SDL_syswm.c b/src/video/wincommon/SDL_syswm.c index bb329e35e..06d863aab 100644 --- a/src/video/wincommon/SDL_syswm.c +++ b/src/video/wincommon/SDL_syswm.c @@ -36,6 +36,8 @@ static char rcsid = #include "SDL_syswm_c.h" #include "SDL_wingl_c.h" #include "SDL_pixels_c.h" +#include "SDL_loadso.h" + #ifdef _WIN32_WCE #define DISABLE_ICON_SUPPORT @@ -48,6 +50,25 @@ static char rcsid = /* The screen icon -- needs to be freed on SDL_VideoQuit() */ HICON screen_icn = NULL; +#ifdef _WIN32_WCE + +BOOL (WINAPI *CoreCatchInput)(int flag) = NULL; +int input_catched = 0; +HINSTANCE coredll = NULL; + +// the same API call that gx.dll does to catch the input +void LoadInputCatchFunc() +{ + coredll = SDL_LoadObject("coredll.dll"); + if( coredll ) + { + CoreCatchInput = (int (WINAPI *)(int)) GetProcAddress(coredll, (const unsigned short *) 1453); + } +} + +#endif + + /* Win32 icon mask semantics are different from those of SDL: SDL applies the mask to the icon and copies result to desktop. Win32 applies the mask to the desktop and XORs the icon on. @@ -245,6 +266,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode) ClientToScreen(SDL_Window, &pt); SetCursorPos(pt.x,pt.y); } +#ifdef _WIN32_WCE + if( input_catched ) + { + if( !CoreCatchInput ) LoadInputCatchFunc(); + + if( CoreCatchInput ) + CoreCatchInput(0); + } +#endif } else { ClipCursor(&SDL_bounds); if ( !(SDL_cursorstate & CURSOR_VISIBLE) ) { @@ -257,6 +287,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode) ClientToScreen(SDL_Window, &pt); SetCursorPos(pt.x, pt.y); } +#ifdef _WIN32_WCE + if( !input_catched ) + { + if( !CoreCatchInput ) LoadInputCatchFunc(); + + if( CoreCatchInput ) + CoreCatchInput(1); + } +#endif } return(mode); } diff --git a/src/video/windib/SDL_dibevents.c b/src/video/windib/SDL_dibevents.c index 43b8a4ab6..a7c3f3622 100644 --- a/src/video/windib/SDL_dibevents.c +++ b/src/video/windib/SDL_dibevents.c @@ -360,12 +360,25 @@ static SDL_keysym *TranslateKey(UINT vkey, UINT scancode, SDL_keysym *keysym, in int DIB_CreateWindow(_THIS) { +#if defined(_WIN32_WCE) && (_WIN32_WCE < 300) + wchar_t *SDL_windowid_t; +#endif + #ifndef CS_BYTEALIGNCLIENT #define CS_BYTEALIGNCLIENT 0 #endif SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0); if ( SDL_windowid ) { + +// wince 2.1 does not have strtol +#if defined(_WIN32_WCE) && (_WIN32_WCE < 300) + SDL_windowid_t = malloc((strlen(SDL_windowid) + 1) * sizeof(wchar_t)); + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, SDL_windowid, -1, SDL_windowid_t, strlen(SDL_windowid) + 1); + SDL_Window = (HWND)wcstol(SDL_windowid_t, NULL, 0); + free(SDL_windowid_t); +#else SDL_Window = (HWND)strtol(SDL_windowid, NULL, 0); +#endif if ( SDL_Window == NULL ) { SDL_SetError("Couldn't get user specified window"); return(-1); diff --git a/src/video/windib/SDL_dibvideo.c b/src/video/windib/SDL_dibvideo.c index aa74bf726..0945f667c 100644 --- a/src/video/windib/SDL_dibvideo.c +++ b/src/video/windib/SDL_dibvideo.c @@ -29,9 +29,13 @@ static char rcsid = #include #include #include -#if defined(WIN32_PLATFORM_PSPC) -#include // Add Pocket PC includes -#pragma comment( lib, "aygshell" ) // Link Pocket PC library + + +#if defined(_WIN32_WCE) + +// defined and used in SDL_sysevents.c +extern HINSTANCE aygshell; + #endif /* Not yet in the mingw32 cross-compile headers */ @@ -191,7 +195,7 @@ static SDL_VideoDevice *DIB_CreateDevice(int devindex) } VideoBootStrap WINDIB_bootstrap = { - "windib", "Win95/98/NT/2000 GDI", + "windib", "Win95/98/NT/2000/CE GDI", DIB_Available, DIB_CreateDevice }; @@ -389,12 +393,6 @@ static int DIB_SussScreenDepth() 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; @@ -518,23 +516,18 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, video->h = height; video->pitch = SDL_CalculatePitch(video); -#ifdef WIN32_PLATFORM_PSPC - /* 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); - } + /* Small fix for WinCE/Win32 - when activating window + SDL_VideoSurface is equal to zero, so activating code + is not called properly for fullscreen windows because + macros WINDIB_FULLSCREEN uses SDL_VideoSurface + */ + SDL_VideoSurface = video; + +#if defined(_WIN32_WCE) + if ( flags & SDL_FULLSCREEN ) 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); - } - } #endif + #ifndef NO_CHANGEDISPLAYSETTINGS /* Set fullscreen mode if appropriate */ if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { @@ -942,14 +935,6 @@ void DIB_VideoQuit(_THIS) 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); @@ -975,6 +960,17 @@ void DIB_VideoQuit(_THIS) FlushMessageQueue(); SDL_Window = NULL; + +#if defined(_WIN32_WCE) + +// Unload wince aygshell library to prevent leak + if( aygshell ) + { + FreeLibrary(aygshell); + aygshell = NULL; + } +#endif + } } diff --git a/test/testalpha.c b/test/testalpha.c index d817e44b7..5e926e775 100644 --- a/test/testalpha.c +++ b/test/testalpha.c @@ -339,12 +339,20 @@ int main(int argc, char *argv[]) } /* Set 640x480 video mode */ +#ifndef _WIN32_WCE if ( (screen=SDL_SetVideoMode(640,480,video_bpp,videoflags)) == NULL ) { fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n", video_bpp, SDL_GetError()); quit(2); } - +#else + /* Pocket PC */ + if ( (screen=SDL_SetVideoMode(240,320,video_bpp,SDL_FULLSCREEN)) == NULL ) { + fprintf(stderr, "Couldn't set 240x320x%d video mode: %s\n", + video_bpp, SDL_GetError()); + quit(2); + } +#endif /* Set the surface pixels and refresh! */ if ( SDL_LockSurface(screen) < 0 ) { fprintf(stderr, "Couldn't lock the display surface: %s\n", diff --git a/test/testwin.c b/test/testwin.c index 523573bf3..485963361 100644 --- a/test/testwin.c +++ b/test/testwin.c @@ -248,11 +248,18 @@ int main(int argc, char *argv[]) flip = 0; nofade = 0; delay = 1; + +#ifdef _WIN32_WCE + w = 640; + h = 320; + desired_bpp = 0; + video_flags = SDL_FULLSCREEN; +#else w = 640; h = 480; desired_bpp = 0; video_flags = 0; - +#endif if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());