Commit ba06fd38 authored by Ryan C. Gordon's avatar Ryan C. Gordon

Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at

 activekitten.com.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401155
parent 91121c31
No preview for this file type
...@@ -25,6 +25,10 @@ static char rcsid = ...@@ -25,6 +25,10 @@ static char rcsid =
"@(#) $Id$"; "@(#) $Id$";
#endif #endif
#ifdef _WIN32_WCE
#define NO_SIGNAL_H
#endif
/* General fatal signal handling code for SDL */ /* General fatal signal handling code for SDL */
#ifdef NO_SIGNAL_H #ifdef NO_SIGNAL_H
......
...@@ -31,7 +31,7 @@ static char rcsid = ...@@ -31,7 +31,7 @@ static char rcsid =
#include <stdio.h> #include <stdio.h>
#if defined(USE_DLOPEN) #if defined(USE_DLOPEN)
# include <dlfcn.h> # include <dlfcn.h>
#elif defined(WIN32) #elif defined(WIN32) || defined(_WIN32_WCE)
# include <windows.h> # include <windows.h>
#elif defined(__BEOS__) #elif defined(__BEOS__)
# include <be/kernel/image.h> # include <be/kernel/image.h>
...@@ -60,6 +60,30 @@ void *SDL_LoadObject(const char *sofile) ...@@ -60,6 +60,30 @@ void *SDL_LoadObject(const char *sofile)
/* * */ /* * */
handle = dlopen(sofile, RTLD_NOW); handle = dlopen(sofile, RTLD_NOW);
loaderror = (char *)dlerror(); 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) #elif defined(WIN32)
/* * */ /* * */
char errbuf[512]; char errbuf[512];
...@@ -139,6 +163,30 @@ void *SDL_LoadFunction(void *handle, const char *name) ...@@ -139,6 +163,30 @@ void *SDL_LoadFunction(void *handle, const char *name)
if ( symbol == NULL ) { if ( symbol == NULL ) {
loaderror = (char *)dlerror(); 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) #elif defined(WIN32)
/* * */ /* * */
char errbuf[512]; char errbuf[512];
......
...@@ -40,3 +40,7 @@ void SDL_SYS_CDQuit(void) ...@@ -40,3 +40,7 @@ void SDL_SYS_CDQuit(void)
return; return;
} }
int SDL_CDROMInit(void)
{
return 0;
}
\ No newline at end of file
...@@ -101,7 +101,7 @@ CPUid by definition. But it's nice to be able to prove it. :) */ ...@@ -101,7 +101,7 @@ CPUid by definition. But it's nice to be able to prove it. :) */
: :
: "%rax", "%rcx" : "%rax", "%rcx"
); );
#elif defined(_MSC_VER) #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_))
__asm { __asm {
pushfd ; Get original EFLAGS pushfd ; Get original EFLAGS
pop eax pop eax
...@@ -140,7 +140,7 @@ static __inline__ int CPU_getCPUIDFeatures() ...@@ -140,7 +140,7 @@ static __inline__ int CPU_getCPUIDFeatures()
: :
: "%eax", "%ecx", "%edx", "%edi" : "%eax", "%ecx", "%edx", "%edi"
); );
#elif defined(_MSC_VER) #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_))
__asm { __asm {
xor eax, eax ; Set up for CPUID instruction xor eax, eax ; Set up for CPUID instruction
cpuid ; Get and save vendor ID cpuid ; Get and save vendor ID
...@@ -175,7 +175,7 @@ static __inline__ int CPU_getCPUIDFeaturesExt() ...@@ -175,7 +175,7 @@ static __inline__ int CPU_getCPUIDFeaturesExt()
: :
: "%eax", "%ecx", "%edx", "%edi" : "%eax", "%ecx", "%edx", "%edi"
); );
#elif defined(_MSC_VER) #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_X86_))
__asm { __asm {
mov eax,80000000h ; Query for extended functions mov eax,80000000h ; Query for extended functions
cpuid ; Get extended function limit cpuid ; Get extended function limit
......
...@@ -27,6 +27,10 @@ static char rcsid = ...@@ -27,6 +27,10 @@ static char rcsid =
/* General quit handling code for SDL */ /* General quit handling code for SDL */
#if defined (_WIN32_WCE)
#define NO_SIGNAL_H
#endif
#include <stdio.h> #include <stdio.h>
#ifndef NO_SIGNAL_H #ifndef NO_SIGNAL_H
#include <signal.h> #include <signal.h>
......
...@@ -34,6 +34,8 @@ static char rcsid = ...@@ -34,6 +34,8 @@ static char rcsid =
#include "SDL_sysjoystick.h" #include "SDL_sysjoystick.h"
#include "SDL_joystick_c.h" #include "SDL_joystick_c.h"
Uint8 SDL_numjoysticks = 0;
/* Function to scan the system for joysticks. /* Function to scan the system for joysticks.
* This function should set SDL_numjoysticks to the number of available * This function should set SDL_numjoysticks to the number of available
* joysticks. Joystick 0 should be the system default joystick. * joysticks. Joystick 0 should be the system default joystick.
......
...@@ -40,6 +40,7 @@ static char rcsid = ...@@ -40,6 +40,7 @@ static char rcsid =
#include "SDL_lowvideo.h" #include "SDL_lowvideo.h"
#include "SDL_syswm_c.h" #include "SDL_syswm_c.h"
#include "SDL_main.h" #include "SDL_main.h"
#include "SDL_loadso.h"
#ifdef WMMSG_DEBUG #ifdef WMMSG_DEBUG
#include "wmmsg.h" #include "wmmsg.h"
...@@ -71,13 +72,37 @@ WORD *gamma_saved = NULL; ...@@ -71,13 +72,37 @@ WORD *gamma_saved = NULL;
/* Functions called by the message processing function */ /* Functions called by the message processing function */
LONG LONG (*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL;
(*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL;
void (*WIN_RealizePalette)(_THIS); void (*WIN_RealizePalette)(_THIS);
void (*WIN_PaletteChanged)(_THIS, HWND window); void (*WIN_PaletteChanged)(_THIS, HWND window);
void (*WIN_WinPAINT)(_THIS, HDC hdc); void (*WIN_WinPAINT)(_THIS, HDC hdc);
extern void DIB_SwapGamma(_THIS); 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) static void SDL_RestoreGameMode(void)
{ {
#ifndef NO_CHANGEDISPLAYSETTINGS #ifndef NO_CHANGEDISPLAYSETTINGS
...@@ -213,6 +238,18 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) ...@@ -213,6 +238,18 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
SDL_RestoreGameMode(); 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); posted = SDL_PrivateAppActive(1, appstate);
WIN_GetKeyboardState(); WIN_GetKeyboardState();
} else { } else {
...@@ -230,6 +267,14 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) ...@@ -230,6 +267,14 @@ LONG CALLBACK WinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
} }
if ( WINDIB_FULLSCREEN() ) { if ( WINDIB_FULLSCREEN() ) {
SDL_RestoreDesktopMode(); 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); posted = SDL_PrivateAppActive(0, appstate);
......
...@@ -36,6 +36,8 @@ static char rcsid = ...@@ -36,6 +36,8 @@ static char rcsid =
#include "SDL_syswm_c.h" #include "SDL_syswm_c.h"
#include "SDL_wingl_c.h" #include "SDL_wingl_c.h"
#include "SDL_pixels_c.h" #include "SDL_pixels_c.h"
#include "SDL_loadso.h"
#ifdef _WIN32_WCE #ifdef _WIN32_WCE
#define DISABLE_ICON_SUPPORT #define DISABLE_ICON_SUPPORT
...@@ -48,6 +50,25 @@ static char rcsid = ...@@ -48,6 +50,25 @@ static char rcsid =
/* The screen icon -- needs to be freed on SDL_VideoQuit() */ /* The screen icon -- needs to be freed on SDL_VideoQuit() */
HICON screen_icn = NULL; 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: /* Win32 icon mask semantics are different from those of SDL:
SDL applies the mask to the icon and copies result to desktop. SDL applies the mask to the icon and copies result to desktop.
Win32 applies the mask to the desktop and XORs the icon on. Win32 applies the mask to the desktop and XORs the icon on.
...@@ -245,6 +266,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode) ...@@ -245,6 +266,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode)
ClientToScreen(SDL_Window, &pt); ClientToScreen(SDL_Window, &pt);
SetCursorPos(pt.x,pt.y); SetCursorPos(pt.x,pt.y);
} }
#ifdef _WIN32_WCE
if( input_catched )
{
if( !CoreCatchInput ) LoadInputCatchFunc();
if( CoreCatchInput )
CoreCatchInput(0);
}
#endif
} else { } else {
ClipCursor(&SDL_bounds); ClipCursor(&SDL_bounds);
if ( !(SDL_cursorstate & CURSOR_VISIBLE) ) { if ( !(SDL_cursorstate & CURSOR_VISIBLE) ) {
...@@ -257,6 +287,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode) ...@@ -257,6 +287,15 @@ SDL_GrabMode WIN_GrabInput(_THIS, SDL_GrabMode mode)
ClientToScreen(SDL_Window, &pt); ClientToScreen(SDL_Window, &pt);
SetCursorPos(pt.x, pt.y); SetCursorPos(pt.x, pt.y);
} }
#ifdef _WIN32_WCE
if( !input_catched )
{
if( !CoreCatchInput ) LoadInputCatchFunc();
if( CoreCatchInput )
CoreCatchInput(1);
}
#endif
} }
return(mode); return(mode);
} }
......
...@@ -360,12 +360,25 @@ static SDL_keysym *TranslateKey(UINT vkey, UINT scancode, SDL_keysym *keysym, in ...@@ -360,12 +360,25 @@ static SDL_keysym *TranslateKey(UINT vkey, UINT scancode, SDL_keysym *keysym, in
int DIB_CreateWindow(_THIS) int DIB_CreateWindow(_THIS)
{ {
#if defined(_WIN32_WCE) && (_WIN32_WCE < 300)
wchar_t *SDL_windowid_t;
#endif
#ifndef CS_BYTEALIGNCLIENT #ifndef CS_BYTEALIGNCLIENT
#define CS_BYTEALIGNCLIENT 0 #define CS_BYTEALIGNCLIENT 0
#endif #endif
SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0); SDL_RegisterApp("SDL_app", CS_BYTEALIGNCLIENT, 0);
if ( SDL_windowid ) { 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); SDL_Window = (HWND)strtol(SDL_windowid, NULL, 0);
#endif
if ( SDL_Window == NULL ) { if ( SDL_Window == NULL ) {
SDL_SetError("Couldn't get user specified window"); SDL_SetError("Couldn't get user specified window");
return(-1); return(-1);
......
...@@ -29,9 +29,13 @@ static char rcsid = ...@@ -29,9 +29,13 @@ static char rcsid =
#include <stdlib.h> #include <stdlib.h>
#include <malloc.h> #include <malloc.h>
#include <windows.h> #include <windows.h>
#if defined(WIN32_PLATFORM_PSPC)
#include <aygshell.h> // 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 #endif
/* Not yet in the mingw32 cross-compile headers */ /* Not yet in the mingw32 cross-compile headers */
...@@ -191,7 +195,7 @@ static SDL_VideoDevice *DIB_CreateDevice(int devindex) ...@@ -191,7 +195,7 @@ static SDL_VideoDevice *DIB_CreateDevice(int devindex)
} }
VideoBootStrap WINDIB_bootstrap = { VideoBootStrap WINDIB_bootstrap = {
"windib", "Win95/98/NT/2000 GDI", "windib", "Win95/98/NT/2000/CE GDI",
DIB_Available, DIB_CreateDevice DIB_Available, DIB_CreateDevice
}; };
...@@ -389,12 +393,6 @@ static int DIB_SussScreenDepth() ...@@ -389,12 +393,6 @@ static int DIB_SussScreenDepth()
hdc = GetDC(SDL_Window); hdc = GetDC(SDL_Window);
depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL); depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL);
ReleaseDC(SDL_Window, hdc); 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); return(depth);
#else #else
int dib_size; int dib_size;
...@@ -518,23 +516,18 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -518,23 +516,18 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current,
video->h = height; video->h = height;
video->pitch = SDL_CalculatePitch(video); video->pitch = SDL_CalculatePitch(video);
#ifdef WIN32_PLATFORM_PSPC /* Small fix for WinCE/Win32 - when activating window
/* Stuff to hide that $#!^%#$ WinCE taskbar in fullscreen... */ SDL_VideoSurface is equal to zero, so activating code
if ( flags & SDL_FULLSCREEN ) { is not called properly for fullscreen windows because
if ( !(prev_flags & SDL_FULLSCREEN) ) { macros WINDIB_FULLSCREEN uses SDL_VideoSurface
SHFullScreen(SDL_Window, SHFS_HIDETASKBAR); */
SHFullScreen(SDL_Window, SHFS_HIDESIPBUTTON); SDL_VideoSurface = video;
ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE);
} #if defined(_WIN32_WCE)
if ( flags & SDL_FULLSCREEN )
video->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 #endif
#ifndef NO_CHANGEDISPLAYSETTINGS #ifndef NO_CHANGEDISPLAYSETTINGS
/* Set fullscreen mode if appropriate */ /* Set fullscreen mode if appropriate */
if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) {
...@@ -942,14 +935,6 @@ void DIB_VideoQuit(_THIS) ...@@ -942,14 +935,6 @@ void DIB_VideoQuit(_THIS)
if ( SDL_Window ) { if ( SDL_Window ) {
/* Delete the screen bitmap (also frees screen->pixels) */ /* Delete the screen bitmap (also frees screen->pixels) */
if ( this->screen ) { 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 #ifndef NO_CHANGEDISPLAYSETTINGS
if ( this->screen->flags & SDL_FULLSCREEN ) { if ( this->screen->flags & SDL_FULLSCREEN ) {
ChangeDisplaySettings(NULL, 0); ChangeDisplaySettings(NULL, 0);
...@@ -975,6 +960,17 @@ void DIB_VideoQuit(_THIS) ...@@ -975,6 +960,17 @@ void DIB_VideoQuit(_THIS)
FlushMessageQueue(); FlushMessageQueue();
SDL_Window = NULL; SDL_Window = NULL;
#if defined(_WIN32_WCE)
// Unload wince aygshell library to prevent leak
if( aygshell )
{
FreeLibrary(aygshell);
aygshell = NULL;
}
#endif
} }
} }
......
...@@ -339,12 +339,20 @@ int main(int argc, char *argv[]) ...@@ -339,12 +339,20 @@ int main(int argc, char *argv[])
} }
/* Set 640x480 video mode */ /* Set 640x480 video mode */
#ifndef _WIN32_WCE
if ( (screen=SDL_SetVideoMode(640,480,video_bpp,videoflags)) == NULL ) { if ( (screen=SDL_SetVideoMode(640,480,video_bpp,videoflags)) == NULL ) {
fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n", fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n",
video_bpp, SDL_GetError()); video_bpp, SDL_GetError());
quit(2); 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! */ /* Set the surface pixels and refresh! */
if ( SDL_LockSurface(screen) < 0 ) { if ( SDL_LockSurface(screen) < 0 ) {
fprintf(stderr, "Couldn't lock the display surface: %s\n", fprintf(stderr, "Couldn't lock the display surface: %s\n",
......
...@@ -248,11 +248,18 @@ int main(int argc, char *argv[]) ...@@ -248,11 +248,18 @@ int main(int argc, char *argv[])
flip = 0; flip = 0;
nofade = 0; nofade = 0;
delay = 1; delay = 1;
#ifdef _WIN32_WCE
w = 640;
h = 320;
desired_bpp = 0;
video_flags = SDL_FULLSCREEN;
#else
w = 640; w = 640;
h = 480; h = 480;
desired_bpp = 0; desired_bpp = 0;
video_flags = 0; video_flags = 0;
#endif
if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, fprintf(stderr,
"Couldn't initialize SDL: %s\n", SDL_GetError()); "Couldn't initialize SDL: %s\n", SDL_GetError());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment