X11 getline: log prompt and response

After player has responded to a getline prompt, echo the prompt
and the line of text response to the message window.  Uses pline()
so also gets put into core's message history for dumplog.
This commit is contained in:
PatR
2021-02-19 15:38:31 -08:00
parent 2cedfc9696
commit a32002eb88
2 changed files with 26 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.456 $ $NHDT-Date: 1613723080 2021/02/19 08:24:40 $
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.459 $ $NHDT-Date: 1613777904 2021/02/19 23:38:24 $
General Fixes and Modified Features
-----------------------------------
@@ -835,6 +835,8 @@ tiles: male and female variations in monsters.txt; tested only with tile2bmp
Unix: can define NOSUSPEND in config.h or src/Makefile's CFLAGS to prevent
unixconf.h from enabling SUSPEND without need to modify unixconf.h
X11: implement 'selectsaved', restore via menu of saved games
X11: echo getline prompt and response (wishes, applying names) to message
window and dumplog message history
NetHack Community Patches (or Variation) Included

View File

@@ -1,4 +1,4 @@
/* NetHack 3.7 winX.c $NHDT-Date: 1613444929 2021/02/16 03:08:49 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.98 $ */
/* NetHack 3.7 winX.c $NHDT-Date: 1613777904 2021/02/19 23:38:24 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.99 $ */
/* Copyright (c) Dean Luick, 1992 */
/* NetHack may be freely redistributed. See license for details. */
@@ -1826,7 +1826,7 @@ X11_askname(void)
static Widget getline_popup, getline_dialog;
#define CANCEL_STR "\033"
static char *getline_input;
static char *getline_input; /* buffer to hold user input; getline's output */
/* Callback for getline dialog widget. */
/* ARGSUSED */
@@ -1892,12 +1892,14 @@ release_getline_widgets(void)
XtDestroyWidget(getline_popup), getline_popup = (Widget) 0;
}
/* ask user for a line of text */
void
X11_getlin(const char *question, char *input)
X11_getlin(const char *question, /* prompt */
char *input) /* user's input, getlin's _output_ buffer */
{
getline_input = input;
getline_input = input; /* used by popup actions */
flush_screen(1);
flush_screen(1); /* tell core to make sure that map is up to date */
if (!getline_popup) {
Arg args[1];
@@ -1935,6 +1937,22 @@ X11_getlin(const char *question, char *input)
/* The callback will enable the event loop exit. */
(void) x_event(EXIT_ON_EXIT);
/* we get here after the popup has exited;
put prompt and response into the message window (and into
core's dumplog history) unless play hasn't started yet */
if (g.program_state.in_moveloop || g.program_state.gameover) {
const char *visanswer = (*input == '\033') ? "ESC" : input;
int promptlen = (int) strlen(question),
answerlen = (int) strlen(visanswer);
pline("%.*s %.*s", /* note: (QBUFSZ-1 + 1 + QBUFSZ-1) == (BUFSZ-1) */
min(promptlen, QBUFSZ - 1), question,
min(answerlen, QBUFSZ - 1), visanswer);
}
/* clear static pointer that's about to go stale */
getline_input = 0;
}
/* Display file ----------------------------------------------------------- */