X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fgacela_SDL.c;h=936308a6fad7911bc2dd8f51d51a7785e97e28d9;hb=e94c05c3062cb7d530c20bfc33bb5b058000034f;hp=920f11eabbb4d8214fc03dbe2f37ca7f8421b88d;hpb=b4686262caf3875963b6b0c7d8363d11318d36a3;p=gacela.git diff --git a/src/gacela_SDL.c b/src/gacela_SDL.c index 920f11e..936308a 100644 --- a/src/gacela_SDL.c +++ b/src/gacela_SDL.c @@ -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; }