]>
Commit | Line | Data |
---|---|---|
3c580dec | 1 | $Id$ |
2 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/configure.in libsdl1.2-1.2.6-caca/configure.in | |
3 | --- libsdl1.2-1.2.6/configure.in 2003-11-16 23:51:54.000000000 +0100 | |
4 | +++ libsdl1.2-1.2.6-caca/configure.in 2003-11-21 15:50:49.000000000 +0100 | |
5 | @@ -952,6 +952,32 @@ CheckAAlib() | |
6 | fi | |
7 | } | |
8 | ||
9 | +dnl Find the libcaca includes | |
10 | +CheckCaca() | |
11 | +{ | |
12 | + AC_ARG_ENABLE(video-caca, | |
13 | +[ --enable-video-caca use libcaca video driver [default=no]], | |
14 | + , enable_video_caca=no) | |
15 | + if test x$enable_video = xyes -a x$enable_video_caca = xyes; then | |
16 | + AC_MSG_CHECKING(for libcaca support) | |
17 | + video_caca=no | |
18 | + AC_TRY_COMPILE([ | |
19 | + #include <caca.h> | |
20 | + ],[ | |
21 | + ],[ | |
22 | + video_caca=yes | |
23 | + ]) | |
24 | + AC_MSG_RESULT($video_caca) | |
25 | + if test x$video_caca = xyes; then | |
26 | + CFLAGS="$CFLAGS -DENABLE_CACA `caca-config --cflags`" | |
27 | + SYSTEM_LIBS="$SYSTEM_LIBS `caca-config --plugin-libs`" | |
28 | + | |
29 | + VIDEO_SUBDIRS="$VIDEO_SUBDIRS caca" | |
30 | + VIDEO_DRIVERS="$VIDEO_DRIVERS caca/libvideo_caca.la" | |
31 | + fi | |
32 | + fi | |
33 | +} | |
34 | + | |
35 | dnl Set up the Atari Xbios driver | |
36 | CheckAtariXbiosVideo() | |
37 | { | |
38 | @@ -1738,6 +1764,7 @@ case "$target" in | |
39 | CheckGGI | |
40 | CheckSVGA | |
41 | CheckAAlib | |
42 | + CheckCaca | |
43 | CheckQtopia | |
44 | CheckPicoGUI | |
45 | CheckOpenGL | |
46 | @@ -1819,6 +1846,7 @@ case "$target" in | |
47 | CheckDGA | |
48 | CheckSVGA | |
49 | CheckAAlib | |
50 | + CheckCaca | |
51 | CheckOpenGL | |
52 | CheckPTHREAD | |
53 | # Set up files for the main() stub | |
54 | @@ -1865,6 +1893,7 @@ case "$target" in | |
55 | CheckDGA | |
56 | CheckSVGA | |
57 | CheckAAlib | |
58 | + CheckCaca | |
59 | CheckOpenGL | |
60 | CheckPTHREAD | |
61 | CheckUSBHID | |
62 | @@ -1903,6 +1932,7 @@ case "$target" in | |
63 | CheckNAS | |
64 | CheckX11 | |
65 | CheckAAlib | |
66 | + CheckCaca | |
67 | CheckOpenGL | |
68 | CheckPTHREAD | |
69 | CheckUSBHID | |
70 | @@ -1945,6 +1975,7 @@ case "$target" in | |
71 | CheckNAS | |
72 | CheckX11 | |
73 | CheckAAlib | |
74 | + CheckCaca | |
75 | CheckOpenGL | |
76 | CheckPTHREAD | |
77 | CheckUSBHID | |
78 | @@ -1988,6 +2019,7 @@ case "$target" in | |
79 | CheckNAS | |
80 | CheckX11 | |
81 | CheckAAlib | |
82 | + CheckCaca | |
83 | CheckOpenGL | |
84 | CheckPTHREAD | |
85 | # Set up files for the main() stub | |
86 | @@ -2031,6 +2063,7 @@ case "$target" in | |
87 | CheckNAS | |
88 | CheckX11 | |
89 | CheckAAlib | |
90 | + CheckCaca | |
91 | CheckOpenGL | |
92 | CheckPTHREAD | |
93 | # Set up files for the main() stub | |
94 | @@ -2071,6 +2104,7 @@ case "$target" in | |
95 | CheckNAS | |
96 | CheckX11 | |
97 | CheckAAlib | |
98 | + CheckCaca | |
99 | CheckOpenGL | |
100 | CheckPTHREAD | |
101 | # Set up files for the main() stub | |
102 | @@ -2123,6 +2157,7 @@ case "$target" in | |
103 | CheckX11 | |
104 | CheckGGI | |
105 | CheckAAlib | |
106 | + CheckCaca | |
107 | CheckOpenGL | |
108 | CheckPTHREAD | |
109 | # Set up files for the main() stub | |
110 | @@ -2164,6 +2199,7 @@ case "$target" in | |
111 | CheckX11 | |
112 | CheckGGI | |
113 | CheckAAlib | |
114 | + CheckCaca | |
115 | CheckOpenGL | |
116 | CheckPTHREAD | |
117 | # Set up files for the main() stub | |
118 | @@ -2202,6 +2238,7 @@ case "$target" in | |
119 | CheckX11 | |
120 | CheckGGI | |
121 | CheckAAlib | |
122 | + CheckCaca | |
123 | CheckOpenGL | |
124 | CheckPTHREAD | |
125 | SDL_LIBS="$SDL_LIBS -lrt" | |
126 | @@ -2709,6 +2746,7 @@ src/video/Makefile | |
127 | src/video/aalib/Makefile | |
128 | src/video/ataricommon/Makefile | |
129 | src/video/bwindow/Makefile | |
130 | +src/video/caca/Makefile | |
131 | src/video/cybergfx/Makefile | |
132 | src/video/dc/Makefile | |
133 | src/video/dga/Makefile | |
134 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/Makefile.am libsdl1.2-1.2.6-caca/src/video/Makefile.am | |
135 | --- libsdl1.2-1.2.6/src/video/Makefile.am 2003-08-30 21:13:06.000000000 +0200 | |
136 | +++ libsdl1.2-1.2.6-caca/src/video/Makefile.am 2003-11-17 00:36:40.000000000 +0100 | |
137 | @@ -5,7 +5,7 @@ noinst_LTLIBRARIES = libvideo.la | |
138 | ||
139 | # Define which subdirectories need to be built | |
140 | SUBDIRS = @VIDEO_SUBDIRS@ | |
141 | -DIST_SUBDIRS = dummy x11 dga nanox fbcon directfb vgl svga ggi aalib \ | |
142 | +DIST_SUBDIRS = dummy x11 dga nanox fbcon directfb vgl svga ggi aalib caca \ | |
143 | wincommon windib windx5 \ | |
144 | maccommon macdsp macrom riscos quartz \ | |
145 | bwindow ps2gs photon cybergfx epoc picogui \ | |
146 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/SDL_sysvideo.h libsdl1.2-1.2.6-caca/src/video/SDL_sysvideo.h | |
147 | --- libsdl1.2-1.2.6/src/video/SDL_sysvideo.h 2003-08-30 21:13:07.000000000 +0200 | |
148 | +++ libsdl1.2-1.2.6-caca/src/video/SDL_sysvideo.h 2003-11-17 02:23:43.000000000 +0100 | |
149 | @@ -359,6 +359,9 @@ extern VideoBootStrap SVGALIB_bootstrap; | |
150 | #ifdef ENABLE_AALIB | |
151 | extern VideoBootStrap AALIB_bootstrap; | |
152 | #endif | |
153 | +#ifdef ENABLE_CACA | |
154 | +extern VideoBootStrap Caca_bootstrap; | |
155 | +#endif | |
156 | #ifdef ENABLE_WINDIB | |
157 | extern VideoBootStrap WINDIB_bootstrap; | |
158 | #endif | |
159 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/SDL_video.c libsdl1.2-1.2.6-caca/src/video/SDL_video.c | |
160 | --- libsdl1.2-1.2.6/src/video/SDL_video.c 2003-08-30 21:13:07.000000000 +0200 | |
161 | +++ libsdl1.2-1.2.6-caca/src/video/SDL_video.c 2003-11-17 02:23:15.000000000 +0100 | |
162 | @@ -78,6 +78,9 @@ static VideoBootStrap *bootstrap[] = { | |
163 | #ifdef ENABLE_AALIB | |
164 | &AALIB_bootstrap, | |
165 | #endif | |
166 | +#ifdef ENABLE_CACA | |
167 | + &Caca_bootstrap, | |
168 | +#endif | |
169 | #ifdef ENABLE_DIRECTX | |
170 | &DIRECTX_bootstrap, | |
171 | #endif | |
172 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/caca/Makefile.am libsdl1.2-1.2.6-caca/src/video/caca/Makefile.am | |
173 | --- libsdl1.2-1.2.6/src/video/caca/Makefile.am 1970-01-01 01:00:00.000000000 +0100 | |
174 | +++ libsdl1.2-1.2.6-caca/src/video/caca/Makefile.am 2003-11-17 01:24:38.000000000 +0100 | |
175 | @@ -0,0 +1,13 @@ | |
176 | + | |
177 | +## Makefile.am for SDL using the libcaca video driver | |
178 | + | |
179 | +noinst_LTLIBRARIES = libvideo_caca.la | |
180 | +libvideo_caca_la_SOURCES = $(CACA_SRCS) | |
181 | + | |
182 | +# The SDL libcaca video driver sources | |
183 | +CACA_SRCS = \ | |
184 | + SDL_cacavideo.h \ | |
185 | + SDL_cacaevents.c \ | |
186 | + SDL_cacaevents_c.h \ | |
187 | + SDL_cacavideo.c | |
188 | + | |
189 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/caca/SDL_cacaevents.c libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacaevents.c | |
190 | --- libsdl1.2-1.2.6/src/video/caca/SDL_cacaevents.c 1970-01-01 01:00:00.000000000 +0100 | |
c2269df7 | 191 | +++ libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacaevents.c 2004-01-04 02:31:43.000000000 +0100 |
192 | @@ -0,0 +1,119 @@ | |
3c580dec | 193 | +/* |
194 | + SDL - Simple DirectMedia Layer | |
195 | + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga | |
196 | + | |
197 | + This library is free software; you can redistribute it and/or | |
198 | + modify it under the terms of the GNU Library General Public | |
199 | + License as published by the Free Software Foundation; either | |
200 | + version 2 of the License, or (at your option) any later version. | |
201 | + | |
202 | + This library is distributed in the hope that it will be useful, | |
203 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
204 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
205 | + Library General Public License for more details. | |
206 | + | |
207 | + You should have received a copy of the GNU Library General Public | |
208 | + License along with this library; if not, write to the Free | |
209 | + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
210 | + | |
211 | + Sam Lantinga | |
212 | + slouken@libsdl.org | |
213 | +*/ | |
214 | + | |
215 | +#ifdef SAVE_RCSID | |
216 | +static char rcsid = | |
217 | + "@(#) $Id$"; | |
218 | +#endif | |
219 | + | |
220 | +#include <stdio.h> | |
221 | + | |
222 | +#include <caca.h> | |
223 | + | |
224 | +#include "SDL.h" | |
225 | +#include "SDL_sysevents.h" | |
226 | +#include "SDL_events_c.h" | |
227 | +#include "SDL_cacavideo.h" | |
228 | +#include "SDL_cacaevents_c.h" | |
229 | + | |
230 | +void Caca_PumpEvents(_THIS) | |
231 | +{ | |
3c580dec | 232 | + int posted = 0; |
233 | + int event; | |
234 | + SDL_keysym keysym; | |
235 | + | |
236 | + if( ! this->screen ) /* Wait till we got the screen initialized */ | |
237 | + return; | |
238 | + | |
239 | + do { | |
240 | + posted = 0; | |
241 | + | |
242 | + /* Get keyboard event */ | |
243 | + SDL_mutexP(Caca_mutex); | |
244 | + event = caca_get_event(); | |
245 | + SDL_mutexV(Caca_mutex); | |
246 | + if ( Caca_lastkey ) { | |
247 | + /* Release previous key if necessary */ | |
248 | + if ( !event ) { | |
249 | + struct timeval now; | |
250 | + Uint64 t1, t2; | |
251 | + gettimeofday ( &now, NULL ); | |
252 | + t1 = (Uint64)now.tv_sec * 1000000 + now.tv_usec; | |
253 | + t2 = (Uint64)Caca_lasttime.tv_sec * 1000000 | |
254 | + + Caca_lasttime.tv_usec; | |
255 | + if ( t1 < t2 + 100000 ) | |
256 | + break; | |
257 | + } | |
258 | + keysym.scancode = Caca_lastkey; | |
259 | + keysym.sym = Caca_lastkey; | |
260 | + keysym.mod = KMOD_NONE; | |
261 | + keysym.unicode = 0; | |
262 | + if ( SDL_TranslateUNICODE ) { | |
263 | + keysym.unicode = Caca_lastkey; | |
264 | + } | |
265 | + posted += SDL_PrivateKeyboard(SDL_RELEASED, &keysym); | |
266 | + Caca_lastkey = 0; | |
267 | + } | |
268 | + if ( event & CACA_EVENT_KEY_PRESS ) { | |
269 | + int key; | |
270 | + switch ( event & 0xffff ) | |
271 | + { | |
272 | + case CACA_KEY_LEFT: key = SDLK_LEFT; break; | |
273 | + case CACA_KEY_RIGHT: key = SDLK_RIGHT; break; | |
274 | + case CACA_KEY_UP: key = SDLK_UP; break; | |
275 | + case CACA_KEY_DOWN: key = SDLK_DOWN; break; | |
276 | + default: key = event & 0xffff; break; | |
277 | + } | |
278 | + /* Key pressed */ | |
279 | +/* printf("Key pressed: %d (%c)\n", key, key); */ | |
280 | + keysym.scancode = key; | |
281 | + keysym.sym = key; | |
282 | + keysym.mod = KMOD_NONE; | |
283 | + keysym.unicode = 0; | |
284 | + if ( SDL_TranslateUNICODE ) { | |
285 | + keysym.unicode = key; | |
286 | + } | |
287 | + posted += SDL_PrivateKeyboard(SDL_PRESSED, &keysym); | |
288 | + Caca_lastkey = key; | |
289 | + gettimeofday ( &Caca_lasttime, NULL ); | |
290 | + } | |
c2269df7 | 291 | + else if ( event & CACA_EVENT_MOUSE_PRESS ) { |
3c580dec | 292 | + /* FIXME: we currently ignore the button type! */ |
c2269df7 | 293 | + int button = event & 0x00ffffff; |
3c580dec | 294 | + posted += SDL_PrivateMouseButton(SDL_PRESSED, 1, 0, 0); |
295 | + posted += SDL_PrivateMouseButton(SDL_RELEASED, 1, 0, 0); | |
296 | + } | |
c2269df7 | 297 | + else if ( event & CACA_EVENT_MOUSE_MOTION ) { |
298 | + int new_x, new_y; | |
299 | + new_x = ((event & 0x00fff000) >> 12) * Caca_w / caca_get_width(); | |
300 | + new_y = ((event & 0x00000fff) >> 0) * Caca_h / caca_get_height(); | |
301 | + | |
302 | + posted += SDL_PrivateMouseMotion(0, 0, new_x, new_y); | |
303 | + } | |
3c580dec | 304 | + } while ( posted ); |
305 | +} | |
306 | + | |
307 | +void Caca_InitOSKeymap(_THIS) | |
308 | +{ | |
309 | + return; | |
310 | +} | |
311 | + | |
312 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/caca/SDL_cacaevents_c.h libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacaevents_c.h | |
313 | --- libsdl1.2-1.2.6/src/video/caca/SDL_cacaevents_c.h 1970-01-01 01:00:00.000000000 +0100 | |
314 | +++ libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacaevents_c.h 2003-11-17 03:04:31.000000000 +0100 | |
315 | @@ -0,0 +1,34 @@ | |
316 | +/* | |
317 | + SDL - Simple DirectMedia Layer | |
318 | + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga | |
319 | + | |
320 | + This library is free software; you can redistribute it and/or | |
321 | + modify it under the terms of the GNU Library General Public | |
322 | + License as published by the Free Software Foundation; either | |
323 | + version 2 of the License, or (at your option) any later version. | |
324 | + | |
325 | + This library is distributed in the hope that it will be useful, | |
326 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
327 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
328 | + Library General Public License for more details. | |
329 | + | |
330 | + You should have received a copy of the GNU Library General Public | |
331 | + License along with this library; if not, write to the Free | |
332 | + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
333 | + | |
334 | + Sam Lantinga | |
335 | + slouken@libsdl.org | |
336 | +*/ | |
337 | + | |
338 | +#ifdef SAVE_RCSID | |
339 | +static char rcsid = | |
340 | + "@(#) $Id$"; | |
341 | +#endif | |
342 | + | |
343 | +#include "SDL_cacavideo.h" | |
344 | + | |
345 | +/* Variables and functions exported by SDL_sysevents.c to other parts | |
346 | + of the native video subsystem (SDL_sysvideo.c) | |
347 | +*/ | |
348 | +extern void Caca_PumpEvents(_THIS); | |
349 | +extern void Caca_InitOSKeymap(_THIS); | |
350 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/caca/SDL_cacavideo.c libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacavideo.c | |
351 | --- libsdl1.2-1.2.6/src/video/caca/SDL_cacavideo.c 1970-01-01 01:00:00.000000000 +0100 | |
352 | +++ libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacavideo.c 2003-12-18 13:11:06.000000000 +0100 | |
353 | @@ -0,0 +1,301 @@ | |
354 | +/* | |
355 | + SDL - Simple DirectMedia Layer | |
356 | + Copyright (C) 2003 Sam Hocevar | |
357 | + | |
358 | + This library is free software; you can redistribute it and/or | |
359 | + modify it under the terms of the GNU Library General Public | |
360 | + License as published by the Free Software Foundation; either | |
361 | + version 2 of the License, or (at your option) any later version. | |
362 | + | |
363 | + This library is distributed in the hope that it will be useful, | |
364 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
365 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
366 | + Library General Public License for more details. | |
367 | + | |
368 | + You should have received a copy of the GNU Library General Public | |
369 | + License along with this library; if not, write to the Free | |
370 | + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
371 | + | |
372 | + Sam Hocevar | |
373 | + sam@zoy.org | |
374 | +*/ | |
375 | + | |
376 | +#ifdef SAVE_RCSID | |
377 | +static char rcsid = | |
378 | + "@(#) $Id$"; | |
379 | +#endif | |
380 | + | |
381 | +/* libcaca based SDL video driver implementation. | |
382 | +*/ | |
383 | + | |
384 | +#include <stdlib.h> | |
385 | +#include <stdio.h> | |
386 | +#include <string.h> | |
387 | +#include <unistd.h> | |
388 | +#include <sys/stat.h> | |
389 | + | |
390 | + | |
391 | +#include "SDL.h" | |
392 | +#include "SDL_error.h" | |
393 | +#include "SDL_video.h" | |
394 | +#include "SDL_mouse.h" | |
395 | +#include "SDL_sysvideo.h" | |
396 | +#include "SDL_pixels_c.h" | |
397 | +#include "SDL_events_c.h" | |
398 | + | |
399 | +#include "SDL_cacavideo.h" | |
400 | +#include "SDL_cacaevents_c.h" | |
401 | + | |
402 | +#include <caca.h> | |
403 | + | |
404 | +/* Initialization/Query functions */ | |
405 | +static int Caca_VideoInit(_THIS, SDL_PixelFormat *vformat); | |
406 | +static SDL_Rect **Caca_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); | |
407 | +static SDL_Surface *Caca_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags); | |
408 | +static void Caca_VideoQuit(_THIS); | |
409 | + | |
410 | +/* Hardware surface functions */ | |
411 | +static int Caca_AllocHWSurface(_THIS, SDL_Surface *surface); | |
412 | +static int Caca_LockHWSurface(_THIS, SDL_Surface *surface); | |
413 | +static int Caca_FlipHWSurface(_THIS, SDL_Surface *surface); | |
414 | +static void Caca_UnlockHWSurface(_THIS, SDL_Surface *surface); | |
415 | +static void Caca_FreeHWSurface(_THIS, SDL_Surface *surface); | |
416 | + | |
417 | +/* Cache the VideoDevice struct */ | |
418 | +static struct SDL_VideoDevice *local_this; | |
419 | + | |
420 | +/* libcaca driver bootstrap functions */ | |
421 | + | |
422 | +static int Caca_Available(void) | |
423 | +{ | |
424 | + return 1; /* Always available ! */ | |
425 | +} | |
426 | + | |
427 | +static void Caca_DeleteDevice(SDL_VideoDevice *device) | |
428 | +{ | |
429 | + free(device->hidden); | |
430 | + free(device); | |
431 | +} | |
432 | + | |
433 | +static SDL_VideoDevice *Caca_CreateDevice(int devindex) | |
434 | +{ | |
435 | + SDL_VideoDevice *device; | |
436 | + | |
437 | + /* Initialize all variables that we clean on shutdown */ | |
438 | + device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice)); | |
439 | + if ( device ) { | |
440 | + memset(device, 0, (sizeof *device)); | |
441 | + device->hidden = (struct SDL_PrivateVideoData *) | |
442 | + malloc((sizeof *device->hidden)); | |
443 | + } | |
444 | + if ( (device == NULL) || (device->hidden == NULL) ) { | |
445 | + SDL_OutOfMemory(); | |
446 | + if ( device ) { | |
447 | + free(device); | |
448 | + } | |
449 | + return(0); | |
450 | + } | |
451 | + memset(device->hidden, 0, (sizeof *device->hidden)); | |
452 | + | |
453 | + /* Set the function pointers */ | |
454 | + device->VideoInit = Caca_VideoInit; | |
455 | + device->ListModes = Caca_ListModes; | |
456 | + device->SetVideoMode = Caca_SetVideoMode; | |
457 | + device->CreateYUVOverlay = NULL; | |
458 | + device->SetColors = NULL; | |
459 | + device->UpdateRects = NULL; | |
460 | + device->VideoQuit = Caca_VideoQuit; | |
461 | + device->AllocHWSurface = Caca_AllocHWSurface; | |
462 | + device->CheckHWBlit = NULL; | |
463 | + device->FillHWRect = NULL; | |
464 | + device->SetHWColorKey = NULL; | |
465 | + device->SetHWAlpha = NULL; | |
466 | + device->LockHWSurface = Caca_LockHWSurface; | |
467 | + device->UnlockHWSurface = Caca_UnlockHWSurface; | |
468 | + device->FlipHWSurface = NULL; | |
469 | + device->FreeHWSurface = Caca_FreeHWSurface; | |
470 | + device->SetCaption = NULL; | |
471 | + device->SetIcon = NULL; | |
472 | + device->IconifyWindow = NULL; | |
473 | + device->GrabInput = NULL; | |
474 | + device->GetWMInfo = NULL; | |
475 | + device->InitOSKeymap = Caca_InitOSKeymap; | |
476 | + device->PumpEvents = Caca_PumpEvents; | |
477 | + | |
478 | + device->free = Caca_DeleteDevice; | |
479 | + | |
480 | + return device; | |
481 | +} | |
482 | + | |
483 | +VideoBootStrap Caca_bootstrap = { | |
484 | + "caca", "Color ASCII Art Library", | |
485 | + Caca_Available, Caca_CreateDevice | |
486 | +}; | |
487 | + | |
488 | +int Caca_VideoInit(_THIS, SDL_PixelFormat *vformat) | |
489 | +{ | |
490 | + int i; | |
491 | + | |
492 | + /* Initialize all variables that we clean on shutdown */ | |
493 | + for ( i=0; i<SDL_NUMMODES; ++i ) { | |
494 | + SDL_modelist[i] = malloc(sizeof(SDL_Rect)); | |
495 | + SDL_modelist[i]->x = SDL_modelist[i]->y = 0; | |
496 | + } | |
497 | + /* Modes sorted largest to smallest */ | |
498 | + SDL_modelist[0]->w = 1024; SDL_modelist[0]->h = 768; | |
499 | + SDL_modelist[1]->w = 800; SDL_modelist[1]->h = 600; | |
500 | + SDL_modelist[2]->w = 640; SDL_modelist[2]->h = 480; | |
501 | + SDL_modelist[3]->w = 320; SDL_modelist[3]->h = 400; | |
502 | + SDL_modelist[4]->w = 320; SDL_modelist[4]->h = 240; | |
503 | + SDL_modelist[5]->w = 320; SDL_modelist[5]->h = 200; | |
504 | + SDL_modelist[6] = NULL; | |
505 | + | |
506 | + Caca_mutex = SDL_CreateMutex(); | |
507 | + | |
508 | + /* Initialize the library */ | |
509 | + if ( caca_init() != 0 ) { | |
510 | + SDL_SetError("Unable to initialize libcaca"); | |
511 | + return(-1); | |
512 | + } | |
513 | + | |
514 | + /* Initialize private variables */ | |
515 | + Caca_lastkey = 0; | |
516 | + Caca_bitmap = NULL; | |
517 | + Caca_buffer = NULL; | |
518 | + | |
519 | + local_this = this; | |
520 | + | |
521 | + /* Determine the screen depth (use default 8-bit depth) */ | |
522 | + vformat->BitsPerPixel = 8; | |
523 | + vformat->BytesPerPixel = 1; | |
524 | + | |
525 | + /* We're done! */ | |
526 | + return(0); | |
527 | +} | |
528 | + | |
529 | +SDL_Rect **Caca_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) | |
530 | +{ | |
531 | + if(format->BitsPerPixel != 8) | |
532 | + return NULL; | |
533 | + | |
534 | + if ( flags & SDL_FULLSCREEN ) { | |
535 | + return SDL_modelist; | |
536 | + } else { | |
537 | + return (SDL_Rect **) -1; | |
538 | + } | |
539 | +} | |
540 | + | |
541 | +/* Various screen update functions available */ | |
542 | +static void Caca_DirectUpdate(_THIS, int numrects, SDL_Rect *rects); | |
543 | + | |
544 | +SDL_Surface *Caca_SetVideoMode(_THIS, SDL_Surface *current, | |
545 | + int width, int height, int bpp, Uint32 flags) | |
546 | +{ | |
547 | + if ( Caca_buffer ) { | |
548 | + free( Caca_buffer ); | |
549 | + Caca_buffer = NULL; | |
550 | + } | |
551 | + | |
552 | + if ( Caca_bitmap ) { | |
553 | + caca_free_bitmap( Caca_bitmap ); | |
554 | + Caca_bitmap = NULL; | |
555 | + } | |
556 | + | |
557 | + Caca_buffer = malloc(2 * ((width + 15) & ~15) * height); | |
558 | + if ( ! Caca_buffer ) { | |
559 | + SDL_SetError("Couldn't allocate buffer for requested mode"); | |
560 | + return(NULL); | |
561 | + } | |
562 | + | |
563 | + memset(Caca_buffer, 0, 2 * ((width + 15) & ~15) * height); | |
564 | + | |
565 | + /* Allocate the new pixel format for the screen */ | |
566 | + if ( ! SDL_ReallocFormat(current, 16, 0xf800, 0x07e0, 0x001f, 0) ) { | |
567 | + return(NULL); | |
568 | + } | |
569 | + | |
570 | + /* Set up the new mode framebuffer */ | |
571 | + current->flags = SDL_FULLSCREEN; | |
572 | + Caca_w = current->w = width; | |
573 | + Caca_h = current->h = height; | |
574 | + current->pitch = 2 * ((width + 15) & ~15); | |
575 | + current->pixels = Caca_buffer; | |
576 | + | |
577 | + /* Create the libcaca bitmap */ | |
578 | + Caca_bitmap = caca_create_bitmap( 16, width, height, current->pitch, 0xf800, 0x07e0, 0x001f, 0x0000 ); | |
579 | + if ( ! Caca_bitmap ) { | |
580 | + SDL_SetError("Couldn't allocate libcaca bitmap"); | |
581 | + return(NULL); | |
582 | + } | |
583 | + | |
584 | + /* Set the blit function */ | |
585 | + this->UpdateRects = Caca_DirectUpdate; | |
586 | + | |
587 | + /* We're done */ | |
588 | + return(current); | |
589 | +} | |
590 | + | |
591 | +/* We don't actually allow hardware surfaces other than the main one */ | |
592 | +static int Caca_AllocHWSurface(_THIS, SDL_Surface *surface) | |
593 | +{ | |
594 | + return(-1); | |
595 | +} | |
596 | +static void Caca_FreeHWSurface(_THIS, SDL_Surface *surface) | |
597 | +{ | |
598 | + return; | |
599 | +} | |
600 | + | |
601 | +/* We need to wait for vertical retrace on page flipped displays */ | |
602 | +static int Caca_LockHWSurface(_THIS, SDL_Surface *surface) | |
603 | +{ | |
604 | + /* TODO ? */ | |
605 | + return(0); | |
606 | +} | |
607 | +static void Caca_UnlockHWSurface(_THIS, SDL_Surface *surface) | |
608 | +{ | |
609 | + return; | |
610 | +} | |
611 | + | |
612 | +/* FIXME: How is this done with libcaca? */ | |
613 | +static int Caca_FlipHWSurface(_THIS, SDL_Surface *surface) | |
614 | +{ | |
615 | + SDL_mutexP(Caca_mutex); | |
616 | + caca_refresh(); | |
617 | + SDL_mutexV(Caca_mutex); | |
618 | + return(0); | |
619 | +} | |
620 | + | |
621 | +static void Caca_DirectUpdate(_THIS, int numrects, SDL_Rect *rects) | |
622 | +{ | |
623 | + SDL_mutexP(Caca_mutex); | |
624 | + caca_draw_bitmap( 0, 0, caca_get_width() - 1, caca_get_height() - 1, | |
625 | + Caca_bitmap, Caca_buffer ); | |
626 | + caca_refresh(); | |
627 | + SDL_mutexV(Caca_mutex); | |
628 | + return; | |
629 | +} | |
630 | + | |
631 | +/* Note: If we are terminated, this could be called in the middle of | |
632 | + another SDL video routine -- notably UpdateRects. | |
633 | +*/ | |
634 | +void Caca_VideoQuit(_THIS) | |
635 | +{ | |
636 | + int i; | |
637 | + | |
638 | + /* Free video mode lists */ | |
639 | + for ( i=0; i<SDL_NUMMODES; ++i ) { | |
640 | + if ( SDL_modelist[i] != NULL ) { | |
641 | + free(SDL_modelist[i]); | |
642 | + SDL_modelist[i] = NULL; | |
643 | + } | |
644 | + } | |
645 | + | |
646 | + if ( Caca_bitmap ) { | |
647 | + caca_free_bitmap( Caca_bitmap ); | |
648 | + Caca_bitmap = NULL; | |
649 | + } | |
650 | + | |
651 | + caca_end(); | |
652 | + | |
653 | + SDL_DestroyMutex(Caca_mutex); | |
654 | +} | |
655 | diff -puriN -x Makefile -x '*.la' libsdl1.2-1.2.6/src/video/caca/SDL_cacavideo.h libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacavideo.h | |
656 | --- libsdl1.2-1.2.6/src/video/caca/SDL_cacavideo.h 1970-01-01 01:00:00.000000000 +0100 | |
657 | +++ libsdl1.2-1.2.6-caca/src/video/caca/SDL_cacavideo.h 2003-11-21 16:03:00.000000000 +0100 | |
658 | @@ -0,0 +1,72 @@ | |
659 | +/* | |
660 | + SDL - Simple DirectMedia Layer | |
661 | + Copyright (C) 2003 Sam Hocevar | |
662 | + | |
663 | + This library is free software; you can redistribute it and/or | |
664 | + modify it under the terms of the GNU Library General Public | |
665 | + License as published by the Free Software Foundation; either | |
666 | + version 2 of the License, or (at your option) any later version. | |
667 | + | |
668 | + This library is distributed in the hope that it will be useful, | |
669 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
670 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
671 | + Library General Public License for more details. | |
672 | + | |
673 | + You should have received a copy of the GNU Library General Public | |
674 | + License along with this library; if not, write to the Free | |
675 | + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
676 | + | |
677 | + Sam Hocevar | |
678 | + sam@zoy.org | |
679 | +*/ | |
680 | + | |
681 | +#ifdef SAVE_RCSID | |
682 | +static char rcsid = | |
683 | + "@(#) $Id$"; | |
684 | +#endif | |
685 | + | |
686 | +#ifndef _SDL_cacavideo_h | |
687 | +#define _SDL_cacavideo_h | |
688 | + | |
689 | +#include "SDL_mouse.h" | |
690 | +#include "SDL_sysvideo.h" | |
691 | +#include "SDL_mutex.h" | |
692 | + | |
693 | +#include <sys/time.h> | |
694 | +#include <time.h> | |
695 | + | |
696 | +#include <caca.h> | |
697 | + | |
698 | +/* Hidden "this" pointer for the video functions */ | |
699 | +#define _THIS SDL_VideoDevice *this | |
700 | + | |
701 | +#define SDL_NUMMODES 6 | |
702 | + | |
703 | +/* Private display data */ | |
704 | +struct SDL_PrivateVideoData { | |
705 | + SDL_Rect *SDL_modelist[SDL_NUMMODES+1]; | |
706 | + SDL_mutex *mutex; | |
707 | + | |
708 | + struct caca_bitmap *bitmap; | |
709 | + void *buffer; | |
710 | + int w, h; | |
711 | + | |
712 | + int lastkey; | |
713 | + struct timeval lasttime; | |
714 | +}; | |
715 | + | |
716 | +/* Old variable names */ | |
717 | +#define SDL_modelist (this->hidden->SDL_modelist) | |
718 | +#define Caca_palette (this->hidden->palette) | |
719 | +#define Caca_bitmap (this->hidden->bitmap) | |
720 | +#define Caca_buffer (this->hidden->buffer) | |
721 | + | |
722 | +#define Caca_w (this->hidden->w) | |
723 | +#define Caca_h (this->hidden->h) | |
724 | + | |
725 | +#define Caca_lastkey (this->hidden->lastkey) | |
726 | +#define Caca_lasttime (this->hidden->lasttime) | |
727 | + | |
728 | +#define Caca_mutex (this->hidden->mutex) | |
729 | + | |
730 | +#endif /* _SDL_cacavideo_h */ |