From 43674801a3c2fa0b230bb31911e89acb9f80df19 Mon Sep 17 00:00:00 2001 From: William McBrine Date: Tue, 5 Dec 2006 09:56:59 +0000 Subject: [PATCH] The switch/case for KEY_SHOME etc. was bogus... but so was the old way. Here's a better one, if not a good one. Also, the whole second half of the key_table isn't needed. --- dos/pdckbd.c | 81 +++++++++++++++++++++------------------------------- os2/pdckbd.c | 81 +++++++++++++++++++++------------------------------- 2 files changed, 64 insertions(+), 98 deletions(-) diff --git a/dos/pdckbd.c b/dos/pdckbd.c index 5f94b889..1ae890bc 100644 --- a/dos/pdckbd.c +++ b/dos/pdckbd.c @@ -19,7 +19,7 @@ #include "pdcdos.h" -RCSID("$Id: pdckbd.c,v 1.64 2006/12/04 05:35:50 wmcbrine Exp $"); +RCSID("$Id: pdckbd.c,v 1.65 2006/12/05 09:56:59 wmcbrine Exp $"); /************************************************************************ * Table for key code translation of function keys in keypad mode * @@ -30,8 +30,8 @@ static short key_table[]= { -1, ALT_ESC, -1, 0, -1, -1, -1, -1, - -1, -1, CTL_PADENTER, -1, - -1, PADENTER, ALT_BKSP, KEY_BTAB, + -1, -1, -1, -1, + -1, -1, ALT_BKSP, KEY_BTAB, ALT_Q, ALT_W, ALT_E, ALT_R, ALT_T, ALT_Y, ALT_U, ALT_I, ALT_O, ALT_P, ALT_LBRACKET, ALT_RBRACKET, @@ -69,29 +69,7 @@ static short key_table[]= ALT_UP, ALT_PGUP, -1, ALT_LEFT, -1, ALT_RIGHT, -1, ALT_END, ALT_DOWN, ALT_PGDN, ALT_INS, ALT_DEL, - ALT_PADSLASH, ALT_TAB, ALT_PADENTER, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - KEY_SHOME, KEY_SUP, KEY_SPREVIOUS, KEY_SLEFT, - KEY_SRIGHT, KEY_SEND, KEY_SDOWN, KEY_SNEXT, - KEY_SIC, KEY_SDC, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, PADSTAR, PADPLUS, - CTL_ENTER, PADMINUS, -1, PADSLASH + ALT_PADSLASH, ALT_TAB, ALT_PADENTER, -1 }; unsigned long pdc_key_modifiers = 0L; @@ -386,53 +364,58 @@ int PDC_get_bios_key(void) pdc_key_modifiers |= PDC_KEY_MODIFIER_NUMLOCK; } - if (scan == 0x1c && key == 0x0a) /* ^Enter */ + if (scan == 0x1c && key == 0x0a) /* ^Enter */ key = CTL_ENTER; - else if ((scan == 0xe0 && key == 0x0d) /* PadEnter */ - || (scan == 0xe0 && key == 0x0a)) /* ^PadEnter */ - key = key_table[key]; - else if ((scan == 0x37 && key == 0x2a) /* Star */ - || (scan == 0x4a && key == 0x2d) /* Minus */ - || (scan == 0x4e && key == 0x2b) /* Plus */ - || (scan == 0xe0 && key == 0x2f)) /* Slash */ - key = key_table[(key & 0x0f) | 0xf0]; - else if (key == 0xe0 && pdc_key_modifiers & PDC_KEY_MODIFIER_SHIFT) + else if (scan == 0xe0 && key == 0x0d) /* PadEnter */ + key = PADENTER; + else if (scan == 0xe0 && key == 0x0a) /* ^PadEnter */ + key = CTL_PADENTER; + else if (scan == 0x37 && key == 0x2a) /* Star */ + key = PADSTAR; + else if (scan == 0x4a && key == 0x2d) /* Minus */ + key = PADMINUS; + else if (scan == 0x4e && key == 0x2b) /* Plus */ + key = PADPLUS; + else if (scan == 0xe0 && key == 0x2f) /* Slash */ + key = PADSLASH; + else if (key == 0x00 || (key == 0xe0 && scan > 53 && scan != 86)) + key = key_table[scan & 0x7f]; + + if (shift_status & 3) { - switch (scan) + switch (key) { - case 0x47: /* Shift Home */ + case KEY_HOME: /* Shift Home */ key = KEY_SHOME; break; - case 0x48: /* Shift Up */ + case KEY_UP: /* Shift Up */ key = KEY_SUP; break; - case 0x49: /* Shift PgUp */ + case KEY_PPAGE: /* Shift PgUp */ key = KEY_SPREVIOUS; break; - case 0x4b: /* Shift Left */ + case KEY_LEFT: /* Shift Left */ key = KEY_SLEFT; break; - case 0x4d: /* Shift Right */ + case KEY_RIGHT: /* Shift Right */ key = KEY_SRIGHT; break; - case 0x4f: /* Shift End */ + case KEY_END: /* Shift End */ key = KEY_SEND; break; - case 0x50: /* Shift Down */ + case KEY_DOWN: /* Shift Down */ key = KEY_SDOWN; break; - case 0x51: /* Shift PgDn */ + case KEY_NPAGE: /* Shift PgDn */ key = KEY_SNEXT; break; - case 0x52: /* Shift Ins */ + case KEY_IC: /* Shift Ins */ key = KEY_SIC; break; - case 0x53: /* Shift Del */ + case KEY_DC: /* Shift Del */ key = KEY_SDC; } } - else if (key == 0x00 || (key == 0xe0 && scan > 53 && scan != 86)) - key = key_table[scan]; key_pressed = TRUE; SP->key_code = ((unsigned)key >= 256); diff --git a/os2/pdckbd.c b/os2/pdckbd.c index d33fbf64..3bdb6924 100644 --- a/os2/pdckbd.c +++ b/os2/pdckbd.c @@ -35,7 +35,7 @@ static bool key_pressed = FALSE; static int mouse_events = 0; #endif -RCSID("$Id: pdckbd.c,v 1.69 2006/12/04 05:35:51 wmcbrine Exp $"); +RCSID("$Id: pdckbd.c,v 1.70 2006/12/05 09:56:59 wmcbrine Exp $"); /************************************************************************ * Table for key code translation of function keys in keypad mode * @@ -46,8 +46,8 @@ static short key_table[]= { -1, ALT_ESC, -1, 0, -1, -1, -1, -1, - -1, -1, CTL_PADENTER, -1, - -1, PADENTER, ALT_BKSP, KEY_BTAB, + -1, -1, -1, -1, + -1, -1, ALT_BKSP, KEY_BTAB, ALT_Q, ALT_W, ALT_E, ALT_R, ALT_T, ALT_Y, ALT_U, ALT_I, ALT_O, ALT_P, ALT_LBRACKET, ALT_RBRACKET, @@ -85,29 +85,7 @@ static short key_table[]= ALT_UP, ALT_PGUP, -1, ALT_LEFT, -1, ALT_RIGHT, -1, ALT_END, ALT_DOWN, ALT_PGDN, ALT_INS, ALT_DEL, - ALT_PADSLASH, ALT_TAB, ALT_PADENTER, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - KEY_SHOME, KEY_SUP, KEY_SPREVIOUS, KEY_SLEFT, - KEY_SRIGHT, KEY_SEND, KEY_SDOWN, KEY_SNEXT, - KEY_SIC, KEY_SDC, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, PADSTAR, PADPLUS, - CTL_ENTER, PADMINUS, -1, PADSLASH + ALT_PADSLASH, ALT_TAB, ALT_PADENTER, -1 }; unsigned long pdc_key_modifiers = 0L; @@ -506,53 +484,58 @@ int PDC_get_bios_key(void) pdc_key_modifiers |= PDC_KEY_MODIFIER_SHIFT; } #endif - if (scan == 0x1c && key == 0x0a) /* ^Enter */ + if (scan == 0x1c && key == 0x0a) /* ^Enter */ key = CTL_ENTER; - else if ((scan == 0xe0 && key == 0x0d) /* PadEnter */ - || (scan == 0xe0 && key == 0x0a)) /* ^PadEnter */ - key = key_table[key]; - else if ((scan == 0x37 && key == 0x2a) /* Star */ - || (scan == 0x4a && key == 0x2d) /* Minus */ - || (scan == 0x4e && key == 0x2b) /* Plus */ - || (scan == 0xe0 && key == 0x2f)) /* Slash */ - key = key_table[(key & 0x0f) | 0xf0]; - else if (key == 0xe0 && pdc_key_modifiers & PDC_KEY_MODIFIER_SHIFT) + else if (scan == 0xe0 && key == 0x0d) /* PadEnter */ + key = PADENTER; + else if (scan == 0xe0 && key == 0x0a) /* ^PadEnter */ + key = CTL_PADENTER; + else if (scan == 0x37 && key == 0x2a) /* Star */ + key = PADSTAR; + else if (scan == 0x4a && key == 0x2d) /* Minus */ + key = PADMINUS; + else if (scan == 0x4e && key == 0x2b) /* Plus */ + key = PADPLUS; + else if (scan == 0xe0 && key == 0x2f) /* Slash */ + key = PADSLASH; + else if (key == 0x00 || (key == 0xe0 && scan > 53 && scan != 86)) + key = key_table[scan & 0x7f]; + + if (keyInfo.fsState & (KBDSTF_LEFTSHIFT|KBDSTF_RIGHTSHIFT)) { - switch (scan) + switch (key) { - case 0x47: /* Shift Home */ + case KEY_HOME: /* Shift Home */ key = KEY_SHOME; break; - case 0x48: /* Shift Up */ + case KEY_UP: /* Shift Up */ key = KEY_SUP; break; - case 0x49: /* Shift PgUp */ + case KEY_PPAGE: /* Shift PgUp */ key = KEY_SPREVIOUS; break; - case 0x4b: /* Shift Left */ + case KEY_LEFT: /* Shift Left */ key = KEY_SLEFT; break; - case 0x4d: /* Shift Right */ + case KEY_RIGHT: /* Shift Right */ key = KEY_SRIGHT; break; - case 0x4f: /* Shift End */ + case KEY_END: /* Shift End */ key = KEY_SEND; break; - case 0x50: /* Shift Down */ + case KEY_DOWN: /* Shift Down */ key = KEY_SDOWN; break; - case 0x51: /* Shift PgDn */ + case KEY_NPAGE: /* Shift PgDn */ key = KEY_SNEXT; break; - case 0x52: /* Shift Ins */ + case KEY_IC: /* Shift Ins */ key = KEY_SIC; break; - case 0x53: /* Shift Del */ + case KEY_DC: /* Shift Del */ key = KEY_SDC; } } - else if (key == 0x00 || (key == 0xe0 && scan > 53 && scan != 86)) - key = key_table[scan]; key_pressed = TRUE; SP->key_code = ((unsigned)key >= 256);