1 ;;; Gacela, a GNU Common Lisp extension for fast games development
2 ;;; Copyright (C) 2009 by Javier Sancho Fernandez <jsf at jsancho dot org>
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.
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.
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/>.
20 (defmacro mapcconst (type c-type name)
21 (let ((c-header (concatenate 'string c-type " gacela_" name " (void)"))
22 (c-body (concatenate 'string "return " name ";"))
23 (c-name (concatenate 'string "gacela_" name))
24 (lisp-name (intern (string-upcase name))))
26 (defcfun ,c-header 0 ,c-body)
27 (defentry ,lisp-name () (,type ,c-name))
28 (eval-when (load) (defconstant ,lisp-name (,lisp-name))))))
30 (clines "#include <SDL/SDL.h>")
31 (clines "#include <SDL/SDL_image.h>")
32 (clines "#include <SDL/SDL_mixer.h>")
34 ;;; SDL constants as functions
35 (mapcconst int "int" "SDL_INIT_TIMER")
36 (mapcconst int "int" "SDL_INIT_AUDIO")
37 (mapcconst int "int" "SDL_INIT_VIDEO")
38 (mapcconst int "int" "SDL_INIT_CDROM")
39 (mapcconst int "int" "SDL_INIT_JOYSTICK")
40 (mapcconst int "int" "SDL_INIT_NOPARACHUTE")
41 (mapcconst int "int" "SDL_INIT_EVENTTHREAD")
42 (mapcconst int "int" "SDL_INIT_EVERYTHING")
44 (mapcconst int "int" "SDL_SWSURFACE")
45 (mapcconst int "int" "SDL_HWSURFACE")
46 (mapcconst int "int" "SDL_ASYNCBLIT")
48 (mapcconst int "int" "SDL_ANYFORMAT")
49 (mapcconst int "int" "SDL_HWPALETTE")
50 (mapcconst int "int" "SDL_DOUBLEBUF")
51 (mapcconst int "int" "SDL_FULLSCREEN")
52 (mapcconst int "int" "SDL_OPENGL")
53 (mapcconst int "int" "SDL_OPENGLBLIT")
54 (mapcconst int "int" "SDL_RESIZABLE")
55 (mapcconst int "int" "SDL_NOFRAME")
57 (mapcconst int "int" "SDL_HWACCEL")
58 (mapcconst int "int" "SDL_SRCCOLORKEY")
60 (mapcconst int "int" "SDL_GL_DOUBLEBUFFER")
62 (mapcconst int "int" "SDL_DEFAULT_REPEAT_DELAY")
63 (mapcconst int "int" "SDL_DEFAULT_REPEAT_INTERVAL")
65 (mapcconst int "int" "SDL_LIL_ENDIAN")
66 (mapcconst int "int" "SDL_BIG_ENDIAN")
69 (defcfun "int gacela_SDL_Init (int flags)" 0
70 "return SDL_Init (flags);")
72 (defcfun "void gacela_SDL_Quit (void)" 0
75 (defcfun "int gacela_SDL_SetVideoMode (int width, int height, int bpp, int flags)" 0
76 "return SDL_SetVideoMode (width, height, bpp, flags);")
78 (defcfun "void gacela_SDL_WM_SetCaption (char *title, char *icon)" 0
79 "SDL_WM_SetCaption (title, icon);")
81 (defcfun "int gacela_SDL_Flip (int screen)" 0
82 "return SDL_Flip (screen);")
84 (defcfun "void gacela_SDL_FreeSurface (int surface)" 0
85 "SDL_FreeSurface (surface);")
87 (defcfun "void gacela_SDL_Delay (int ms)" 0
90 (defcfun "int gacela_SDL_GetTicks (void)" 0
91 "return SDL_GetTicks ();")
93 (defcfun "int gacela_SDL_DisplayFormat (int surface)" 0
94 "return SDL_DisplayFormat (surface);")
96 (defcfun "int gacela_SDL_MapRGB (int format, int r, int g, int b)" 0
97 "return SDL_MapRGB (format, r, g, b);")
99 (defcfun "int gacela_SDL_SetColorKey (int surface, int flag, int key)" 0
100 "return SDL_SetColorKey (surface, flag, key);")
102 (defcfun "int gacela_SDL_LoadBMP (char *file)" 0
103 "return SDL_LoadBMP (file);")
105 (defcfun "int gacela_IMG_Load (char *filename)" 0
106 "return IMG_Load (filename);")
108 (defcfun "static object gacela_SDL_GetVideoInfo (void)" 0
109 "const SDL_VideoInfo *info;"
111 "info = SDL_GetVideoInfo ();"
113 ((cons (int info->blit_hw) vi) vi) (':blit_hw label) ((cons label vi) vi)
114 ((cons (int info->hw_available) vi) vi) (':hw_available label) ((cons label vi) vi)
117 (defcfun "int gacela_SDL_GL_SetAttribute (int attr, int value)" 0
118 "return SDL_GL_SetAttribute (attr, value);")
120 (defcfun "static object gacela_SDL_PollEvent (void)" 0
121 "SDL_Event sdl_event;"
122 "object event, label;"
124 "if (SDL_PollEvent (&sdl_event)) {"
125 " switch (sdl_event.type) {"
128 ((cons (int sdl_event.key.keysym.sym) event) event) (':key.keysym.sym label) ((cons label event) event)
131 ((cons (int sdl_event.type) event) event) (':type label) ((cons label event) event)
135 (defcfun "void gacela_SDL_GL_SwapBuffers (void)" 0
136 "SDL_GL_SwapBuffers ();")
138 (defcfun "int gacela_SDL_EnableKeyRepeat (int delay, int interval)" 0
139 "return SDL_EnableKeyRepeat (delay, interval);")
141 (defcfun "int gacela_SDL_ByteOrder (void)" 0
142 "return SDL_BYTEORDER;")
144 (defentry SDL_Init (int) (int "gacela_SDL_Init"))
145 (defentry SDL_Quit () (void "gacela_SDL_Quit"))
146 (defentry SDL_SetVideoMode (int int int int) (int "gacela_SDL_SetVideoMode"))
147 (defentry SDL_WM_SetCaption (string string) (void "gacela_SDL_WM_SetCaption"))
148 (defentry SDL_Flip (int) (int "gacela_SDL_Flip"))
149 (defentry SDL_FreeSurface (int) (void "gacela_SDL_FreeSurface"))
150 (defentry SDL_Delay (int) (void "gacela_SDL_Delay"))
151 (defentry SDL_GetTicks () (int "gacela_SDL_GetTicks"))
152 (defentry SDL_DisplayFormat (int) (int "gacela_SDL_DisplayFormat"))
153 ;(defentry SDL_SurfaceFormat (int) (int "gacela_SDL_SurfaceFormat"))
154 (defentry SDL_MapRGB (int int int int) (int "gacela_SDL_MapRGB"))
155 (defentry SDL_SetColorKey (int int int) (int "gacela_SDL_SetColorKey"))
156 ;(defentry SDL_BlitSurface (int int int int) (void "gacela_SDL_BlitSurface"))
157 ;(defentry SDL_Rect (int int int int) (int "gacela_SDL_Rect"))
158 (defentry SDL_LoadBMP (string) (int "gacela_SDL_LoadBMP"))
159 (defentry IMG_Load (string) (int "gacela_IMG_Load"))
160 (defentry SDL_GetVideoInfo () (object "gacela_SDL_GetVideoInfo"))
161 (defentry SDL_GL_SetAttribute (int int) (int "gacela_SDL_GL_SetAttribute"))
162 (defentry SDL_PollEvent () (object "gacela_SDL_PollEvent"))
163 ;(defentry TTF_Init () (int "gacela_TTF_Init"))
164 ;(defentry TTF_OpenFont (string int) (int "gacela_TTF_OpenFont"))
165 ;(defentry TTF_CloseFont (int) (void "gacela_TTF_CloseFont"))
166 ;(defentry TTF_Quit () (void "gacela_TTF_Quit"))
167 ;(defentry Mix_OpenAudio (int int int) (int "gacela_Mix_OpenAudio"))
168 ;(defentry Mix_LoadMUS (string) (int "gacela_Mix_LoadMUS"))
169 ;(defentry Mix_LoadWAV (string) (int "gacela_Mix_LoadWAV"))
170 ;(defentry Mix_PlayChannel (int int int) (int "gacela_Mix_PlayChannel"))
171 ;(defentry Mix_PlayMusic (int int) (int "gacela_Mix_PlayMusic"))
172 ;(defentry Mix_PlayingMusic () (int "gacela_Mix_PlayingMusic"))
173 ;(defentry Mix_PausedMusic () (int "gacela_Mix_PausedMusic"))
174 ;(defentry Mix_PauseMusic () (void "gacela_Mix_PauseMusic"))
175 ;(defentry Mix_ResumeMusic () (void "gacela_Mix_ResumeMusic"))
176 ;(defentry Mix_HaltMusic () (int "gacela_Mix_HaltMusic"))
177 ;(defentry Mix_FreeMusic (int) (void "gacela_Mix_FreeMusic"))
178 ;(defentry Mix_FreeChunk (int) (void "gacela_Mix_FreeChunk"))
179 ;(defentry Mix_CloseAudio () (void "gacela_Mix_CloseAudio"))
180 ;(defentry free (int) (void "gacela_free"))
181 (defentry SDL_GL_SwapBuffers () (void "gacela_SDL_GL_SwapBuffers"))
182 (defentry SDL_EnableKeyRepeat (int int) (int "gacela_SDL_EnableKeyRepeat"))
183 (defentry SDL_ByteOrder () (int "gacela_SDL_ByteOrder"))
185 ;;; C-Gacela Functions
186 (defcfun "int gacela_surface_format (int surface)" 0
187 "const SDL_Surface *s = surface;"
190 (defcfun "int gacela_surface_w (int surface)" 0
191 "const SDL_Surface *s = surface;"
194 (defcfun "int gacela_surface_h (int surface)" 0
195 "const SDL_Surface *s = surface;"
198 (defcfun "int gacela_surface_pixels (int surface)" 0
199 "const SDL_Surface *s = surface;"
202 (defcfun "int gacela_surface_format_BytesPerPixel (int surface)" 0
203 "const SDL_Surface *s = surface;"
204 "return s->format->BytesPerPixel;")
206 ;(defentry apply-surface2 (int int int int int int int int int) (void "apply_surface"))
207 ;(defentry render-text2 (int string int int int) (int "render_text"))
208 ;(defentry fill-surface (int int int int) (void "fill_surface"))
209 ;(defentry box-collision (int int int int int int) (int "box_collision"))
210 ;(defentry create-SDL_Surface (int int int int int int) (int "create_SDL_Surface"))
211 ;(defentry copy-SDL_Surface (int) (int "copy_SDL_Surface"))
212 (defentry surface-format (int) (int "gacela_surface_format"))
213 (defentry surface-w (int) (int "gacela_surface_w"))
214 (defentry surface-h (int) (int "gacela_surface_h"))
215 (defentry surface-pixels (int) (int "gacela_surface_pixels"))
216 (defentry surface-format-BytesPerPixel (int) (int "gacela_surface_format_BytesPerPixel"))