diff options
Diffstat (limited to 'hw/kdrive/sdl/sdl.c')
-rw-r--r-- | hw/kdrive/sdl/sdl.c | 498 |
1 files changed, 0 insertions, 498 deletions
diff --git a/hw/kdrive/sdl/sdl.c b/hw/kdrive/sdl/sdl.c deleted file mode 100644 index 327359199..000000000 --- a/hw/kdrive/sdl/sdl.c +++ /dev/null @@ -1,498 +0,0 @@ -/* - * $Id$ - * - * Copyright © 2004 PillowElephantBadgerBankPond - - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of PillowElephantBadgerBankPond not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. PillowElephantBadgerBankPond makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * PillowElephantBadgerBankPond DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL PillowElephantBadgerBankPond BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - * - * It's really not my fault - see it was the elephants!! - * - jaymz - * - */ -/* $Header$ */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "kdrive.h" -#include "kkeymap.h" -#include <SDL/SDL.h> -#include <X11/keysym.h> - -static void xsdlFini(void); -static Bool sdlScreenInit(KdScreenInfo *screen); -static Bool sdlFinishInitScreen(ScreenPtr pScreen); -static Bool sdlCreateRes(ScreenPtr pScreen); - -static void sdlKeyboardBell (int volume, int pitch, int duration); -static void sdlKeyboardLeds (int leds); -static void sdlKeyboardFini(void); -static void sdlKeyboardLoad (void); -static Bool sdlKeyboardInit(void); - -static Bool sdlMouseInit(void); -static void sdlMouseFini(void); - -void *sdlShadowWindow (ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode, CARD32 *size, void *closure); -void sdlShadowUpdate (ScreenPtr pScreen, shadowBufPtr pBuf); - -void sdlTimer(void); - -KeySym sdlKeymap[]={ - 0, /* 8 */ - 0, - XK_Escape, NoSymbol, /* escape */ - XK_1, XK_exclam, - XK_2, XK_at, - XK_3, XK_numbersign, - XK_4, XK_dollar, - XK_5, XK_percent, - XK_6, XK_asciicircum, - XK_7, XK_ampersand, - XK_8, XK_asterisk, - XK_9, XK_parenleft, - XK_0, XK_parenright, - XK_minus, XK_underscore, - XK_equal, XK_plus, - XK_BackSpace, NoSymbol, /* backspace */ - XK_Tab, NoSymbol, - XK_q, XK_Q, - XK_w, XK_W, - XK_e, XK_E, - XK_r, XK_R, - XK_t, XK_T, - XK_y, XK_Y, - XK_u, XK_U, - XK_i, XK_I, - XK_o, XK_O, - XK_p, XK_P, - XK_bracketleft, XK_braceleft, /* [, { */ - XK_bracketright, XK_braceright, /* ]. } */ - XK_Return, NoSymbol, - XK_Control_L, NoSymbol, - XK_a, XK_A, - XK_s, XK_S, - XK_d, XK_D, - XK_f, XK_F, - XK_g, XK_G, - XK_h, XK_H, - XK_j, XK_J, - XK_k, XK_K, - XK_l, XK_L, - XK_semicolon, XK_colon, - XK_apostrophe, XK_quotedbl, - XK_grave, XK_asciitilde, - XK_Shift_L, NoSymbol, - XK_backslash, XK_bar, - XK_z, XK_z, - XK_x, XK_X, - XK_c, XK_C, - XK_v, XK_V, - XK_b, XK_B, - XK_n, XK_N, - XK_m, XK_M, - XK_comma, XK_less, - XK_period, XK_greater, - XK_slash, XK_question, - XK_Shift_R, NoSymbol, - XK_KP_Multiply, NoSymbol, - XK_Meta_L, XK_Alt_L, - XK_space, NoSymbol, - XK_Caps_Lock, NoSymbol, - XK_F1, NoSymbol, - XK_F2, NoSymbol, - XK_F3, NoSymbol, - XK_F4, NoSymbol, - XK_F5, NoSymbol, - XK_F6, NoSymbol, - XK_F7, NoSymbol, - XK_F8, NoSymbol, - XK_F9, NoSymbol, - XK_F10, NoSymbol, - XK_Num_Lock, NoSymbol, - XK_Scroll_Lock, NoSymbol, - XK_KP_Home, XK_KP_7, - XK_KP_Up, XK_KP_8, - XK_KP_Page_Up, XK_KP_9, - XK_KP_Subtract, NoSymbol, - XK_KP_Left, XK_KP_4, - XK_KP_5, NoSymbol, - XK_KP_Right, XK_KP_6, - XK_KP_Add, NoSymbol, - XK_KP_End, XK_KP_1, - XK_KP_Down, XK_KP_2, - XK_KP_Page_Down, XK_KP_3, - XK_KP_Insert, XK_KP_0, - XK_KP_Delete, XK_KP_Decimal, - NoSymbol, NoSymbol, /* 92 */ - NoSymbol, NoSymbol, /* 93 */ - NoSymbol, NoSymbol, /* 94 */ - XK_F11, NoSymbol, /* 95 */ - XK_F12, NoSymbol, /* 96 */ - XK_Home, NoSymbol, /* 97 */ - XK_Up, NoSymbol, /* 98 */ - XK_Page_Up, NoSymbol, /* 99 */ - XK_Left, NoSymbol, /* 100 */ - NoSymbol, NoSymbol, /* 101 */ - XK_Right, NoSymbol, /* 102 */ - NoSymbol, NoSymbol, /* 103 */ - XK_Down, NoSymbol, /* 104 */ - XK_Page_Down, NoSymbol, /* 105 */ - XK_Insert, NoSymbol, /* 106 */ - NoSymbol, NoSymbol, /* 107 */ - NoSymbol, NoSymbol, /* 108 */ - XK_Meta_R, XK_Alt_R, /* 109 */ - XK_Pause, XK_Break, /* 110 */ - XK_Sys_Req, XK_Print, /* 111 */ - NoSymbol, NoSymbol, /* 112 */ - XK_Control_R, NoSymbol, /* 113 */ - NoSymbol, NoSymbol, /* 114 */ - XK_Super_L, NoSymbol, /* 115 */ - XK_Super_R, NoSymbol, /* 116 */ - XK_Menu, NoSymbol, /* 117 */ - NoSymbol, NoSymbol /* 118 */ -}; - -//KdMouseInfo *kdMouseInfo; - -KdKeyboardFuncs sdlKeyboardFuncs = { - sdlKeyboardLoad, - sdlKeyboardInit, - sdlKeyboardLeds, - sdlKeyboardBell, - sdlKeyboardFini, - 3, -}; - -KdMouseFuncs sdlMouseFuncs = { - sdlMouseInit, - sdlMouseFini, -}; - - -KdCardFuncs sdlFuncs = { - 0, /* cardinit */ - sdlScreenInit, /* scrinit */ - 0, /* initScreen */ - sdlFinishInitScreen, /* finishInitScreen */ - sdlCreateRes, /* createRes */ - 0, /* preserve */ - 0, /* enable */ - 0, /* dpms */ - 0, /* disable */ - 0, /* restore */ - 0, /* scrfini */ - 0, /* cardfini */ - - 0, /* initCursor */ - 0, /* enableCursor */ - 0, /* disableCursor */ - 0, /* finiCursor */ - 0, /* recolorCursor */ - - 0, /* initAccel */ - 0, /* enableAccel */ - 0, /* syncAccel */ - 0, /* disableAccel */ - 0, /* finiAccel */ - - 0, /* getColors */ - 0 /* putColors */ -}; - -int mouseState=0; - -struct SdlDriver -{ - SDL_Surface *screen; -}; - - - -static Bool sdlScreenInit(KdScreenInfo *screen) -{ - struct SdlDriver *sdlDriver=calloc(1, sizeof(struct SdlDriver)); -#ifdef DEBUG - printf("sdlScreenInit()\n"); -#endif - if (!screen->width || !screen->height) - { - screen->width = 640; - screen->height = 480; - } - if (!screen->fb[0].depth) - screen->fb[0].depth = 4; -#ifdef DEBUG - printf("Attempting for %dx%d/%dbpp mode\n", screen->width, screen->height, screen->fb[0].depth); -#endif - sdlDriver->screen=SDL_SetVideoMode(screen->width, screen->height, screen->fb[0].depth, 0); - if(sdlDriver->screen==NULL) - return FALSE; -#ifdef DEBUG - printf("Set %dx%d/%dbpp mode\n", sdlDriver->screen->w, sdlDriver->screen->h, sdlDriver->screen->format->BitsPerPixel); -#endif - screen->width=sdlDriver->screen->w; - screen->height=sdlDriver->screen->h; - screen->fb[0].depth=sdlDriver->screen->format->BitsPerPixel; - screen->fb[0].visuals=(1<<TrueColor); - screen->fb[0].redMask=sdlDriver->screen->format->Rmask; - screen->fb[0].greenMask=sdlDriver->screen->format->Gmask; - screen->fb[0].blueMask=sdlDriver->screen->format->Bmask; - screen->fb[0].bitsPerPixel=sdlDriver->screen->format->BitsPerPixel; - screen->rate=60; - screen->memory_base=(CARD8 *)sdlDriver->screen->pixels; - screen->memory_size=0; - screen->off_screen_base=0; - screen->driver=sdlDriver; - screen->fb[0].byteStride=(sdlDriver->screen->w*sdlDriver->screen->format->BitsPerPixel)/8; - screen->fb[0].pixelStride=sdlDriver->screen->w; - screen->fb[0].frameBuffer=(CARD8 *)sdlDriver->screen->pixels; - SDL_WM_SetCaption("Freedesktop.org X server (SDL)", NULL); - return TRUE; -} - -void sdlShadowUpdate (ScreenPtr pScreen, shadowBufPtr pBuf) -{ - KdScreenPriv(pScreen); - KdScreenInfo *screen = pScreenPriv->screen; - struct SdlDriver *sdlDriver=screen->driver; -#ifdef DEBUG - printf("Shadow update()\n"); -#endif - if(SDL_MUSTLOCK(sdlDriver->screen)) - { - if(SDL_LockSurface(sdlDriver->screen)<0) - { -#ifdef DEBUG - printf("Couldn't lock SDL surface - d'oh!\n"); -#endif - return; - } - } - - if(SDL_MUSTLOCK(sdlDriver->screen)) - SDL_UnlockSurface(sdlDriver->screen); - SDL_UpdateRect(sdlDriver->screen, 0, 0, sdlDriver->screen->w, sdlDriver->screen->h); -} - - -void *sdlShadowWindow (ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode, CARD32 *size, void *closure) -{ - KdScreenPriv(pScreen); - KdScreenInfo *screen = pScreenPriv->screen; - struct SdlDriver *sdlDriver=screen->driver; - *size=(sdlDriver->screen->w*sdlDriver->screen->format->BitsPerPixel)/8; -#ifdef DEBUG - printf("Shadow window()\n"); -#endif - return (void *)((CARD8 *)sdlDriver->screen->pixels + row * (*size) + offset); -} - - -static Bool sdlCreateRes(ScreenPtr pScreen) -{ - KdScreenPriv(pScreen); - KdScreenInfo *screen = pScreenPriv->screen; - KdShadowFbAlloc(screen, 0, FALSE); - KdShadowSet(pScreen, RR_Rotate_0, sdlShadowUpdate, sdlShadowWindow); - return TRUE; -} - -static Bool sdlFinishInitScreen(ScreenPtr pScreen) -{ - if (!shadowSetup (pScreen)) - return FALSE; - -/* -#ifdef RANDR - if (!sdlRandRInit (pScreen)) - return FALSE; -#endif -*/ - return TRUE; -} - -static void sdlKeyboardBell (int volume, int pitch, int duration) -{ -#ifdef DEBUG - printf("a bell would go here\n"); -#endif -} - -static void sdlKeyboardLeds (int leds) -{ -#ifdef DEBUG - printf("Leds: %d\n", leds); -#endif -} - -static void sdlKeyboardLoad(void) -{ - int x; - kdMinScanCode = 8; - kdMaxScanCode = 255; - kdMinKeyCode = 8; - kdMaxKeyCode = 255; - kdKeymapWidth = 2; - - memcpy(kdKeymap, sdlKeymap, sizeof(sdlKeymap)); -} - -static void sdlKeyboardFini(void) -{ - -} - -static Bool sdlKeyboardInit(void) -{ - return TRUE; -} - -static Bool sdlMouseInit (void) -{ -#ifdef DEBUG - printf("kdMouseInfo: 0x%x\n", kdMouseInfo); -#endif - return TRUE; -} - -static void sdlMouseFini(void) -{ -} - - -void InitCard(char *name) -{ - KdCardAttr attr; - KdCardInfoAdd (&sdlFuncs, &attr, 0); -#ifdef DEBUG - printf("InitCard: %s\n", name); -#endif -} - -void InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv) -{ - KdInitOutput(pScreenInfo, argc, argv); -#ifdef DEBUG - printf("InitOutput()\n"); -#endif -} - -void InitInput(int argc, char **argv) -{ - /* FIXME: change this to use SDL key/mouse funcs */ - KdInitInput(&sdlMouseFuncs, &sdlKeyboardFuncs); -} - -void ddxUseMsg(void) -{ - KdUseMsg(); -} - -int ddxProcessArgument(int argc, char **argv, int i) -{ - return KdProcessArgument(argc, argv, i); -} - -void sdlTimer(void) -{ - static int buttonState=0; - SDL_Event event; - SDL_ShowCursor(FALSE); - /* get the mouse state */ - while ( SDL_PollEvent(&event) ) { - switch (event.type) { - case SDL_MOUSEMOTION: - KdEnqueueMouseEvent(kdMouseInfo, mouseState, event.motion.x, event.motion.y); - break; - case SDL_MOUSEBUTTONDOWN: - switch(event.button.button) - { - case 1: - buttonState=KD_BUTTON_1; - break; - case 2: - buttonState=KD_BUTTON_2; - break; - case 3: - buttonState=KD_BUTTON_3; - break; - } - mouseState|=buttonState; - KdEnqueueMouseEvent(kdMouseInfo, mouseState|KD_MOUSE_DELTA, 0, 0); - break; - case SDL_MOUSEBUTTONUP: - switch(event.button.button) - { - case 1: - buttonState=KD_BUTTON_1; - break; - case 2: - buttonState=KD_BUTTON_2; - break; - case 3: - buttonState=KD_BUTTON_3; - break; - } - mouseState &= ~buttonState; - KdEnqueueMouseEvent(kdMouseInfo, mouseState|KD_MOUSE_DELTA, 0, 0); - break; - case SDL_KEYDOWN: - case SDL_KEYUP: -#ifdef DEBUG - printf("Keycode: %d\n", event.key.keysym.scancode); -#endif - KdEnqueueKeyboardEvent (event.key.keysym.scancode, event.type==SDL_KEYUP); - break; - - case SDL_QUIT: - /* this should never happen */ - SDL_Quit(); - } - } -} - -static int xsdlInit(void) -{ -#ifdef DEBUG - printf("Calling SDL_Init()\n"); -#endif - return SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER); -} - - -static void xsdlFini(void) -{ - SDL_Quit(); -} - -KdOsFuncs sdlOsFuncs={ - xsdlInit, - 0, - 0, - 0, - xsdlFini, - sdlTimer -}; - -void OsVendorInit (void) -{ - KdOsInit (&sdlOsFuncs); -} - - |