ncurses 6.2 - patch 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).
+ add tmux-direct (tmux #2370, Debian #895754)
This commit is contained in:
Thomas E. Dickey 2020-10-11 00:40:41 +00:00
parent 349761f30e
commit 5c90fc94a5
15 changed files with 169 additions and 138 deletions

13
NEWS
View File

@ -26,7 +26,7 @@
-- 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
@ -46,12 +46,21 @@ See the AUTHORS file for the corresponding full names.
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).
+ 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.

View File

@ -1 +1 @@
5:0:10 6.2 20201003
5:0:10 6.2 20201010

View File

@ -26,7 +26,7 @@
# 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
@ -38,7 +38,7 @@ SHELL = /bin/sh
# 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)

View File

@ -6,8 +6,8 @@
# 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
@ -14533,8 +14533,8 @@ aaa+rv|ann arbor ambassador in reverse video,
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,
@ -16132,9 +16132,9 @@ d220-dg|Data General DASHER D220 color terminal in DG 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,
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,
@ -17374,12 +17374,12 @@ ibmapa8c-c|ibm6154-c|IBM 6154 Advanced Color Graphics Display,
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,
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,
@ -18985,7 +18985,7 @@ ncrvt100an|ncrvt100pp|NCR vt100 for the 2900 terminal,
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>,
@ -26680,4 +26680,9 @@ v3220|LANPAR Vision II model 3220/3221/3222,
# + 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!

View File

