/* * Copyright © 2004 David Reveman * * 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 * David Reveman not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior permission. * David Reveman makes no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN * NO EVENT SHALL DAVID REVEMAN 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. * * Author: David Reveman */ #include "xgl.h" #include "inputstr.h" #include "mipointer.h" #define XK_PUBLISHING #include #if HAVE_X11_XF86KEYSYM_H #include #endif #define NUM_BUTTONS 7 int xglMouseProc (DeviceIntPtr pDevice, int onoff) { BYTE map[NUM_BUTTONS + 1]; DevicePtr pDev = (DevicePtr) pDevice; int i; switch (onoff) { case DEVICE_INIT: for (i = 1; i <= NUM_BUTTONS; i++) map[i] = i; InitPointerDeviceStruct (pDev, map, NUM_BUTTONS, miPointerGetMotionEvents, (PtrCtrlProcPtr) NoopDDA, miPointerGetMotionBufferSize ()); break; case DEVICE_ON: pDev->on = TRUE; break; case DEVICE_OFF: case DEVICE_CLOSE: pDev->on = FALSE; break; } return Success; } void xglBell (int volume, DeviceIntPtr pDev, pointer ctrl, int something) { } void xglKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl) { } #define XGL_KEYMAP_WIDTH 2 KeySym xglKeymap[] = { /* 1 8 */ XK_Escape, NoSymbol, /* 2 9 */ XK_1, XK_exclam, /* 3 10 */ XK_2, XK_at, /* 4 11 */ XK_3, XK_numbersign, /* 5 12 */ XK_4, XK_dollar, /* 6 13 */ XK_5, XK_percent, /* 7 14 */ XK_6, XK_asciicircum, /* 8 15 */ XK_7, XK_ampersand, /* 9 16 */ XK_8, XK_asterisk, /* 10 17 */ XK_9, XK_parenleft, /* 11 18 */ XK_0, XK_parenright, /* 12 19 */ XK_minus, XK_underscore, /* 13 20 */ XK_equal, XK_plus, /* 14 21 */ XK_BackSpace, NoSymbol, /* 15 22 */ XK_Tab, NoSymbol, /* 16 23 */ XK_Q, NoSymbol, /* 17 24 */ XK_W, NoSymbol, /* 18 25 */ XK_E, NoSymbol, /* 19 26 */ XK_R, NoSymbol, /* 20 27 */ XK_T, NoSymbol, /* 21 28 */ XK_Y, NoSymbol, /* 22 29 */ XK_U, NoSymbol, /* 23 30 */ XK_I, NoSymbol, /* 24 31 */ XK_O, NoSymbol, /* 25 32 */ XK_P, NoSymbol, /* 26 33 */ XK_bracketleft, XK_braceleft, /* 27 34 */ XK_bracketright, XK_braceright, /* 28 35 */ XK_Return, NoSymbol, /* 29 36 */ XK_Control_L, NoSymbol, /* 30 37 */ XK_A, NoSymbol, /* 31 38 */ XK_S, NoSymbol, /* 32 39 */ XK_D, NoSymbol, /* 33 40 */ XK_F, NoSymbol, /* 34 41 */ XK_G, NoSymbol, /* 35 42 */ XK_H, NoSymbol, /* 36 43 */ XK_J, NoSymbol, /* 37 44 */ XK_K, NoSymbol, /* 38 45 */ XK_L, NoSymbol, /* 39 46 */ XK_semicolon, XK_colon, /* 40 47 */ XK_apostrophe, XK_quotedbl, /* 41 48 */ XK_grave, XK_asciitilde, /* 42 49 */ XK_Shift_L, NoSymbol, /* 43 50 */ XK_backslash, XK_bar, /* 44 51 */ XK_Z, NoSymbol, /* 45 52 */ XK_X, NoSymbol, /* 46 53 */ XK_C, NoSymbol, /* 47 54 */ XK_V, NoSymbol, /* 48 55 */ XK_B, NoSymbol, /* 49 56 */ XK_N, NoSymbol, /* 50 57 */ XK_M, NoSymbol, /* 51 58 */ XK_comma, XK_less, /* 52 59 */ XK_period, XK_greater, /* 53 60 */ XK_slash, XK_question, /* 54 61 */ XK_Shift_R, NoSymbol, /* 55 62 */ XK_KP_Multiply, NoSymbol, /* 56 63 */ XK_Alt_L, XK_Meta_L, /* 57 64 */ XK_space, NoSymbol, /* 58 65 */ XK_Caps_Lock, NoSymbol, /* 59 66 */ XK_F1, NoSymbol, /* 60 67 */ XK_F2, NoSymbol, /* 61 68 */ XK_F3, NoSymbol, /* 62 69 */ XK_F4, NoSymbol, /* 63 70 */ XK_F5, NoSymbol, /* 64 71 */ XK_F6, NoSymbol, /* 65 72 */ XK_F7, NoSymbol, /* 66 73 */ XK_F8, NoSymbol, /* 67 74 */ XK_F9, NoSymbol, /* 68 75 */ XK_F10, NoSymbol, /* 69 76 */ XK_Break, XK_Pause, /* 70 77 */ XK_Scroll_Lock, NoSymbol, /* 71 78 */ XK_KP_Home, XK_KP_7, /* 72 79 */ XK_KP_Up, XK_KP_8, /* 73 80 */ XK_KP_Page_Up, XK_KP_9, /* 74 81 */ XK_KP_Subtract, NoSymbol, /* 75 82 */ XK_KP_Left, XK_KP_4, /* 76 83 */ XK_KP_5, NoSymbol, /* 77 84 */ XK_KP_Right, XK_KP_6, /* 78 85 */ XK_KP_Add, NoSymbol, /* 79 86 */ XK_KP_End, XK_KP_1, /* 80 87 */ XK_KP_Down, XK_KP_2, /* 81 88 */ XK_KP_Page_Down, XK_KP_3, /* 82 89 */ XK_KP_Insert, XK_KP_0, /* 83 90 */ XK_KP_Delete, XK_KP_Decimal, /* 84 91 */ NoSymbol, NoSymbol, /* 85 92 */ NoSymbol, NoSymbol, /* 86 93 */ NoSymbol, NoSymbol, /* 87 94 */ XK_F11, NoSymbol, /* 88 95 */ XK_F12, NoSymbol, /* 89 96 */ XK_Control_R, NoSymbol, /* 90 97 */ XK_KP_Enter, NoSymbol, /* 91 98 */ XK_KP_Divide, NoSymbol, /* 92 99 */ XK_Sys_Req, XK_Print, /* 93 100 */ XK_Alt_R, XK_Meta_R, /* 94 101 */ XK_Num_Lock, NoSymbol, /* 95 102 */ XK_Home, NoSymbol, /* 96 103 */ XK_Up, NoSymbol, /* 97 104 */ XK_Page_Up, NoSymbol, /* 98 105 */ XK_Left, NoSymbol, /* 99 106 */ XK_Right, NoSymbol, /* 100 107 */ XK_End, NoSymbol, /* 101 108 */ XK_Down, NoSymbol, /* 102 109 */ XK_Page_Down, NoSymbol, /* 103 110 */ XK_Insert, NoSymbol, /* 104 111 */ XK_Delete, NoSymbol, /* 105 112 */ XK_Super_L, NoSymbol, /* 106 113 */ XK_Super_R, NoSymbol, /* 107 114 */ XK_Menu, NoSymbol, /* 108 115 */ XK_Next, NoSymbol, /* right button on side */ /* 109 116 */ XK_Prior, NoSymbol, /* left button on side */ /* 110 117 */ XK_Up, NoSymbol, /* joypad */ /* 111 118 */ XK_Down, NoSymbol, /* 112 119 */ XK_Left, NoSymbol, /* 113 120 */ XK_Right, NoSymbol, /* 114 121 */ NoSymbol, NoSymbol, /* left near speaker */ /* 115 122 */ NoSymbol, NoSymbol, /* right near speaker */ /* 116 123 */ NoSymbol, NoSymbol, /* tiny button */ }; CARD8 xglModMap[MAP_LENGTH]; KeySymsRec xglKeySyms = { xglKeymap, 8, 8 + (sizeof (xglKeymap) / sizeof (xglKeymap[0]) / XGL_KEYMAP_WIDTH) - 1, XGL_KEYMAP_WIDTH }; int xglKeybdProc (DeviceIntPtr pDevice, int onoff) { Bool ret; DevicePtr pDev = (DevicePtr) pDevice; if (!pDev) return BadImplementation; switch (onoff) { case DEVICE_INIT: if (pDev != LookupKeyboardDevice ()) return !Success; ret = InitKeyboardDeviceStruct (pDev, &xglKeySyms, xglModMap, xglBell, xglKbdCtrl); if (!ret) return BadImplementation; break; case DEVICE_ON: pDev->on = TRUE; break; case DEVICE_OFF: case DEVICE_CLOSE: pDev->on = FALSE; break; } return Success; } void xglInitInput (int argc, char **argv) { DeviceIntPtr pKeyboard, pPointer; pPointer = AddInputDevice (xglMouseProc, TRUE); pKeyboard = AddInputDevice (xglKeybdProc, TRUE); RegisterPointerDevice (pPointer); RegisterKeyboardDevice (pKeyboard); miRegisterPointerDevice (screenInfo.screens[0], pPointer); mieqInit (&pKeyboard->public, &pPointer->public); }