]> git.jsancho.org Git - gacela.git/blobdiff - src/gacela_SDL.c
(no commit message)
[gacela.git] / src / gacela_SDL.c
index 920f11eabbb4d8214fc03dbe2f37ca7f8421b88d..936308a6fad7911bc2dd8f51d51a7785e97e28d9 100644 (file)
@@ -31,6 +31,105 @@ gacela_SDL_WM_SetCaption (SCM title, SCM icon)
   return SCM_UNSPECIFIED;
 }
 
+SCM
+gacela_SDL_Flip (SCM screen)
+{
+  return scm_from_int (SDL_Flip ((SDL_Surface *)scm_to_int (screen)));
+}
+
+SCM
+gacela_SDL_FreeSurface (SCM surface)
+{
+  SDL_FreeSurface ((SDL_Surface *)scm_to_int (surface));
+  return SCM_UNSPECIFIED;
+}
+
+SCM
+gacela_SDL_Delay (SCM ms)
+{
+  SDL_Delay (scm_to_int (ms));
+  return SCM_UNSPECIFIED;
+}
+
+SCM
+gacela_SDL_GetTicks ()
+{
+  return scm_from_int (SDL_GetTicks ());
+}
+
+SCM
+gacela_SDL_DisplayFormat (SCM surface)
+{
+  return scm_from_int ((int)SDL_DisplayFormat ((SDL_Surface *)scm_to_int (surface)));
+}
+
+SCM
+gacela_SDL_MapRGB (SCM format, SCM r, SCM g, SCM b)
+{
+  return scm_from_int (SDL_MapRGB ((SDL_PixelFormat *)scm_to_int (format), scm_to_int (r), scm_to_int (g), scm_to_int (b)));
+}
+
+SCM
+gacela_SDL_SetColorKey (SCM surface, SCM flag, SCM key)
+{
+  return scm_from_int (SDL_SetColorKey ((SDL_Surface *)scm_to_int (surface), scm_to_int (flag), scm_to_int (key)));
+}
+
+SCM
+gacela_SDL_LoadBMP (SCM file)
+{
+  return scm_from_int ((int)SDL_LoadBMP (scm_to_locale_string (file)));
+}
+
+SCM
+gacela_IMG_Load (SCM filename)
+{
+  return scm_from_int ((int)IMG_Load (scm_to_locale_string (filename)));
+}
+
+SCM
+gacela_SDL_GetVideoInfo ()
+{
+  const SDL_VideoInfo *info;
+  SCM vi;
+
+  info = SDL_GetVideoInfo ();
+  vi = scm_list_n (SCM_UNDEFINED);
+
+  vi = scm_cons (scm_cons (scm_from_locale_symbol ("blit_hw"), scm_from_int (info->blit_hw)), vi);
+  vi = scm_cons (scm_cons (scm_from_locale_symbol ("hw_available"), scm_from_int (info->hw_available)), vi);
+
+  return vi;
+}
+
+SCM
+gacela_SDL_GL_SetAttribute (SCM attr, SCM value)
+{
+  return scm_from_int (SDL_GL_SetAttribute (scm_to_int (attr), scm_to_int (value)));
+}
+
+SCM
+gacela_SDL_PollEvent ()
+{
+  SDL_Event sdl_event;
+  SCM event;
+
+  event = scm_list_n (SCM_UNDEFINED);
+
+  if (SDL_PollEvent (&sdl_event)) {
+    switch (sdl_event.type) {
+    case SDL_KEYDOWN:
+    case SDL_KEYUP:
+      event = scm_cons (scm_cons (scm_from_locale_symbol ("key.keysym.sym"), scm_from_int (sdl_event.key.keysym.sym)), event);
+      break;
+    }
+    event = scm_cons (scm_cons (scm_from_locale_symbol ("type"), scm_from_int (sdl_event.type)), event);
+  }
+
+  return event;
+}
+
+
 void*
 SDL_register_functions (void* data)
 {
@@ -73,6 +172,18 @@ SDL_register_functions (void* data)
   scm_c_define_gsubr ("SDL_Quit", 0, 0, 0, gacela_SDL_Quit);
   scm_c_define_gsubr ("SDL_SetVideoMode", 4, 0, 0, gacela_SDL_SetVideoMode);
   scm_c_define_gsubr ("SDL_WM_SetCaption", 2, 0, 0, gacela_SDL_WM_SetCaption);
+  scm_c_define_gsubr ("SDL_Flip", 1, 0, 0, gacela_SDL_Flip);
+  scm_c_define_gsubr ("SDL_FreeSurface", 1, 0, 0, gacela_SDL_FreeSurface);
+  scm_c_define_gsubr ("SDL_Delay", 1, 0, 0, gacela_SDL_Delay);
+  scm_c_define_gsubr ("SDL_GetTicks", 0, 0, 0, gacela_SDL_GetTicks);
+  scm_c_define_gsubr ("SDL_DisplayFormat", 1, 0, 0, gacela_SDL_DisplayFormat);
+  scm_c_define_gsubr ("SDL_MapRGB", 4, 0, 0, gacela_SDL_MapRGB);
+  scm_c_define_gsubr ("SDL_SetColorKey", 3, 0, 0, gacela_SDL_SetColorKey);
+  scm_c_define_gsubr ("SDL_LoadBMP", 1, 0, 0, gacela_SDL_LoadBMP);
+  scm_c_define_gsubr ("IMG_Load", 1, 0, 0, gacela_IMG_Load);
+  scm_c_define_gsubr ("SDL_GetVideoInfo", 0, 0, 0, gacela_SDL_GetVideoInfo);
+  scm_c_define_gsubr ("SDL_GL_SetAttribute", 2, 0, 0, gacela_SDL_GL_SetAttribute);
+  scm_c_define_gsubr ("SDL_PollEvent", 0, 0, 0, gacela_SDL_PollEvent);
 
   return NULL;
 }