From a0914678507b8ee1d1a0440625235fd7b48964bc Mon Sep 17 00:00:00 2001 From: "Thomas E. Dickey" Date: Sun, 25 Dec 2022 01:37:04 +0000 Subject: [PATCH] ncurses 6.3 - patch 20221224 + add mutex lock/unlock in a few places reported by thread-sanitizer + add/use bracketed+paste to help identify terminals supporting this xterm feature (prompted by discussion with Bram Moolenaar) -TD --- NEWS | 7 +- VERSION | 2 +- dist.mk | 4 +- misc/terminfo.src | 133 ++++++++++++++++++++++--------- ncurses/base/lib_getch.c | 14 +++- ncurses/tty/lib_tstp.c | 4 +- package/debian-mingw/changelog | 4 +- package/debian-mingw64/changelog | 4 +- package/debian/changelog | 4 +- package/mingw-ncurses.nsi | 4 +- package/mingw-ncurses.spec | 2 +- package/ncurses.spec | 2 +- package/ncursest.spec | 2 +- test/ditto.c | 16 +++- test/worm.c | 8 +- 15 files changed, 149 insertions(+), 61 deletions(-) diff --git a/NEWS b/NEWS index 12e6fc88..1da535ed 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.3889 2022/12/18 00:16:10 tom Exp $ +-- $Id: NEWS,v 1.3891 2022/12/25 00:20:45 tom Exp $ ------------------------------------------------------------------------------- This is a log of changes that ncurses has gone through since Zeyd started @@ -46,6 +46,11 @@ 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. +20221224 + + add mutex lock/unlock in a few places reported by thread-sanitizer + + add/use bracketed+paste to help identify terminals supporting this + xterm feature (prompted by discussion with Bram Moolenaar) -TD + 20221217 + install Ada95 sample programs in libexecdir, adding a wrapper script to invoke those. diff --git a/VERSION b/VERSION index 49afb6ba..b09d8301 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5:0:10 6.3 20221217 +5:0:10 6.3 20221224 diff --git a/dist.mk b/dist.mk index fd5e4b3f..f52aac42 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.1517 2022/12/17 12:29:16 tom Exp $ +# $Id: dist.mk,v 1.1518 2022/12/24 12:35:34 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 = 3 -NCURSES_PATCH = 20221217 +NCURSES_PATCH = 20221224 # 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 8a4f9d5c..90e1c79b 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.1032 $ -# $Date: 2022/08/27 18:44:46 $ +# $Revision: 1.1039 $ +# $Date: 2022/12/24 18:18:58 $ # # 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 @@ -3818,6 +3818,7 @@ iTerm2.app|iterm2|terminal emulator for Mac OS X, kRIT5=\E[1;5C, kRIT6=\E[1;6C, kUP3=\E\E[A, kUP4=\E[1;10A, kUP5=\E[1;5A, kUP6=\E[1;6A, use=ecma+index, use=xterm+alt+title, use=ecma+italics, use=iterm, + use=bracketed+paste, # xnuppc - Darwin PowerPC Console (a.k.a. "darwin") # @@ -4292,7 +4293,7 @@ putty|PuTTY terminal emulator, use=ansi+tabs, use=ansi+rep, use=ecma+index, use=xterm+alt1049, use=xterm+sm+1006, use=putty+fnkeys, use=vt102+enq, use=xterm+sl, use=vt100+fnkeys, - use=putty+keypad, use=vt220+cvis, + use=putty+keypad, use=vt220+cvis, use=bracketed+paste, putty+keypad|PuTTY numeric keypad, kp1=\EOq, kp2=\EOr, kp3=\EOs, kp4=\EOt, kp5=\EOu, kp6=\EOv, kp7=\EOw, kp8=\EOx, kp9=\EOy, kpADD=\EOl, kpDIV=\EOQ, @@ -4419,7 +4420,7 @@ mintty+common|shared capabilities for mintty, opaq=\E[28m, smul2=\E[21m, use=ansi+rep, use=ecma+strikeout, use=ecma+index, use=vt420+lrmm, use=xterm+sm+1006, use=xterm+pcfkeys, use=xterm+tmux, - use=ecma+italics, use=xterm-basic, + use=ecma+italics, use=xterm-basic, use=bracketed+paste, # 2019-06-09: These capabilities are commented-out for compatibility with # existing releases 5.9-6.1, and may be considered for inclusion after the # release of ncurses 6.2: @@ -4764,7 +4765,7 @@ vscode|xterm.js|Visual Studio Code terminal using xterm.js, npc, kcbt=\E[Z, rmkx=\E[?1l, smkx=\E[?1h, use=xterm+256setaf, use=ecma+index, use=xterm+sm+1006, use=xterm+pcfkeys, - use=ecma+italics, use=xterm-basic, + use=ecma+italics, use=xterm-basic, use=bracketed+paste, vscode-direct|Visual Studio Code with direct-colors, use=xterm+indirect, use=vscode, @@ -4992,7 +4993,7 @@ xterm-p370|xterm patch #370, npc, kcbt=\E[Z, kent=\EOM, nel=\EE, use=ecma+index, use=ansi+rep, use=ecma+strikeout, use=xterm+pcfkeys, - use=xterm+nofkeys, + use=xterm+nofkeys, use=bracketed+paste, xterm-p371|xterm patch #371, use=dec+sl, use=xterm-p370, @@ -5759,6 +5760,16 @@ xterm-nic|xterm with ich/ich1 suppressed for non-curses programs, xterm1|xterm terminal emulator ignoring the alternate screen buffer, rmcup@, smcup@, use=xterm, +# https://invisible-island.net/xterm/xterm-paste64.html +# +# Bracketed paste was introduced by xterm patch #203 in May 2005, as part of a +# larger feature for manipulating the clipboard selection. Few terminals aside +# from xterm fully implement the clipboard feature, but several copy this +# detail. The names for the extended capabilities here were introduced by vim +# in January 2017. +bracketed+paste|xterm bracketed paste, + BD=\E[?2004l, BE=\E[?2004h, PD=\E[201~, PE=\E[200~, + #### XTERM Mouse # The xterm mouse protocol is used by other terminal emulators. # In this section, two extended capabilities are used to illustrate the mouse @@ -6232,6 +6243,7 @@ vte-2014|VTE 0.35.1, cbt=\E[Z, el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, ich=\E[%p1%d@, kent=\EOM, use=ecma+index, use=xterm+sm+1006, use=xterm+pcfkeys, use=vte-2012, + use=bracketed+paste, # As of January 2018, this was the most recent release, # e.g., with gnome-terminal 3.26.2 @@ -6295,6 +6307,7 @@ hterm|Chromium hterm, use=ecma+index, use=ansi+rep, use=ecma+strikeout, use=vt420+lrmm, use=xterm+sm+1006, use=xterm+tmux, use=ecma+italics, use=xterm+pcfkeys, use=xterm-basic, + use=bracketed+paste, hterm-256color|Chromium hterm with xterm 256-colors, use=xterm+256color2, use=hterm, @@ -6411,7 +6424,7 @@ kvt|KDE terminal, # # Re-enable "bel", since it is latent in the source-code even though KDE config # often hides the feature (2020/5/30) -konsole-base|KDE console window (base), +konsole-base|KDE console window (common), bce, km@, npc, XT, ncv@, blink=\E[5m, dim=\E[2m, ech=\E[%p1%dX, @@ -6426,7 +6439,7 @@ konsole-base|KDE console window (base), sgr0=\E[0m\017, smam=\E[?7h, vpa=\E[%i%p1%dd, use=ecma+index, use=xterm+sm+1006, use=ecma+strikeout, use=ecma+italics, use=ecma+color, use=xterm-r6, - use=vt220+cvis, + use=vt220+cvis, use=bracketed+paste, # The keytab feature was introduced in 0.9.12 (February 2000) with "linux" and # "vt100" key-table files along with a compiled-in default key-table. @@ -6585,7 +6598,7 @@ mlterm3|multi lingual terminal emulator 3.x, use=ecma+strikeout, use=xterm+app, use=xterm+pcf2, use=xterm+pcc2, use=xterm+pce2, use=xterm+meta, use=xterm+alt+title, use=xterm+sm+1006, - use=vt100+pfkeys, use=mlterm2, + use=vt100+pfkeys, use=bracketed+paste, use=mlterm2, # This is mlterm 2.9.3's mlterm.ti, with some additions/corrections -TD # @@ -7404,7 +7417,7 @@ st-0.6|simpleterm 0.6, vpa=\E[%i%p1%dd, Se=\E[2 q, Ss=\E[%p1%d q, use=ansi+enq, use=vt220+pcedit, use=ecma+index, use=xterm+alt1049, use=vt220+cvis, use=xterm+sl, use=ecma+italics, - use=ecma+strikeout, + use=ecma+strikeout, use=bracketed+paste, # # st-0.1.1 # @@ -7556,7 +7569,7 @@ terminator|Terminator no line wrap, smul=\E[4m, tbc=\E[3g, tsl=\E]2;, vpa=\E[%i%p1%dd, use=ansi+enq, use=vt220+pcedit, use=ecma+italics, use=ecma+index, use=xterm+256setaf, use=xterm+sl-twm, - use=xterm+alt1049, use=vt220+cvis, + use=xterm+alt1049, use=vt220+cvis, use=bracketed+paste, #### TERMINOLOGY # https://www.enlightenment.org/about-terminology @@ -7647,7 +7660,8 @@ terminology-1.0.0|EFL-based terminal emulator (1.0.0), %?%p1%p3%|%t;7%;%?%p7%t;8%;m$<2>, sgr0=\E(B\E[m, smacs=\E(0, use=ecma+italics, use=vt220+cvis, use=xterm+x11mouse, use=xterm+pce2, - use=xterm+pcf2, use=xterm+pcc2, use=terminology-0.6.1, + use=xterm+pcf2, use=xterm+pcc2, use=bracketed+paste, + use=terminology-0.6.1, # 2020/12/26: # Tested terminology 1.8.1 using tack and vttest. @@ -7742,7 +7756,7 @@ alacritty+common|base fragment for alacritty, use=xterm-basic, use=xterm+app, use=ansi+rep, use=xterm+tmux, use=ecma+strikeout, use=xterm+sl-twm, use=ecma+italics, use=xterm+pce2, use=xterm+pcc2, - use=xterm+pcf2, + use=xterm+pcf2, use=bracketed+paste, #### Kitty # https://github.com/kovidgoyal/kitty @@ -7898,6 +7912,7 @@ kitty+common|KovId's TTY common properties, use=xterm+pcfkeys, use=xterm+sl-twm, use=ecma+strikeout, use=ecma+italics, use=xterm+alt1049, use=att610+cvis, use=xterm+tmux, + use=bracketed+paste, kitty+setal|set underline colors (nonstandard), setal=\E[58:2::%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1 @@ -7958,7 +7973,7 @@ foot+base|foot base fragment, use=ansi+tabs, use=ecma+index, use=ecma+italics, use=ecma+strikeout, use=xterm+alt+title, use=xterm+pcfkeys, use=xterm+sm+1006, use=xterm+tmux2, - use=xterm+sl-alt, + use=xterm+sl-alt, use=bracketed+paste, ######## WEB CLIENTS @@ -8014,6 +8029,7 @@ domterm|DomTerm web client, %t;7%;m, sitm@, smkx=\E[?1h, use=xterm+256setaf, use=ecma+index, use=xterm+sm+1006, use=xterm+pcfkeys, use=xterm-basic, + use=bracketed+paste, ######## UNIX VIRTUAL TERMINALS, VIRTUAL CONSOLES, AND TELNET CLIENTS # @@ -8162,7 +8178,7 @@ dumb-emacs-ansi|Emacs dumb terminal with ANSI color codes, # since 1994 (i.e., screen 3.0.5), stating that it was an obscure code used by # the (Siemens Nixdorf) 97801 terminal. It was not shown in the termcap or # terminfo entries (which list about 60% of the control sequences). -screen|VT 100/ANSI X3.64 virtual terminal (base), +screen-base|VT 100/ANSI X3.64 virtual terminal (base), OTbs, OTpt, am, km, mir, msgr, xenl, G0, colors#8, cols#80, it#8, lines#24, ncv@, pairs#64, U8#1, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxy @@ -8189,13 +8205,20 @@ screen|VT 100/ANSI X3.64 virtual terminal (base), smso=\E[3m, smul=\E[4m, tbc=\E[3g, vpa=\E[%i%p1%dd, E0=\E(B, S0=\E(%p1%c, use=vt220+pcedit, use=xterm+alt1049, use=ecma+color, use=vt100+enq, + +screen|VT 100/ANSI X3.64 virtual terminal, + use=screen4, + +no+brackets|cancel bracketed paste, + BD@, BE@, PD@, PE@, + # The bce and status-line entries are from screen 3.9.13 (and require some # changes to .screenrc). screen-bce|VT 100/ANSI X3.64 virtual terminal with bce, bce, - ech@, use=screen4, + ech@, use=screen, screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line, - dsl=\E_\E\\, fsl=\E\\, tsl=\E_, use=screen4, + dsl=\E_\E\\, fsl=\E\\, tsl=\E_, use=screen, # ====================================================================== # Entries for GNU Screen with 16 colors. @@ -8206,7 +8229,7 @@ screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line, # do all support 16 color palette. screen-16color|GNU Screen with 16 colors, - use=ibm+16color, use=screen4, + use=ibm+16color, use=screen, screen-16color-s|GNU Screen with 16 colors and status line, use=ibm+16color, use=screen-s, @@ -8221,7 +8244,7 @@ screen-16color-bce-s|GNU Screen with 16 colors using BCE and status line, # Entries for GNU Screen 4.02 with --enable-colors256. screen-256color|GNU Screen with 256 colors, - use=xterm+256setaf, use=screen4, + use=xterm+256setaf, use=screen, screen-256color-s|GNU Screen with 256 colors and status line, use=xterm+256setaf, use=screen-s, @@ -8283,19 +8306,26 @@ screen+italics|screen cannot support italics, # match. Hence, no "screen.xterm" entry is provided, since that would # create heartburn for people running remote xterm's. # (f) screen does not support rep. +# (g) the xterm-new compatibility does not include bracketed paste. # # xterm (-xfree86 or -r6) does not normally support kIC, kNXT and kPRV # since the default translations override the built-in keycode # translation. They are suppressed here to show what is tested by tack. screen.xterm-xfree86|screen.xterm-new|screen customized for modern xterm, - bce@, bw, - invis@, kIC@, kNXT@, kPRV@, meml@, memu@, rep@, + bce@, bw, npc, + invis@, kIC@, kNXT@, kPRV@, kcbt=\E[Z, kent=\EOM, meml@, memu@, + nel=\EE, rep@, sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%| %t;7%;%?%p4%t;5%;%?%p5%t;2%;m, E3@, use=screen+italics, use=screen+fkeys, - use=xterm+x11mouse, use=xterm-p370, + use=xterm+x11mouse, use=ecma+index, use=ansi+rep, + use=ecma+strikeout, use=xterm+pcfkeys, + use=xterm+nofkeys, + +# Don't use this, because not everyone has "screen.xterm-new": #:screen.xterm|screen for modern xterm, #: use=screen.xterm-new, + # xterm-r6 does not really support khome/kend unless it is propped up by # the translations resource. screen.xterm-r6|screen customized for X11R6 xterm, @@ -8307,36 +8337,38 @@ screen.teraterm|disable ncv in teraterm, acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i \316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u \264v\301w\302x\263y\363z\362{\343|\330}\234~\376, - use=screen+fkeys, use=xterm+x11mouse, use=screen4, + use=screen+fkeys, use=xterm+x11mouse, use=screen, # Other terminals screen.rxvt|screen in rxvt, bw, XT, cvvis@, flash@, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, use=screen+fkeys, use=vt100+enq, use=rxvt+pcfkeys, use=xterm+x11mouse, use=vt220+keypad, - use=screen4, + use=screen, screen.Eterm|screen in Eterm, use=xterm+x11mouse, use=screen+fkeys, use=Eterm, screen.mrxvt|screen in mrxvt, use=xterm+x11mouse, use=screen+fkeys, use=mrxvt, screen.vte|screen in any VTE-based terminal, use=xterm+x11mouse, use=screen+italics, - use=screen+fkeys, use=vte, + use=screen+fkeys, use=no+brackets, use=vte, screen.gnome|screen in GNOME Terminal, use=xterm+x11mouse, use=screen+italics, - use=screen+fkeys, use=gnome, + use=screen+fkeys, use=no+brackets, use=gnome, screen.konsole|screen in KDE console window, use=xterm+x11mouse, use=screen+italics, - use=screen+fkeys, use=konsole, + use=screen+fkeys, use=no+brackets, use=konsole, # fix the backspace key screen.linux|screen.linux-s|screen in Linux console, bw, kbs=^?, kcbt@, use=linux+sfkeys, use=xterm+x11mouse, - use=screen+fkeys, use=screen4, + use=screen+fkeys, use=screen, screen.mlterm|screen in mlterm, - use=xterm+x11mouse, use=screen+fkeys, use=mlterm, + use=xterm+x11mouse, use=screen+fkeys, use=no+brackets, + use=mlterm, screen.putty|screen in putty, - use=xterm+x11mouse, use=screen+fkeys, use=putty, + use=xterm+x11mouse, use=screen+fkeys, use=no+brackets, + use=putty, # The default "screen" entry is reasonably portable, but not optimal for the # most widely-used terminal emulators. The "bce" capability is supported in @@ -8374,7 +8406,7 @@ screen-bce.linux|screen optimized for Linux console, ech@, use=screen.linux, screen-w|VT 100/ANSI X3.64 virtual terminal with 132 cols, - cols#132, use=screen4, + cols#132, use=screen, screen2|VT 100/ANSI X3.64 virtual terminal (old 2.x), cols#80, it#8, lines#24, @@ -8410,9 +8442,9 @@ screen3|VT 100/ANSI X3.64 virtual terminal (old 3.x), # was last updated in 2009 to include 256-color support. The most recent # release is 4.6.2 (October 2017). screen4|VT 100/ANSI X3.64 virtual terminal (4.x), - use=ecma+index, use=screen, + use=ecma+index, use=screen-base, -# As of March 2019, screen 5.0 has not been released. +# As of December 2022, screen 5.0 has not been released. # # However, # @@ -8428,7 +8460,8 @@ screen5|VT 100/ANSI X3.64 virtual terminal (someday), rmso=\E[27m, sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%? %p5%t;2%;m%?%p9%t\016%e\017%;, - smso=\E[7m, use=ecma+italics, use=screen4, + smso=\E[7m, use=ecma+italics, use=ecma+index, + use=screen-base, #### Tmux @@ -8447,7 +8480,7 @@ tmux|tmux terminal multiplexer, smso=\E[7m, E3=\E[3J, Smulx=\E[4:%p1%dm, use=ecma+italics, use=ecma+strikeout, use=xterm+edit, use=xterm+pcfkeys, use=xterm+sl, use=xterm+tmux, - use=screen, + use=screen, use=bracketed+paste, tmux-256color|tmux with 256 colors, use=xterm+256setaf, use=tmux, @@ -8497,7 +8530,7 @@ mosh|mobile shell, sgr0=\E(B\E[m, use=ansi+enq, use=xterm+meta, use=ecma+italics, use=ecma+index, use=xterm+acs, use=xterm+sm+1006, use=xterm+pcfkeys, - use=xterm-xfree86, + use=xterm-xfree86, use=bracketed+paste, mosh-256color|mosh using 256-colors, use=xterm+256color, use=mosh, @@ -21668,7 +21701,7 @@ screen.minitel1|Screen specific for minitel1, yzz||}}~~, bel=\007\E\^ \E\\, bold@, csr@, flash=\Eg\E\^ \E\\, kmous@, rmul@, smul@, u8=\E[?1;2c, use=decid+cpr, - use=xterm+x11mouse, use=screen4, + use=xterm+x11mouse, use=screen, screen.minitel1b|Screen specific for minitel1b, kclr=\E[2J, kdl1=\E[M, kf13=^Y{1, kf14=^Y{2, kf15=^Y{3, @@ -21804,7 +21837,7 @@ screen.linux-m1|Linux m1 specific for screen, \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n, - use=decid+cpr, use=xterm+x11mouse, use=screen4, + use=decid+cpr, use=xterm+x11mouse, use=screen, screen.linux-m1b|Linux m1b specific for screen, colors@, pairs@, @@ -25442,6 +25475,19 @@ v3220|LANPAR Vision II model 3220/3221/3222, # #### XTERM Extensions: # +# For a discussion of "xterm", "xterm-256color" as values for TERM, see +# https://invisible-island.net/ncurses/ncurses.faq.html#xterm_generic +# https://invisible-island.net/ncurses/ncurses.faq.html#xterm_256color +# +# For xterm control sequences, see +# https://invisible-island.net/xterm/ctlseqs/ctlseqs.html +# +# For function-keys with modifiers, see +# https://invisible-island.net/ncurses/ncurses.faq.html#modified_keys +# +# For a discussion of "bracketed paste", see +# https://invisible-island.net/xterm/xterm-paste64.html +# # Most of the xterm extensions are for function-keys. Since xterm patch #94 (in # 1999), xterm has supported shift/control/alt/meta modifiers which produce # additional function-key strings. Some other developers copied the feature, @@ -25458,6 +25504,13 @@ v3220|LANPAR Vision II model 3220/3221/3222, # kLFT5 kLFT6 kLFT7 kNXT3 kNXT4 kNXT5 kNXT6 kNXT7 kPRV3 kPRV4 kPRV5 kPRV6 kPRV7 # kRIT3 kRIT4 kRIT5 kRIT6 kRIT7 kUP kUP3 kUP4 kUP5 kUP6 kUP7 ka2 kb1 kb3 kc2 # +# Bracketed paste is described with these capabilities in vim: +# +# BE enables bracketed paste +# BD disables bracketed paste +# PE is sent before the pasted text +# PD is sent after the pasted text +# # Here are the other xterm-related extensions which are used in this file: # # Cr is a string capability which resets the cursor color @@ -27656,4 +27709,8 @@ v3220|LANPAR Vision II model 3220/3221/3222, # + modify nsterm to use xterm+alt1049 (report by Paul Handly) -TD # + modify putty to use xterm+alt1049 -TD # +# 2022-12-24 +# + add/use bracketed+paste to help identify terminals supporting this +# xterm feature (prompted by discussion with Bram Moolenaar) -TD +# ######## SHANTIH! SHANTIH! SHANTIH! diff --git a/ncurses/base/lib_getch.c b/ncurses/base/lib_getch.c index 43460394..831ded9d 100644 --- a/ncurses/base/lib_getch.c +++ b/ncurses/base/lib_getch.c @@ -44,7 +44,7 @@ #define NEED_KEY_EVENT #include -MODULE_ID("$Id: lib_getch.c,v 1.144 2022/08/13 14:36:43 tom Exp $") +MODULE_ID("$Id: lib_getch.c,v 1.145 2022/12/24 22:38:38 tom Exp $") #include @@ -380,7 +380,17 @@ recur_wrefresh(WINDOW *win) { #ifdef USE_PTHREADS SCREEN *sp = _nc_screen_of(win); - if (_nc_use_pthreads && sp != CURRENT_SCREEN) { + bool same_sp; + + if (_nc_use_pthreads) { + _nc_lock_global(curses); + same_sp = (sp == CURRENT_SCREEN); + _nc_unlock_global(curses); + } else { + same_sp = (sp == CURRENT_SCREEN); + } + + if (_nc_use_pthreads && !same_sp) { SCREEN *save_SP; /* temporarily switch to the window's screen to check/refresh */ diff --git a/ncurses/tty/lib_tstp.c b/ncurses/tty/lib_tstp.c index f228f72b..dd925c7e 100644 --- a/ncurses/tty/lib_tstp.c +++ b/ncurses/tty/lib_tstp.c @@ -43,7 +43,7 @@ #include -MODULE_ID("$Id: lib_tstp.c,v 1.53 2022/10/15 13:09:05 Mikhail.Korolev Exp $") +MODULE_ID("$Id: lib_tstp.c,v 1.54 2022/12/24 22:22:10 tom Exp $") #if defined(SIGTSTP) && (HAVE_SIGACTION || HAVE_SIGVEC) #define USE_SIGTSTP 1 @@ -287,6 +287,7 @@ handle_SIGINT(int sig) NCURSES_EXPORT(void) _nc_set_read_thread(bool enable) { + _nc_lock_global(curses); if (enable) { # if USE_WEAK_SYMBOLS if ((pthread_self) && (pthread_kill) && (pthread_equal)) @@ -295,6 +296,7 @@ _nc_set_read_thread(bool enable) } else { _nc_globals.read_thread = 0; } + _nc_unlock_global(curses); } # endif diff --git a/package/debian-mingw/changelog b/package/debian-mingw/changelog index 4794ab7b..29c2c718 100644 --- a/package/debian-mingw/changelog +++ b/package/debian-mingw/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.3+20221217) unstable; urgency=low +ncurses6 (6.3+20221224) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 17 Dec 2022 07:29:16 -0500 + -- Thomas E. Dickey Sat, 24 Dec 2022 07:35:34 -0500 ncurses6 (5.9+20131005) unstable; urgency=low diff --git a/package/debian-mingw64/changelog b/package/debian-mingw64/changelog index 4794ab7b..29c2c718 100644 --- a/package/debian-mingw64/changelog +++ b/package/debian-mingw64/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.3+20221217) unstable; urgency=low +ncurses6 (6.3+20221224) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 17 Dec 2022 07:29:16 -0500 + -- Thomas E. Dickey Sat, 24 Dec 2022 07:35:34 -0500 ncurses6 (5.9+20131005) unstable; urgency=low diff --git a/package/debian/changelog b/package/debian/changelog index 8bfdc1b7..29e49c9e 100644 --- a/package/debian/changelog +++ b/package/debian/changelog @@ -1,8 +1,8 @@ -ncurses6 (6.3+20221217) unstable; urgency=low +ncurses6 (6.3+20221224) unstable; urgency=low * latest weekly patch - -- Thomas E. Dickey Sat, 17 Dec 2022 07:29:16 -0500 + -- Thomas E. Dickey Sat, 24 Dec 2022 07:35:34 -0500 ncurses6 (5.9+20120608) unstable; urgency=low diff --git a/package/mingw-ncurses.nsi b/package/mingw-ncurses.nsi index b898945c..8f91e91f 100644 --- a/package/mingw-ncurses.nsi +++ b/package/mingw-ncurses.nsi @@ -1,4 +1,4 @@ -; $Id: mingw-ncurses.nsi,v 1.556 2022/12/17 12:29:16 tom Exp $ +; $Id: mingw-ncurses.nsi,v 1.557 2022/12/24 12:35:34 tom Exp $ ; TODO add examples ; TODO bump ABI to 6 @@ -10,7 +10,7 @@ !define VERSION_MAJOR "6" !define VERSION_MINOR "3" !define VERSION_YYYY "2022" -!define VERSION_MMDD "1217" +!define VERSION_MMDD "1224" !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD} !define MY_ABI "5" diff --git a/package/mingw-ncurses.spec b/package/mingw-ncurses.spec index 2ec3b2fa..5ffb9467 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.3 -Release: 20221217 +Release: 20221224 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/package/ncurses.spec b/package/ncurses.spec index 09f6c992..ede97eb3 100644 --- a/package/ncurses.spec +++ b/package/ncurses.spec @@ -1,7 +1,7 @@ Summary: shared libraries for terminal handling Name: ncurses6 Version: 6.3 -Release: 20221217 +Release: 20221224 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/package/ncursest.spec b/package/ncursest.spec index 996441c0..52cf868e 100644 --- a/package/ncursest.spec +++ b/package/ncursest.spec @@ -1,7 +1,7 @@ Summary: Curses library with POSIX thread support. Name: ncursest6 Version: 6.3 -Release: 20221217 +Release: 20221224 License: X11 Group: Development/Libraries Source: ncurses-%{version}-%{release}.tgz diff --git a/test/ditto.c b/test/ditto.c index f432ea71..390eb3c0 100644 --- a/test/ditto.c +++ b/test/ditto.c @@ -30,7 +30,7 @@ /* * Author: Thomas E. Dickey (1998-on) * - * $Id: ditto.c,v 1.56 2022/12/10 22:10:49 tom Exp $ + * $Id: ditto.c,v 1.58 2022/12/24 23:53:08 tom Exp $ * * The program illustrates how to set up multiple screens from a single * program. @@ -92,6 +92,15 @@ typedef struct { #endif } DITTO; +#ifdef USE_PTHREADS +#define LockIt() pthread_mutex_lock(&pending_mutex) +#define UnlockIt() pthread_mutex_unlock(&pending_mutex) +pthread_mutex_t pending_mutex; +#else +#define LockIt() /* nothing */ +#define UnlockIt() /* nothing */ +#endif + /* * Structure used to pass multiple parameters via the use_screen() * single-parameter interface. @@ -411,8 +420,6 @@ main(int argc, char *argv[]) /* NOTREACHED */ } } - if (optind < argc) - usage(FALSE); if ((data = typeCalloc(DITTO, (size_t) argc)) == 0) failed("calloc data"); @@ -424,6 +431,7 @@ main(int argc, char *argv[]) } #ifdef USE_PTHREADS + pthread_mutex_init(&pending_mutex, NULL); /* * For multi-threaded operation, set up a reader for each of the screens. * That uses blocking I/O rather than polling for input, so no calls to @@ -461,6 +469,7 @@ main(int argc, char *argv[]) * Cleanup and exit */ for (j = argc - 1; j >= 0; j--) { + LockIt(); USING_SCREEN(data[j].screen, close_screen, 0); fprintf(data[j].output, "**Closed\r\n"); @@ -471,6 +480,7 @@ main(int argc, char *argv[]) fflush(data[j].output); fclose(data[j].output); delscreen(data[j].screen); + UnlockIt(); } ExitProgram(EXIT_SUCCESS); } diff --git a/test/worm.c b/test/worm.c index aca96c6f..7c4842e4 100644 --- a/test/worm.c +++ b/test/worm.c @@ -53,7 +53,7 @@ traces will be dumped. The program stops and waits for one character of input at the beginning and end of the interval. - $Id: worm.c,v 1.88 2022/12/04 00:40:11 tom Exp $ + $Id: worm.c,v 1.89 2022/12/24 20:46:49 tom Exp $ */ #include @@ -368,7 +368,11 @@ start_worm(void *arg) unsigned long compare = 0; Trace(("start_worm")); while (!quit_worm((int) (((struct worm *) arg) - worm))) { - while (compare < sequence) { + for (;;) { + bool done = FALSE; + Locked(done = (compare >= sequence)); + if (done) + break; ++compare; USING_WINDOW2(stdscr, draw_worm, arg); } -- 2.45.0