fixed crash with "autotest" due to clearing undefined bitmap rectangle
[rocksndiamonds.git] / src / libgame / system.c
index 64aaf0f822210821d3ba5925808d310db6d027e0..c41fbef27494cd40806fbd4b8567f53d801da07b 100644 (file)
@@ -103,6 +103,8 @@ void InitProgramInfo(char *argv0, char *config_filename, char *userdata_subdir,
   program.log_file[LOG_OUT_ID] = program.log_file_default[LOG_OUT_ID] = stdout;
   program.log_file[LOG_ERR_ID] = program.log_file_default[LOG_ERR_ID] = stderr;
 
+  program.api_thread_count = 0;
+
   program.headless = FALSE;
 }
 
@@ -271,7 +273,7 @@ void InitGfxClipRegion(boolean enabled, int x, int y, int width, int height)
   gfx.clip_height = height;
 }
 
-void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void))
+void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(boolean))
 {
   gfx.draw_busy_anim_function = draw_busy_anim_function;
 }
@@ -904,6 +906,9 @@ void FadeRectangle(int x, int y, int width, int height,
 void FillRectangle(Bitmap *bitmap, int x, int y, int width, int height,
                   Pixel color)
 {
+  if (program.headless)
+    return;
+
   if (DrawingDeactivated(x, y, width, height))
     return;
 
@@ -1843,6 +1848,24 @@ void PushUserEvent(int code, int value1, int value2)
   SDL_PushEvent((SDL_Event *)&event);
 }
 
+boolean PendingEscapeKeyEvent(void)
+{
+  if (PendingEvent())
+  {
+    Event event;
+
+    // check if any key press event is pending
+    if (SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYDOWN, SDL_KEYDOWN) != 1)
+      return FALSE;
+
+    // check if pressed key is "Escape" key
+    if (event.key.keysym.sym == KSYM_Escape)
+      return TRUE;
+  }
+
+  return FALSE;
+}
+
 
 // ============================================================================
 // joystick functions
@@ -1888,17 +1911,19 @@ void InitEmscriptenFilesystem(void)
 {
 #if defined(PLATFORM_EMSCRIPTEN)
   EM_ASM
-  (
+  ({
+    dir = UTF8ToString($0);
+
     Module.sync_done = 0;
 
-    FS.mkdir('/persistent');           // create persistent data directory
-    FS.mount(IDBFS, {}, '/persistent');        // mount with IDBFS filesystem type
+    FS.mkdir(dir);                     // create persistent data directory
+    FS.mount(IDBFS, {}, dir);          // mount with IDBFS filesystem type
     FS.syncfs(true, function(err)      // sync persistent data into memory
     {
       assert(!err);
       Module.sync_done = 1;
     });
-  );
+  }, PERSISTENT_DIRECTORY);
 
   // wait for persistent data to be synchronized to memory
   while (emscripten_run_script_int("Module.sync_done") == 0)