# HG changeset patch # User Matti Hamalainen # Date 1274649723 -10800 # Node ID 7deee201073e5f5498576b63196323f3066e4ecf # Parent 502d54fd46fa008061473653c5ecf90caace0e84 Initial SDL/Win32 support. diff -r 502d54fd46fa -r 7deee201073e pwplib/Makefile --- a/pwplib/Makefile Mon May 24 00:21:39 2010 +0300 +++ b/pwplib/Makefile Mon May 24 00:22:03 2010 +0300 @@ -9,6 +9,8 @@ all: $(TARGETS) +pwplib.c: pwplib-unix.c pwplib-win.c + ../pwplib.a: $(OBJS) $(AR) rc $@ $+ diff -r 502d54fd46fa -r 7deee201073e pwplib/pwplib-win.c --- a/pwplib/pwplib-win.c Mon May 24 00:21:39 2010 +0300 +++ b/pwplib/pwplib-win.c Mon May 24 00:22:03 2010 +0300 @@ -7,47 +7,115 @@ #include +#ifdef DRIVE_SDL +#include +#endif + #include "pwplib.h" +static int sdl_init = 0; + /******************** random stuff *************************/ extern void pwplib_dummy(); #define pwp_dummy pwplib_dummy +void pwpwrite(const char *fmt, ...) +{ + if (!pwplib.setup[SETUP_SHUTUP]) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + + usleep(1000 * pwplib.set.infodelay); + } +} + /********************* timer ******************************/ #define TIMERHZ 72 int pwp_w32_ticks() { - int ticks = GetTickCount(); - - return ((ticks*TIMERHZ)/1000); -// (10000000/10441)); +#ifdef DRIVE_SDL + if (sdl_init) { + int quit = 0; + SDL_Event event; + if (SDL_PollEvent(&event) >= 0) { + switch (event.type) { + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_ESCAPE) + quit = 1; + break; + case SDL_QUIT: + quit = 1; + break; + } + } + if (quit) { + SDL_Quit(); + pwplib_shutdown(); + exit(1); + } + return (SDL_GetTicks() * TIMERHZ) / 1000; + } + else +#endif + { + int ticks = GetTickCount(); + return ((ticks*TIMERHZ)/1000); + // (10000000/10441)); + } } /******************** initialization *********************/ int pwplib_initcore() { - pwplib_init_common(); + int sdl_flags = 0; + + pwplib_init_common(); - win32con_init(); - - win32snd_init(); +#ifdef DRIVE_SDL + if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_AUDIO) != 0) { + pwpwrite("* SDL could not be initialized (%s).\n", SDL_GetError()); + sdl_init = 0; + } else + sdl_init = 1; - pwplib.timerfunc = pwp_w32_ticks; - + if (sdl_init && !pwp_SDL_init()) + { + sdl_init = 0; + SDL_Quit(); + } + if (sdl_init && !pwp_sdlaudio_init()) + { + sdl_init = 0; + SDL_Quit(); + } +#endif - if(pwplib.dump_rast==pwplib_dummy && pwplib.dump_attr!=pwplib_dummy) - pwplib.dump_rast=pwplib_dump_rast_plain; + if (!sdl_init) { +#ifdef DRIVE_WIN32 + win32con_init(); + win32snd_init(); + if (pwplib.dump_rast == pwplib_dummy && pwplib.dump_attr != pwplib_dummy) + pwplib.dump_rast = pwplib_dump_rast_plain; +#else + return 0; +#endif + } - return 1; + pwplib.timerfunc = pwp_w32_ticks; + + return 1; } /*********************************************************************/ void pwplib_startup() { + /* just dummy here */ } void pwplib_end() @@ -57,21 +125,39 @@ /* write some stuph */ } +#ifdef __WIN32 +int usleep(int t) +{ + Sleep(t / 1000); +} +#endif + /***************************************************************/ extern void pwplib_getopts(); int pwplib_init(int argc,char**argv) { -// printf("ME THINKS WIN32 ROOLZ\n\n"); + pwplib.argc=argc; + pwplib.argv=argv; + + pwplib_getopts(); - pwplib.argc=argc; - pwplib.argv=argv; + if (pwplib.setup[SETUP_WANTHELP]) + { + printhelp(); + exit(0); + } - pwplib_getopts(); + if (!pwplib_initcore()) + { + pwpwrite("initialization failed!\n"); + return 0; + } - pwplib_initcore(); + if (pwplib.setup[SETUP_WANTHELP]) + return 0; - return 1; + return 1; }