Merge branch 'NetHack-3.6'
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.24 $ $NHDT-Date: 1558921075 2019/05/27 01:37:55 $
|
||||
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.25 $ $NHDT-Date: 1559035655 2019/05/28 09:27:35 $
|
||||
|
||||
This fixes36.3 file is here to capture information about updates in the 3.6.x
|
||||
lineage following the release of 3.6.2 in May 2019. Please note, however,
|
||||
@@ -57,6 +57,8 @@ curses: when display windows get reconfigured (after setting align_status,
|
||||
when feasible it combines short lines, resulting in N messages on
|
||||
fewer than N lines and leaving some of the available lines blank.]
|
||||
curses: plug memory leak when getting a line of input is cancelled by ESC
|
||||
curses: after requesting a line of input from player, next line of message
|
||||
window could end up being skipped
|
||||
tty: re-do one optimization used when status conditions have all been removed
|
||||
and remove another that tried to check whether condition text to be
|
||||
displayed next was the same as the existing value; sometimes new
|
||||
|
||||
@@ -96,12 +96,15 @@ curses_message_win_puts(const char *message, boolean recursed)
|
||||
mesg_add_line(message);
|
||||
}
|
||||
|
||||
linespace = width - 3 - (mx - border_space);
|
||||
/* -2: room for trailing ">>" (if More>> is needed) or leading " "
|
||||
(if combining this message with preceding one) */
|
||||
linespace = (width - 1) - 2 - (mx - border_space);
|
||||
|
||||
if (linespace < message_length) {
|
||||
if (my - border_space >= height - 1) {
|
||||
/* bottom of message win */
|
||||
if (++turn_lines >= height) { /* || height == 1) */
|
||||
if (++turn_lines > height
|
||||
|| (turn_lines == height && mx > border_space)) {
|
||||
/* Pause until key is hit - Esc suppresses any further
|
||||
messages that turn */
|
||||
if (curses_more() == '\033') {
|
||||
@@ -119,6 +122,13 @@ curses_message_win_puts(const char *message, boolean recursed)
|
||||
++turn_lines;
|
||||
}
|
||||
}
|
||||
} else { /* don't need to move to next line */
|
||||
/* if we aren't at the start of the line, we're combining multiple
|
||||
messages on one line; use 2-space separation */
|
||||
if (mx > border_space) {
|
||||
waddstr(win, " ");
|
||||
mx += 2;
|
||||
}
|
||||
}
|
||||
|
||||
bold = (height > 1 && !last_messages);
|
||||
@@ -142,14 +152,6 @@ curses_message_win_puts(const char *message, boolean recursed)
|
||||
free(tmpstr);
|
||||
} else {
|
||||
mvwprintw(win, my, mx, "%s", message), mx += message_length;
|
||||
/* two spaces to separate this message from next one if they happen
|
||||
to fit on the same line; (FIXME: it would be better if this was
|
||||
done at start of next message rather than end of this one since
|
||||
it impacts placement of "More>>") */
|
||||
if (mx < width - 2) {
|
||||
if (++mx < width - 2)
|
||||
++mx;
|
||||
}
|
||||
if (bold)
|
||||
curses_toggle_color_attr(win, NONE, A_BOLD, OFF);
|
||||
}
|
||||
@@ -582,6 +584,9 @@ curses_message_win_getline(const char *prompt, char *answer, int buffer)
|
||||
#endif
|
||||
curs_set(0);
|
||||
switch (ch) {
|
||||
case ERR: /* should not happen */
|
||||
*answer = '\0';
|
||||
goto alldone;
|
||||
case '\033': /* DOESCAPE */
|
||||
/* if there isn't any input yet, return ESC */
|
||||
if (len == 0) {
|
||||
@@ -608,20 +613,25 @@ curses_message_win_getline(const char *prompt, char *answer, int buffer)
|
||||
*p_answer = '\0';
|
||||
len = 0;
|
||||
break;
|
||||
case ERR: /* should not happen */
|
||||
*answer = '\0';
|
||||
goto alldone;
|
||||
case '\r':
|
||||
case '\n':
|
||||
(void) strncpy(answer, p_answer, buffer);
|
||||
answer[buffer - 1] = '\0';
|
||||
Strcpy(g.toplines, tmpbuf);
|
||||
mesg_add_line(tmpbuf);
|
||||
#if 1
|
||||
/* position at end of current line so next message will be
|
||||
written on next line regardless of whether it could fit here */
|
||||
mx = border_space ? (width + 1) : (width - 1);
|
||||
wmove(win, my, mx);
|
||||
#else /* after various other changes, this resulted in getline()
|
||||
* prompt+answer being following by a blank message line */
|
||||
if (++my > maxy) {
|
||||
scroll_window(MESSAGE_WIN);
|
||||
my--;
|
||||
}
|
||||
mx = border_space;
|
||||
#endif /*0*/
|
||||
goto alldone;
|
||||
case '\177': /* DEL/Rubout */
|
||||
case KEY_DC: /* delete-character */
|
||||
@@ -705,10 +715,7 @@ directional_scroll(winid wid, int nlines)
|
||||
wscrl(win, nlines);
|
||||
scrollok(win, FALSE);
|
||||
if (wid == MESSAGE_WIN) {
|
||||
if (border)
|
||||
mx = 1;
|
||||
else
|
||||
mx = 0;
|
||||
mx = border ? 1 : 0;
|
||||
}
|
||||
if (border) {
|
||||
box(win, 0, 0);
|
||||
|
||||
Reference in New Issue
Block a user