]> git.jsancho.org Git - gacela.git/blob - gacela_SDL.lisp
26e9a6fa46d216abb232b6707d73a43dbb6b252f
[gacela.git] / gacela_SDL.lisp
1 ;;; Gacela, a GNU Common Lisp extension for fast games development
2 ;;; Copyright (C) 2009 by Javier Sancho Fernandez <jsf at jsancho dot org>
3 ;;;
4 ;;; This program is free software: you can redistribute it and/or modify
5 ;;; it under the terms of the GNU General Public License as published by
6 ;;; the Free Software Foundation, either version 3 of the License, or
7 ;;; (at your option) any later version.
8 ;;;
9 ;;; This program is distributed in the hope that it will be useful,
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 ;;; GNU General Public License for more details.
13 ;;;
14 ;;; You should have received a copy of the GNU General Public License
15 ;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17
18 (in-package :gacela)
19
20 (clines "#include <SDL/SDL.h>")
21 (clines "#include <SDL/SDL_image.h>")
22 (clines "#include <SDL/SDL_ttf.h>")
23 (clines "#include <SDL/SDL_mixer.h>")
24
25 ;;; These are the flags which may be passed to SDL_Init()
26 (defconstant SDL_INIT_TIMER             #x00000001)
27 (defconstant SDL_INIT_AUDIO             #x00000010)
28 (defconstant SDL_INIT_VIDEO             #x00000020)
29 (defconstant SDL_INIT_CDROM             #x00000100)
30 (defconstant SDL_INIT_JOYSTICK          #x00000200)
31 (defconstant SDL_INIT_NOPARACHUTE       #x00100000)
32 (defconstant SDL_INIT_EVENTTHREAD       #x01000000)
33 (defconstant SDL_INIT_EVERYTHING        #x0000FFFF)
34
35
36 ;;; These are the currently supported flags for the SDL_surface
37 ;;; Available for SDL_CreateRGBSurface() or SDL_SetVideoMode()
38 (defconstant SDL_SWSURFACE              #x00000000)
39 (defconstant SDL_HWSURFACE              #x00000001)
40 (defconstant SDL_ASYNCBLIT              #x00000004)
41
42
43 ;;; Available for SDL_SetVideoMode()
44 (defconstant SDL_ANYFORMAT              #x10000000)
45 (defconstant SDL_HWPALETTE              #x20000000)
46 (defconstant SDL_DOUBLEBUF              #x40000000)
47 (defconstant SDL_FULLSCREEN             #x80000000)
48 (defconstant SDL_OPENGL                 #x00000002)
49 (defconstant SDL_OPENGLBLIT             #x0000000A)
50 (defconstant SDL_RESIZABLE              #x00000010)
51 (defconstant SDL_NOFRAME                #x00000020)
52
53 ;;; Used internally (read-only)
54 (defconstant SDL_HWACCEL                #x00000100)
55 (defconstant SDL_SRCCOLORKEY            #x00001000)
56
57 ;;; For setting the OpenGL window attributes
58 (defconstant SDL_GL_DOUBLEBUFFER        5)
59
60 ;;; Keyboard
61 (defconstant SDL_DEFAULT_REPEAT_DELAY     500)
62 (defconstant SDL_DEFAULT_REPEAT_INTERVAL  30)
63
64
65 ;;; SDL Functions
66 (defcfun "int gacela_SDL_Init (int flags)" 0
67   "return SDL_Init (flags);")
68
69 (defcfun "void gacela_SDL_Quit (void)" 0
70   "SDL_Quit ();")
71
72 (defcfun "int gacela_SDL_SetVideoMode (int width, int height, int bpp, int flags)" 0
73   "return SDL_SetVideoMode (width, height, bpp, flags);")
74
75 (defcfun "void gacela_SDL_WM_SetCaption (char *title, char *icon)" 0
76   "SDL_WM_SetCaption (title, icon);")
77
78 (defcfun "int gacela_SDL_Flip (int screen)" 0
79   "return SDL_Flip (screen);")
80
81 (defcfun "void gacela_SDL_FreeSurface (int surface)" 0
82   "SDL_FreeSurface (surface);")
83
84 (defcfun "void gacela_SDL_Delay (int ms)" 0
85   "SDL_Delay (ms);")
86
87 (defcfun "int gacela_SDL_GetTicks (void)" 0
88   "return SDL_GetTicks ();")
89
90 (defcfun "int gacela_SDL_DisplayFormat (int surface)" 0
91   "return SDL_DisplayFormat (surface);")
92
93 (defcfun "int gacela_SDL_MapRGB (int format, int r, int g, int b)" 0
94   "return SDL_MapRGB (format, r, g, b);")
95
96 (defcfun "int gacela_SDL_SetColorKey (int surface, int flag, int key)" 0
97   "return SDL_SetColorKey (surface, flag, key);")
98
99 (defcfun "int gacela_SDL_LoadBMP (char *file)" 0
100   "return SDL_LoadBMP (file);")
101
102 (defcfun "int gacela_IMG_Load (char *filename)" 0
103   "return IMG_Load (filename);")
104
105 (defcfun "static object gacela_SDL_GetVideoInfo (void)" 0
106   "const SDL_VideoInfo *info;"
107   "object vi, label;"
108   "info = SDL_GetVideoInfo ();"
109   ('nil vi)
110   ((cons (int info->blit_hw) vi) vi) (':blit_hw label) ((cons label vi) vi)
111   ((cons (int info->hw_available) vi) vi) (':hw_available label) ((cons label vi) vi)
112   "return vi;")
113
114 (defcfun "int gacela_SDL_GL_SetAttribute (int attr, int value)" 0
115   "return SDL_GL_SetAttribute (attr, value);")
116
117 (defcfun "static object gacela_SDL_PollEvent (void)" 0
118   "SDL_Event sdl_event;"
119   "object event, label;"
120   ('nil event)
121   "if (SDL_PollEvent (&sdl_event)) {"
122   "  switch (sdl_event.type) {"
123   "    case SDL_KEYDOWN:"
124   "    case SDL_KEYUP:"
125   ((cons (int sdl_event.key.keysym.sym) event) event) (':key.keysym.sym label) ((cons label event) event)
126   "      break;"
127   "  }"
128   ((cons (int sdl_event.type) event) event) (':type label) ((cons label event) event)
129   "}"
130   "return event;")
131
132 (defcfun "void gacela_SDL_GL_SwapBuffers (void)" 0
133   "SDL_GL_SwapBuffers ();")
134
135 (defcfun "int gacela_SDL_EnableKeyRepeat (int delay, int interval)" 0
136   "return SDL_EnableKeyRepeat (delay, interval);")
137
138 (defcfun "int gacela_zoomSurface (int src, float zoomx, float zoomy, int smooth)" 0
139   "return zoomSurface (src, zoomx, zoomy, smooth);")
140
141 (defentry SDL_Init (int) (int "gacela_SDL_Init"))
142 (defentry SDL_Quit () (void "gacela_SDL_Quit"))
143 (defentry SDL_SetVideoMode (int int int int) (int "gacela_SDL_SetVideoMode"))
144 (defentry SDL_WM_SetCaption (string string) (void "gacela_SDL_WM_SetCaption"))
145 (defentry SDL_Flip (int) (int "gacela_SDL_Flip"))
146 (defentry SDL_FreeSurface (int) (void "gacela_SDL_FreeSurface"))
147 (defentry SDL_Delay (int) (void "gacela_SDL_Delay"))
148 (defentry SDL_GetTicks () (int "gacela_SDL_GetTicks"))
149 (defentry SDL_DisplayFormat (int) (int "gacela_SDL_DisplayFormat"))
150 ;(defentry SDL_SurfaceFormat (int) (int "gacela_SDL_SurfaceFormat"))
151 (defentry SDL_MapRGB (int int int int) (int "gacela_SDL_MapRGB"))
152 (defentry SDL_SetColorKey (int int int) (int "gacela_SDL_SetColorKey"))
153 ;(defentry SDL_BlitSurface (int int int int) (void "gacela_SDL_BlitSurface"))
154 ;(defentry SDL_Rect (int int int int) (int "gacela_SDL_Rect"))
155 (defentry SDL_LoadBMP (string) (int "gacela_SDL_LoadBMP"))
156 (defentry IMG_Load (string) (int "gacela_IMG_Load"))
157 (defentry SDL_GetVideoInfo () (object "gacela_SDL_GetVideoInfo"))
158 (defentry SDL_GL_SetAttribute (int int) (int "gacela_SDL_GL_SetAttribute"))
159 (defentry SDL_PollEvent () (object "gacela_SDL_PollEvent"))
160 ;(defentry TTF_Init () (int "gacela_TTF_Init"))
161 ;(defentry TTF_OpenFont (string int) (int "gacela_TTF_OpenFont"))
162 ;(defentry TTF_CloseFont (int) (void "gacela_TTF_CloseFont"))
163 ;(defentry TTF_Quit () (void "gacela_TTF_Quit"))
164 ;(defentry Mix_OpenAudio (int int int) (int "gacela_Mix_OpenAudio"))
165 ;(defentry Mix_LoadMUS (string) (int "gacela_Mix_LoadMUS"))
166 ;(defentry Mix_LoadWAV (string) (int "gacela_Mix_LoadWAV"))
167 ;(defentry Mix_PlayChannel (int int int) (int "gacela_Mix_PlayChannel"))
168 ;(defentry Mix_PlayMusic (int int) (int "gacela_Mix_PlayMusic"))
169 ;(defentry Mix_PlayingMusic () (int "gacela_Mix_PlayingMusic"))
170 ;(defentry Mix_PausedMusic () (int "gacela_Mix_PausedMusic"))
171 ;(defentry Mix_PauseMusic () (void "gacela_Mix_PauseMusic"))
172 ;(defentry Mix_ResumeMusic () (void "gacela_Mix_ResumeMusic"))
173 ;(defentry Mix_HaltMusic () (int "gacela_Mix_HaltMusic"))
174 ;(defentry Mix_FreeMusic (int) (void "gacela_Mix_FreeMusic"))
175 ;(defentry Mix_FreeChunk (int) (void "gacela_Mix_FreeChunk"))
176 ;(defentry Mix_CloseAudio () (void "gacela_Mix_CloseAudio"))
177 ;(defentry free (int) (void "gacela_free"))
178 (defentry SDL_GL_SwapBuffers () (void "gacela_SDL_GL_SwapBuffers"))
179 (defentry SDL_EnableKeyRepeat (int int) (int "gacela_SDL_EnableKeyRepeat"))
180 (defentry zoomSurface (int float float int) (int "gacela_zoomSurface"))
181
182 ;;; C-Gacela Functions
183 (defcfun "int gacela_surface_format (int surface)" 0
184   "const SDL_Surface *s = surface;"
185   "return s->format;")
186
187 (defcfun "int gacela_surface_w (int surface)" 0
188   "const SDL_Surface *s = surface;"
189   "return s->w;")
190
191 (defcfun "int gacela_surface_h (int surface)" 0
192   "const SDL_Surface *s = surface;"
193   "return s->h;")
194
195 (defcfun "int gacela_surface_pixels (int surface)" 0
196   "const SDL_Surface *s = surface;"
197   "return s->pixels;")
198
199 ;(defentry apply-surface2 (int int int int int int int int int) (void "apply_surface"))
200 ;(defentry render-text2 (int string int int int) (int "render_text"))
201 ;(defentry fill-surface (int int int int) (void "fill_surface"))
202 ;(defentry box-collision (int int int int int int) (int "box_collision"))
203 ;(defentry create-SDL_Surface (int int int int int int) (int "create_SDL_Surface"))
204 ;(defentry copy-SDL_Surface (int) (int "copy_SDL_Surface"))
205 (defentry surface-format (int) (int "gacela_surface_format"))
206 (defentry surface-w (int) (int "gacela_surface_w"))
207 (defentry surface-h (int) (int "gacela_surface_h"))
208 (defentry surface-pixels (int) (int "gacela_surface_pixels"))