From e5dd0e735a8cb1e69a65f32dced91003043119c5 Mon Sep 17 00:00:00 2001 From: nhw_cron Date: Mon, 2 Dec 2019 07:21:09 -0500 Subject: [PATCH 1/3] This is cron-daily v1-Dec-1-2019. guidebook updated: doc/Guidebook.txt --- doc/Guidebook.txt | 186 +++++++++++++++++++++++----------------------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/doc/Guidebook.txt b/doc/Guidebook.txt index e991beead..5518f6899 100644 --- a/doc/Guidebook.txt +++ b/doc/Guidebook.txt @@ -126,7 +126,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -192,7 +192,7 @@ you have seen on the current dungeon level; as you explore more - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -258,7 +258,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -324,7 +324,7 @@ Intelligence affects your ability to cast spells and read - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -390,7 +390,7 @@ ical attacks. Many dungeons show only your experience level - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -456,7 +456,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -522,7 +522,7 @@ nasty and vicious. Sometimes, however, they can be helpful. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -588,7 +588,7 @@ symbol at the chosen location, conditionally check for "More - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -654,7 +654,7 @@ if you remember a monster there). - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -720,7 +720,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -786,7 +786,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -852,7 +852,7 @@ once you've closed this menu. The available options are - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -918,7 +918,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -984,7 +984,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1050,7 +1050,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1116,7 +1116,7 @@ (R)UNIX is a registered trademark of The Open Group. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1182,7 +1182,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1248,7 +1248,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1314,7 +1314,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1380,7 +1380,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1446,7 +1446,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1512,7 +1512,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1578,7 +1578,7 @@ When picking a target with cursor and the autodescribe - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1644,7 +1644,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1710,7 +1710,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1776,7 +1776,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1842,7 +1842,7 @@ the `^D' (kick) command. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1908,7 +1908,7 @@ on the corresponding staircase at your destination. However, - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -1974,7 +1974,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2040,7 +2040,7 @@ member a monster but want to try fighting anyway, you can use the - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2106,7 +2106,7 @@ ers (or even former incarnations of yourself!) and their personal - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2172,7 +2172,7 @@ ter. Many commands that operate on objects must ask you to find - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2238,7 +2238,7 @@ In some cases "uncursed" will be omitted as being redundant when - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2304,7 +2304,7 @@ to taking off other worn items. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2370,7 +2370,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2436,7 +2436,7 @@ ondary is just an item in your inventory that's been designated - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2502,7 +2502,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2568,7 +2568,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2634,7 +2634,7 @@ the wall, you might decide to go for broke and break your wand. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2700,7 +2700,7 @@ cation rather than just specify a particular direction. Other - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2766,7 +2766,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2832,7 +2832,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2898,7 +2898,7 @@ brains while polymorphed into a mind flayer, is considered eating - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -2964,7 +2964,7 @@ type ("polypiling") or the form of your own body into another - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3030,7 +3030,7 @@ tion, and are ignored unless a CHOOSE statement was used to - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3096,7 +3096,7 @@ pletion has no effect for the X11 windowport. You can specify - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3162,7 +3162,7 @@ "Configuring User Sounds" section. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3228,7 +3228,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3294,7 +3294,7 @@ tion controls whether the description includes map coordinates. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3360,7 +3360,7 @@ was defined during compilation. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3426,7 +3426,7 @@ display for end-of-game disclosure follows a set sequence. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3492,7 +3492,7 @@ "no", you will exclude that gender from being picked randomly. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3558,7 +3558,7 @@ sistent. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3624,7 +3624,7 @@ fault `\'. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3690,7 +3690,7 @@ Prompt for new form whenever any monster changes shape (default - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3756,7 +3756,7 @@ Valid settings are: - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3822,7 +3822,7 @@ item. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3888,7 +3888,7 @@ (Default `S'). Persistent. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -3954,7 +3954,7 @@ be set with the `O' command. Persistent. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4020,7 +4020,7 @@ off). Persistent. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4086,7 +4086,7 @@ only; "X11" interface always uses a timer based delay. The - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4152,7 +4152,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4218,7 +4218,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4284,7 +4284,7 @@ If NetHack can, it should use this size font for text windows. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4350,7 +4350,7 @@ Number of lines for traditional below-the-map status display. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4416,7 +4416,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4482,7 +4482,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4548,7 +4548,7 @@ pressions. It is possible to compile NetHack without regular - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4614,7 +4614,7 @@ key can be a single character ("x"), a control key ("^X", "C-x"), - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4680,7 +4680,7 @@ When asked for a location, the key to toggle autodescribe. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4746,7 +4746,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4812,7 +4812,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4878,7 +4878,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -4944,7 +4944,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5010,7 +5010,7 @@ cyan, gray, orange, light-green, yellow, light-blue, light- - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5076,7 +5076,7 @@ value changes upwards or downwards. This attribute times - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5142,7 +5142,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5208,7 +5208,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5274,7 +5274,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5340,7 +5340,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5406,7 +5406,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5472,7 +5472,7 @@ may want to alter settings via SYMBOLS= and ROGUESYMBOLS= in your - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5538,7 +5538,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5604,7 +5604,7 @@ spectively, to identify unique people for the score file. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5623,7 +5623,7 @@ lows the following placeholders: %% - literal `%' - %v - version (eg. "3.6.2-0") + %v - version (eg. "3.6.3-0") %u - game UID %t - game start time, UNIX timestamp format %T - current time, UNIX timestamp format @@ -5670,7 +5670,7 @@ mode:explore option. The other is to issue the "#exploremode" - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5736,7 +5736,7 @@ incorporating many of the added features, and produced NetHack - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5802,7 +5802,7 @@ forms. - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5868,7 +5868,7 @@ bugs that had been discovered. Despite that constantly growing - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -5934,7 +5934,7 @@ velopment was released publicly by other parties. Since that code - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -6000,7 +6000,7 @@ Cohrs, Jessie Collet, Pasi Kallinen, Ken Lorber, Dean Luick, - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -6066,7 +6066,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 @@ -6132,7 +6132,7 @@ - NetHack 3.6 November 27, 2019 + NetHack 3.6 December 1, 2019 From 5a3b8e7b380e9a7141a6357a34aff20d58c156a2 Mon Sep 17 00:00:00 2001 From: nhmall Date: Mon, 2 Dec 2019 12:05:18 -0500 Subject: [PATCH 2/3] README update Dec 2 --- README | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README b/README index 013a63153..73e872c22 100644 --- a/README +++ b/README @@ -1,12 +1,12 @@ - NetHack 3.6.3 beta1 -- General information + NetHack 3.6.3 post-beta1 -- General information NetHack 3.6 is an enhancement to the dungeon exploration game NetHack, which is a distant descendent of Rogue and Hack, and a direct descendent of NetHack 3.4 as there was no NetHack 3.5 release. -NetHack 3.6.3 beta1 is not an official release of NetHack. It -currently contains a collection of over 150 bug fixes to NetHack 3.6.2 -and more than 16 enhancements and community contributions. The file +NetHack 3.6.3 post-beta1 is not an official release of NetHack. It +currently contains a collection of over 190 bug fixes to NetHack 3.6.2 +and over 22 game enhancements and community contributions. The file doc/fixes36.3 in the source distribution has a full list of them. The text in there was written for the development team's own use and is provided "as is", so please do not ask us to further explain the entries @@ -33,6 +33,7 @@ spoilers: * Fixed ignoring of god's wrath when hero injured himself during altar kick * Fixed several cases where persistent inventory window was not updated * Fixed temple priests or shopkeepers moving over other monsters + * Fixed a crash-causing bug when putting on levitation boots over a sink * Ensured that thrown or kicked objects will end up in bones * Made water go all the way to the edges of level on the Plane of Water * Made clouds disrupt line of sight along the edges of the Plane of Air @@ -42,6 +43,8 @@ spoilers: * the Windows platform * Improved the layout and display of the player selection dialog used on the * Windows graphical implementation + * Improved performance of some tty versions by reducing the number of + * function calls made from mapglyph * Allowed the msdos implementation to build with curses and PDCurses * Over 100 other fixes and improvements @@ -191,6 +194,6 @@ In our own patches, we will assume that your code is synchronized with ours. -- Good luck, and happy Hacking -- -# $NHDT-Date: 1572309271 2019/10/29 00:34:31 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.57 $ +# $NHDT-Date: 1575306309 2019/12/02 17:05:09 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.62 $ # Copyright (c) 2012 by Michael Allison # NetHack may be freely redistributed. See license for details. From 8a7ec78d1743a52a5ce8d3a1efb6fea918c16780 Mon Sep 17 00:00:00 2001 From: nhmall Date: Mon, 2 Dec 2019 22:55:48 -0500 Subject: [PATCH 3/3] add code support to make keypad behave better with swap_yz option This is being committed commented out in include/ntconf.h. --- doc/fixes36.3 | 2 ++ include/ntconf.h | 4 +++- sys/winnt/nh340key.c | 40 ++++++++++++++++++++++++++++++++++++ sys/winnt/nhdefkey.c | 39 +++++++++++++++++++++++++++++++++++ sys/winnt/nhraykey.c | 40 ++++++++++++++++++++++++++++++++++++ sys/winnt/nttty.c | 49 +++++++++++++++++++++++++++++++++++--------- 6 files changed, 163 insertions(+), 11 deletions(-) diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 375c2497c..baf32548d 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -325,6 +325,8 @@ taking off a fedora or dented pot (no-delay helmets) left the helmet stuck unix: fix double DLB definition in linux hints file windows: fix --showpaths output for the data file which relies on being constructed programmatically to incorporate the version suffix +windows+tty: add code to make keypad support for swap_yz behave (currently + commented out in include/ntconf.h) Platform- and/or Interface-Specific Fixes or Features diff --git a/include/ntconf.h b/include/ntconf.h index a135ee420..ecdf7bc81 100644 --- a/include/ntconf.h +++ b/include/ntconf.h @@ -34,7 +34,9 @@ /*#define CHANGE_COLOR*/ /* allow palette changes */ #define SELECTSAVED /* Provide menu of saved games to choose from at start */ - + +/* #define QWERTZ_SUPPORT */ /* when swap_yz is True, numpad 7 is 'z' not 'y' */ + /* * ----------------------------------------------------------------- * The remaining code shouldn't need modification. diff --git a/sys/winnt/nh340key.c b/sys/winnt/nh340key.c index 78600ec67..a4faa80c1 100644 --- a/sys/winnt/nh340key.c +++ b/sys/winnt/nh340key.c @@ -52,6 +52,13 @@ DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) #define PADKEYS (KEYPADHI - KEYPADLO + 1) #define iskeypad(x) (KEYPADLO <= (x) && (x) <= KEYPADHI) +#ifdef QWERTZ_SUPPORT +/* when 'numberpad' is 0 and Cmd.swap_yz is True + (signaled by setting 0x10 on boolean numpad argument) + treat keypress of numpad 7 as 'z' rather than 'y' */ +static boolean qwertz = FALSE; +#endif + /* * Keypad keys are translated to the normal values below. * Shifted keypad keys are translated to the @@ -110,6 +117,15 @@ int portdebug; int altseq = 0; const struct pad *kpad; +#ifdef QWERTZ_SUPPORT + if (numberpad & 0x10) { + numberpad &= ~0x10; + qwertz = TRUE; + } else { + qwertz = FALSE; + } +#endif + shiftstate = 0L; ch = pre_ch = ir->Event.KeyEvent.uChar.AsciiChar; scan = ir->Event.KeyEvent.wVirtualScanCode; @@ -149,6 +165,14 @@ int portdebug; } else { ch = kpad[scan - KEYPADLO].normal; } +#ifdef QWERTZ_SUPPORT + /* OPTIONS=number_pad:-1 is for qwertz keyboard; for that setting, + 'numberpad' will be 0; core swaps y to zap, z to move northwest; + we want numpad 7 to move northwest, so when qwertz is set, + tell core that user who types numpad 7 typed z rather than y */ + if (qwertz && kpad[scan - KEYPADLO].normal == 'y') + ch += 1; /* changes y to z, Y to Z, ^Y to ^Z */ +#endif /*QWERTZ_SUPPORT*/ } else if (altseq > 0) { /* ALT sequence */ if (vk == 0xBF) ch = M('?'); @@ -238,6 +262,15 @@ coord *cc; #endif int ch; boolean valid = 0, done = 0; + +#ifdef QWERTZ_SUPPORT + if (numpad & 0x10) { + numpad &= ~0x10; + qwertz = TRUE; + } else { + qwertz = FALSE; + } +#endif while (!done) { #if defined(SAFERHANGUP) dwWait = WaitForSingleObjectEx(hConIn, // event object to wait for @@ -249,7 +282,14 @@ coord *cc; ReadConsoleInput(hConIn, ir, 1, count); if (mode == 0) { if ((ir->EventType == KEY_EVENT) && ir->Event.KeyEvent.bKeyDown) { +#ifdef QWERTZ_SUPPORT + if (qwertz) + numpad |= 0x10; +#endif ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0); +#ifdef QWERTZ_SUPPORT + numpad &= ~0x10; +#endif done = valid; } } else { diff --git a/sys/winnt/nhdefkey.c b/sys/winnt/nhdefkey.c index f6d110adb..e40cf6a1e 100644 --- a/sys/winnt/nhdefkey.c +++ b/sys/winnt/nhdefkey.c @@ -60,6 +60,13 @@ DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) #define PADKEYS (KEYPADHI - KEYPADLO + 1) #define iskeypad(x) (KEYPADLO <= (x) && (x) <= KEYPADHI) +#ifdef QWERTZ_SUPPORT +/* when 'numberpad' is 0 and Cmd.swap_yz is True + (signaled by setting 0x10 on boolean numpad argument) + treat keypress of numpad 7 as 'z' rather than 'y' */ +static boolean qwertz = FALSE; +#endif + /* * Keypad keys are translated to the normal values below. * Shifted keypad keys are translated to the @@ -120,6 +127,14 @@ int portdebug; int altseq = 0; const struct pad *kpad; +#ifdef QWERTZ_SUPPORT + if (numberpad & 0x10) { + numberpad &= ~0x10; + qwertz = TRUE; + } else { + qwertz = FALSE; + } +#endif shiftstate = 0L; ch = pre_ch = ir->Event.KeyEvent.uChar.AsciiChar; scan = ir->Event.KeyEvent.wVirtualScanCode; @@ -163,6 +178,14 @@ int portdebug; } else { ch = kpad[scan - KEYPADLO].normal; } +#ifdef QWERTZ_SUPPORT + /* OPTIONS=number_pad:-1 is for qwertz keyboard; for that setting, + 'numberpad' will be 0; core swaps y to zap, z to move northwest; + we want numpad 7 to move northwest, so when qwertz is set, + tell core that user who types numpad 7 typed z rather than y */ + if (qwertz && kpad[scan - KEYPADLO].normal == 'y') + ch += 1; /* changes y to z, Y to Z, ^Y to ^Z */ +#endif /*QWERTZ_SUPPORT*/ } else if (altseq > 0) { /* ALT sequence */ if (vk == 0xBF) ch = M('?'); @@ -271,6 +294,15 @@ coord *cc; #endif int ch; boolean valid = 0, done = 0; + +#ifdef QWERTZ_SUPPORT + if (numpad & 0x10) { + numpad &= ~0x10; + qwertz = TRUE; + } else { + qwertz = FALSE; + } +#endif while (!done) { #if defined(SAFERHANGUP) dwWait = WaitForSingleObjectEx(hConIn, // event object to wait for @@ -289,7 +321,14 @@ coord *cc; if (count > 0) { if (ir->EventType == KEY_EVENT && ir->Event.KeyEvent.bKeyDown) { +#ifdef QWERTZ_SUPPORT + if (qwertz) + numpad |= 0x10; +#endif ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0); +#ifdef QWERTZ_SUPPORT + numpad &= ~0x10; +#endif if (valid) return ch; } else if (ir->EventType == MOUSE_EVENT) { diff --git a/sys/winnt/nhraykey.c b/sys/winnt/nhraykey.c index aafe9c44c..7ce4e0e50 100644 --- a/sys/winnt/nhraykey.c +++ b/sys/winnt/nhraykey.c @@ -212,6 +212,13 @@ DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) #define isnumkeypad(x) \ (KEYPADLO <= (x) && (x) <= 0x51 && (x) != 0x4A && (x) != 0x4E) +#ifdef QWERTZ_SUPPORT +/* when 'numberpad' is 0 and Cmd.swap_yz is True + (signaled by setting 0x10 on boolean numpad argument) + treat keypress of numpad 7 as 'z' rather than 'y' */ +static boolean qwertz = FALSE; +#endif + /* * Keypad keys are translated to the normal values below. * Shifted keypad keys are translated to the @@ -301,6 +308,14 @@ int portdebug; const struct pad *kpad; DWORD count; +#ifdef QWERTZ_SUPPORT + if (numberpad & 0x10) { + numberpad &= ~0x10; + qwertz = TRUE; + } else { + qwertz = FALSE; + } +#endif shiftstate = 0L; ch = pre_ch = ir->Event.KeyEvent.uChar.AsciiChar; scan = ir->Event.KeyEvent.wVirtualScanCode; @@ -347,6 +362,14 @@ int portdebug; } else { ch = kpad[scan - KEYPADLO].normal; } +#ifdef QWERTZ_SUPPORT + /* OPTIONS=number_pad:-1 is for qwertz keyboard; for that setting, + 'numberpad' will be 0; core swaps y to zap, z to move northwest; + we want numpad 7 to move northwest, so when qwertz is set, + tell core that user who types numpad 7 typed z rather than y */ + if (qwertz && kpad[scan - KEYPADLO].normal == 'y') + ch += 1; /* changes y to z, Y to Z, ^Y to ^Z */ +#endif /*QWERTZ_SUPPORT*/ } else if (altseq > 0) { /* ALT sequence */ ReadConsoleInput(hConIn, ir, 1, &count); if (vk == 0xBF) @@ -471,6 +494,15 @@ coord *cc; #endif int ch; boolean valid = 0, done = 0; + +#ifdef QWERTZ_SUPPORT + if (numpad & 0x10) { + numpad &= ~0x10; + qwertz = TRUE; + } else { + qwertz = FALSE; + } +#endif while (!done) { *count = 0; dwWait = WaitForSingleObject(hConIn, INFINITE); @@ -490,12 +522,19 @@ coord *cc; if (count > 0) { if (ir->EventType == KEY_EVENT && ir->Event.KeyEvent.bKeyDown) { +#ifdef QWERTZ_SUPPORT + if (qwertz) + numpad |= 0x10; +#endif ch = ProcessKeystroke(hConIn, ir, &valid, numpad, #ifdef PORTDEBUG 1); #else 0); #endif +#ifdef QWERTZ_SUPPORT + numpad &= ~0x10; +#endif if (valid) return ch; } else { @@ -549,6 +588,7 @@ INPUT_RECORD *ir; unsigned char ch; unsigned long shiftstate; int altseq = 0, keycode, vk; + done = 0; retval = 0; while (!done) { diff --git a/sys/winnt/nttty.c b/sys/winnt/nttty.c index 88aea5aad..9c96ae8a4 100644 --- a/sys/winnt/nttty.c +++ b/sys/winnt/nttty.c @@ -13,7 +13,6 @@ * */ - #ifdef WIN32 #define NEED_VARARGS /* Uses ... */ #include "win32api.h" @@ -428,8 +427,17 @@ boolean *valid; boolean numberpad; int portdebug; { - int ch = keyboard_handler.pProcessKeystroke( + int ch; + +#ifdef QWERTZ_SUPPORT + if (Cmd.swap_yz) + numberpad |= 0x10; +#endif + ch = keyboard_handler.pProcessKeystroke( console.hConIn, ir, valid, numberpad, portdebug); +#ifdef QWERTZ_SUPPORT + numberpad &= ~0x10; +#endif /* check for override */ if (ch && ch < MAX_OVERRIDES && key_overrides[ch]) ch = key_overrides[ch]; @@ -448,13 +456,20 @@ tgetch() int mod; coord cc; DWORD count; + boolean numpad = iflags.num_pad; + really_move_cursor(); if (iflags.debug_fuzzer) return randomkey(); +#ifdef QWERTZ_SUPPORT + if (Cmd.swap_yz) + numpad |= 0x10; +#endif + return (program_state.done_hup) ? '\033' : keyboard_handler.pCheckInput( - console.hConIn, &ir, &count, iflags.num_pad, 0, &mod, &cc); + console.hConIn, &ir, &count, numpad, 0, &mod, &cc); } int @@ -464,13 +479,22 @@ int *x, *y, *mod; int ch; coord cc; DWORD count; + boolean numpad = iflags.num_pad; + really_move_cursor(); if (iflags.debug_fuzzer) return randomkey(); +#ifdef QWERTZ_SUPPORT + if (Cmd.swap_yz) + numpad |= 0x10; +#endif ch = (program_state.done_hup) ? '\033' : keyboard_handler.pCheckInput( - console.hConIn, &ir, &count, iflags.num_pad, 1, mod, &cc); + console.hConIn, &ir, &count, numpad, 1, mod, &cc); +#ifdef QWERTZ_SUPPORT + numpad &= ~0x10; +#endif if (!ch) { *x = cc.x; *y = cc.y; @@ -1901,12 +1925,17 @@ void nethack_enter_nttty() HKL keyboard_layout = GetKeyboardLayout(0); DWORD primary_language = (UINT_PTR) keyboard_layout & 0x3f; - if (primary_language == LANG_ENGLISH) { - if (!load_keyboard_handler("nhdefkey")) - error("Unable to load nhdefkey.dll"); - } else { - if (!load_keyboard_handler("nhraykey")) - error("Unable to load nhraykey.dll"); + /* This was overriding the handler that had already + been loaded during options parsing. Needs to + check first */ + if (!iflags.altkeyhandler[0]) { + if (primary_language == LANG_ENGLISH) { + if (!load_keyboard_handler("nhdefkey")) + error("Unable to load nhdefkey.dll"); + } else { + if (!load_keyboard_handler("nhraykey")) + error("Unable to load nhraykey.dll"); + } } } #endif /* TTY_GRAPHICS */