@ -54,7 +54,7 @@
#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
@ -406,6 +406,11 @@ NCURSES_SP_NAME(_nc_setupscreen) (
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;

View File

@ -53,7 +53,7 @@
#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 $")
/*
* char *
@ -966,6 +966,13 @@ tparam_internal(const char *string, TPARM_DATA * data)
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));
}

View File

@ -38,7 +38,7 @@
#include <curses.priv.h>
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 $")
#ifdef _NC_WINDOWS
@ -71,7 +71,7 @@ static int MapKey(WORD vKey);
static int AnsiKey(WORD vKey);
static ULONGLONG tdiff(FILETIME fstart, FILETIME fend);
#define GenMap(vKey,key) MAKELONG(key, vKey)
static const LONG keylist[] =
{
@ -124,7 +124,7 @@ NCURSES_EXPORT(int)
_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);
@ -180,13 +180,13 @@ IsConsoleHandle(HANDLE hdl)
T((T_CALLED("lib_win32con::IsConsoleHandle(HANDLE=%p"),hdl));
EnsureInit();
if (!GetConsoleMode(hdl, &dwFlag)) {
T(("GetConsoleMode failed"));
} else {
result = TRUE;
}
returnBool(result);
}
@ -246,12 +246,12 @@ _nc_console_fd2handle(int fd) {
}
NCURSES_EXPORT(int)
_nc_console_setmode(HANDLE hdl, const TTY *arg)
_nc_console_setmode(HANDLE hdl, const TTY *arg)
{
DWORD dwFlag = 0;
int code = ERR;
HANDLE alt;
if (arg) {
#ifdef TRACE
TTY TRCTTY;
@ -259,7 +259,7 @@ NCURSES_EXPORT(int)
#define TRCTTYIN(flag) TRCTTY.dwFlagIn=flag
#else
#define TRCTTYOUT(flag)
#define TRCTTYIN(flag)
#define TRCTTYIN(flag)
#endif
T(("lib_win32con:_nc_console_setmode %s", _nc_trace_ttymode(arg)));
if (hdl==WINCONSOLE.inp) {
@ -270,7 +270,7 @@ NCURSES_EXPORT(int)
dwFlag &= ~(VT_FLAG_IN);
TRCTTYIN(dwFlag);
SetConsoleMode(hdl, dwFlag);
alt = OutHandle();
dwFlag = arg->dwFlagOut;
if (WINCONSOLE.isTermInfoConsole)
@ -287,7 +287,7 @@ NCURSES_EXPORT(int)
dwFlag |= (VT_FLAG_OUT);
TRCTTYOUT(dwFlag);
SetConsoleMode(hdl, dwFlag);
alt=WINCONSOLE.inp;
dwFlag = arg->dwFlagIn | ENABLE_MOUSE_INPUT;
if (WINCONSOLE.isTermInfoConsole)
@ -311,7 +311,7 @@ _nc_console_getmode(HANDLE hdl, TTY *arg)
if (arg) {
DWORD dwFlag = 0;
HANDLE alt;
if (hdl==WINCONSOLE.inp) {
if(GetConsoleMode(hdl,&dwFlag)) {
arg->dwFlagIn = dwFlag;
@ -337,12 +337,12 @@ _nc_console_getmode(HANDLE hdl, TTY *arg)
}
NCURSES_EXPORT(int)
_nc_console_flush(HANDLE hdl)
_nc_console_flush(HANDLE hdl)
{
int code=OK;
T((T_CALLED("lib_win32con::_nc_console_flush(hdl=%p"),hdl));
if (hdl != INVALID_HANDLE_VALUE) {
if (hdl == WINCONSOLE.hdl ||
hdl == WINCONSOLE.inp ||
@ -356,7 +356,7 @@ NCURSES_EXPORT(int)
}
returnCode(code);
}
NCURSES_EXPORT(WORD)
_nc_console_MapColor(bool fore, int color)
{
@ -384,28 +384,28 @@ static bool
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);
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.window_only = TRUE;
if (read_screen_data()) {
result = TRUE;
}
}
T(("... save original screen contents %s", result ? "ok" : "err"));
return result;
}
@ -416,7 +416,7 @@ restore_original_screen(void)
COORD bufferCoord;
bool result = FALSE;
SMALL_RECT save_region = WINCONSOLE.save_region;
T(("... restoring %s",
WINCONSOLE.window_only ? "window" : "entire buffer"));
@ -427,7 +427,7 @@ restore_original_screen(void)
if (write_screen(WINCONSOLE.hdl,
WINCONSOLE.save_screen,
WINCONSOLE.save_size,
WINCONSOLE.save_size,
bufferCoord,
&save_region)) {
result = TRUE;
@ -451,20 +451,20 @@ read_screen_data(void)
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);
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);
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,
@ -474,7 +474,7 @@ read_screen_data(void)
WINCONSOLE.save_region.Right,
bufferCoord.Y,
bufferCoord.X));
if (read_screen(WINCONSOLE.hdl,
WINCONSOLE.save_screen,
WINCONSOLE.save_size,
@ -486,7 +486,7 @@ read_screen_data(void)
FreeAndNull(WINCONSOLE.save_screen);
}
}
return result;
}
@ -536,12 +536,12 @@ _nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info)
SMALL_RECT rect;
COORD coord;
bool changed = FALSE;
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,
@ -550,7 +550,7 @@ _nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info)
T(("... SBI.dwSize %dx%d",
info->dwSize.Y,
info->dwSize.X));
if (normal) {
rect = info->srWindow;
coord = info->dwSize;
@ -561,7 +561,7 @@ _nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info)
} 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;
@ -572,31 +572,31 @@ _nc_console_set_scrollback(bool normal, CONSOLE_SCREEN_BUFFER_INFO * info)
wide = MIN_WIDE;
changed = TRUE;
}
rect.Left =
rect.Top = 0;
rect.Right = (SHORT) (wide - 1);
rect.Bottom = (SHORT) (high - 1);
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 (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;
@ -613,7 +613,7 @@ tdiff(FILETIME fstart, FILETIME fend)
ustart.HighPart = fstart.dwHighDateTime;
uend.LowPart = fend.dwLowDateTime;
uend.HighPart = fend.dwHighDateTime;
diff = (uend.QuadPart - ustart.QuadPart) / 10000;
return diff;
}
@ -639,10 +639,10 @@ static int
decode_mouse(SCREEN *sp, int mask)
{
int result = 0;
(void) sp;
assert(sp && console_initialized);
if (mask & FROM_LEFT_1ST_BUTTON_PRESSED)
result |= BUTTON1_PRESSED;
if (mask & FROM_LEFT_2ND_BUTTON_PRESSED)
@ -651,7 +651,7 @@ decode_mouse(SCREEN *sp, int mask)
result |= BUTTON3_PRESSED;
if (mask & FROM_LEFT_4TH_BUTTON_PRESSED)
result |= BUTTON4_PRESSED;
if (mask & RIGHTMOST_BUTTON_PRESSED) {
switch (WINCONSOLE.numButtons) {
case 1:
@ -664,11 +664,11 @@ decode_mouse(SCREEN *sp, int mask)
result |= BUTTON3_PRESSED;
break;
case 4:
result |= BUTTON4_PRESSED;
result |= BUTTON4_PRESSED;
break;
}
}
return result;
}
@ -679,19 +679,19 @@ handle_mouse(SCREEN *sp, MOUSE_EVENT_RECORD mer)
{
MEVENT work;
bool result = FALSE;
assert(sp);
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));
if (sp->_drv_mouse_new_buttons) {
work.bstate |=
(mmask_t) decode_mouse(sp,
@ -704,10 +704,10 @@ handle_mouse(SCREEN *sp, MOUSE_EVENT_RECORD mer)
>> 1);
result = TRUE;
}
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;
}
@ -719,7 +719,7 @@ rkeycompare(const void *el1, const void *el2)
{
WORD key1 = (LOWORD((*((const LONG *) el1)))) & 0x7fff;
WORD key2 = (LOWORD((*((const LONG *) el2)))) & 0x7fff;
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
@ -729,7 +729,7 @@ keycompare(const void *el1, const void *el2)
{
WORD key1 = HIWORD((*((const LONG *) el1)));
WORD key2 = HIWORD((*((const LONG *) el2)));
return ((key1 < key2) ? -1 : ((key1 == key2) ? 0 : 1));
}
@ -737,12 +737,12 @@ static int
MapKey(WORD vKey)
{
int code = -1;
if (!WINCONSOLE.isTermInfoConsole) {
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
res = bsearch(&key,
WINCONSOLE.map,
(size_t) (N_INI + FKEYS),
@ -763,12 +763,12 @@ static int
AnsiKey(WORD vKey)
{
int code = -1;
if (!WINCONSOLE.isTermInfoConsole) {
WORD nKey = 0;
void *res;
LONG key = GenMap(vKey, 0);
res = bsearch(&key,
WINCONSOLE.ansi_map,
(size_t) (N_INI + FKEYS),
@ -793,9 +793,9 @@ _nc_console_keyok(int keycode,int flag)
WORD vKey;
void *res;
LONG key = GenMap(0, (WORD) keycode);
T((T_CALLED("lib_win32con::_nc_console_keyok(%d, %d)"), keycode, flag));
res = bsearch(&key,
WINCONSOLE.rmap,
(size_t) (N_INI + FKEYS),
@ -819,7 +819,7 @@ _nc_console_keyExist(int 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,
@ -852,25 +852,25 @@ _nc_console_twait(
FILETIME fend;
int diff;
bool isNoDelay = (milliseconds == 0);
#ifdef NCURSES_WGETCH_EVENTS
(void) evl; /* TODO: implement wgetch-events */
(void) evl; /* TODO: implement wgetch-events */
#endif
#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)
assert(sp);
TR(TRACE_IEVENT, ("start twait: hdl=%p, %d milliseconds, mode: %d",
hdl, milliseconds, mode));
if (milliseconds < 0)
milliseconds = INFINITY;
memset(&inp_rec, 0, sizeof(inp_rec));
while (true) {
if (!isNoDelay) {
GetSystemTimeAsFileTime(&fstart);
@ -881,14 +881,14 @@ _nc_console_twait(
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 && b) {
T(("twait: Events Available: %d",nRead));
if (nRead==0) {
@ -946,7 +946,7 @@ _nc_console_twait(
if (inp_rec.Event.KeyEvent.bKeyDown) {
T(("twait:event KeyDown"));
if (!WINCONSOLE.isTermInfoConsole &&
(0 == ch)) {
(0 == ch)) {
int nKey = MapKey(vk);
if (nKey < 0) {
CONSUME();
@ -993,27 +993,27 @@ _nc_console_twait(
}
}
end:
TR(TRACE_IEVENT, ("end twait: returned %d (%d), remaining time %d msec",
code, GetLastError(), milliseconds));
if (timeleft)
*timeleft = milliseconds;
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))
{
int rc = 0;
assert(sp);
if (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
rc = TW_MOUSE;
} else {
@ -1029,23 +1029,23 @@ _nc_console_testmouse(
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;
assert(sp);
assert(buf);
memset(&inp_rec, 0, sizeof(inp_rec));
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)
@ -1095,8 +1095,8 @@ _nc_console_read(
/* 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
Return codes:
Return codes:
- 0 : Not a TTY
- 1 : A Windows character device detected by _isatty
- 2 : A future implementation may return 2 for mintty
@ -1106,7 +1106,7 @@ _nc_console_isatty(int fd)
{
int result = 0;
T((T_CALLED("lib_win32con::_nc_console_isatty(%d"),fd));
if (_isatty(fd))
result = 1;
#ifdef _NC_CHECK_MINTTY
@ -1127,7 +1127,7 @@ NCURSES_EXPORT(bool)
_nc_console_checkinit(bool initFlag, bool assumeTermInfo)
{
bool res = FALSE;
T((T_CALLED("lib_win32con::_nc_console_checkinit(initFlag=%d, assumeTermInfo=%d)"),
initFlag,assumeTermInfo));
@ -1141,14 +1141,14 @@ _nc_console_checkinit(bool initFlag, bool assumeTermInfo)
WORD a;
BOOL buffered = FALSE;
BOOL b;
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);
for (i = 0; i < (N_INI + FKEYS); i++) {
if (i < N_INI) {
WINCONSOLE.rmap[i] = WINCONSOLE.map[i] =
@ -1175,31 +1175,31 @@ _nc_console_checkinit(bool initFlag, bool assumeTermInfo)
(size_t) (MAPSIZE),
sizeof(keylist[0]),
rkeycompare);
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;
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);
if (!WINCONSOLE.isTermInfoConsole) {
b = AllocConsole();
if (!b)
b = AttachConsole(ATTACH_PARENT_PROCESS);
if (getenv("NCGDB") || getenv("NCURSES_CONSOLE2")) {
T(("... will not buffer console"));
} else {
@ -1219,11 +1219,11 @@ _nc_console_checkinit(bool initFlag, bool assumeTermInfo)
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);
if (WINCONSOLE.hdl != INVALID_HANDLE_VALUE) {
WINCONSOLE.buffered = buffered;
_nc_console_get_SBI();
@ -1237,7 +1237,7 @@ _nc_console_checkinit(bool initFlag, bool assumeTermInfo)
(WINCONSOLE.save_CI.bVisible ? "" : "not-"),
(int) WINCONSOLE.save_CI.dwSize));
}
WINCONSOLE.initialized = TRUE;
console_initialized = TRUE;
}

View File

@ -1,8 +1,8 @@
ncurses6 (6.2+20201003) unstable; urgency=low
ncurses6 (6.2+20201010) unstable; urgency=low
* latest weekly patch
-- 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

View File

@ -1,8 +1,8 @@
ncurses6 (6.2+20201003) unstable; urgency=low
ncurses6 (6.2+20201010) unstable; urgency=low
* latest weekly patch
-- 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

View File

@ -1,8 +1,8 @@
ncurses6 (6.2+20201003) unstable; urgency=low
ncurses6 (6.2+20201010) unstable; urgency=low
* latest weekly patch
-- 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

View File

@ -1,4 +1,4 @@
; $Id: mingw-ncurses.nsi,v 1.423 2020/10/03 12:29:29 tom Exp $
; $Id: mingw-ncurses.nsi,v 1.424 2020/10/10 08:40:40 tom Exp $
; TODO add examples
; TODO bump ABI to 6
@ -10,7 +10,7 @@
!define VERSION_MAJOR "6"
!define VERSION_MINOR "2"
!define VERSION_YYYY "2020"
!define VERSION_MMDD "1003"
!define VERSION_MMDD "1010"
!define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}
!define MY_ABI "5"

View File

@ -3,7 +3,7 @@
Summary: shared libraries for terminal handling
Name: mingw32-ncurses6
Version: 6.2
Release: 20201003
Release: 20201010
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz

View File

@ -1,7 +1,7 @@
Summary: shared libraries for terminal handling
Name: ncurses6
Version: 6.2
Release: 20201003
Release: 20201010
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz

View File

@ -1,7 +1,7 @@
Summary: Curses library with POSIX thread support.
Name: ncursest6
Version: 6.2
Release: 20201003
Release: 20201010
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz

View File

@ -49,7 +49,7 @@
#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>"
@ -2530,6 +2530,13 @@ similar_sgr(int num, char *a, char *b)
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)
{
@ -2560,8 +2567,7 @@ 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);
}
if (_nc_tparm_err)
_nc_warning("stack error in sgr(%d) string", num);
check_tparm_err(num);
return test;
}
@ -2995,8 +3001,7 @@ check_termtype(TERMTYPE2 *tp, bool literal)
} 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");
check_tparm_err(0);
if (zero != 0) {
CHECK_SGR(1, enter_standout_mode);