+ correct sgr in aaa+rv (report by Florian Weimer) -TD
+ fix some sgr inconsistencies in d230c, ibm6153, ibm6154,
ncrvt100an -TD
+ improve tic's check for errors detected in tparm (prompted by
discussion with Florian Weimer).
+ set output-mode to binary in experimental Windows-10 driver (Juergen
Pfeifer).
+ add tmux-direct (tmux #2370, Debian #895754)
15 files changed:
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
--- $Id: NEWS,v 1.3572 2020/10/03 22:12:49 tom Exp $
+-- $Id: NEWS,v 1.3575 2020/10/11 00:04:33 tom Exp $
-------------------------------------------------------------------------------
This is a log of changes that ncurses has gone through since Zeyd started
-------------------------------------------------------------------------------
This is a log of changes that ncurses has gone through since Zeyd started
Changes through 1.9.9e did not credit all contributions;
it is not possible to add this information.
Changes through 1.9.9e did not credit all contributions;
it is not possible to add this information.
+20201010
+ + correct sgr in aaa+rv (report by Florian Weimer) -TD
+ + fix some sgr inconsistencies in d230c, ibm6153, ibm6154,
+ ncrvt100an -TD
+ + improve tic's check for errors detected in tparm (prompted by
+ discussion with Florian Weimer).
+ + set output-mode to binary in experimental Windows-10 driver (Juergen
+ Pfeifer).
+
20201003
+ remove output-related checks for nl/nonl (report by Leon Winter).
+ change tmux's kbs to ^? (report by Premysl Eric Janouch)
+ simplify mlterm initialization with DECSTR -TD
+ fix a typo in man/curs_terminfo.3 (Reuben Thomas).
20201003
+ remove output-related checks for nl/nonl (report by Leon Winter).
+ change tmux's kbs to ^? (report by Premysl Eric Janouch)
+ simplify mlterm initialization with DECSTR -TD
+ fix a typo in man/curs_terminfo.3 (Reuben Thomas).
- + add tmux-direct (tmux #2370)
+ + add tmux-direct (tmux #2370, Debian #895754)
+ add user-defined capabilities from mintty to Caps-ncurses, for
checking consistency with tic.
+ add user-defined capabilities from mintty to Caps-ncurses, for
checking consistency with tic.
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
-# $Id: dist.mk,v 1.1379 2020/10/03 12:29:29 tom Exp $
+# $Id: dist.mk,v 1.1380 2020/10/10 08:40:40 tom Exp $
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
# These define the major/minor/patch versions of ncurses.
NCURSES_MAJOR = 6
NCURSES_MINOR = 2
# These define the major/minor/patch versions of ncurses.
NCURSES_MAJOR = 6
NCURSES_MINOR = 2
-NCURSES_PATCH = 20201003
+NCURSES_PATCH = 20201010
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
# Report bugs and new terminal descriptions to
# bug-ncurses@gnu.org
#
# Report bugs and new terminal descriptions to
# bug-ncurses@gnu.org
#
-# $Revision: 1.821 $
-# $Date: 2020/09/30 00:00:44 $
+# $Revision: 1.825 $
+# $Date: 2020/10/11 00:01:33 $
#
# The original header is preserved below for reference. It is noted that there
# is a "newer" version which differs in some cosmetic details (but actually
#
# The original header is preserved below for reference. It is noted that there
# is a "newer" version which differs in some cosmetic details (but actually
blink=\E[5;7m, bold=\E[1;7m, invis=\E[7;8m,
is1=\E[7m\E7\E[H\E9\E8, rev=\E[m, rmso=\E[7m, rmul=\E[7m,
rs1=\E[H\E[7m\E[J$<156>,
blink=\E[5;7m, bold=\E[1;7m, invis=\E[7;8m,
is1=\E[7m\E7\E[H\E9\E8, rev=\E[m, rmso=\E[7m, rmul=\E[7m,
rs1=\E[H\E[7m\E[J$<156>,
- sgr=\E[%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p1%p2%|%p3%!%t7;
- %;%?%p7%t8;%;m\016,
+ sgr=\E[%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p1%p2%|%p3%!%|%t7
+ ;%;%?%p7%t8;%;m\016,
sgr0=\E[7m\016, smso=\E[m, smul=\E[4;7m,
# Ambassador with the DEC option, for partial vt100 compatibility.
aaa+dec|ann arbor ambassador in dec vt100 mode,
sgr0=\E[7m\016, smso=\E[m, smul=\E[4;7m,
# Ambassador with the DEC option, for partial vt100 compatibility.
aaa+dec|ann arbor ambassador in dec vt100 mode,
d230c|d230|Data General DASHER D230C,
blink=\E[5;50m, bold=\E[4;7;50m, dim=\E[2;50m, nel=\r\n,
rev=\E[7;50m, rmkx=\E[2;1v, rmso=\E[50m, rmul=\E[50m,
d230c|d230|Data General DASHER D230C,
blink=\E[5;50m, bold=\E[4;7;50m, dim=\E[2;50m, nel=\r\n,
rev=\E[7;50m, rmkx=\E[2;1v, rmso=\E[50m, rmul=\E[50m,
- sgr=\E[50%?%p1%p3%|%p6%|%t;7%{1}%e%{0}%;%PR%?%p4%t;5%{1}%e
- %{0}%;%PB%?%p2%p6%|%t;4%{1}%e%{0}%;%PU%?%p1%p5%|%t;2%{1}
- %e%{0}%;%PDm\E)%?%p9%t6\016%e4\017%;,
+ sgr=\E[%?%p1%p3%|%p6%|%t7;%{1}%e%{0}%;%PR%?%p4%t5;%{1}%e%{0}
+ %;%PB%?%p2%p6%|%t4;%{1}%e%{0}%;%PU%?%p1%p5%|%t2;%{1}%e
+ %{0}%;%PD50m\E)%?%p9%t6\016%e4\017%;,
sgr0=\E[50m\E)4\017, smkx=\E[2;0v, smso=\E[2;7;50m,
smul=\E[4;50m, use=dgkeys+7b, use=d220,
sgr0=\E[50m\E)4\017, smkx=\E[2;0v, smso=\E[2;7;50m,
smul=\E[4;50m, use=dgkeys+7b, use=d220,
use=ibmega-c,
ibm6154|IBM 6154 Color displays,
blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
use=ibmega-c,
ibm6154|IBM 6154 Color displays,
blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
- sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p7%t;8%;%?%p6%t;1
2%;m,
sgr0=\E[0;10m, use=ibm5154,
ibm6153|IBM 6153 Black & White display,
blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
2%;m,
sgr0=\E[0;10m, use=ibm5154,
ibm6153|IBM 6153 Black & White display,
blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
- sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p7%t;8%;%?%p6%t;1
2%;m,
sgr0=\E[0;10m, use=ibm5151,
ibm6153-90|IBM 6153 Black & White display,
2%;m,
sgr0=\E[0;10m, use=ibm5151,
ibm6153-90|IBM 6153 Black & White display,
B\E)0\E%/0n\E[P\031$<200>,
sc=\E7,
sgr=%?%p9%t\016%e\017%;\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1
B\E)0\E%/0n\E[P\031$<200>,
sc=\E7,
sgr=%?%p9%t\016%e\017%;\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1
- %p3%|%t;7%;%?%p4%t;5%;m$<100>,
+ %p3%|%t;7%;%?%p4%t;5%;m$<120>,
sgr0=\017\E[0m$<120>, smacs=\016$<90>, smir=\E[4h$<80>,
smso=\E[7m$<30>, smul=\E[4m$<30>, tbc=\E[3g$<40>,
tsl=\E[>+1$<70>,
sgr0=\017\E[0m$<120>, smacs=\016$<90>, smir=\E[4h$<80>,
smso=\E[7m$<30>, smul=\E[4m$<30>, tbc=\E[3g$<40>,
tsl=\E[>+1$<70>,
# + simplify mlterm initialization with DECSTR -TD
# + change tmux's kbs to ^? (report by Premysl Eric Janouch)
#
# + simplify mlterm initialization with DECSTR -TD
# + change tmux's kbs to ^? (report by Premysl Eric Janouch)
#
+# 2020-10-10
+# + correct sgr in aaa+rv (report by Florian Weimer) -TD
+# + fix some sgr inconsistencies in d230c, ibm6153, ibm6154,
+# ncrvt100an -TD
+#
######## SHANTIH! SHANTIH! SHANTIH!
######## SHANTIH! SHANTIH! SHANTIH!
#undef CUR
#define CUR SP_TERMTYPE
#undef CUR
#define CUR SP_TERMTYPE
-MODULE_ID("$Id: lib_set_term.c,v 1.174 2020/09/09 19:43:00 juergen Exp $")
+MODULE_ID("$Id: lib_set_term.c,v 1.175 2020/10/10 19:09:03 juergen Exp $")
#ifdef USE_TERM_DRIVER
#define MaxColors InfoOf(sp).maxcolors
#ifdef USE_TERM_DRIVER
#define MaxColors InfoOf(sp).maxcolors
T(("setting output mode to binary"));
fflush(output);
setmode(output, O_BINARY);
T(("setting output mode to binary"));
fflush(output);
setmode(output, O_BINARY);
+#endif
+#if defined(EXP_WIN32_DRIVER)
+ T(("setting output mode to binary"));
+ fflush(output);
+ _setmode(fileno(output), _O_BINARY);
#endif
NCURSES_SP_NAME(_nc_set_buffer) (NCURSES_SP_ARGx output, TRUE);
sp->_lines = (NCURSES_SIZE_T) slines;
#endif
NCURSES_SP_NAME(_nc_set_buffer) (NCURSES_SP_ARGx output, TRUE);
sp->_lines = (NCURSES_SIZE_T) slines;
#include <ctype.h>
#include <tic.h>
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: lib_tparm.c,v 1.127 2020/06/13 21:59:52 tom Exp $")
+MODULE_ID("$Id: lib_tparm.c,v 1.128 2020/10/10 21:18:09 tom Exp $")
get_space((size_t) 1);
TPS(out_buff)[TPS(out_used)] = '\0';
get_space((size_t) 1);
TPS(out_buff)[TPS(out_used)] = '\0';
+ if (TPS(stack_ptr) && !_nc_tparm_err) {
+ DEBUG(2, ("tparm: stack has %d item%s on return",
+ TPS(stack_ptr),
+ TPS(stack_ptr) == 1 ? "" : "s"));
+ _nc_tparm_err++;
+ }
+
T((T_RETURN("%s"), _nc_visbuf(TPS(out_buff))));
return (TPS(out_buff));
}
T((T_RETURN("%s"), _nc_visbuf(TPS(out_buff))));
return (TPS(out_buff));
}
-MODULE_ID("$Id: lib_win32con.c,v 1.2 2020/08/29 16:22:03 juergen Exp $")
+MODULE_ID("$Id: lib_win32con.c,v 1.3 2020/10/10 19:07:10 tom Exp $")
static int AnsiKey(WORD vKey);
static ULONGLONG tdiff(FILETIME fstart, FILETIME fend);
static int AnsiKey(WORD vKey);
static ULONGLONG tdiff(FILETIME fstart, FILETIME fend);
#define GenMap(vKey,key) MAKELONG(key, vKey)
static const LONG keylist[] =
{
#define GenMap(vKey,key) MAKELONG(key, vKey)
static const LONG keylist[] =
{
_nc_console_vt_supported(void) {
OSVERSIONINFO osvi;
int res = 0;
_nc_console_vt_supported(void) {
OSVERSIONINFO osvi;
int res = 0;
T((T_CALLED("lib_win32con::_nc_console_vt_supported")));
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
T((T_CALLED("lib_win32con::_nc_console_vt_supported")));
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
T((T_CALLED("lib_win32con::IsConsoleHandle(HANDLE=%p"),hdl));
EnsureInit();
T((T_CALLED("lib_win32con::IsConsoleHandle(HANDLE=%p"),hdl));
EnsureInit();
if (!GetConsoleMode(hdl, &dwFlag)) {
T(("GetConsoleMode failed"));
} else {
result = TRUE;
}
if (!GetConsoleMode(hdl, &dwFlag)) {
T(("GetConsoleMode failed"));
} else {
result = TRUE;
}
- _nc_console_setmode(HANDLE hdl, const TTY *arg)
+_nc_console_setmode(HANDLE hdl, const TTY *arg)
{
DWORD dwFlag = 0;
int code = ERR;
HANDLE alt;
{
DWORD dwFlag = 0;
int code = ERR;
HANDLE alt;
if (arg) {
#ifdef TRACE
TTY TRCTTY;
if (arg) {
#ifdef TRACE
TTY TRCTTY;
#define TRCTTYIN(flag) TRCTTY.dwFlagIn=flag
#else
#define TRCTTYOUT(flag)
#define TRCTTYIN(flag) TRCTTY.dwFlagIn=flag
#else
#define TRCTTYOUT(flag)
#endif
T(("lib_win32con:_nc_console_setmode %s", _nc_trace_ttymode(arg)));
if (hdl==WINCONSOLE.inp) {
#endif
T(("lib_win32con:_nc_console_setmode %s", _nc_trace_ttymode(arg)));
if (hdl==WINCONSOLE.inp) {
dwFlag &= ~(VT_FLAG_IN);
TRCTTYIN(dwFlag);
SetConsoleMode(hdl, dwFlag);
dwFlag &= ~(VT_FLAG_IN);
TRCTTYIN(dwFlag);
SetConsoleMode(hdl, dwFlag);
alt = OutHandle();
dwFlag = arg->dwFlagOut;
if (WINCONSOLE.isTermInfoConsole)
alt = OutHandle();
dwFlag = arg->dwFlagOut;
if (WINCONSOLE.isTermInfoConsole)
dwFlag |= (VT_FLAG_OUT);
TRCTTYOUT(dwFlag);
SetConsoleMode(hdl, dwFlag);
dwFlag |= (VT_FLAG_OUT);
TRCTTYOUT(dwFlag);
SetConsoleMode(hdl, dwFlag);
alt=WINCONSOLE.inp;
dwFlag = arg->dwFlagIn | ENABLE_MOUSE_INPUT;
if (WINCONSOLE.isTermInfoConsole)
alt=WINCONSOLE.inp;
dwFlag = arg->dwFlagIn | ENABLE_MOUSE_INPUT;
if (WINCONSOLE.isTermInfoConsole)
if (arg) {
DWORD dwFlag = 0;
HANDLE alt;
if (arg) {
DWORD dwFlag = 0;
HANDLE alt;
if (hdl==WINCONSOLE.inp) {
if(GetConsoleMode(hdl,&dwFlag)) {
arg->dwFlagIn = dwFlag;
if (hdl==WINCONSOLE.inp) {
if(GetConsoleMode(hdl,&dwFlag)) {
arg->dwFlagIn = dwFlag;
- _nc_console_flush(HANDLE hdl)
+_nc_console_flush(HANDLE hdl)
T((T_CALLED("lib_win32con::_nc_console_flush(hdl=%p"),hdl));
T((T_CALLED("lib_win32con::_nc_console_flush(hdl=%p"),hdl));
if (hdl != INVALID_HANDLE_VALUE) {
if (hdl == WINCONSOLE.hdl ||
hdl == WINCONSOLE.inp ||
if (hdl != INVALID_HANDLE_VALUE) {
if (hdl == WINCONSOLE.hdl ||
hdl == WINCONSOLE.inp ||
NCURSES_EXPORT(WORD)
_nc_console_MapColor(bool fore, int color)
{
NCURSES_EXPORT(WORD)
_nc_console_MapColor(bool fore, int color)
{
save_original_screen(void)
{
bool result = FALSE;
save_original_screen(void)
{
bool result = FALSE;
WINCONSOLE.save_region.Top = 0;
WINCONSOLE.save_region.Left = 0;
WINCONSOLE.save_region.Bottom = (SHORT) (WINCONSOLE.SBI.dwSize.Y - 1);
WINCONSOLE.save_region.Right = (SHORT) (WINCONSOLE.SBI.dwSize.X - 1);
WINCONSOLE.save_region.Top = 0;
WINCONSOLE.save_region.Left = 0;
WINCONSOLE.save_region.Bottom = (SHORT) (WINCONSOLE.SBI.dwSize.Y - 1);
WINCONSOLE.save_region.Right = (SHORT) (WINCONSOLE.SBI.dwSize.X - 1);
if (read_screen_data()) {
result = TRUE;
} else {
if (read_screen_data()) {
result = TRUE;
} else {
WINCONSOLE.save_region.Top = WINCONSOLE.SBI.srWindow.Top;
WINCONSOLE.save_region.Left = WINCONSOLE.SBI.srWindow.Left;
WINCONSOLE.save_region.Bottom = WINCONSOLE.SBI.srWindow.Bottom;
WINCONSOLE.save_region.Right = WINCONSOLE.SBI.srWindow.Right;
WINCONSOLE.save_region.Top = WINCONSOLE.SBI.srWindow.Top;
WINCONSOLE.save_region.Left = WINCONSOLE.SBI.srWindow.Left;
WINCONSOLE.save_region.Bottom = WINCONSOLE.SBI.srWindow.Bottom;
WINCONSOLE.save_region.Right = WINCONSOLE.SBI.srWindow.Right;
WINCONSOLE.window_only = TRUE;
WINCONSOLE.window_only = TRUE;
if (read_screen_data()) {
result = TRUE;
}
}
if (read_screen_data()) {
result = TRUE;
}
}
T(("... save original screen contents %s", result ? "ok" : "err"));
return result;
}
T(("... save original screen contents %s", result ? "ok" : "err"));
return result;
}
COORD bufferCoord;
bool result = FALSE;
SMALL_RECT save_region = WINCONSOLE.save_region;
COORD bufferCoord;
bool result = FALSE;
SMALL_RECT save_region = WINCONSOLE.save_region;
T(("... restoring %s",
WINCONSOLE.window_only ? "window" : "entire buffer"));
T(("... restoring %s",
WINCONSOLE.window_only ? "window" : "entire buffer"));
if (write_screen(WINCONSOLE.hdl,
WINCONSOLE.save_screen,
if (write_screen(WINCONSOLE.hdl,
WINCONSOLE.save_screen,
bufferCoord,
&save_region)) {
result = TRUE;
bufferCoord,
&save_region)) {
result = TRUE;
bool result = FALSE;
COORD bufferCoord;
size_t want;
bool result = FALSE;
COORD bufferCoord;
size_t want;
WINCONSOLE.save_size.X = (SHORT) (WINCONSOLE.save_region.Right
- WINCONSOLE.save_region.Left + 1);
WINCONSOLE.save_size.Y = (SHORT) (WINCONSOLE.save_region.Bottom
- WINCONSOLE.save_region.Top + 1);
WINCONSOLE.save_size.X = (SHORT) (WINCONSOLE.save_region.Right
- WINCONSOLE.save_region.Left + 1);
WINCONSOLE.save_size.Y = (SHORT) (WINCONSOLE.save_region.Bottom
- WINCONSOLE.save_region.Top + 1);
want = (size_t) (WINCONSOLE.save_size.X * WINCONSOLE.save_size.Y);
want = (size_t) (WINCONSOLE.save_size.X * WINCONSOLE.save_size.Y);
if ((WINCONSOLE.save_screen = malloc(want * sizeof(CHAR_INFO))) != 0) {
bufferCoord.X = (SHORT) (WINCONSOLE.window_only ?
WINCONSOLE.SBI.srWindow.Left : 0);
bufferCoord.Y = (SHORT) (WINCONSOLE.window_only ?
WINCONSOLE.SBI.srWindow.Top : 0);
if ((WINCONSOLE.save_screen = malloc(want * sizeof(CHAR_INFO))) != 0) {
bufferCoord.X = (SHORT) (WINCONSOLE.window_only ?
WINCONSOLE.SBI.srWindow.Left : 0);
bufferCoord.Y = (SHORT) (WINCONSOLE.window_only ?
WINCONSOLE.SBI.srWindow.Top : 0);
T(("... reading console %s %dx%d into %d,%d - %d,%d at %d,%d",
WINCONSOLE.window_only ? "window" : "buffer",
WINCONSOLE.save_size.Y, WINCONSOLE.save_size.X,
T(("... reading console %s %dx%d into %d,%d - %d,%d at %d,%d",
WINCONSOLE.window_only ? "window" : "buffer",
WINCONSOLE.save_size.Y, WINCONSOLE.save_size.X,
WINCONSOLE.save_region.Right,
bufferCoord.Y,
bufferCoord.X));
WINCONSOLE.save_region.Right,
bufferCoord.Y,
bufferCoord.X));
if (read_screen(WINCONSOLE.hdl,
WINCONSOLE.save_screen,
WINCONSOLE.save_size,
if (read_screen(WINCONSOLE.hdl,
WINCONSOLE.save_screen,
WINCONSOLE.save_size,
FreeAndNull(WINCONSOLE.save_screen);
}
}
FreeAndNull(WINCONSOLE.save_screen);
}
}
SMALL_RECT rect;
COORD coord;
bool changed = FALSE;
SMALL_RECT rect;
COORD coord;
bool changed = FALSE;
T((T_CALLED("lib_win32con::_nc_console_set_scrollback(%s)"),
(normal
? "normal"
: "application")));
T((T_CALLED("lib_win32con::_nc_console_set_scrollback(%s)"),
(normal
? "normal"
: "application")));
T(("... SBI.srWindow %d,%d .. %d,%d",
info->srWindow.Top,
info->srWindow.Left,
T(("... SBI.srWindow %d,%d .. %d,%d",
info->srWindow.Top,
info->srWindow.Left,
T(("... SBI.dwSize %dx%d",
info->dwSize.Y,
info->dwSize.X));
T(("... SBI.dwSize %dx%d",
info->dwSize.Y,
info->dwSize.X));
if (normal) {
rect = info->srWindow;
coord = info->dwSize;
if (normal) {
rect = info->srWindow;
coord = info->dwSize;
} else {
int high = info->srWindow.Bottom - info->srWindow.Top + 1;
int wide = info->srWindow.Right - info->srWindow.Left + 1;
} else {
int high = info->srWindow.Bottom - info->srWindow.Top + 1;
int wide = info->srWindow.Right - info->srWindow.Left + 1;
if (high < MIN_HIGH) {
T(("... height %d < %d", high, MIN_HIGH));
high = MIN_HIGH;
if (high < MIN_HIGH) {
T(("... height %d < %d", high, MIN_HIGH));
high = MIN_HIGH;
wide = MIN_WIDE;
changed = TRUE;
}
wide = MIN_WIDE;
changed = TRUE;
}
rect.Left =
rect.Top = 0;
rect.Right = (SHORT) (wide - 1);
rect.Bottom = (SHORT) (high - 1);
rect.Left =
rect.Top = 0;
rect.Right = (SHORT) (wide - 1);
rect.Bottom = (SHORT) (high - 1);
coord.X = (SHORT) wide;
coord.Y = (SHORT) high;
coord.X = (SHORT) wide;
coord.Y = (SHORT) high;
if (info->dwSize.Y != high ||
info->dwSize.X != wide ||
info->srWindow.Top != 0 ||
info->srWindow.Left != 0) {
changed = TRUE;
}
if (info->dwSize.Y != high ||
info->dwSize.X != wide ||
info->srWindow.Top != 0 ||
info->srWindow.Left != 0) {
changed = TRUE;
}
if (changed) {
T(("... coord %d,%d", coord.Y, coord.X));
T(("... rect %d,%d - %d,%d",
rect.Top, rect.Left,
rect.Bottom, rect.Right));
if (changed) {
T(("... coord %d,%d", coord.Y, coord.X));
T(("... rect %d,%d - %d,%d",
rect.Top, rect.Left,
rect.Bottom, rect.Right));
- SetConsoleScreenBufferSize(WINCONSOLE.hdl, coord); /* dwSize */
- SetConsoleWindowInfo(WINCONSOLE.hdl, TRUE, &rect); /* srWindow */
+ SetConsoleScreenBufferSize(WINCONSOLE.hdl, coord); /* dwSize */
+ SetConsoleWindowInfo(WINCONSOLE.hdl, TRUE, &rect); /* srWindow */
_nc_console_get_SBI();
}
returnVoid;
_nc_console_get_SBI();
}
returnVoid;
ustart.HighPart = fstart.dwHighDateTime;
uend.LowPart = fend.dwLowDateTime;
uend.HighPart = fend.dwHighDateTime;
ustart.HighPart = fstart.dwHighDateTime;
uend.LowPart = fend.dwLowDateTime;
uend.HighPart = fend.dwHighDateTime;
diff = (uend.QuadPart - ustart.QuadPart) / 10000;
return diff;
}
diff = (uend.QuadPart - ustart.QuadPart) / 10000;
return diff;
}
decode_mouse(SCREEN *sp, int mask)
{
int result = 0;
decode_mouse(SCREEN *sp, int mask)
{
int result = 0;
(void) sp;
assert(sp && console_initialized);
(void) sp;
assert(sp && console_initialized);
if (mask & FROM_LEFT_1ST_BUTTON_PRESSED)
result |= BUTTON1_PRESSED;
if (mask & FROM_LEFT_2ND_BUTTON_PRESSED)
if (mask & FROM_LEFT_1ST_BUTTON_PRESSED)
result |= BUTTON1_PRESSED;
if (mask & FROM_LEFT_2ND_BUTTON_PRESSED)
result |= BUTTON3_PRESSED;
if (mask & FROM_LEFT_4TH_BUTTON_PRESSED)
result |= BUTTON4_PRESSED;
result |= BUTTON3_PRESSED;
if (mask & FROM_LEFT_4TH_BUTTON_PRESSED)
result |= BUTTON4_PRESSED;
if (mask & RIGHTMOST_BUTTON_PRESSED) {
switch (WINCONSOLE.numButtons) {
case 1:
if (mask & RIGHTMOST_BUTTON_PRESSED) {
switch (WINCONSOLE.numButtons) {
case 1:
result |= BUTTON3_PRESSED;
break;
case 4:
result |= BUTTON3_PRESSED;
break;
case 4:
- result |= BUTTON4_PRESSED;
+ result |= BUTTON4_PRESSED;
{
MEVENT work;
bool result = FALSE;
{
MEVENT work;
bool result = FALSE;
sp->_drv_mouse_old_buttons = sp->_drv_mouse_new_buttons;
sp->_drv_mouse_new_buttons = mer.dwButtonState & BUTTON_MASK;
sp->_drv_mouse_old_buttons = sp->_drv_mouse_new_buttons;
sp->_drv_mouse_new_buttons = mer.dwButtonState & BUTTON_MASK;
/*
* We're only interested if the button is pressed or released.
* FIXME: implement continuous event-tracking.
*/
if (sp->_drv_mouse_new_buttons != sp->_drv_mouse_old_buttons) {
memset(&work, 0, sizeof(work));
/*
* We're only interested if the button is pressed or released.
* FIXME: implement continuous event-tracking.
*/
if (sp->_drv_mouse_new_buttons != sp->_drv_mouse_old_buttons) {
memset(&work, 0, sizeof(work));
if (sp->_drv_mouse_new_buttons) {
work.bstate |=
(mmask_t) decode_mouse(sp,
if (sp->_drv_mouse_new_buttons) {
work.bstate |=
(mmask_t) decode_mouse(sp,
work.x = mer.dwMousePosition.X;
work.y = mer.dwMousePosition.Y - AdjustY();
work.x = mer.dwMousePosition.X;
work.y = mer.dwMousePosition.Y - AdjustY();
sp->_drv_mouse_fifo[sp->_drv_mouse_tail] = work;
sp->_drv_mouse_tail += 1;
}
sp->_drv_mouse_fifo[sp->_drv_mouse_tail] = work;
sp->_drv_mouse_tail += 1;
}
{
WORD key1 = (LOWORD((*((const LONG *) el1)))) & 0x7fff;
WORD key2 = (LOWORD((*((const LONG *) el2)))) & 0x7fff;
{
WORD key1 = (LOWORD((*((const LONG *) el1)))) & 0x7fff;
WORD key2 = (LOWORD((*((const LONG *) el2)))) & 0x7fff;
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
{
WORD key1 = HIWORD((*((const LONG *) el1)));
WORD key2 = HIWORD((*((const LONG *) el2)));
{
WORD key1 = HIWORD((*((const LONG *) el1)));
WORD key2 = HIWORD((*((const LONG *) el2)));
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
MapKey(WORD vKey)
{
int code = -1;
MapKey(WORD vKey)
{
int code = -1;
if (!WINCONSOLE.isTermInfoConsole) {
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
if (!WINCONSOLE.isTermInfoConsole) {
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
res = bsearch(&key,
WINCONSOLE.map,
(size_t) (N_INI + FKEYS),
res = bsearch(&key,
WINCONSOLE.map,
(size_t) (N_INI + FKEYS),
AnsiKey(WORD vKey)
{
int code = -1;
AnsiKey(WORD vKey)
{
int code = -1;
if (!WINCONSOLE.isTermInfoConsole) {
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
if (!WINCONSOLE.isTermInfoConsole) {
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
res = bsearch(&key,
WINCONSOLE.ansi_map,
(size_t) (N_INI + FKEYS),
res = bsearch(&key,
WINCONSOLE.ansi_map,
(size_t) (N_INI + FKEYS),
WORD vKey;
void *res;
LONG key = GenMap(0, (WORD) keycode);
WORD vKey;
void *res;
LONG key = GenMap(0, (WORD) keycode);
T((T_CALLED("lib_win32con::_nc_console_keyok(%d, %d)"), keycode, flag));
T((T_CALLED("lib_win32con::_nc_console_keyok(%d, %d)"), keycode, flag));
res = bsearch(&key,
WINCONSOLE.rmap,
(size_t) (N_INI + FKEYS),
res = bsearch(&key,
WINCONSOLE.rmap,
(size_t) (N_INI + FKEYS),
void *res;
bool found = FALSE;
LONG key = GenMap(0, (WORD) keycode);
void *res;
bool found = FALSE;
LONG key = GenMap(0, (WORD) keycode);
T((T_CALLED("lib_win32con::_nc_console_keyExist(%d)"), keycode));
res = bsearch(&key,
WINCONSOLE.rmap,
T((T_CALLED("lib_win32con::_nc_console_keyExist(%d)"), keycode));
res = bsearch(&key,
WINCONSOLE.rmap,
FILETIME fend;
int diff;
bool isNoDelay = (milliseconds == 0);
FILETIME fend;
int diff;
bool isNoDelay = (milliseconds == 0);
#ifdef NCURSES_WGETCH_EVENTS
#ifdef NCURSES_WGETCH_EVENTS
- (void) evl; /* TODO: implement wgetch-events */
+ (void) evl; /* TODO: implement wgetch-events */
#define IGNORE_CTRL_KEYS (SHIFT_PRESSED|LEFT_ALT_PRESSED|RIGHT_ALT_PRESSED| \
LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED)
#define CONSUME() ReadConsoleInput(hdl,&inp_rec,1,&nRead)
#define IGNORE_CTRL_KEYS (SHIFT_PRESSED|LEFT_ALT_PRESSED|RIGHT_ALT_PRESSED| \
LEFT_CTRL_PRESSED|RIGHT_CTRL_PRESSED)
#define CONSUME() ReadConsoleInput(hdl,&inp_rec,1,&nRead)
TR(TRACE_IEVENT, ("start twait: hdl=%p, %d milliseconds, mode: %d",
hdl, milliseconds, mode));
TR(TRACE_IEVENT, ("start twait: hdl=%p, %d milliseconds, mode: %d",
hdl, milliseconds, mode));
if (milliseconds < 0)
milliseconds = INFINITY;
if (milliseconds < 0)
milliseconds = INFINITY;
memset(&inp_rec, 0, sizeof(inp_rec));
memset(&inp_rec, 0, sizeof(inp_rec));
while (true) {
if (!isNoDelay) {
GetSystemTimeAsFileTime(&fstart);
while (true) {
if (!isNoDelay) {
GetSystemTimeAsFileTime(&fstart);
if (milliseconds< 0)
break;
}
if (milliseconds< 0)
break;
}
if (isNoDelay || (rc == WAIT_OBJECT_0)) {
if (mode) {
nRead = 0;
b = GetNumberOfConsoleInputEvents(hdl, &nRead);
if (!b) {
T(("twait:err GetNumberOfConsoleInputEvents"));
if (isNoDelay || (rc == WAIT_OBJECT_0)) {
if (mode) {
nRead = 0;
b = GetNumberOfConsoleInputEvents(hdl, &nRead);
if (!b) {
T(("twait:err GetNumberOfConsoleInputEvents"));
if (isNoDelay && b) {
T(("twait: Events Available: %d",nRead));
if (nRead==0) {
if (isNoDelay && b) {
T(("twait: Events Available: %d",nRead));
if (nRead==0) {
if (inp_rec.Event.KeyEvent.bKeyDown) {
T(("twait:event KeyDown"));
if (!WINCONSOLE.isTermInfoConsole &&
if (inp_rec.Event.KeyEvent.bKeyDown) {
T(("twait:event KeyDown"));
if (!WINCONSOLE.isTermInfoConsole &&
int nKey = MapKey(vk);
if (nKey < 0) {
CONSUME();
int nKey = MapKey(vk);
if (nKey < 0) {
CONSUME();
TR(TRACE_IEVENT, ("end twait: returned %d (%d), remaining time %d msec",
code, GetLastError(), milliseconds));
TR(TRACE_IEVENT, ("end twait: returned %d (%d), remaining time %d msec",
code, GetLastError(), milliseconds));
if (timeleft)
*timeleft = milliseconds;
if (timeleft)
*timeleft = milliseconds;
return code;
}
NCURSES_EXPORT(int)
_nc_console_testmouse(
return code;
}
NCURSES_EXPORT(int)
_nc_console_testmouse(
- SCREEN *sp,
- HANDLE hdl,
- int delay
- EVENTLIST_2nd(_nc_eventlist * evl))
+ SCREEN *sp,
+ HANDLE hdl,
+ int delay
+ EVENTLIST_2nd(_nc_eventlist * evl))
if (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
rc = TW_MOUSE;
} else {
if (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
rc = TW_MOUSE;
} else {
NCURSES_EXPORT(int)
_nc_console_read(
NCURSES_EXPORT(int)
_nc_console_read(
- SCREEN *sp,
- HANDLE hdl,
- int *buf)
+ SCREEN *sp,
+ HANDLE hdl,
+ int *buf)
{
int rc = -1;
INPUT_RECORD inp_rec;
BOOL b;
DWORD nRead;
WORD vk;
{
int rc = -1;
INPUT_RECORD inp_rec;
BOOL b;
DWORD nRead;
WORD vk;
memset(&inp_rec, 0, sizeof(inp_rec));
memset(&inp_rec, 0, sizeof(inp_rec));
T((T_CALLED("lib_win32con::_nc_console_read(%p)"), sp));
T((T_CALLED("lib_win32con::_nc_console_read(%p)"), sp));
while ((b = ReadConsoleInput(hdl, &inp_rec, 1, &nRead))) {
if (b && nRead > 0) {
if (rc < 0)
while ((b = ReadConsoleInput(hdl, &inp_rec, 1, &nRead))) {
if (b && nRead > 0) {
if (rc < 0)
/* Our replacement for the systems _isatty to include also
a test for mintty. This is called from the NC_ISATTY macro
defined in curses.priv.h
/* Our replacement for the systems _isatty to include also
a test for mintty. This is called from the NC_ISATTY macro
defined in curses.priv.h
- 0 : Not a TTY
- 1 : A Windows character device detected by _isatty
- 2 : A future implementation may return 2 for mintty
- 0 : Not a TTY
- 1 : A Windows character device detected by _isatty
- 2 : A future implementation may return 2 for mintty
{
int result = 0;
T((T_CALLED("lib_win32con::_nc_console_isatty(%d"),fd));
{
int result = 0;
T((T_CALLED("lib_win32con::_nc_console_isatty(%d"),fd));
if (_isatty(fd))
result = 1;
#ifdef _NC_CHECK_MINTTY
if (_isatty(fd))
result = 1;
#ifdef _NC_CHECK_MINTTY
_nc_console_checkinit(bool initFlag, bool assumeTermInfo)
{
bool res = FALSE;
_nc_console_checkinit(bool initFlag, bool assumeTermInfo)
{
bool res = FALSE;
T((T_CALLED("lib_win32con::_nc_console_checkinit(initFlag=%d, assumeTermInfo=%d)"),
initFlag,assumeTermInfo));
T((T_CALLED("lib_win32con::_nc_console_checkinit(initFlag=%d, assumeTermInfo=%d)"),
initFlag,assumeTermInfo));
WORD a;
BOOL buffered = FALSE;
BOOL b;
WORD a;
BOOL buffered = FALSE;
BOOL b;
START_TRACE();
WINCONSOLE.isTermInfoConsole = assumeTermInfo;
START_TRACE();
WINCONSOLE.isTermInfoConsole = assumeTermInfo;
WINCONSOLE.map = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
WINCONSOLE.rmap = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
WINCONSOLE.ansi_map = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
WINCONSOLE.map = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
WINCONSOLE.rmap = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
WINCONSOLE.ansi_map = (LPDWORD)malloc(sizeof(DWORD)*MAPSIZE);
for (i = 0; i < (N_INI + FKEYS); i++) {
if (i < N_INI) {
WINCONSOLE.rmap[i] = WINCONSOLE.map[i] =
for (i = 0; i < (N_INI + FKEYS); i++) {
if (i < N_INI) {
WINCONSOLE.rmap[i] = WINCONSOLE.map[i] =
(size_t) (MAPSIZE),
sizeof(keylist[0]),
rkeycompare);
(size_t) (MAPSIZE),
sizeof(keylist[0]),
rkeycompare);
if (GetNumberOfConsoleMouseButtons(&num_buttons)) {
WINCONSOLE.numButtons = (int) num_buttons;
} else {
WINCONSOLE.numButtons = 1;
}
if (GetNumberOfConsoleMouseButtons(&num_buttons)) {
WINCONSOLE.numButtons = (int) num_buttons;
} else {
WINCONSOLE.numButtons = 1;
}
a = _nc_console_MapColor(true, COLOR_WHITE) |
_nc_console_MapColor(false, COLOR_BLACK);
for (i = 0; i < CON_NUMPAIRS; i++)
WINCONSOLE.pairs[i] = a;
a = _nc_console_MapColor(true, COLOR_WHITE) |
_nc_console_MapColor(false, COLOR_BLACK);
for (i = 0; i < CON_NUMPAIRS; i++)
WINCONSOLE.pairs[i] = a;
WINCONSOLE.inp = GetStdHandle(STD_INPUT_HANDLE);
WINCONSOLE.out = GetStdHandle(STD_OUTPUT_HANDLE);
WINCONSOLE.hdl = WINCONSOLE.out;
WINCONSOLE.inp = GetStdHandle(STD_INPUT_HANDLE);
WINCONSOLE.out = GetStdHandle(STD_OUTPUT_HANDLE);
WINCONSOLE.hdl = WINCONSOLE.out;
GetConsoleMode(WINCONSOLE.inp,&WINCONSOLE.originalMode.dwFlagIn);
GetConsoleMode(WINCONSOLE.out,&WINCONSOLE.originalMode.dwFlagOut);
GetConsoleMode(WINCONSOLE.inp,&WINCONSOLE.originalMode.dwFlagIn);
GetConsoleMode(WINCONSOLE.out,&WINCONSOLE.originalMode.dwFlagOut);
if (!WINCONSOLE.isTermInfoConsole) {
b = AllocConsole();
if (!WINCONSOLE.isTermInfoConsole) {
b = AllocConsole();
if (!b)
b = AttachConsole(ATTACH_PARENT_PROCESS);
if (!b)
b = AttachConsole(ATTACH_PARENT_PROCESS);
if (getenv("NCGDB") || getenv("NCURSES_CONSOLE2")) {
T(("... will not buffer console"));
} else {
if (getenv("NCGDB") || getenv("NCURSES_CONSOLE2")) {
T(("... will not buffer console"));
} else {
TERM variable is set to #win32con, but actually
Windows supports virtual terminal processing.
So if terminfo functions are used in this setup,
TERM variable is set to #win32con, but actually
Windows supports virtual terminal processing.
So if terminfo functions are used in this setup,
- they actually may work.
+ they actually may work.
*/
_setmode(fileno(stdin) ,_O_BINARY);
_setmode(fileno(stdout),_O_BINARY);
*/
_setmode(fileno(stdin) ,_O_BINARY);
_setmode(fileno(stdout),_O_BINARY);
if (WINCONSOLE.hdl != INVALID_HANDLE_VALUE) {
WINCONSOLE.buffered = buffered;
_nc_console_get_SBI();
if (WINCONSOLE.hdl != INVALID_HANDLE_VALUE) {
WINCONSOLE.buffered = buffered;
_nc_console_get_SBI();
(WINCONSOLE.save_CI.bVisible ? "" : "not-"),
(int) WINCONSOLE.save_CI.dwSize));
}
(WINCONSOLE.save_CI.bVisible ? "" : "not-"),
(int) WINCONSOLE.save_CI.dwSize));
}
WINCONSOLE.initialized = TRUE;
console_initialized = TRUE;
}
WINCONSOLE.initialized = TRUE;
console_initialized = TRUE;
}
-ncurses6 (6.2+20201003) unstable; urgency=low
+ncurses6 (6.2+20201010) unstable; urgency=low
- -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 29 Sep 2020 14:58:09 -0400
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 10 Oct 2020 04:40:40 -0400
ncurses6 (5.9-20131005) unstable; urgency=low
ncurses6 (5.9-20131005) unstable; urgency=low
-ncurses6 (6.2+20201003) unstable; urgency=low
+ncurses6 (6.2+20201010) unstable; urgency=low
- -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 29 Sep 2020 14:58:09 -0400
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 10 Oct 2020 04:40:40 -0400
ncurses6 (5.9-20131005) unstable; urgency=low
ncurses6 (5.9-20131005) unstable; urgency=low
-ncurses6 (6.2+20201003) unstable; urgency=low
+ncurses6 (6.2+20201010) unstable; urgency=low
- -- Thomas E. Dickey <dickey@invisible-island.net> Tue, 29 Sep 2020 14:58:09 -0400
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 10 Oct 2020 04:40:40 -0400
ncurses6 (5.9-20120608) unstable; urgency=low
ncurses6 (5.9-20120608) unstable; urgency=low
-; $Id: mingw-ncurses.nsi,v 1.423 2020/10/03 12:29:29 tom Exp $\r
+; $Id: mingw-ncurses.nsi,v 1.424 2020/10/10 08:40:40 tom Exp $\r
\r
; TODO add examples\r
; TODO bump ABI to 6\r
\r
; TODO add examples\r
; TODO bump ABI to 6\r
!define VERSION_MAJOR "6"\r
!define VERSION_MINOR "2"\r
!define VERSION_YYYY "2020"\r
!define VERSION_MAJOR "6"\r
!define VERSION_MINOR "2"\r
!define VERSION_YYYY "2020"\r
-!define VERSION_MMDD "1003"\r
+!define VERSION_MMDD "1010"\r
!define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}\r
\r
!define MY_ABI "5"\r
!define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}\r
\r
!define MY_ABI "5"\r
Summary: shared libraries for terminal handling
Name: mingw32-ncurses6
Version: 6.2
Summary: shared libraries for terminal handling
Name: mingw32-ncurses6
Version: 6.2
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
Summary: shared libraries for terminal handling
Name: ncurses6
Version: 6.2
Summary: shared libraries for terminal handling
Name: ncurses6
Version: 6.2
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
Summary: Curses library with POSIX thread support.
Name: ncursest6
Version: 6.2
Summary: Curses library with POSIX thread support.
Name: ncursest6
Version: 6.2
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
#include <parametrized.h>
#include <transform.h>
#include <parametrized.h>
#include <transform.h>
-MODULE_ID("$Id: tic.c,v 1.286 2020/05/31 21:05:44 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.287 2020/10/10 21:25:24 tom Exp $")
#define STDIN_NAME "<stdin>"
#define STDIN_NAME "<stdin>"
return ((num != 0) || (*a == 0));
}
return ((num != 0) || (*a == 0));
}
+static void
+check_tparm_err(int num)
+{
+ if (_nc_tparm_err)
+ _nc_warning("tparam error in sgr(%d): %s", num, sgr_names[num]);
+}
+
static char *
check_sgr(TERMTYPE2 *tp, char *zero, int num, char *cap, const char *name)
{
static char *
check_sgr(TERMTYPE2 *tp, char *zero, int num, char *cap, const char *name)
{
} else if (PRESENT(cap)) {
_nc_warning("sgr(%d) missing, but %s present", num, name);
}
} else if (PRESENT(cap)) {
_nc_warning("sgr(%d) missing, but %s present", num, name);
}
- if (_nc_tparm_err)
- _nc_warning("stack error in sgr(%d) string", num);
} else {
zero = strdup(TIPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0));
}
} else {
zero = strdup(TIPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0));
}
- if (_nc_tparm_err)
- _nc_warning("stack error in sgr(0) string");
if (zero != 0) {
CHECK_SGR(1, enter_standout_mode);
if (zero != 0) {
CHECK_SGR(1, enter_standout_mode);