changeset 32:7deee201073e

Initial SDL/Win32 support.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 24 May 2010 00:22:03 +0300
parents 502d54fd46fa
children 8b2b0677eb99
files pwplib/Makefile pwplib/pwplib-win.c
diffstat 2 files changed, 107 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- 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 $@ $+
 
--- 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 <windows.h>
 
+#ifdef DRIVE_SDL
+#include <SDL.h>
+#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;
 }