defopt);
else if (!strcmp(optname,"align"))
Sprintf(buf, "%s", rolestring(flags.initalign, aligns, adj));
+ else if (!strcmp(optname,"altkeyhandler"))
+ Sprintf(buf, "%s", iflags.altkeyhandler[0] ?
+ iflags.altkeyhandler : "default");
else if (!strcmp(optname, "boulder"))
Sprintf(buf, "%c", iflags.bouldersym ?
iflags.bouldersym : oc_syms[(int)objects[BOULDER].oc_class]);
# for tty window-port.
OPTIONS=IBMGraphics
+# Keyboard handling
+# Different keyboard handlers can be loaded.
+# Default is nhdefkey.dll but you can override that.
+# Ray Chason's keyboard handler
+# OPTIONS=altkeyhandler:nhraykey.dll
+#
+# NetHack 3.4.0 keyboard handling
+# OPTIONS=altkeyhandler:nh340key.dll
+
# *** Personal Preferences ***
# Some options to set personal preferences. Uncomment and change these to
# suit your personal preference. If several people are to use the same
void
load_keyboard_handler()
{
- char suffx[] = ".dll";
+ char suffx[] = ".dll";
+ char *truncspot;
#define MAX_DLLNAME 25
char kh[MAX_ALTKEYHANDLER];
if (iflags.altkeyhandler[0]) {
if (hLibrary) { /* already one loaded apparently */
FreeLibrary(hLibrary);
hLibrary = (HANDLE)0;
+ pNHkbhit = (NHKBHIT)0;
+ pCheckInput = (CHECKINPUT)0;
+ pSourceWhere = (SOURCEWHERE)0;
+ pSourceAuthor = (SOURCEAUTHOR)0;
+ pKeyHandlerName = (KEYHANDLERNAME)0;
+ pProcessKeystroke = (PROCESS_KEYSTROKE)0;
}
+ if ((truncspot = strstri(iflags.altkeyhandler, suffx)) != 0)
+ *truncspot = '\0';
(void) strncpy(kh, iflags.altkeyhandler,
(MAX_ALTKEYHANDLER - sizeof suffx) - 1);
kh[(MAX_ALTKEYHANDLER - sizeof suffx) - 1] = '\0';
Strcat(kh, suffx);
+ Strcpy(iflags.altkeyhandler, kh);
hLibrary = LoadLibrary(kh);
if (hLibrary) {
pProcessKeystroke =
(KEYHANDLERNAME) GetProcAddress (hLibrary, TEXT ("KeyHandlerName"));
}
}
- if (!pProcessKeystroke || !pNHkbhit) {
+ if (!pProcessKeystroke || !pNHkbhit || !pCheckInput) {
if (hLibrary) {
FreeLibrary(hLibrary);
hLibrary = (HANDLE)0;
+ pNHkbhit = (NHKBHIT)0;
+ pCheckInput = (CHECKINPUT)0;
+ pSourceWhere = (SOURCEWHERE)0;
+ pSourceAuthor = (SOURCEAUTHOR)0;
+ pKeyHandlerName = (KEYHANDLERNAME)0;
+ pProcessKeystroke = (PROCESS_KEYSTROKE)0;
}
- hLibrary = LoadLibrary("nhdefkey.dll");
+ (void)strncpy(kh, "nhdefkey.dll", (MAX_ALTKEYHANDLER - sizeof suffx) - 1);
+ kh[(MAX_ALTKEYHANDLER - sizeof suffx) - 1] = '\0';
+ Strcpy(iflags.altkeyhandler, kh);
+ hLibrary = LoadLibrary(kh);
if (hLibrary) {
pProcessKeystroke =
(PROCESS_KEYSTROKE) GetProcAddress (hLibrary, TEXT ("ProcessKeystroke"));
(KEYHANDLERNAME) GetProcAddress (hLibrary, TEXT ("KeyHandlerName"));
}
}
- if (!pProcessKeystroke || !pNHkbhit) {
+ if (!pProcessKeystroke || !pNHkbhit || !pCheckInput) {
if (!hLibrary)
raw_printf("\nNetHack was unable to load keystroke handler.\n");
else {