From: Thomas E. Dickey Date: Sun, 11 Oct 2020 00:40:41 +0000 (+0000) Subject: ncurses 6.2 - patch 20201010 X-Git-Tag: v6.3~57 X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff_plain;h=5c90fc94a5ac426a5e51732720767d5f0041830d 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) --- diff --git a/NEWS b/NEWS index b2420cf4..47a36e02 100644 --- a/NEWS +++ b/NEWS @@ -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. diff --git a/VERSION b/VERSION index 1a850547..b1897d5f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5:0:10 6.2 20201003 +5:0:10 6.2 20201010 diff --git a/dist.mk b/dist.mk index a6bb3a9f..65a48510 100644 --- a/dist.mk +++ b/dist.mk @@ -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) diff --git a/misc/terminfo.src b/misc/terminfo.src index ae28f143..db0c8348 100644 --- a/misc/terminfo.src +++ b/misc/terminfo.src @@ -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! diff --git a/ncurses/base/lib_set_term.c b/ncurses/base/lib_set_term.c index 53802209..8573fbe7 100644 --- a/ncurses/base/lib_set_term.c +++ b/ncurses/base/lib_set_term.c @@ -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; diff --git a/ncurses/tinfo/lib_tparm.c b/ncurses/tinfo/lib_tparm.c index 0f0c62a4..7f0b20b9 100644 --- a/ncurses/tinfo/lib_tparm.c +++ b/ncurses/tinfo/lib_tparm.c @@ -53,7 +53,7 @@ #include #include -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)); } diff --git a/ncurses/tinfo/lib_win32con.c b/ncurses/tinfo/lib_win32con.c index 6c92fe1f..e84f2051 100644 --- a/ncurses/tinfo/lib_win32con.c +++ b/ncurses/tinfo/lib_win32con.c @@ -38,7 +38,7 @@ #include -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; } diff --git a/package/debian-mingw/changelog b/package/debian-mingw/changelog index 542077d8..851d6cc7 100644 --- a/package/debian-mingw/changelog +++ b/package/debian-mingw/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.2+20201003) unstable; urgency=low +ncurses6 (6.2+20201010) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Tue, 29 Sep 2020 14:58:09 -0400 + -- Thomas E. Dickey Sat, 10 Oct 2020 04:40:40 -0400 ncurses6 (5.9-20131005) unstable; urgency=low diff --git a/package/debian-mingw64/changelog b/package/debian-mingw64/changelog index 542077d8..851d6cc7 100644 --- a/package/debian-mingw64/changelog +++ b/package/debian-mingw64/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.2+20201003) unstable; urgency=low +ncurses6 (6.2+20201010) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Tue, 29 Sep 2020 14:58:09 -0400 + -- Thomas E. Dickey Sat, 10 Oct 2020 04:40:40 -0400 ncurses6 (5.9-20131005) unstable; urgency=low diff --git a/package/debian/changelog b/package/debian/changelog index cfb5e671..da656771 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.2+20201003) unstable; urgency=low +ncurses6 (6.2+20201010) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Tue, 29 Sep 2020 14:58:09 -0400 + -- Thomas E. Dickey Sat, 10 Oct 2020 04:40:40 -0400 ncurses6 (5.9-20120608) unstable; urgency=low diff --git a/package/mingw-ncurses.nsi b/package/mingw-ncurses.nsi index 9345362c..1de5eb04 100644 --- a/package/mingw-ncurses.nsi +++ b/package/mingw-ncurses.nsi @@ -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" diff --git a/package/mingw-ncurses.spec b/package/mingw-ncurses.spec index 8151514d..a4ad4be8 100644 --- a/package/mingw-ncurses.spec +++ b/package/mingw-ncurses.spec @@ -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 diff --git a/package/ncurses.spec b/package/ncurses.spec index 9b0fcecb..e604bc49 100644 --- a/package/ncurses.spec +++ b/package/ncurses.spec @@ -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 diff --git a/package/ncursest.spec b/package/ncursest.spec index 75441844..4514c618 100644 --- a/package/ncursest.spec +++ b/package/ncursest.spec @@ -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 diff --git a/progs/tic.c b/progs/tic.c index ae172ece..dd9d4e02 100644 --- a/progs/tic.c +++ b/progs/tic.c @@ -49,7 +49,7 @@ #include #include -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 "" @@ -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);