Mercurial > sdl-ios-xcode
changeset 5047:edaf3e364a05
Nobody has stepped up to maintain an svgalib driver. Bye bye! :)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 19 Jan 2011 22:21:31 -0800 |
parents | 4cb778067834 |
children | 187d7d446306 |
files | SDL.spec.in configure.in include/SDL_config.h.in src/video/SDL_sysvideo.h src/video/SDL_video.c src/video/svga/SDL_svgaevents.c src/video/svga/SDL_svgaevents_c.h src/video/svga/SDL_svgamouse.c src/video/svga/SDL_svgamouse_c.h src/video/svga/SDL_svgavideo.c src/video/svga/SDL_svgavideo.h |
diffstat | 11 files changed, 1 insertions(+), 1220 deletions(-) [+] |
line wrap: on
line diff
--- a/SDL.spec.in Wed Jan 19 22:20:44 2011 -0800 +++ b/SDL.spec.in Wed Jan 19 22:21:31 2011 -0800 @@ -39,7 +39,7 @@ %build %ifos linux -CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-video-aalib --disable-video-directfb --disable-video-ggi --disable-video-svga +CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-video-directfb %else %configure %endif
--- a/configure.in Wed Jan 19 22:20:44 2011 -0800 +++ b/configure.in Wed Jan 19 22:21:31 2011 -0800 @@ -1586,36 +1586,6 @@ fi } -dnl Find the SVGAlib includes and libraries -CheckSVGA() -{ - AC_ARG_ENABLE(video-svga, -AC_HELP_STRING([--enable-video-svga], [use SVGAlib video driver [[default=no]]]), - , enable_video_svga=no) - if test x$enable_video = xyes -a x$enable_video_svga = xyes; then - AC_MSG_CHECKING(for SVGAlib (1.4.0+) support) - video_svga=no - AC_TRY_COMPILE([ - #include <vga.h> - #include <vgamouse.h> - #include <vgakeyboard.h> - ],[ - if ( SCANCODE_RIGHTWIN && SCANCODE_LEFTWIN ) { - exit(0); - } - ],[ - video_svga=yes - ]) - AC_MSG_RESULT($video_svga) - if test x$video_svga = xyes; then - AC_DEFINE(SDL_VIDEO_DRIVER_SVGALIB) - SOURCES="$SOURCES $srcdir/src/video/svga/*.c" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lvga" - have_video=yes - fi - fi -} - dnl rcg04172001 Set up the Null video driver. CheckDummyVideo() { @@ -2276,7 +2246,6 @@ CheckDirectFB CheckFusionSound CheckPS3 - CheckSVGA CheckOpenGLX11 CheckInputEvents CheckTslib
--- a/include/SDL_config.h.in Wed Jan 19 22:20:44 2011 -0800 +++ b/include/SDL_config.h.in Wed Jan 19 22:21:31 2011 -0800 @@ -266,7 +266,6 @@ #undef SDL_VIDEO_DRIVER_QNXGF #undef SDL_VIDEO_DRIVER_PS3 #undef SDL_VIDEO_DRIVER_RISCOS -#undef SDL_VIDEO_DRIVER_SVGALIB #undef SDL_VIDEO_DRIVER_WIN32 #undef SDL_VIDEO_DRIVER_X11 #undef SDL_VIDEO_DRIVER_X11_DYNAMIC
--- a/src/video/SDL_sysvideo.h Wed Jan 19 22:20:44 2011 -0800 +++ b/src/video/SDL_sysvideo.h Wed Jan 19 22:21:31 2011 -0800 @@ -414,9 +414,6 @@ #if SDL_VIDEO_DRIVER_PS3 extern VideoBootStrap PS3_bootstrap; #endif -#if SDL_VIDEO_DRIVER_SVGALIB -extern VideoBootStrap SVGALIB_bootstrap; -#endif #if SDL_VIDEO_DRIVER_WIN32 extern VideoBootStrap WIN32_bootstrap; #endif
--- a/src/video/SDL_video.c Wed Jan 19 22:20:44 2011 -0800 +++ b/src/video/SDL_video.c Wed Jan 19 22:21:31 2011 -0800 @@ -68,9 +68,6 @@ #if SDL_VIDEO_DRIVER_PS3 &PS3_bootstrap, #endif -#if SDL_VIDEO_DRIVER_SVGALIB - &SVGALIB_bootstrap, -#endif #if SDL_VIDEO_DRIVER_WIN32 &WIN32_bootstrap, #endif
--- a/src/video/svga/SDL_svgaevents.c Wed Jan 19 22:20:44 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,420 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -/* Handle the event stream, converting X11 events into SDL events */ - -#include <vga.h> -#include <vgamouse.h> -#include <vgakeyboard.h> -#if defined(__LINUX__) -#include <linux/kd.h> -#include <linux/keyboard.h> -#elif defined(__FREEBSD__) -#include <sys/kbio.h> -#else -#error You must choose your operating system here -#endif - -#include "../../events/SDL_sysevents.h" -#include "../../events/SDL_events_c.h" -#include "SDL_svgavideo.h" -#include "SDL_svgaevents_c.h" - -/* The translation tables from a console scancode to a SDL keysym */ -#if defined(linux) -#define NUM_VGAKEYMAPS (1<<KG_CAPSSHIFT) -static Uint16 vga_keymap[NUM_VGAKEYMAPS][NR_KEYS]; -#elif defined(__FREEBSD__) -/* FIXME: Free the keymap when we shut down the video mode */ -static keymap_t *vga_keymap = NULL; -#else -#error You must choose your operating system here -#endif -static SDLKey keymap[128]; -static SDL_keysym *TranslateKey(int scancode, SDL_keysym * keysym); - -/* Ugh, we have to duplicate the kernel's keysym mapping code... - Oh, it's not so bad. :-) - - FIXME: Add keyboard LED handling code - */ -#if defined(linux) -int -SVGA_initkeymaps(int fd) -{ - struct kbentry entry; - int map, i; - - /* Load all the keysym mappings */ - for (map = 0; map < NUM_VGAKEYMAPS; ++map) { - SDL_memset(vga_keymap[map], 0, NR_KEYS * sizeof(Uint16)); - for (i = 0; i < NR_KEYS; ++i) { - entry.kb_table = map; - entry.kb_index = i; - if (ioctl(fd, KDGKBENT, &entry) == 0) { - /* The "Enter" key is a special case */ - if (entry.kb_value == K_ENTER) { - entry.kb_value = K(KT_ASCII, 13); - } - /* Handle numpad specially as well */ - if (KTYP(entry.kb_value) == KT_PAD) { - switch (entry.kb_value) { - case K_P0: - case K_P1: - case K_P2: - case K_P3: - case K_P4: - case K_P5: - case K_P6: - case K_P7: - case K_P8: - case K_P9: - vga_keymap[map][i] = entry.kb_value; - vga_keymap[map][i] += '0'; - break; - case K_PPLUS: - vga_keymap[map][i] = K(KT_ASCII, '+'); - break; - case K_PMINUS: - vga_keymap[map][i] = K(KT_ASCII, '-'); - break; - case K_PSTAR: - vga_keymap[map][i] = K(KT_ASCII, '*'); - break; - case K_PSLASH: - vga_keymap[map][i] = K(KT_ASCII, '/'); - break; - case K_PENTER: - vga_keymap[map][i] = K(KT_ASCII, '\r'); - break; - case K_PCOMMA: - vga_keymap[map][i] = K(KT_ASCII, ','); - break; - case K_PDOT: - vga_keymap[map][i] = K(KT_ASCII, '.'); - break; - default: - break; - } - } - /* Do the normal key translation */ - if ((KTYP(entry.kb_value) == KT_LATIN) || - (KTYP(entry.kb_value) == KT_ASCII) || - (KTYP(entry.kb_value) == KT_LETTER)) { - vga_keymap[map][i] = entry.kb_value; - } - } - } - } - return (0); -} -#elif defined(__FREEBSD__) -int -SVGA_initkeymaps(int fd) -{ - vga_keymap = SDL_malloc(sizeof(keymap_t)); - if (!vga_keymap) { - SDL_OutOfMemory(); - return (-1); - } - if (ioctl(fd, GIO_KEYMAP, vga_keymap) == -1) { - SDL_free(vga_keymap); - vga_keymap = NULL; - SDL_SetError("Unable to get keyboard map"); - return (-1); - } - return (0); -} -#else -#error You must choose your operating system here -#endif - -int posted = 0; - -void -SVGA_mousecallback(int button, int dx, int dy, int u1, int u2, int u3, int u4) -{ - if (dx || dy) { - posted += SDL_PrivateMouseMotion(0, 1, dx, dy); - } - if (button & MOUSE_LEFTBUTTON) { - if (!(SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(1))) { - posted += SDL_PrivateMouseButton(SDL_PRESSED, 1, 0, 0); - } - } else { - if ((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(1))) { - posted += SDL_PrivateMouseButton(SDL_RELEASED, 1, 0, 0); - } - } - if (button & MOUSE_MIDDLEBUTTON) { - if (!(SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(2))) { - posted += SDL_PrivateMouseButton(SDL_PRESSED, 2, 0, 0); - } - } else { - if ((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(2))) { - posted += SDL_PrivateMouseButton(SDL_RELEASED, 2, 0, 0); - } - } - if (button & MOUSE_RIGHTBUTTON) { - if (!(SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(3))) { - posted += SDL_PrivateMouseButton(SDL_PRESSED, 3, 0, 0); - } - } else { - if ((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(3))) { - posted += SDL_PrivateMouseButton(SDL_RELEASED, 3, 0, 0); - } - } -} - -void -SVGA_keyboardcallback(int scancode, int pressed) -{ - SDL_keysym keysym; - - if (pressed) { - posted += SDL_PrivateKeyboard(SDL_PRESSED, - TranslateKey(scancode, &keysym)); - } else { - posted += SDL_PrivateKeyboard(SDL_RELEASED, - TranslateKey(scancode, &keysym)); - } -} - -void -SVGA_PumpEvents(_THIS) -{ - do { - posted = 0; - mouse_update(); - keyboard_update(); - } while (posted); -} - -void -SVGA_InitOSKeymap(_THIS) -{ - int i; - - /* Initialize the BeOS key translation table */ - for (i = 0; i < SDL_arraysize(keymap); ++i) - keymap[i] = SDLK_UNKNOWN; - - keymap[SCANCODE_ESCAPE] = SDLK_ESCAPE; - keymap[SCANCODE_1] = SDLK_1; - keymap[SCANCODE_2] = SDLK_2; - keymap[SCANCODE_3] = SDLK_3; - keymap[SCANCODE_4] = SDLK_4; - keymap[SCANCODE_5] = SDLK_5; - keymap[SCANCODE_6] = SDLK_6; - keymap[SCANCODE_7] = SDLK_7; - keymap[SCANCODE_8] = SDLK_8; - keymap[SCANCODE_9] = SDLK_9; - keymap[SCANCODE_0] = SDLK_0; - keymap[SCANCODE_MINUS] = SDLK_MINUS; - keymap[SCANCODE_EQUAL] = SDLK_EQUALS; - keymap[SCANCODE_BACKSPACE] = SDLK_BACKSPACE; - keymap[SCANCODE_TAB] = SDLK_TAB; - keymap[SCANCODE_Q] = SDLK_q; - keymap[SCANCODE_W] = SDLK_w; - keymap[SCANCODE_E] = SDLK_e; - keymap[SCANCODE_R] = SDLK_r; - keymap[SCANCODE_T] = SDLK_t; - keymap[SCANCODE_Y] = SDLK_y; - keymap[SCANCODE_U] = SDLK_u; - keymap[SCANCODE_I] = SDLK_i; - keymap[SCANCODE_O] = SDLK_o; - keymap[SCANCODE_P] = SDLK_p; - keymap[SCANCODE_BRACKET_LEFT] = SDLK_LEFTBRACKET; - keymap[SCANCODE_BRACKET_RIGHT] = SDLK_RIGHTBRACKET; - keymap[SCANCODE_ENTER] = SDLK_RETURN; - keymap[SCANCODE_LEFTCONTROL] = SDLK_LCTRL; - keymap[SCANCODE_A] = SDLK_a; - keymap[SCANCODE_S] = SDLK_s; - keymap[SCANCODE_D] = SDLK_d; - keymap[SCANCODE_F] = SDLK_f; - keymap[SCANCODE_G] = SDLK_g; - keymap[SCANCODE_H] = SDLK_h; - keymap[SCANCODE_J] = SDLK_j; - keymap[SCANCODE_K] = SDLK_k; - keymap[SCANCODE_L] = SDLK_l; - keymap[SCANCODE_SEMICOLON] = SDLK_SEMICOLON; - keymap[SCANCODE_APOSTROPHE] = SDLK_QUOTE; - keymap[SCANCODE_GRAVE] = SDLK_BACKQUOTE; - keymap[SCANCODE_LEFTSHIFT] = SDLK_LSHIFT; - keymap[SCANCODE_BACKSLASH] = SDLK_BACKSLASH; - keymap[SCANCODE_Z] = SDLK_z; - keymap[SCANCODE_X] = SDLK_x; - keymap[SCANCODE_C] = SDLK_c; - keymap[SCANCODE_V] = SDLK_v; - keymap[SCANCODE_B] = SDLK_b; - keymap[SCANCODE_N] = SDLK_n; - keymap[SCANCODE_M] = SDLK_m; - keymap[SCANCODE_COMMA] = SDLK_COMMA; - keymap[SCANCODE_PERIOD] = SDLK_PERIOD; - keymap[SCANCODE_SLASH] = SDLK_SLASH; - keymap[SCANCODE_RIGHTSHIFT] = SDLK_RSHIFT; - keymap[SCANCODE_KEYPADMULTIPLY] = SDLK_KP_MULTIPLY; - keymap[SCANCODE_LEFTALT] = SDLK_LALT; - keymap[SCANCODE_SPACE] = SDLK_SPACE; - keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK; - keymap[SCANCODE_F1] = SDLK_F1; - keymap[SCANCODE_F2] = SDLK_F2; - keymap[SCANCODE_F3] = SDLK_F3; - keymap[SCANCODE_F4] = SDLK_F4; - keymap[SCANCODE_F5] = SDLK_F5; - keymap[SCANCODE_F6] = SDLK_F6; - keymap[SCANCODE_F7] = SDLK_F7; - keymap[SCANCODE_F8] = SDLK_F8; - keymap[SCANCODE_F9] = SDLK_F9; - keymap[SCANCODE_F10] = SDLK_F10; - keymap[SCANCODE_NUMLOCK] = SDLK_NUMLOCK; - keymap[SCANCODE_SCROLLLOCK] = SDLK_SCROLLOCK; - keymap[SCANCODE_KEYPAD7] = SDLK_KP7; - keymap[SCANCODE_CURSORUPLEFT] = SDLK_KP7; - keymap[SCANCODE_KEYPAD8] = SDLK_KP8; - keymap[SCANCODE_CURSORUP] = SDLK_KP8; - keymap[SCANCODE_KEYPAD9] = SDLK_KP9; - keymap[SCANCODE_CURSORUPRIGHT] = SDLK_KP9; - keymap[SCANCODE_KEYPADMINUS] = SDLK_KP_MINUS; - keymap[SCANCODE_KEYPAD4] = SDLK_KP4; - keymap[SCANCODE_CURSORLEFT] = SDLK_KP4; - keymap[SCANCODE_KEYPAD5] = SDLK_KP5; - keymap[SCANCODE_KEYPAD6] = SDLK_KP6; - keymap[SCANCODE_CURSORRIGHT] = SDLK_KP6; - keymap[SCANCODE_KEYPADPLUS] = SDLK_KP_PLUS; - keymap[SCANCODE_KEYPAD1] = SDLK_KP1; - keymap[SCANCODE_CURSORDOWNLEFT] = SDLK_KP1; - keymap[SCANCODE_KEYPAD2] = SDLK_KP2; - keymap[SCANCODE_CURSORDOWN] = SDLK_KP2; - keymap[SCANCODE_KEYPAD3] = SDLK_KP3; - keymap[SCANCODE_CURSORDOWNRIGHT] = SDLK_KP3; - keymap[SCANCODE_KEYPAD0] = SDLK_KP0; - keymap[SCANCODE_KEYPADPERIOD] = SDLK_KP_PERIOD; - keymap[SCANCODE_LESS] = SDLK_LESS; - keymap[SCANCODE_F11] = SDLK_F11; - keymap[SCANCODE_F12] = SDLK_F12; - keymap[SCANCODE_KEYPADENTER] = SDLK_KP_ENTER; - keymap[SCANCODE_RIGHTCONTROL] = SDLK_RCTRL; - keymap[SCANCODE_CONTROL] = SDLK_RCTRL; - keymap[SCANCODE_KEYPADDIVIDE] = SDLK_KP_DIVIDE; - keymap[SCANCODE_PRINTSCREEN] = SDLK_PRINT; - keymap[SCANCODE_RIGHTALT] = SDLK_RALT; - keymap[SCANCODE_BREAK] = SDLK_BREAK; - keymap[SCANCODE_BREAK_ALTERNATIVE] = SDLK_UNKNOWN; - keymap[SCANCODE_HOME] = SDLK_HOME; - keymap[SCANCODE_CURSORBLOCKUP] = SDLK_UP; - keymap[SCANCODE_PAGEUP] = SDLK_PAGEUP; - keymap[SCANCODE_CURSORBLOCKLEFT] = SDLK_LEFT; - keymap[SCANCODE_CURSORBLOCKRIGHT] = SDLK_RIGHT; - keymap[SCANCODE_END] = SDLK_END; - keymap[SCANCODE_CURSORBLOCKDOWN] = SDLK_DOWN; - keymap[SCANCODE_PAGEDOWN] = SDLK_PAGEDOWN; - keymap[SCANCODE_INSERT] = SDLK_INSERT; - keymap[SCANCODE_REMOVE] = SDLK_DELETE; - keymap[119] = SDLK_PAUSE; - keymap[SCANCODE_RIGHTWIN] = SDLK_RSUPER; - keymap[SCANCODE_LEFTWIN] = SDLK_LSUPER; - keymap[127] = SDLK_MENU; -} - -#if defined(linux) -static SDL_keysym * -TranslateKey(int scancode, SDL_keysym * keysym) -{ - /* Set the keysym information */ - keysym->scancode = scancode; - keysym->sym = keymap[scancode]; - keysym->mod = KMOD_NONE; - - /* If UNICODE is on, get the UNICODE value for the key */ - keysym->unicode = 0; - if (SDL_TranslateUNICODE) { - int map; - SDLMod modstate; - - modstate = SDL_GetModState(); - map = 0; - if (modstate & KMOD_SHIFT) { - map |= (1 << KG_SHIFT); - } - if (modstate & KMOD_CTRL) { - map |= (1 << KG_CTRL); - } - if (modstate & KMOD_ALT) { - map |= (1 << KG_ALT); - } - if (modstate & KMOD_MODE) { - map |= (1 << KG_ALTGR); - } - if (KTYP(vga_keymap[map][scancode]) == KT_LETTER) { - if (modstate & KMOD_CAPS) { - map ^= (1 << KG_SHIFT); - } - } - if (KTYP(vga_keymap[map][scancode]) == KT_PAD) { - if (modstate & KMOD_NUM) { - keysym->unicode = KVAL(vga_keymap[map][scancode]); - } - } else { - keysym->unicode = KVAL(vga_keymap[map][scancode]); - } - } - return (keysym); -} -#elif defined(__FREEBSD__) -static SDL_keysym * -TranslateKey(int scancode, SDL_keysym * keysym) -{ - /* Set the keysym information */ - keysym->scancode = scancode; - keysym->sym = keymap[scancode]; - keysym->mod = KMOD_NONE; - - /* If UNICODE is on, get the UNICODE value for the key */ - keysym->unicode = 0; - if (SDL_TranslateUNICODE && vga_keymap) { - int map; - SDLMod modstate; - - modstate = SDL_GetModState(); - map = 0; - if (modstate & KMOD_SHIFT) { - map += 1; - } - if (modstate & KMOD_CTRL) { - map += 2; - } - if (modstate & KMOD_ALT) { - map += 4; - } - if (!(vga_keymap->key[scancode].spcl & (0x80 >> map))) { - keysym->unicode = vga_keymap->key[scancode].map[map]; - } - - } - return (keysym); -} -#else -#error You must choose your operating system here -#endif -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/svga/SDL_svgaevents_c.h Wed Jan 19 22:20:44 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#include "SDL_svgavideo.h" - -/* Variables and functions exported by SDL_sysevents.c to other parts - of the native video subsystem (SDL_sysvideo.c) -*/ -extern int SVGA_initkeymaps(int fd); -extern void SVGA_mousecallback(int button, int dx, int dy, - int u1, int u2, int u3, int u4); -extern void SVGA_keyboardcallback(int scancode, int pressed); - -extern void SVGA_InitOSKeymap(_THIS); -extern void SVGA_PumpEvents(_THIS); -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/svga/SDL_svgamouse.c Wed Jan 19 22:20:44 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#include "SDL_mouse.h" -#include "../../events/SDL_events_c.h" -#include "SDL_svgavideo.h" -#include "SDL_svgamouse_c.h" - - -/* The implementation dependent data for the window manager cursor */ -struct WMcursor -{ - int unused; -}; -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/svga/SDL_svgamouse_c.h Wed Jan 19 22:20:44 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#include "SDL_svgavideo.h" - -/* Functions to be exported */ -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/svga/SDL_svgavideo.c Wed Jan 19 22:20:44 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,604 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -/* SVGAlib based SDL video driver implementation. -*/ - -#include <unistd.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/ioctl.h> -#include <fcntl.h> - -#if defined(__LINUX__) -#include <linux/vt.h> -#elif defined(__FREEBSD__) -#include <sys/consio.h> -#else -#error You must choose your operating system here -#endif -#include <vga.h> -#include <vgamouse.h> -#include <vgakeyboard.h> - -#include "SDL_video.h" -#include "SDL_mouse.h" -#include "../SDL_sysvideo.h" -#include "../SDL_pixels_c.h" -#include "../../events/SDL_events_c.h" -#include "SDL_svgavideo.h" -#include "SDL_svgaevents_c.h" -#include "SDL_svgamouse_c.h" - -/* Initialization/Query functions */ -static int SVGA_VideoInit(_THIS, SDL_PixelFormat * vformat); -static SDL_Rect **SVGA_ListModes(_THIS, SDL_PixelFormat * format, - Uint32 flags); -static SDL_Surface *SVGA_SetVideoMode(_THIS, SDL_Surface * current, - int width, int height, int bpp, - Uint32 flags); -static int SVGA_SetColors(_THIS, int firstcolor, int ncolors, - SDL_Color * colors); -static void SVGA_VideoQuit(_THIS); - -/* Hardware surface functions */ -static int SVGA_AllocHWSurface(_THIS, SDL_Surface * surface); -static int SVGA_LockHWSurface(_THIS, SDL_Surface * surface); -static int SVGA_FlipHWSurface(_THIS, SDL_Surface * surface); -static void SVGA_UnlockHWSurface(_THIS, SDL_Surface * surface); -static void SVGA_FreeHWSurface(_THIS, SDL_Surface * surface); - -/* SVGAlib driver bootstrap functions */ - -static int -SVGA_Available(void) -{ - /* Check to see if we are root and stdin is a virtual console */ - int console; - - /* SVGALib 1.9.x+ doesn't require root (via /dev/svga) */ - int svgalib2 = -1; - - /* See if we are connected to a virtual terminal */ - console = STDIN_FILENO; -#if 0 /* This is no longer needed, SVGAlib can switch consoles for us */ - if (console >= 0) { - struct stat sb; - struct vt_mode dummy; - - if ((fstat(console, &sb) < 0) || - (ioctl(console, VT_GETMODE, &dummy) < 0)) { - console = -1; - } - } -#endif /* 0 */ - - /* See if SVGAlib 2.0 is available */ - svgalib2 = open("/dev/svga", O_RDONLY); - if (svgalib2 != -1) { - close(svgalib2); - } - - return (((svgalib2 != -1) || (geteuid() == 0)) && (console >= 0)); -} - -static void -SVGA_DeleteDevice(SDL_VideoDevice * device) -{ - SDL_free(device->hidden); - SDL_free(device); -} - -static SDL_VideoDevice * -SVGA_CreateDevice(int devindex) -{ - SDL_VideoDevice *device; - - /* Initialize all variables that we clean on shutdown */ - device = (SDL_VideoDevice *) SDL_malloc(sizeof(SDL_VideoDevice)); - if (device) { - SDL_memset(device, 0, (sizeof *device)); - device->hidden = (struct SDL_PrivateVideoData *) - SDL_malloc((sizeof *device->hidden)); - } - if ((device == NULL) || (device->hidden == NULL)) { - SDL_OutOfMemory(); - if (device) { - SDL_free(device); - } - return (0); - } - SDL_memset(device->hidden, 0, (sizeof *device->hidden)); - - /* Set the function pointers */ - device->VideoInit = SVGA_VideoInit; - device->ListModes = SVGA_ListModes; - device->SetVideoMode = SVGA_SetVideoMode; - device->SetColors = SVGA_SetColors; - device->UpdateRects = NULL; - device->VideoQuit = SVGA_VideoQuit; - device->AllocHWSurface = SVGA_AllocHWSurface; - device->CheckHWBlit = NULL; - device->FillHWRect = NULL; - device->SetHWColorKey = NULL; - device->SetHWAlpha = NULL; - device->LockHWSurface = SVGA_LockHWSurface; - device->UnlockHWSurface = SVGA_UnlockHWSurface; - device->FlipHWSurface = SVGA_FlipHWSurface; - device->FreeHWSurface = SVGA_FreeHWSurface; - device->SetCaption = NULL; - device->SetIcon = NULL; - device->IconifyWindow = NULL; - device->GrabInput = NULL; - device->GetWMInfo = NULL; - device->InitOSKeymap = SVGA_InitOSKeymap; - device->PumpEvents = SVGA_PumpEvents; - - device->free = SVGA_DeleteDevice; - - return device; -} - -VideoBootStrap SVGALIB_bootstrap = { - "svgalib", "SVGAlib", - SVGA_Available, SVGA_CreateDevice -}; - -static int -SVGA_AddMode(_THIS, int mode, int actually_add) -{ - int i, j; - vga_modeinfo *modeinfo; - - modeinfo = vga_getmodeinfo(mode); - - i = modeinfo->bytesperpixel - 1; - if (i < 0) { - return 0; - } - if (actually_add) { - SDL_Rect saved_rect[2]; - int saved_mode[2]; - int b; - - /* Add the mode, sorted largest to smallest */ - b = 0; - j = 0; - while ((SDL_modelist[i][j]->w > modeinfo->width) || - (SDL_modelist[i][j]->h > modeinfo->height)) { - ++j; - } - /* Skip modes that are already in our list */ - if ((SDL_modelist[i][j]->w == modeinfo->width) && - (SDL_modelist[i][j]->h == modeinfo->height)) { - return (0); - } - /* Insert the new mode */ - saved_rect[b] = *SDL_modelist[i][j]; - saved_mode[b] = SDL_vgamode[i][j]; - SDL_modelist[i][j]->w = modeinfo->width; - SDL_modelist[i][j]->h = modeinfo->height; - SDL_vgamode[i][j] = mode; - /* Everybody scoot down! */ - if (saved_rect[b].w && saved_rect[b].h) { - for (++j; SDL_modelist[i][j]->w; ++j) { - saved_rect[!b] = *SDL_modelist[i][j]; - saved_mode[!b] = SDL_vgamode[i][j]; - *SDL_modelist[i][j] = saved_rect[b]; - SDL_vgamode[i][j] = saved_mode[b]; - b = !b; - } - *SDL_modelist[i][j] = saved_rect[b]; - SDL_vgamode[i][j] = saved_mode[b]; - } - } else { - ++SDL_nummodes[i]; - } - return (1); -} - -static void -SVGA_UpdateVideoInfo(_THIS) -{ - vga_modeinfo *modeinfo; - - this->info.wm_available = 0; - this->info.hw_available = (banked ? 0 : 1); - modeinfo = vga_getmodeinfo(vga_getcurrentmode()); - this->info.video_mem = modeinfo->memory; - /* FIXME: Add hardware accelerated blit information */ -#ifdef SVGALIB_DEBUG - printf("Hardware accelerated blit: %savailable\n", - modeinfo->haveblit ? "" : "not "); -#endif -} - -int -SVGA_VideoInit(_THIS, SDL_PixelFormat * vformat) -{ - int keyboard; - int i, j; - int mode, total_modes; - - /* Initialize all variables that we clean on shutdown */ - for (i = 0; i < NUM_MODELISTS; ++i) { - SDL_nummodes[i] = 0; - SDL_modelist[i] = NULL; - SDL_vgamode[i] = NULL; - } - - /* Initialize the library */ - vga_disabledriverreport(); - if (vga_init() < 0) { - SDL_SetError("Unable to initialize SVGAlib"); - return (-1); - } - vga_setmode(TEXT); - - /* Enable mouse and keyboard support */ - vga_setmousesupport(1); - keyboard = keyboard_init_return_fd(); - if (keyboard < 0) { - SDL_SetError("Unable to initialize keyboard"); - return (-1); - } - if (SVGA_initkeymaps(keyboard) < 0) { - return (-1); - } - keyboard_seteventhandler(SVGA_keyboardcallback); - - /* Determine the current screen size */ - this->info.current_w = 0; - this->info.current_h = 0; - - /* Determine the screen depth (use default 8-bit depth) */ - vformat->BitsPerPixel = 8; - - /* Enumerate the available fullscreen modes */ - total_modes = 0; - for (mode = vga_lastmodenumber(); mode; --mode) { - if (vga_hasmode(mode)) { - if (SVGA_AddMode(this, mode, 0)) { - ++total_modes; - } - } - } - if (SVGA_AddMode(this, G320x200x256, 0)) - ++total_modes; - if (total_modes == 0) { - SDL_SetError("No linear video modes available"); - return (-1); - } - for (i = 0; i < NUM_MODELISTS; ++i) { - SDL_vgamode[i] = (int *) SDL_malloc(SDL_nummodes[i] * sizeof(int)); - if (SDL_vgamode[i] == NULL) { - SDL_OutOfMemory(); - return (-1); - } - SDL_modelist[i] = (SDL_Rect **) - SDL_malloc((SDL_nummodes[i] + 1) * sizeof(SDL_Rect *)); - if (SDL_modelist[i] == NULL) { - SDL_OutOfMemory(); - return (-1); - } - for (j = 0; j < SDL_nummodes[i]; ++j) { - SDL_modelist[i][j] = (SDL_Rect *) SDL_malloc(sizeof(SDL_Rect)); - if (SDL_modelist[i][j] == NULL) { - SDL_OutOfMemory(); - return (-1); - } - SDL_memset(SDL_modelist[i][j], 0, sizeof(SDL_Rect)); - } - SDL_modelist[i][j] = NULL; - } - for (mode = vga_lastmodenumber(); mode; --mode) { - if (vga_hasmode(mode)) { - SVGA_AddMode(this, mode, 1); - } - } - SVGA_AddMode(this, G320x200x256, 1); - - /* Free extra (duplicated) modes */ - for (i = 0; i < NUM_MODELISTS; ++i) { - j = 0; - while (SDL_modelist[i][j] && SDL_modelist[i][j]->w) { - j++; - } - while (SDL_modelist[i][j]) { - SDL_free(SDL_modelist[i][j]); - SDL_modelist[i][j] = NULL; - j++; - } - } - - /* Fill in our hardware acceleration capabilities */ - SVGA_UpdateVideoInfo(this); - - /* We're done! */ - return (0); -} - -SDL_Rect ** -SVGA_ListModes(_THIS, SDL_PixelFormat * format, Uint32 flags) -{ - return (SDL_modelist[((format->BitsPerPixel + 7) / 8) - 1]); -} - -/* Various screen update functions available */ -static void SVGA_DirectUpdate(_THIS, int numrects, SDL_Rect * rects); -static void SVGA_BankedUpdate(_THIS, int numrects, SDL_Rect * rects); - -SDL_Surface * -SVGA_SetVideoMode(_THIS, SDL_Surface * current, - int width, int height, int bpp, Uint32 flags) -{ - int mode; - int vgamode; - vga_modeinfo *modeinfo; - int screenpage_len; - - /* Free old pixels if we were in banked mode */ - if (banked && current->pixels) { - free(current->pixels); - current->pixels = NULL; - } - - /* Try to set the requested linear video mode */ - bpp = (bpp + 7) / 8 - 1; - for (mode = 0; SDL_modelist[bpp][mode]; ++mode) { - if ((SDL_modelist[bpp][mode]->w == width) && - (SDL_modelist[bpp][mode]->h == height)) { - break; - } - } - if (SDL_modelist[bpp][mode] == NULL) { - SDL_SetError("Couldn't find requested mode in list"); - return (NULL); - } - vgamode = SDL_vgamode[bpp][mode]; - vga_setmode(vgamode); - vga_setpage(0); - - if ((vga_setlinearaddressing() < 0) && (vgamode != G320x200x256)) { - banked = 1; - } else { - banked = 0; - } - - modeinfo = vga_getmodeinfo(SDL_vgamode[bpp][mode]); - - /* Update hardware acceleration info */ - SVGA_UpdateVideoInfo(this); - - /* Allocate the new pixel format for the screen */ - bpp = (bpp + 1) * 8; - if ((bpp == 16) && (modeinfo->colors == 32768)) { - bpp = 15; - } - if (!SDL_ReallocFormat(current, bpp, 0, 0, 0, 0)) { - return (NULL); - } - - /* Set up the new mode framebuffer */ - current->flags = SDL_FULLSCREEN; - if (!banked) { - current->flags |= SDL_HWSURFACE; - } - if (bpp == 8) { - /* FIXME: What about DirectColor? */ - current->flags |= SDL_HWPALETTE; - } - current->w = width; - current->h = height; - current->pitch = modeinfo->linewidth; - if (banked) { - current->pixels = SDL_malloc(current->h * current->pitch); - if (!current->pixels) { - SDL_OutOfMemory(); - return (NULL); - } - } else { - current->pixels = vga_getgraphmem(); - } - - /* set double-buffering */ - if ((flags & SDL_DOUBLEBUF) && !banked) { - /* length of one screen page in bytes */ - screenpage_len = current->h * modeinfo->linewidth; - - /* if start address should be aligned */ - if (modeinfo->linewidth_unit) { - if (screenpage_len % modeinfo->linewidth_unit) { - screenpage_len += - modeinfo->linewidth_unit - - (screenpage_len % modeinfo->linewidth_unit); - } - } - - /* if we heve enough videomemory = ak je dost videopamete */ - if (modeinfo->memory > (screenpage_len * 2 / 1024)) { - current->flags |= SDL_DOUBLEBUF; - flip_page = 0; - flip_offset[0] = 0; - flip_offset[1] = screenpage_len; - flip_address[0] = vga_getgraphmem(); - flip_address[1] = flip_address[0] + screenpage_len; - SVGA_FlipHWSurface(this, current); - } - } - - /* Set the blit function */ - if (banked) { - this->UpdateRects = SVGA_BankedUpdate; - } else { - this->UpdateRects = SVGA_DirectUpdate; - } - - /* Set up the mouse handler again (buggy SVGAlib 1.40) */ - mouse_seteventhandler(SVGA_mousecallback); - - /* We're done */ - return (current); -} - -/* We don't actually allow hardware surfaces other than the main one */ -static int -SVGA_AllocHWSurface(_THIS, SDL_Surface * surface) -{ - return (-1); -} - -static void -SVGA_FreeHWSurface(_THIS, SDL_Surface * surface) -{ - return; -} - -/* We need to wait for vertical retrace on page flipped displays */ -static int -SVGA_LockHWSurface(_THIS, SDL_Surface * surface) -{ - /* The waiting is done in SVGA_FlipHWSurface() */ - return (0); -} - -static void -SVGA_UnlockHWSurface(_THIS, SDL_Surface * surface) -{ - return; -} - -static int -SVGA_FlipHWSurface(_THIS, SDL_Surface * surface) -{ - if (!banked) { - vga_setdisplaystart(flip_offset[flip_page]); - flip_page = !flip_page; - surface->pixels = flip_address[flip_page]; - vga_waitretrace(); - } - return (0); -} - -static void -SVGA_DirectUpdate(_THIS, int numrects, SDL_Rect * rects) -{ - return; -} - -static void -SVGA_BankedUpdate(_THIS, int numrects, SDL_Rect * rects) -{ - int i, j; - SDL_Rect *rect; - int page, vp; - int x, y, w, h; - unsigned char *src; - unsigned char *dst; - int bpp = this->screen->format->BytesPerPixel; - int pitch = this->screen->pitch; - - dst = vga_getgraphmem(); - for (i = 0; i < numrects; ++i) { - rect = &rects[i]; - x = rect->x; - y = rect->y; - w = rect->w * bpp; - h = rect->h; - - vp = y * pitch + x * bpp; - src = (unsigned char *) this->screen->pixels + vp; - page = vp >> 16; - vp &= 0xffff; - vga_setpage(page); - for (j = 0; j < h; j++) { - if (vp + w > 0x10000) { - if (vp >= 0x10000) { - page++; - vga_setpage(page); - vp &= 0xffff; - } else { - SDL_memcpy(dst + vp, src, 0x10000 - vp); - page++; - vga_setpage(page); - SDL_memcpy(dst, src + 0x10000 - vp, (vp + w) & 0xffff); - vp = (vp + pitch) & 0xffff; - src += pitch; - continue; - } - } - SDL_memcpy(dst + vp, src, w); - src += pitch; - vp += pitch; - } - } -} - -int -SVGA_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color * colors) -{ - int i; - - for (i = 0; i < ncolors; i++) { - vga_setpalette(firstcolor + i, - colors[i].r >> 2, colors[i].g >> 2, colors[i].b >> 2); - } - return (1); -} - -/* Note: If we are terminated, this could be called in the middle of - another SDL video routine -- notably UpdateRects. -*/ -void -SVGA_VideoQuit(_THIS) -{ - int i, j; - - /* Reset the console video mode */ - if (this->screen && (this->screen->w && this->screen->h)) { - vga_setmode(TEXT); - } - keyboard_close(); - - /* Free video mode lists */ - for (i = 0; i < NUM_MODELISTS; ++i) { - if (SDL_modelist[i] != NULL) { - for (j = 0; SDL_modelist[i][j]; ++j) - SDL_free(SDL_modelist[i][j]); - SDL_free(SDL_modelist[i]); - SDL_modelist[i] = NULL; - } - if (SDL_vgamode[i] != NULL) { - SDL_free(SDL_vgamode[i]); - SDL_vgamode[i] = NULL; - } - } - if (this->screen) { - if (banked && this->screen->pixels) { - SDL_free(this->screen->pixels); - } - this->screen->pixels = NULL; - } -} - -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/svga/SDL_svgavideo.h Wed Jan 19 22:20:44 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#ifndef _SDL_svgavideo_h -#define _SDL_svgavideo_h - -#include "SDL_mouse.h" -#include "../SDL_sysvideo.h" - -/* Hidden "this" pointer for the video functions */ -#define _THIS SDL_VideoDevice *this - -/* Private display data */ -struct SDL_PrivateVideoData -{ -#define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */ - int SDL_nummodes[NUM_MODELISTS]; - SDL_Rect **SDL_modelist[NUM_MODELISTS]; - int *SDL_vgamode[NUM_MODELISTS]; - - /* information for double-buffering */ - int flip_page; - int flip_offset[2]; - Uint8 *flip_address[2]; - - /* Set to 1 if we're in banked video mode */ - int banked; -}; -/* Old variable names */ -#define SDL_nummodes (this->hidden->SDL_nummodes) -#define SDL_modelist (this->hidden->SDL_modelist) -#define SDL_vgamode (this->hidden->SDL_vgamode) -#define flip_page (this->hidden->flip_page) -#define flip_offset (this->hidden->flip_offset) -#define flip_address (this->hidden->flip_address) -#define banked (this->hidden->banked) - -#endif /* _SDL_svgavideo_h */ -/* vi: set ts=4 sw=4 expandtab: */