topten's so (standout) handling

This fixes the broken code that was using a boolean as an integer.
I didn't try to track down when it changed or what it looked like
before the change.  The intended effect is fairly straightforward;
just padding a bold line with spaces.  I've no idea why someone
deciced that that was useful though.

It also fixes something I broke six years ago:  tty_exit_nhwindows()
releases the termcap data needed for turning bold on and off, so
raw_print_bold() used by topten() stopped working on tty then.

Not fixed:  the code in really_done() for dealing with topten() vs
the 'toptenwin' option really ought to be redone.
This commit is contained in:
PatR
2022-01-31 18:20:34 -08:00
parent ae11c6e25d
commit 532cddbd35
3 changed files with 52 additions and 13 deletions

View File

@@ -65,6 +65,9 @@ static char tgotobuf[20];
#endif
#endif /* TERMLIB */
/* these don't need to be part of 'struct instance_globals g' */
static char tty_standout_on[16], tty_standout_off[16];
void
tty_startup(int *wid, int *hgt)
{
@@ -264,6 +267,8 @@ tty_startup(int *wid, int *hgt)
MR = Tgetstr("mr"); /* reverse */
MB = Tgetstr("mb"); /* blink */
MD = Tgetstr("md"); /* boldface */
if (!SO)
SO = MD;
MH = Tgetstr("mh"); /* dim */
ME = Tgetstr("me"); /* turn off all attributes */
if (!ME)
@@ -304,6 +309,13 @@ tty_startup(int *wid, int *hgt)
error("TERMCAP entry too big...\n");
free((genericptr_t) tptr);
#endif /* TERMLIB */
/* keep static copies of these so that raw_print_bold() will work
after exit_nhwindows(); if the sequences are too long, then bold
won't work after that--it will be rendered as ordinary text */
if (nh_HI && strlen(nh_HI) < sizeof tty_standout_on)
Strcpy(tty_standout_on, nh_HI);
if (nh_HE && strlen(nh_HE) < sizeof tty_standout_off)
Strcpy(tty_standout_off, nh_HE);
}
/* note: at present, this routine is not part of the formal window interface
@@ -1366,13 +1378,21 @@ term_end_attr(int attr)
void
term_start_raw_bold(void)
{
xputs(nh_HI);
if (!nh_HI)
nh_HI = tty_standout_on;
if (*nh_HI)
xputs(nh_HI);
}
void
term_end_raw_bold(void)
{
xputs(nh_HE);
if (!nh_HE)
nh_HE = tty_standout_off;
if (*nh_HE)
xputs(nh_HE);
}
#ifdef TEXTCOLOR