- /*
- * If we're in applications keypad mode, we have to process it
- * before char-map translation, because it will pre-empt lots
- * of stuff, even if NumLock is off.
- */
- if (app_keypad_keys) {
+ if (cfg.nethack_keypad) {
+ int shift = keystate[VK_SHIFT] & 0x80;
+ /*
+ * NB the shifted versions only work with numlock off.
+ */
+ switch ( (lParam >> 16) & 0x1FF ) {
+ case 0x047: *p++ = shift ? 'Y' : 'y'; return p - output;
+ case 0x048: *p++ = shift ? 'K' : 'k'; return p - output;
+ case 0x049: *p++ = shift ? 'U' : 'u'; return p - output;
+ case 0x04B: *p++ = shift ? 'H' : 'h'; return p - output;
+ case 0x04C: *p++ = '.'; return p - output;
+ case 0x04D: *p++ = shift ? 'L' : 'l'; return p - output;
+ case 0x04F: *p++ = shift ? 'B' : 'b'; return p - output;
+ case 0x050: *p++ = shift ? 'J' : 'j'; return p - output;
+ case 0x051: *p++ = shift ? 'N' : 'n'; return p - output;
+ case 0x053: *p++ = '.'; return p - output;
+ }
+ } else if (app_keypad_keys) {
+ /*
+ * If we're in applications keypad mode, we have to process it
+ * before char-map translation, because it will pre-empt lots
+ * of stuff, even if NumLock is off.
+ */