264 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * 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 <davidr@novell.com>
 | |
|  */
 | |
| 
 | |
| #include "xgl.h"
 | |
| #include "inputstr.h"
 | |
| #include "mipointer.h"
 | |
| 
 | |
| #define XK_PUBLISHING
 | |
| #include <X11/keysym.h>
 | |
| #if HAVE_X11_XF86KEYSYM_H
 | |
| #include <X11/XF86keysym.h>
 | |
| #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 != (DevicePtr)inputInfo.keyboard)
 | |
| 	    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);
 | |
| }
 |