fix #H4343 - obscure tty bug while swallowed
When --More-- was written to leftmost column of line 2 while the hero was swallowed, after player acknowledged it and the top line was cleared, the cursor ended up in the wrong place. I still don't understand what in the world is going on here, but adding 'flush_screen(0)' after 'swallowed(1)' in docorner() makes the problem go away. Why is the behavior different when --More-- is in the first column than when it's anywhere else? After that fix, I commented the whole thing out. The swallowed optimization is just not significant enough to justify peeking at core internals. Core bit: prior to those two changes, I tried inserting 'bot()' into swallowed(). It moved the mis-positioned cursor from the end of the second status line to on the map just right of the bottom right corner of the swallowed display. That didn't fix anything, but I've left it in place. bot() to update status is needed following cls(); now it happens before redrawing the map instead of at some point after.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 wintty.c $NHDT-Date: 1461619522 2016/04/25 21:25:22 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.130 $ */
|
||||
/* NetHack 3.6 wintty.c $NHDT-Date: 1463614572 2016/05/18 23:36:12 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.131 $ */
|
||||
/* Copyright (c) David Cohrs, 1991 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -3027,10 +3027,17 @@ register int xmin, ymax;
|
||||
register int y;
|
||||
register struct WinDesc *cw = wins[WIN_MAP];
|
||||
|
||||
#if 0 /* this optimization is not valuable enough to justify
|
||||
abusing core internals... */
|
||||
if (u.uswallow) { /* Can be done more efficiently */
|
||||
swallowed(1);
|
||||
/* without this flush, if we happen to follow --More-- displayed in
|
||||
leftmost column, the cursor gets left in the wrong place after
|
||||
<docorner<more<update_topl<tty_putstr calls unwind back to core */
|
||||
flush_screen(0);
|
||||
return;
|
||||
}
|
||||
#endif /*0*/
|
||||
|
||||
#if defined(SIGWINCH) && defined(CLIPPING)
|
||||
if (ymax > LI)
|
||||
|
||||
Reference in New Issue
Block a user