home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / sys / sun / misc / 4087 < prev    next >
Encoding:
Text File  |  1992-09-03  |  19.1 KB  |  445 lines

  1. Path: sparky!uunet!cis.ohio-state.edu!ucbvax!hoptoad!brendan
  2. From: brendan@cygnus.com (Brendan Kehoe)
  3. Newsgroups: comp.sys.sun.misc
  4. Subject: Re: NumLock on Suns under X11R5 [was: Re: OW3 and Xterm]
  5. Message-ID: <34767@hoptoad.uucp>
  6. Date: 3 Sep 92 23:48:31 GMT
  7. References: <1992Aug31.220425.11345@bluemoon.rn.com> <1992Sep3.120040.15967@cas.org>
  8.     <1992Sep3.220153.5623@u.washington.edu>
  9. Sender: news@hoptoad.uucp
  10. Reply-To: brendan@cygnus.com
  11. Followup-To: comp.sys.sun.misc
  12. Organization: Cygnus Support, Palo Alto, CA
  13. Lines: 428
  14. Nntp-Posting-Host: cygnus.com
  15. In-reply-to: fhl@milton.u.washington.edu's message of 3 Sep 92 22:01:53 GMT
  16.  
  17. fhl@milton.u.washington.edu (Dean Pentcheff) writes:
  18.  
  19.    OK, bonehead question #49: how do I get the NumLock key to work at
  20.    all under X?  
  21.  
  22. I used this:
  23.  
  24. From jll40@duts.ccc.amdahl.com Fri Nov  1 08:26:11 1991
  25. Date: Mon, 21 Oct 91 09:32 PDT
  26. From: jll40@duts.ccc.amdahl.com (Jonathan L Lemon)
  27. To: brendan@cs.widener.edu
  28. Subject: Re: Enabling NumLock & the keypad on Suns under R5
  29. Newsgroups: comp.windows.x
  30. Organization: Amdahl Corporation, Sunnyvale CA
  31. Cc: 
  32.  
  33. This is a slightly modified version of the patch for R5 that I posted 
  34. earlier.  Since it uses the 'dead' slots in the scan table, it is 8-bit
  35. clean.  It also allows you to 'relocate' the num-lock/compose keys elsewhere
  36. on the keyboard.  In addition, the server will never see the mod4/mod5
  37. modifier keys at all.
  38. --
  39. Jonathan
  40.  
  41. ================================================================================
  42.  
  43. The following is a patch which for the sun4 server, which makes use of
  44. the NumLock and Compose LEDS, as well as the mod4 and mod5 modifiers.
  45.  
  46. Within Amdahl, we run quite a few 3270 emulators, and have some people who
  47. like to use the keypad for cursor motion, and others who prefer to use it for
  48. the 3270 PF keys.  Unfortunately, there is no way to automatically toggle
  49. between the two methods without starting a new emulator.
  50.  
  51. What this patch does is use the "mod4" modifier to toggle the NumLock LED on
  52. the keyboard, and remap all the keys on the keypad from R4 on down to a new
  53. scan code.  This in effect, implements a second "virtual" keypad for which you 
  54. can switch back and forth.  By default, the mod4 modifier is bound to NumLock
  55. and the default keymappings for the "virtual keypad" are the number keys.
  56. Both of these can be changed via xmodmap.
  57.  
  58. To make the patch complete, the "mod5" modifier toggles the Compose LED, and
  59. remaps the top row of keys (R1, R2, R3, NumLock) to new scancodes as well.
  60. This allows complete customization of the entire keypad.  By default, the 
  61. mod5 modifier is bound to the Multi_key KeySym (Compose on the keyboard), and
  62. can also be changed with xmodmap.
  63.  
  64. One side effect of this patch is that the mod4/mod5 modifiers are rendered
  65. effectively unusable for anything else (real minor loss, IMHO).  Also, 
  66. completely clearing the modifier keys will result in no difference from
  67. the original server.
  68.  
  69. To change the default keysymbol mapping, just edit the SunKeyMap.c file 
  70. before building.  I have only made a half-hearted attempt to map the new
  71. keypad to useful symbols, since most people will just re-map them via xmodmap
  72. anyway.
  73.  
  74. To apply this patch, use the following instructions:
  75.     1. 'cd' to the mit/server/ddx/sun directory
  76.     2. feed this patch to 'patch'.
  77.     3. Add the following line to the server/ddx/sun/Imakefile:
  78.  
  79.         DEFINES = -DSUN_NUMLOCK
  80.  
  81.     4. 'cd' to the mit/server directory.
  82.     5. make Makefiles    (this updates the mit/server/ddx/sun makefile)    
  83.     6. make
  84.  
  85. The concept (and portions of code) were taken from a similar patch for the R4
  86. server, written by Robert Viduya.
  87.  
  88. Please send any problems/comments/etc to me.
  89. --
  90. Jonathan Lemon                        jlemon@pswd.amdahl.com
  91. Diagnostics Development, Amdahl Corp.
  92. #include <std.disclaimer>
  93.  
  94. ----------------------------------- cut here -----------------------------------
  95.  
  96. *** sunKbd.c.good    Wed Sep 11 13:05:04 1991
  97. --- sunKbd.c    Wed Oct 16 09:09:22 1991
  98. ***************
  99. *** 92,97 ****
  100. --- 92,128 ----
  101.       0,                /* lock state */
  102.   };
  103.   
  104. + #ifdef SUN_NUMLOCK
  105. + #define COMPOSE_LED        0x01
  106. + #define SCROLL_LOCK_LED        0x02
  107. + #define NUMLOCK_LED        0x04
  108. + /* The following table is a list of scancodes for keys affected by the numlock
  109. +  * switch.  Their remapped keycode corresponds with scan_keys.
  110. +  */
  111. + static char numlock_keys[] = {
  112. +   0x2d, 0x2e, 0x2f, 0x44, 0x45, 0x46, 0x5b, 0x5c, 0x5d,
  113. +   0x70, 0x71, 0x72, 0x47, 0x7d, 0x5a, 0x32, 0x5e, 0x00
  114. + };
  115. + static char compose_keys[] = {
  116. +   0x15, 0x16, 0x17, 0x62, 0x00
  117. + };
  118. + /* This table is a list of all (originally) unused scancodes on a sun-4
  119. +  * keyboard.  The entries in the table above will re-map to these scancodes.
  120. +  */
  121. + static char numlock_scan_keys[] = {
  122. +   0x02, 0x04, 0x0d, 0x0f, 0x14, 0x18, 0x1b, 0x1c, 0x2c,
  123. +   0x30, 0x34, 0x4a, 0x4b, 0x60, 0x73, 0x74, 0x75, 0x00
  124. + };
  125. + static char compose_scan_keys[] = {
  126. +   0x7b, 0x7c, 0x7e, 0x7f, 0x00
  127. + };
  128. + #endif
  129.   /*-
  130.    *-----------------------------------------------------------------------
  131.    * sunKbdProc --
  132. ***************
  133. *** 476,481 ****
  134. --- 507,528 ----
  135.       sunKbdSetLights (pKeyboard);
  136.   }
  137.   
  138. + #ifdef SUN_NUMLOCK
  139. + sunKbdModLight (pKeyboard, on, led)
  140. +     DevicePtr    pKeyboard;
  141. +     Bool    on;
  142. + {
  143. +     KbPrivPtr    pPriv = (KbPrivPtr) pKeyboard->devicePrivate;
  144. +     KeybdCtrl    ctrl;
  145. +     if(on)
  146. +       pPriv->ctrl->leds |= led;
  147. +     else
  148. +       pPriv->ctrl->leds &= ~led;
  149. +     sunKbdSetLights (pKeyboard);
  150. + }
  151. + #endif
  152.   /*-
  153.    *-----------------------------------------------------------------------
  154.    * sunKbdGetEvents --
  155. ***************
  156. *** 551,557 ****
  157.       BYTE        key;
  158.       CARD8        keyModifiers;
  159.   
  160. !     key = (fe->id & 0x7F) + sysKbPriv.offset;
  161.       keyModifiers = ((DeviceIntPtr)pKeyboard)->key->modifierMap[key];
  162.       if (autoRepeatKeyDown && (keyModifiers == 0) &&
  163.       ((fe->value == VKEY_DOWN) || (key == autoRepeatEvent.u.u.detail))) {
  164. --- 598,623 ----
  165.       BYTE        key;
  166.       CARD8        keyModifiers;
  167.   
  168. !     key = fe->id & 0x7F;
  169. ! #ifdef SUN_NUMLOCK
  170. !     {
  171. !     char *cp, *index();
  172. !     pPriv = (KbPrivPtr)pKeyboard->devicePrivate;
  173. !     if((pPriv->ctrl->leds & COMPOSE_LED) &&
  174. !        ((cp = index(compose_keys, key)) != (char *)NULL))
  175. !       fe->id = compose_scan_keys[(cp - compose_keys)];
  176. !     if((pPriv->ctrl->leds & NUMLOCK_LED) &&
  177. !        ((cp = index(numlock_keys, key)) != (char *)NULL))
  178. !       fe->id = numlock_scan_keys[(cp - numlock_keys)];
  179. !     }
  180. !     key = fe->id & 0x7F;
  181. ! #endif
  182. !     key += sysKbPriv.offset;
  183.       keyModifiers = ((DeviceIntPtr)pKeyboard)->key->modifierMap[key];
  184.       if (autoRepeatKeyDown && (keyModifiers == 0) &&
  185.       ((fe->value == VKEY_DOWN) || (key == autoRepeatEvent.u.u.detail))) {
  186. ***************
  187. *** 572,577 ****
  188. --- 638,661 ----
  189.           xE.u.u.type = KeyRelease;
  190.       sunKbdLockLight (pKeyboard, xE.u.u.type == KeyPress);
  191.       }
  192. + #ifdef SUN_NUMLOCK
  193. +     if (keyModifiers & Mod5Mask) {
  194. +     if (xE.u.u.type == KeyRelease)
  195. +         return; /* this assumes autorepeat is not desired */
  196. +     sunKbdModLight (pKeyboard, !(pPriv->ctrl->leds & COMPOSE_LED),
  197. +                 COMPOSE_LED);
  198. +     return; /* this assumes that we never want to see this key */
  199. +     }
  200. +     if (keyModifiers & Mod4Mask) {
  201. +     if (xE.u.u.type == KeyRelease)
  202. +         return; /* this assumes autorepeat is not desired */
  203. +     sunKbdModLight (pKeyboard, !(pPriv->ctrl->leds & NUMLOCK_LED),
  204. +                 NUMLOCK_LED);
  205. +     return; /* this assumes that we never want to see this key */
  206. +     }
  207. + #endif
  208.   
  209.       if ((xE.u.u.type == KeyPress) && (keyModifiers == 0)) {
  210.       /* initialize new AutoRepeater event & mark AutoRepeater on */
  211. *** sunKeyMap.c    Wed Sep 11 13:05:13 1991
  212. --- sunKeyMap.c.good    Wed Sep 11 13:00:16 1991
  213. ***************
  214. *** 333,341 ****
  215.   
  216.   static KeySym Sun4Map[] = {
  217.           XK_L1,          NoSymbol,               /* 0x01 */
  218. !         NoSymbol,       NoSymbol,               /* 0x02 */
  219.           XK_L2,          NoSymbol,               /* 0x03 */
  220. !         NoSymbol,       NoSymbol,               /* 0x4 */
  221.           XK_F1,          NoSymbol,               /* 0x5 */
  222.           XK_F2,          NoSymbol,               /* 0x6 */
  223.           XK_F10,         NoSymbol,               /* 0x7 */
  224. --- 333,341 ----
  225.   
  226.   static KeySym Sun4Map[] = {
  227.           XK_L1,          NoSymbol,               /* 0x01 */
  228. !         NoSymbol,       NoSymbol,               /* 0x02 */    /* R4 */
  229.           XK_L2,          NoSymbol,               /* 0x03 */
  230. !         NoSymbol,       NoSymbol,               /* 0x4 */    /* R5 */
  231.           XK_F1,          NoSymbol,               /* 0x5 */
  232.           XK_F2,          NoSymbol,               /* 0x6 */
  233.           XK_F10,         NoSymbol,               /* 0x7 */
  234. ***************
  235. *** 344,365 ****
  236.           XK_F4,          NoSymbol,               /* 0xa */
  237.           XK_F12,         NoSymbol,               /* 0xb */
  238.           XK_F5,          NoSymbol,               /* 0xc */
  239. !         NoSymbol,       NoSymbol,               /* 0xd */
  240.           XK_F6,          NoSymbol,               /* 0xe */
  241. !         NoSymbol,       NoSymbol,               /* 0xf */
  242.           XK_F7,          NoSymbol,               /* 0x10 */
  243.           XK_F8,          NoSymbol,               /* 0x11 */
  244.           XK_F9,          NoSymbol,               /* 0x12 */
  245.       XK_Alt_L,    NoSymbol,        /* 0x13 */
  246. !         NoSymbol,       NoSymbol,               /* 0x14 */
  247.           XK_R1,          XK_Pause,               /* 0x15 */
  248.           XK_R2,          NoSymbol,               /* 0x16 */
  249.           XK_R3,          NoSymbol,               /* 0x17 */
  250. !         NoSymbol,       NoSymbol,               /* 0x18 */
  251.           XK_L3,          NoSymbol,               /* 0x19 */
  252.           XK_L4,          NoSymbol,               /* 0x1a */
  253. !         NoSymbol,       NoSymbol,               /* 0x1b */
  254. !         NoSymbol,       NoSymbol,               /* 0x1c */
  255.           XK_Escape,      NoSymbol,               /* 0x1d */
  256.           XK_1,           XK_exclam,              /* 0x1e */
  257.           XK_2,           XK_at,                  /* 0x1f */
  258. --- 344,365 ----
  259.           XK_F4,          NoSymbol,               /* 0xa */
  260.           XK_F12,         NoSymbol,               /* 0xb */
  261.           XK_F5,          NoSymbol,               /* 0xc */
  262. !         NoSymbol,       NoSymbol,               /* 0xd */    /* R6 */
  263.           XK_F6,          NoSymbol,               /* 0xe */
  264. !         XK_KP_7,        NoSymbol,               /* 0xf */    /* R7 */
  265.           XK_F7,          NoSymbol,               /* 0x10 */
  266.           XK_F8,          NoSymbol,               /* 0x11 */
  267.           XK_F9,          NoSymbol,               /* 0x12 */
  268.       XK_Alt_L,    NoSymbol,        /* 0x13 */
  269. !         XK_KP_8,        NoSymbol,               /* 0x14 */    /* R8 */
  270.           XK_R1,          XK_Pause,               /* 0x15 */
  271.           XK_R2,          NoSymbol,               /* 0x16 */
  272.           XK_R3,          NoSymbol,               /* 0x17 */
  273. !         XK_KP_9,        NoSymbol,               /* 0x18 */    /* R9 */
  274.           XK_L3,          NoSymbol,               /* 0x19 */
  275.           XK_L4,          NoSymbol,               /* 0x1a */
  276. !         XK_KP_4,        NoSymbol,               /* 0x1b */    /* R10 */
  277. !         XK_KP_5,        NoSymbol,               /* 0x1c */    /* R11 */
  278.           XK_Escape,      NoSymbol,               /* 0x1d */
  279.           XK_1,           XK_exclam,              /* 0x1e */
  280.           XK_2,           XK_at,                  /* 0x1f */
  281. ***************
  282. *** 375,389 ****
  283.           XK_equal,       XK_plus,                /* 0x29 */
  284.           XK_quoteleft,   XK_asciitilde,          /* 0x2a */
  285.           XK_BackSpace,   NoSymbol,               /* 0x2b */
  286. !         NoSymbol,       NoSymbol,               /* 0x2c */
  287.           XK_R4,          XK_KP_Equal,        /* 0x2d */
  288.           XK_R5,          XK_KP_Divide,        /* 0x2e */
  289.           XK_R6,          XK_KP_Multiply,        /* 0x2f */
  290. !         NoSymbol,       NoSymbol,               /* 0x30 */
  291.           XK_L5,          NoSymbol,               /* 0x31 */
  292.           XK_Delete,      XK_KP_Decimal,          /* 0x32 */
  293.           XK_L6,          NoSymbol,               /* 0x33 */
  294. !         NoSymbol,       NoSymbol,               /* 0x34 */
  295.           XK_Tab,         NoSymbol,               /* 0x35 */
  296.           XK_Q,           NoSymbol,               /* 0x36 */
  297.           XK_W,           NoSymbol,               /* 0x37 */
  298. --- 375,389 ----
  299.           XK_equal,       XK_plus,                /* 0x29 */
  300.           XK_quoteleft,   XK_asciitilde,          /* 0x2a */
  301.           XK_BackSpace,   NoSymbol,               /* 0x2b */
  302. !         XK_KP_6,        NoSymbol,               /* 0x2c */    /* R12 */
  303.           XK_R4,          XK_KP_Equal,        /* 0x2d */
  304.           XK_R5,          XK_KP_Divide,        /* 0x2e */
  305.           XK_R6,          XK_KP_Multiply,        /* 0x2f */
  306. !         XK_KP_1,        NoSymbol,               /* 0x30 */    /* R13 */
  307.           XK_L5,          NoSymbol,               /* 0x31 */
  308.           XK_Delete,      XK_KP_Decimal,          /* 0x32 */
  309.           XK_L6,          NoSymbol,               /* 0x33 */
  310. !         XK_KP_2,        NoSymbol,               /* 0x34 */    /* R14 */
  311.           XK_Tab,         NoSymbol,               /* 0x35 */
  312.           XK_Q,           NoSymbol,               /* 0x36 */
  313.           XK_W,           NoSymbol,               /* 0x37 */
  314. ***************
  315. *** 405,412 ****
  316.           XK_KP_Subtract, XK_KP_Subtract,         /* 0x47 */
  317.           XK_L7,          NoSymbol,               /* 0x48 */
  318.           XK_L8,          NoSymbol,               /* 0x49 */
  319. !         NoSymbol,       NoSymbol,               /* 0x4a */
  320. !         NoSymbol,       NoSymbol,               /* 0x4b */
  321.           XK_Control_L,   NoSymbol,               /* 0x4c */
  322.           XK_A,           NoSymbol,               /* 0x4d */
  323.           XK_S,           NoSymbol,               /* 0x4e */
  324. --- 405,412 ----
  325.           XK_KP_Subtract, XK_KP_Subtract,         /* 0x47 */
  326.           XK_L7,          NoSymbol,               /* 0x48 */
  327.           XK_L8,          NoSymbol,               /* 0x49 */
  328. !         XK_KP_3,        NoSymbol,               /* 0x4a */    /* R15 */
  329. !         NoSymbol,       NoSymbol,               /* 0x4b */    /* minus */
  330.           XK_Control_L,   NoSymbol,               /* 0x4c */
  331.           XK_A,           NoSymbol,               /* 0x4d */
  332.           XK_S,           NoSymbol,               /* 0x4e */
  333. ***************
  334. *** 427,433 ****
  335.           XK_Right,       XK_KP_6,                /* 0x5d */
  336.           XK_Insert,       XK_KP_0,                /* 0x5e */
  337.           XK_L9,          NoSymbol,               /* 0x5f */
  338. !         NoSymbol,       NoSymbol,               /* 0x60 */
  339.           XK_L10,         NoSymbol,               /* 0x61 */
  340.           XK_Num_Lock,    XK_Num_Lock,            /* 0x62 */
  341.           XK_Shift_L,     NoSymbol,               /* 0x63 */
  342. --- 427,433 ----
  343.           XK_Right,       XK_KP_6,                /* 0x5d */
  344.           XK_Insert,       XK_KP_0,                /* 0x5e */
  345.           XK_L9,          NoSymbol,               /* 0x5f */
  346. !         NoSymbol,       NoSymbol,               /* 0x60 */    /* plus */
  347.           XK_L10,         NoSymbol,               /* 0x61 */
  348.           XK_Num_Lock,    XK_Num_Lock,            /* 0x62 */
  349.           XK_Shift_L,     NoSymbol,               /* 0x63 */
  350. ***************
  351. *** 446,464 ****
  352.           XK_R13,         XK_KP_1,                /* 0x70 */
  353.           XK_Down,        XK_KP_2,                /* 0x71 */
  354.           XK_R15,         XK_KP_3,                /* 0x72 */
  355. !         NoSymbol,       NoSymbol,               /* 0x73 */
  356. !         NoSymbol,       NoSymbol,               /* 0x74 */
  357. !         NoSymbol,       NoSymbol,               /* 0x75 */
  358.           XK_Help,        XK_Help,                /* 0x76 */
  359.           XK_Caps_Lock,   NoSymbol,               /* 0x77 */
  360.           XK_Meta_L,      NoSymbol,               /* 0x78 */
  361.           XK_space,       NoSymbol,               /* 0x79 */
  362.           XK_Meta_R,      NoSymbol,               /* 0x7a */
  363. !         NoSymbol,       NoSymbol,               /* 0x7b */
  364. !         NoSymbol,       NoSymbol,               /* 0x7c */
  365.           XK_KP_Add,      XK_KP_Add,              /* 0x7d */
  366. !         NoSymbol,       NoSymbol,               /* 0x7e */
  367. !         NoSymbol,       NoSymbol,               /* 0x7f */
  368.   };
  369.   
  370.   
  371. --- 446,464 ----
  372.           XK_R13,         XK_KP_1,                /* 0x70 */
  373.           XK_Down,        XK_KP_2,                /* 0x71 */
  374.           XK_R15,         XK_KP_3,                /* 0x72 */
  375. !         NoSymbol,       NoSymbol,               /* 0x73 */    /* Enter */
  376. !         NoSymbol,       NoSymbol,               /* 0x74 */    /* Del */
  377. !         NoSymbol,       NoSymbol,               /* 0x75 */    /* Ins */
  378.           XK_Help,        XK_Help,                /* 0x76 */
  379.           XK_Caps_Lock,   NoSymbol,               /* 0x77 */
  380.           XK_Meta_L,      NoSymbol,               /* 0x78 */
  381.           XK_space,       NoSymbol,               /* 0x79 */
  382.           XK_Meta_R,      NoSymbol,               /* 0x7a */
  383. !         NoSymbol,       NoSymbol,               /* 0x7b */    /* R1 */
  384. !         NoSymbol,       NoSymbol,               /* 0x7c */    /* R2 */
  385.           XK_KP_Add,      XK_KP_Add,              /* 0x7d */
  386. !         NoSymbol,       NoSymbol,               /* 0x7e */    /* R3 */
  387. !         NoSymbol,       NoSymbol,               /* 0x7f */    /* numlock */
  388.   };
  389.   
  390.   
  391. ***************
  392. *** 480,485 ****
  393. --- 480,487 ----
  394.   #define    sH    (ShiftMask)
  395.   #define    lK    (LockMask)
  396.   #define    mT    (Mod1Mask)
  397. + #define    nL    (Mod4Mask)
  398. + #define    mK    (Mod5Mask)
  399.   static CARD8 type2modmap[MAP_LENGTH] = {
  400.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 00-0f */
  401.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 10-1f */
  402. ***************
  403. *** 523,531 ****
  404.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 10-1f */
  405.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 20-2f */
  406.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 30-3f */
  407. !     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 40-4f */
  408.       0,  0,  0,  cT, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 50-5f */
  409. !     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  sH, 0,  0,  0,  0,  0, /* 60-6f */
  410.       0,  0,  0,  0,  0,  sH, 0,  0,  0,  0,  0,  0,  0,  0,  lK, mT,/* 70-7f */
  411.       0,  mT, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 80-8f */
  412.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 90-9f */
  413. --- 525,533 ----
  414.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 10-1f */
  415.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 20-2f */
  416.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 30-3f */
  417. !     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  mK, 0,  0,  0,  0,  0, /* 40-4f */
  418.       0,  0,  0,  cT, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 50-5f */
  419. !     0,  0,  0,  0,  0,  0,  0,  0,  0,  nL, sH, 0,  0,  0,  0,  0, /* 60-6f */
  420.       0,  0,  0,  0,  0,  sH, 0,  0,  0,  0,  0,  0,  0,  0,  lK, mT,/* 70-7f */
  421.       0,  mT, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 80-8f */
  422.       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 90-9f */
  423.  
  424.  
  425. --
  426. Brendan Kehoe                                               brendan@cygnus.com
  427. Cygnus Support, Palo Alto, CA                                  +1 415 322 3811
  428.                        Oooh! A handsome stranger! And me, without my shoes on.
  429.                                      --The Princess, The Emperor's New Clothes
  430.