]> git.jsancho.org Git - gacela.git/blob - gacela_SDL.lisp
1a2a02ca656e71a4c06218363af46b83a6b1f1bf
[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 (clines "#include <SDL/SDL_rotozoom.h>")
25
26 (defmacro mapcconst (type name)
27   `(let ((header (concatenate 'string ,type " gacela_" ,name " (void)"))
28          (body (concatenate 'string "return " ,name ";"))
29          (cfun (concatenate 'string "gacela_" ,name)))
30      (defcfun header 0 body)
31      (defentry 
32
33 (defentry SDL_GetTicks () (int "gacela_SDL_GetTicks"))
34
35 ;;; SDL constants as functions
36 (defcfun "int gacela_SDL_INIT_TIMER (void)" 0 "return SDL_INIT_TIMER;")
37 (defcfun "int gacela_SDL_INIT_AUDIO (void)" 0 "return SDL_INIT_AUDIO;")
38 (defcfun "int gacela_SDL_INIT_VIDEO (void)" 0 "return SDL_INIT_VIDEO;")
39 (defcfun "int gacela_SDL_INIT_CDROM (void)" 0 "return SDL_INIT_CDROM;")
40 (defcfun "int gacela_SDL_INIT_JOYSTICK (void)" 0 "return SDL_INIT_JOYSTICK;")
41 (defcfun "int gacela_SDL_INIT_NOPARACHUTE (void)" 0 "return SDL_INIT_NOPARACHUTE;")
42 (defcfun "int gacela_SDL_INIT_EVENTTHREAD (void)" 0 "return SDL_INIT_EVENTTHREAD;")
43 (defcfun "int gacela_SDL_INIT_EVERYTHING (void)" 0 "return SDL_INIT_EVERYTHING;")
44
45 (defcfun "int gacela_SDL_SWSURFACE (void)" 0 "return SDL_SWSURFACE;")
46 (defcfun "int gacela_SDL_HWSURFACE (void)" 0 "return SDL_HWSURFACE;")
47 (defcfun "int gacela_SDL_ASYNCBLIT (void)" 0 "return SDL_ASYNCBLIT;")
48
49 (defcfun "int gacela_SDL_ANYFORMAT (void)" 0 "return SDL_ANYFORMAT;")
50 (defcfun "int gacela_SDL_HWPALETTE (void)" 0 "return SDL_HWPALETTE;")
51 (defcfun "int gacela_SDL_DOUBLEBUF (void)" 0 "return SDL_DOUBLEBUF;")
52 (defcfun "int gacela_SDL_FULLSCREEN (void)" 0 "return SDL_FULLSCREEN;")
53 (defcfun "int gacela_SDL_OPENGL (void)" 0 "return SDL_OPENGL;")
54 (defcfun "int gacela_SDL_OPENGLBLIT (void)" 0 "return SDL_OPENGLBLIT;")
55 (defcfun "int gacela_SDL_RESIZABLE (void)" 0 "return SDL_RESIZABLE;")
56 (defcfun "int gacela_SDL_NOFRAME (void)" 0 "return SDL_NOFRAME;")
57
58 (defcfun "int gacela_SDL_HWACCEL (void)" 0 "return SDL_HWACCEL;")
59 (defcfun "int gacela_SDL_SRCCOLORKEY (void)" 0 "return SDL_SRCCOLORKEY;")
60
61 (defcfun "int gacela_SDL_GL_DOUBLEBUFFER (void)" 0 "return SDL_GL_DOUBLEBUFFER;")
62
63 (defcfun "int gacela_SDL_DEFAULT_REPEAT_DELAY (void)" 0 "return DEFAULT_REPEAT_DELAY;")
64 (defcfun "int gacela_SDL_DEFAULT_REPEAT_INTERVAL (void)" 0 "return DEFAULT_REPEAT_INTERVAL;")
65
66 (defcfun "int gacela_SDL_LIL_ENDIAN (void)" 0 "return SDL_LIL_ENDIAN;")
67 (defcfun "int gacela_SDL_BIG_ENDIAN (void)" 0 "return SDL_BIG_ENDIAN;")
68
69
70 ;;; SDL Functions
71 (defcfun "int gacela_SDL_Init (int flags)" 0
72   "return SDL_Init (flags);")
73
74 (defcfun "void gacela_SDL_Quit (void)" 0
75   "SDL_Quit ();")
76
77 (defcfun "int gacela_SDL_SetVideoMode (int width, int height, int bpp, int flags)" 0
78   "return SDL_SetVideoMode (width, height, bpp, flags);")
79
80 (defcfun "void gacela_SDL_WM_SetCaption (char *title, char *icon)" 0
81   "SDL_WM_SetCaption (title, icon);")
82
83 (defcfun "int gacela_SDL_Flip (int screen)" 0
84   "return SDL_Flip (screen);")
85
86 (defcfun "void gacela_SDL_FreeSurface (int surface)" 0
87   "SDL_FreeSurface (surface);")
88
89 (defcfun "void gacela_SDL_Delay (int ms)" 0
90   "SDL_Delay (ms);")
91
92 (defcfun "int gacela_SDL_GetTicks (void)" 0
93   "return SDL_GetTicks ();")
94
95 (defcfun "int gacela_SDL_DisplayFormat (int surface)" 0
96   "return SDL_DisplayFormat (surface);")
97
98 (defcfun "int gacela_SDL_MapRGB (int format, int r, int g, int b)" 0
99   "return SDL_MapRGB (format, r, g, b);")
100
101 (defcfun "int gacela_SDL_SetColorKey (int surface, int flag, int key)" 0
102   "return SDL_SetColorKey (surface, flag, key);")
103
104 (defcfun "int gacela_SDL_LoadBMP (char *file)" 0
105   "return SDL_LoadBMP (file);")
106
107 (defcfun "int gacela_IMG_Load (char *filename)" 0
108   "return IMG_Load (filename);")
109
110 (defcfun "static object gacela_SDL_GetVideoInfo (void)" 0
111   "const SDL_VideoInfo *info;"
112   "object vi, label;"
113   "info = SDL_GetVideoInfo ();"
114   ('nil vi)
115   ((cons (int info->blit_hw) vi) vi) (':blit_hw label) ((cons label vi) vi)
116   ((cons (int info->hw_available) vi) vi) (':hw_available label) ((cons label vi) vi)
117   "return vi;")
118
119 (defcfun "int gacela_SDL_GL_SetAttribute (int attr, int value)" 0
120   "return SDL_GL_SetAttribute (attr, value);")
121
122 (defcfun "static object gacela_SDL_PollEvent (void)" 0
123   "SDL_Event sdl_event;"
124   "object event, label;"
125   ('nil event)
126   "if (SDL_PollEvent (&sdl_event)) {"
127   "  switch (sdl_event.type) {"
128   "    case SDL_KEYDOWN:"
129   "    case SDL_KEYUP:"
130   ((cons (int sdl_event.key.keysym.sym) event) event) (':key.keysym.sym label) ((cons label event) event)
131   "      break;"
132   "  }"
133   ((cons (int sdl_event.type) event) event) (':type label) ((cons label event) event)
134   "}"
135   "return event;")
136
137 (defcfun "void gacela_SDL_GL_SwapBuffers (void)" 0
138   "SDL_GL_SwapBuffers ();")
139
140 (defcfun "int gacela_SDL_EnableKeyRepeat (int delay, int interval)" 0
141   "return SDL_EnableKeyRepeat (delay, interval);")
142
143 (defcfun "int gacela_zoomSurface (int src, float zoomx, float zoomy, int smooth)" 0
144   "return zoomSurface (src, zoomx, zoomy, smooth);")
145
146 (defcfun "int gacela_SDL_ByteOrder (void)" 0
147   "return SDL_BYTEORDER;")
148
149 (defentry SDL_Init (int) (int "gacela_SDL_Init"))
150 (defentry SDL_Quit () (void "gacela_SDL_Quit"))
151 (defentry SDL_SetVideoMode (int int int int) (int "gacela_SDL_SetVideoMode"))
152 (defentry SDL_WM_SetCaption (string string) (void "gacela_SDL_WM_SetCaption"))
153 (defentry SDL_Flip (int) (int "gacela_SDL_Flip"))
154 (defentry SDL_FreeSurface (int) (void "gacela_SDL_FreeSurface"))
155 (defentry SDL_Delay (int) (void "gacela_SDL_Delay"))
156 (defentry SDL_GetTicks () (int "gacela_SDL_GetTicks"))
157 (defentry SDL_DisplayFormat (int) (int "gacela_SDL_DisplayFormat"))
158 ;(defentry SDL_SurfaceFormat (int) (int "gacela_SDL_SurfaceFormat"))
159 (defentry SDL_MapRGB (int int int int) (int "gacela_SDL_MapRGB"))
160 (defentry SDL_SetColorKey (int int int) (int "gacela_SDL_SetColorKey"))
161 ;(defentry SDL_BlitSurface (int int int int) (void "gacela_SDL_BlitSurface"))
162 ;(defentry SDL_Rect (int int int int) (int "gacela_SDL_Rect"))
163 (defentry SDL_LoadBMP (string) (int "gacela_SDL_LoadBMP"))
164 (defentry IMG_Load (string) (int "gacela_IMG_Load"))
165 (defentry SDL_GetVideoInfo () (object "gacela_SDL_GetVideoInfo"))
166 (defentry SDL_GL_SetAttribute (int int) (int "gacela_SDL_GL_SetAttribute"))
167 (defentry SDL_PollEvent () (object "gacela_SDL_PollEvent"))
168 ;(defentry TTF_Init () (int "gacela_TTF_Init"))
169 ;(defentry TTF_OpenFont (string int) (int "gacela_TTF_OpenFont"))
170 ;(defentry TTF_CloseFont (int) (void "gacela_TTF_CloseFont"))
171 ;(defentry TTF_Quit () (void "gacela_TTF_Quit"))
172 ;(defentry Mix_OpenAudio (int int int) (int "gacela_Mix_OpenAudio"))
173 ;(defentry Mix_LoadMUS (string) (int "gacela_Mix_LoadMUS"))
174 ;(defentry Mix_LoadWAV (string) (int "gacela_Mix_LoadWAV"))
175 ;(defentry Mix_PlayChannel (int int int) (int "gacela_Mix_PlayChannel"))
176 ;(defentry Mix_PlayMusic (int int) (int "gacela_Mix_PlayMusic"))
177 ;(defentry Mix_PlayingMusic () (int "gacela_Mix_PlayingMusic"))
178 ;(defentry Mix_PausedMusic () (int "gacela_Mix_PausedMusic"))
179 ;(defentry Mix_PauseMusic () (void "gacela_Mix_PauseMusic"))
180 ;(defentry Mix_ResumeMusic () (void "gacela_Mix_ResumeMusic"))
181 ;(defentry Mix_HaltMusic () (int "gacela_Mix_HaltMusic"))
182 ;(defentry Mix_FreeMusic (int) (void "gacela_Mix_FreeMusic"))
183 ;(defentry Mix_FreeChunk (int) (void "gacela_Mix_FreeChunk"))
184 ;(defentry Mix_CloseAudio () (void "gacela_Mix_CloseAudio"))
185 ;(defentry free (int) (void "gacela_free"))
186 (defentry SDL_GL_SwapBuffers () (void "gacela_SDL_GL_SwapBuffers"))
187 (defentry SDL_EnableKeyRepeat (int int) (int "gacela_SDL_EnableKeyRepeat"))
188 (defentry zoomSurface (int float float int) (int "gacela_zoomSurface"))
189 (defentry SDL_ByteOrder () (int "gacela_SDL_ByteOrder"))
190
191 ;;; C-Gacela Functions
192 (defcfun "int gacela_surface_format (int surface)" 0
193   "const SDL_Surface *s = surface;"
194   "return s->format;")
195
196 (defcfun "int gacela_surface_w (int surface)" 0
197   "const SDL_Surface *s = surface;"
198   "return s->w;")
199
200 (defcfun "int gacela_surface_h (int surface)" 0
201   "const SDL_Surface *s = surface;"
202   "return s->h;")
203
204 (defcfun "int gacela_surface_pixels (int surface)" 0
205   "const SDL_Surface *s = surface;"
206   "return s->pixels;")
207
208 (defcfun "int gacela_surface_format_BytesPerPixel (int surface)" 0
209   "const SDL_Surface *s = surface;"
210   "return s->format->BytesPerPixel;")
211
212 ;(defentry apply-surface2 (int int int int int int int int int) (void "apply_surface"))
213 ;(defentry render-text2 (int string int int int) (int "render_text"))
214 ;(defentry fill-surface (int int int int) (void "fill_surface"))
215 ;(defentry box-collision (int int int int int int) (int "box_collision"))
216 ;(defentry create-SDL_Surface (int int int int int int) (int "create_SDL_Surface"))
217 ;(defentry copy-SDL_Surface (int) (int "copy_SDL_Surface"))
218 (defentry surface-format (int) (int "gacela_surface_format"))
219 (defentry surface-w (int) (int "gacela_surface_w"))
220 (defentry surface-h (int) (int "gacela_surface_h"))
221 (defentry surface-pixels (int) (int "gacela_surface_pixels"))
222 (defentry surface-format-BytesPerPixel (int) (int "gacela_surface_format_BytesPerPixel"))