home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / d / ddx-mips.zip / MIPSKBDA.C < prev    next >
C/C++ Source or Header  |  1992-07-31  |  10KB  |  300 lines

  1. /*
  2.  * $XConsortium$
  3.  *
  4.  * Copyright 1991 MIPS Computer Systems, Inc.
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and its
  7.  * documentation for any purpose is hereby granted without fee, provided that
  8.  * the above copyright notice appear in all copies and that both that
  9.  * copyright notice and this permission notice appear in supporting
  10.  * documentation, and that the name of MIPS not be used in advertising or
  11.  * publicity pertaining to distribution of the software without specific,
  12.  * written prior permission.  MIPS makes no representations about the
  13.  * suitability of this software for any purpose.  It is provided "as is"
  14.  * without express or implied warranty.
  15.  *
  16.  * MIPS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  17.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL MIPS
  18.  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  19.  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  20.  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 
  21.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  22.  */
  23. #ident    "$Header: mipsKbdAT.c,v 1.4 91/07/10 15:43:37 dd Exp $"
  24.  
  25. /*
  26.  *    keysym mapping for the AT keyboard.
  27.  */
  28.  
  29. #include <sys/types.h>
  30. #include "X.h"
  31. #include "Xmd.h"
  32. #include "input.h"
  33. #include "keysym.h"
  34. #include "mips.h"
  35. #include "mipsKbd.h"
  36.  
  37. extern void specialKeybdEvent(), genKeybdEvent();
  38.  
  39. /* PC/AT keyboard type */
  40.  
  41. #ifdef AT_KEYBOARD
  42. KeySym at_KeyMap[] = {
  43.     XK_F9,        NoSymbol,    /* 0x01 F9  */
  44.     XK_KP_Enter,    NoSymbol,    /* 0x02 KP_ENTER */
  45.     XK_F5,        NoSymbol,    /* 0x03 F5  */
  46.     XK_F3,        NoSymbol,    /* 0x04 F3  */
  47.     XK_F1,        NoSymbol,    /* 0x05 F1  */
  48.     XK_F2,        NoSymbol,    /* 0x06 F2  */
  49.     XK_F12,        NoSymbol,    /* 0x07 F12 */
  50.     XK_Control_R,    NoSymbol,    /* 0x08 Right control */
  51.     XK_F10,        NoSymbol,    /* 0x09 F10 */
  52.     XK_F8,        NoSymbol,    /* 0x0a F8  */
  53.     XK_F6,        NoSymbol,    /* 0x0b F6  */
  54.     XK_F4,        NoSymbol,    /* 0x0c F4  */
  55.     XK_Tab,        NoSymbol,    /* 0x0d tab */
  56.     XK_quoteleft,    XK_asciitilde,    /* 0x0e ` ~ */
  57.     XK_KP_Divide,    NoSymbol,    /* 0x0f KP_Divide */
  58.     XK_Print,        NoSymbol,    /* 0x10 Print */
  59.     XK_Alt_L,        NoSymbol,    /* 0x11 Left ALT   */
  60.     XK_Shift_L,        NoSymbol,    /* 0x12 SHIFT */
  61.     XK_Alt_R,        NoSymbol,    /* 0x13 Right alt */
  62.     XK_Control_L,    NoSymbol,    /* 0x14 CONTROL   */
  63.     XK_Q,        NoSymbol,    /* 0x15 Q  */
  64.     XK_1,        XK_exclam,    /* 0x16 1 ! */
  65.     XK_Break,        NoSymbol,    /* 0x17 KP_Break */
  66.     XK_Home,        NoSymbol,    /* 0x18 KP_Home */
  67.     XK_Up,        NoSymbol,    /* 0x19 uparrow */
  68.     XK_Z,        NoSymbol,    /* 0x1a Z  */
  69.     XK_S,        NoSymbol,    /* 0x1b S  */
  70.     XK_A,        NoSymbol,    /* 0x1c A  */
  71.     XK_W,        NoSymbol,    /* 0x1d W  */
  72.     XK_2,        XK_at,        /* 0x1e 2 @ */
  73.     XK_Prior,        NoSymbol,    /* 0x1f Prev Screen  */
  74.     XK_Left,        NoSymbol,    /* 0x20 left arrow  */
  75.     XK_C,        NoSymbol,    /* 0x21 C  */
  76.     XK_X,        NoSymbol,    /* 0x22 X  */
  77.     XK_D,        NoSymbol,    /* 0x23 D  */
  78.     XK_E,        NoSymbol,    /* 0x24 E  */
  79.     XK_4,        XK_dollar,    /* 0x25 4 $ */
  80.     XK_3,        XK_numbersign,    /* 0x26 3 # */
  81.     XK_Right,        NoSymbol,    /* 0x27 right arrow */
  82.     XK_End,        NoSymbol,    /* 0x28 KP_End */
  83.     XK_space,        NoSymbol,    /* 0x29 sp */
  84.     XK_V,        NoSymbol,    /* 0x2a V  */
  85.     XK_F,        NoSymbol,    /* 0x2b F  */
  86.     XK_T,        NoSymbol,    /* 0x2c T  */
  87.     XK_R,        NoSymbol,    /* 0x2d R  */
  88.     XK_5,        XK_percent,    /* 0x2e 5 % */
  89.     XK_Down,        NoSymbol,    /* 0x2f down arrow  */
  90.     XK_Next,        NoSymbol,    /* 0x30 Next Screen  */
  91.     XK_N,        NoSymbol,    /* 0x31 N  */
  92.     XK_B,        NoSymbol,    /* 0x32 B  */
  93.     XK_H,        NoSymbol,    /* 0x33 H  */
  94.     XK_G,        NoSymbol,    /* 0x34 G  */
  95.     XK_Y,        NoSymbol,    /* 0x35 Y  */
  96.     XK_6,        XK_asciicircum,    /* 0x36 6 ^ */
  97.     XK_Insert,        NoSymbol,    /* 0x37 Insert */
  98.     XK_Delete,        NoSymbol,    /* 0x38 DEL */
  99.     NoSymbol,        NoSymbol,    /* 0x39     */
  100.     XK_M,        NoSymbol,    /* 0x3a M  */
  101.     XK_J,        NoSymbol,    /* 0x3b J  */
  102.     XK_U,        NoSymbol,    /* 0x3c U  */
  103.     XK_7,        XK_ampersand,    /* 0x3d 7 & */
  104.     XK_8,        XK_asterisk,    /* 0x3e 8 * */
  105.     NoSymbol,        NoSymbol,    /* 0x3f     */
  106.     NoSymbol,        NoSymbol,    /* 0x40     */
  107.     XK_comma,        XK_less,    /* 0x41 , <  */
  108.     XK_K,        NoSymbol,    /* 0x42 K  */
  109.     XK_I,        NoSymbol,    /* 0x43 I  */
  110.     XK_O,        NoSymbol,    /* 0x44 O  */
  111.     XK_0,        XK_parenright,    /* 0x45 0 ) */
  112.     XK_9,        XK_parenleft,    /* 0x46 9 ( */
  113.     NoSymbol,        NoSymbol,    /* 0x47     */
  114.     NoSymbol,        NoSymbol,    /* 0x48     */
  115.     XK_period,        XK_greater,    /* 0x49 . >  */
  116.     XK_slash,        XK_question,    /* 0x4a / ? */
  117.     XK_L,        NoSymbol,    /* 0x4b L  */
  118.     XK_semicolon,    XK_colon,    /* 0x4c ; : */
  119.     XK_P,        NoSymbol,    /* 0x4d P  */
  120.     XK_minus,        XK_underscore,    /* 0x4e - _ */
  121.     NoSymbol,        NoSymbol,    /* 0x4f     */
  122.     NoSymbol,        NoSymbol,    /* 0x50     */
  123.     NoSymbol,        NoSymbol,    /* 0x51     */
  124.     XK_quoteright,    XK_quotedbl,    /* 0x52 ' " */
  125.     NoSymbol,        NoSymbol,    /* 0x53     */
  126.     XK_bracketleft,    XK_braceleft,    /* 0x54 [ { */
  127.     XK_equal,        XK_plus,    /* 0x55 = + */
  128.     NoSymbol,        NoSymbol,    /* 0x56     */
  129.     NoSymbol,        NoSymbol,    /* 0x57     */
  130.     XK_Caps_Lock,    NoSymbol,    /* 0x58 CAPS LOCK   */
  131.     XK_Shift_R,        NoSymbol,    /* 0x59 SHIFT */
  132.     XK_Return,        NoSymbol,    /* 0x5a RETURN */
  133.     XK_bracketright,    XK_braceright,    /* 0x5b ] } */
  134.     NoSymbol,        NoSymbol,    /* 0x5c     */
  135.     XK_backslash,    XK_bar,        /* 0x5d \ | */
  136.     NoSymbol,        NoSymbol,    /* 0x5e     */
  137.     NoSymbol,        NoSymbol,    /* 0x5f     */
  138.     NoSymbol,        NoSymbol,    /* 0x60     */
  139.     NoSymbol,        NoSymbol,    /* 0x61     */
  140.     NoSymbol,        NoSymbol,    /* 0x62     */
  141.     NoSymbol,        NoSymbol,    /* 0x63     */
  142.     NoSymbol,        NoSymbol,    /* 0x64     */
  143.     NoSymbol,        NoSymbol,    /* 0x65     */
  144.     XK_BackSpace,    NoSymbol,    /* 0x66 bs  */
  145.     NoSymbol,        NoSymbol,    /* 0x67     */
  146.     NoSymbol,        NoSymbol,    /* 0x68     */
  147.     XK_KP_1,        NoSymbol,    /* 0x69 1  */
  148.     NoSymbol,        NoSymbol,    /* 0x6a     */
  149.     XK_KP_4,        NoSymbol,    /* 0x6b 4  */
  150.     XK_KP_7,        NoSymbol,    /* 0x6c 7  */
  151.     NoSymbol,        NoSymbol,    /* 0x6d     */
  152.     NoSymbol,        NoSymbol,    /* 0x6e     */
  153.     NoSymbol,        NoSymbol,    /* 0x6f     */
  154.     XK_KP_0,        NoSymbol,    /* 0x70 0  */
  155.     XK_KP_Decimal,    NoSymbol,    /* 0x71 .  */
  156.     XK_KP_2,        NoSymbol,    /* 0x72 2  */
  157.     XK_KP_5,        NoSymbol,    /* 0x73 5  */
  158.     XK_KP_6,        NoSymbol,    /* 0x74 6  */
  159.     XK_KP_8,        NoSymbol,    /* 0x75 8  */
  160.     XK_Escape,        NoSymbol,    /* 0x76 esc */
  161.     XK_Num_Lock,    NoSymbol,    /* 0x77 Num Lock */
  162.     XK_F11,        NoSymbol,    /* 0x78 F11 */
  163.     XK_KP_Add,        NoSymbol,    /* 0x79 +  */
  164.     XK_KP_3,        NoSymbol,    /* 0x7a 3  */
  165.     XK_KP_Subtract,    NoSymbol,    /* 0x7b -  */
  166.     XK_KP_Multiply,    NoSymbol,    /* 0x7c *  */
  167.     XK_KP_9,        NoSymbol,    /* 0x7d 9  */
  168.     XK_Pause,        NoSymbol,    /* 0x7e Scroll Lock */
  169.     NoSymbol,        NoSymbol,    /* 0x7f     */
  170.     NoSymbol,        NoSymbol,    /* 0x80     */
  171.     NoSymbol,        NoSymbol,    /* 0x81     */
  172.     NoSymbol,        NoSymbol,    /* 0x82     */
  173.     XK_F7,        NoSymbol,    /* 0x83 F7  */
  174.     XK_Print,        NoSymbol,    /* 0x84 Print */
  175. };
  176.  
  177. CARD8 at_ModMap[MAP_LENGTH] = {
  178. /* 00-0f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  179. /* 10-1f */    MC, 0, 0, 0, 0, 0, 0, 0, 0,M1,MS,M1,MC, 0, 0, 0,
  180. /* 20-2f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  181. /* 30-3f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  182. /* 40-4f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  183. /* 50-5f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  184. /* 60-6f */    ML,MS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  185. /* 70-7f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  186. /* 80-8f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  187. /* 90-9f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  188. /* a0-af */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  189. /* b0-bf */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  190. /* c0-cf */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  191. /* d0-df */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  192. /* e0-ef */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  193. /* f0-ff */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  194. };
  195.  
  196. void
  197. atKeybdEvent(pKeybd, code)
  198. DevicePtr    pKeybd;
  199. u_char        code;
  200. {
  201.     static int        release = 0;
  202.     static int        translate = 0;
  203.     u_char        kindex;
  204.  
  205.     /* Random 0xfa and 0xfe characters are being delivered */
  206.  
  207.     if ((code & 0xfa) == 0xfa)
  208.     return;
  209.  
  210.     if (code == 0xf0)
  211.     release = 1;
  212.     else if (code == 0xe0)
  213.     translate = 1;
  214.     else if (code == 0xe1)
  215.     translate = 2;
  216.     else {
  217.     kindex = code;
  218.     if (translate == 1) {
  219.         translate = 0;
  220.         switch (kindex) {
  221.         case 0x5a:
  222.             kindex = 0x02;    /* KP_Enter */
  223.             break;
  224.         case 0x14:
  225.             kindex = 0x08;    /* Control_R */
  226.             break;
  227.         case 0x4a:
  228.             kindex = 0x0f;    /* KP_Divide */
  229.             break;
  230.         case 0x7c:
  231.             kindex = 0x10;    /* Print */
  232.             break;
  233.         case 0x11:
  234.             kindex = 0x13;    /* Alt_R */
  235.             break;
  236.         case 0x7e:
  237.             kindex = 0x17;    /* Break */
  238.             break;
  239.         case 0x6c:
  240.             kindex = 0x18;    /* Home */
  241.             break;
  242.         case 0x75:
  243.             kindex = 0x19;    /* Up arrow */
  244.             break;
  245.         case 0x7d:
  246.             kindex = 0x1f;    /* Prior/Page Up */
  247.             break;
  248.         case 0x6b:
  249.             kindex = 0x20;    /* Left arrow */
  250.             break;
  251.         case 0x74:
  252.             kindex = 0x27;    /* Right arrow */
  253.             break;
  254.         case 0x69:
  255.             kindex = 0x28;    /* End */
  256.             break;
  257.         case 0x72:
  258.             kindex = 0x2f;    /* Down arrow */
  259.             break;
  260.         case 0x7a:
  261.             kindex = 0x30;    /* Next/Page Down */
  262.             break;
  263.         case 0x70:
  264.             kindex = 0x37;    /* Insert */
  265.             break;
  266.         case 0x71:
  267.             kindex = 0x38;    /* Delete */
  268.             break;
  269.         case 0x12:
  270.             release = 0;    /* In case we ate a E0 F0 12 */
  271.         default:
  272.             return;
  273.         }
  274.     }
  275.     else if (translate == 2) {
  276.         release = 0;        /* In case we ate a E1 F0 */
  277.         translate = (kindex == 0x14) ? 3 : 0;
  278.         return;
  279.     }
  280.     else if (translate == 3) {
  281.         translate = 0;
  282.         if (kindex == 0x77) {
  283.         kindex = 0x17;        /* Break */
  284.         if (release)
  285.             specialKeybdEvent();
  286.         }
  287.         else
  288.         return;
  289.     }
  290.  
  291.     if ((kindex == 0x77) && (!release))
  292.         setLEDs((KeybdPrivPtr) pKeybd->devicePrivate, LEDupdate, 0);
  293.  
  294.     kindex += keybdType[AT_KEYBOARD].offset;
  295.     genKeybdEvent(pKeybd, release, kindex);
  296.     release = 0;
  297.     }
  298. }
  299. #endif /* AT_KEYBOARD */
  300.