if a trap killed both the hero's steed and the hero an impossible "dmonsfree:
N+1 removed doesn't match N pending" warning could occur
prevent paralyzed hero from helping nymph or succubus remove worn armor
+when identifying items via menu and more than one pass is needed (so when
+ identifying 3 items and player only picks 1, for instance), issue
+ --More-- because the next menu might cover up the ID message(s)
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
group accelerator rather than the start of a count
curses: obey timed_delay option
curses: support tty-style extended role/race/&c selection at start of new game
+curses: implement mark_synch() and wait_synch()
macOS: Xcode project was failing to build if the path to the NetHack source
tree contained a space; the issue was within some shell script code
contained within the project
extern void curses_message_win_puts(const char *message, boolean recursed);
extern void curses_got_input(void);
+extern int curses_got_output(void);
extern int curses_block(boolean require_tab); /* for MSGTYPE=STOP */
extern int curses_more(void);
extern void curses_clear_unhighlight_message_window(void);
for (i = 0; i < n; i++, id_limit--)
(void) identify(pick_list[i].item.a_obj);
free((genericptr_t) pick_list);
- mark_synch(); /* Before we loop to pop open another menu */
+ if (id_limit)
+ wait_synch(); /* Before we loop to pop open another menu */
first = 0;
} else if (n == -2) { /* player used ESC to quit menu */
break;
/* dialog with user to identify a given number of items; 0 means all */
void
-identify_pack(int id_limit,
- boolean learning_id) /* T: just read unknown identify scroll */
+identify_pack(
+ int id_limit,
+ boolean learning_id) /* T: just read unknown identify scroll */
{
struct obj *obj;
int n, unid_cnt = count_unidentified(gi.invent);
for (obj = gi.invent; obj; obj = obj->nobj) {
if (not_fully_identified(obj)) {
(void) identify(obj);
- if (unid_cnt == 1)
+ if (--unid_cnt < 1)
break;
}
}
void
X11_wait_synch(void)
{
- if (x_inited)
+ if (x_inited) {
+ X11_mark_synch();
XFlush(XtDisplay(toplevel));
+ }
}
/* Both resume_ and suspend_ are called from ioctl.c and unixunix.c. */
** windows? Or at least all but WIN_INFO? -dean
*/
void
-curses_init_nhwindows(int *argcp UNUSED,
- char **argv UNUSED)
+curses_init_nhwindows(
+ int *argcp UNUSED,
+ char **argv UNUSED)
{
#ifdef PDCURSES
char window_title[BUFSZ];
/*
mark_synch() -- Don't go beyond this point in I/O on any channel until
- all channels are caught up to here. Can be an empty call
- for the moment
+ all channels are caught up to here.
*/
void
curses_mark_synch(void)
{
+ curses_refresh_nethack_windows();
}
/*
void
curses_wait_synch(void)
{
+ if (curses_got_output())
+ (void) curses_more();
+ curses_mark_synch();
/* [do we need 'if (counting) curses_count_window((char *)0);' here?] */
}
}
int
-curses_block(boolean noscroll) /* noscroll - blocking because of msgtype
- * = stop/alert else blocking because
- * window is full, so need to scroll after */
+curses_got_output(void)
+{
+ return turn_lines;
+}
+
+int
+curses_block(
+ boolean noscroll) /* noscroll - blocking because of MSGTYPE=STOP/ALERT
+ * else blocking because window is full, so need to
+ * scroll after */
{
static const char resp[] = " \r\n\033"; /* space, enter, esc */
static int prev_x = -1, prev_y = -1, blink = 0;
void curses_message_win_puts(const char *message, boolean recursed);
void curses_got_input(void);
+int curses_got_output(void);
int curses_block(boolean require_tab);
int curses_more(void);
void curses_clear_unhighlight_message_window(void);