]> ncurses.scripts.mit.edu Git - ncurses.git/commitdiff
ncurses 6.0 - patch 20151121
authorThomas E. Dickey <dickey@invisible-island.net>
Sun, 22 Nov 2015 02:17:21 +0000 (02:17 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sun, 22 Nov 2015 02:17:21 +0000 (02:17 +0000)
+ fix some inconsistencies in the pccon* entries -TD
+ add bold to pccon+sgr+acs and pccon-base (Tati Chevron).
+ add keys f12-f124 to pccon+keys (Tati Chevron).
+ add test/test_sgr.c program to exercise all combinations of sgr.

15 files changed:
MANIFEST
NEWS
VERSION
dist.mk
man/curs_bkgd.3x
misc/terminfo.src
package/debian-mingw/changelog
package/debian-mingw64/changelog
package/debian/changelog
package/mingw-ncurses.nsi
package/mingw-ncurses.spec
package/ncurses.spec
test/modules
test/programs
test/test_sgr.c [new file with mode: 0644]

index ecbdc78b7b5448744030496342d5117d28c2bb93..4054ef4665864bb7bfe7dfa3d7c79323fc805219 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
 ./test/test_inwstr.c
 ./test/test_opaque.c
 ./test/test_setupterm.c
 ./test/test_inwstr.c
 ./test/test_opaque.c
 ./test/test_setupterm.c
+./test/test_sgr.c
 ./test/test_vid_puts.c
 ./test/test_vidputs.c
 ./test/testaddch.c
 ./test/test_vid_puts.c
 ./test/test_vidputs.c
 ./test/testaddch.c
diff --git a/NEWS b/NEWS
index 43dfe1609856571ad7626c458ac3a09c55b06aa0..c90b0f21ef6401a91d8ad1c43e906d8c5ead87a8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,7 +25,7 @@
 -- 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.2526 2015/11/08 01:57:15 tom Exp $
+-- $Id: NEWS,v 1.2530 2015/11/21 23:33:30 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
@@ -45,6 +45,12 @@ 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.
 
 Changes through 1.9.9e did not credit all contributions;
 it is not possible to add this information.
 
+20151121
+       + fix some inconsistencies in the pccon* entries -TD
+       + add bold to pccon+sgr+acs and pccon-base (Tati Chevron).
+       + add keys f12-f124 to pccon+keys (Tati Chevron).
+       + add test/test_sgr.c program to exercise all combinations of sgr.
+
 20151107
        + modify tset's assignment to TERM in its output to reflect the name by
          which the terminal description is found, rather than the primary
 20151107
        + modify tset's assignment to TERM in its output to reflect the name by
          which the terminal description is found, rather than the primary
diff --git a/VERSION b/VERSION
index 8d76fa0638ce2e25d32a4eae4361156a3375ff70..ccabf823e95b6833c881b35deb1162b8a535bc8b 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-5:0:9  6.0     20151107
+5:0:9  6.0     20151121
diff --git a/dist.mk b/dist.mk
index 8b932977f9dab293f816017959ca196841b82ad9..6652459761d1a16a96f2e38a0b8223bef516ab4c 100644 (file)
--- a/dist.mk
+++ b/dist.mk
@@ -25,7 +25,7 @@
 # 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.1078 2015/11/06 00:44:10 tom Exp $
+# $Id: dist.mk,v 1.1080 2015/11/21 15:55:51 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
@@ -37,7 +37,7 @@ SHELL = /bin/sh
 # These define the major/minor/patch versions of ncurses.
 NCURSES_MAJOR = 6
 NCURSES_MINOR = 0
 # These define the major/minor/patch versions of ncurses.
 NCURSES_MAJOR = 6
 NCURSES_MINOR = 0
-NCURSES_PATCH = 20151107
+NCURSES_PATCH = 20151121
 
 # 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)
index 50c3b303adb9f589596c67ec62011a5f23c42b09..ef00f7e7ba403c4ce5d3b3aba6487c5bf1d38f3e 100644 (file)
@@ -26,7 +26,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: curs_bkgd.3x,v 1.23 2015/07/21 00:11:05 tom Exp $
+.\" $Id: curs_bkgd.3x,v 1.24 2015/11/21 01:53:42 tom Exp $
 .de bP
 .IP \(bu 4
 ..
 .de bP
 .IP \(bu 4
 ..
@@ -76,7 +76,6 @@ the new background rendition.
 .bP
 Wherever the former background character
 appears, it is changed to the new background character.
 .bP
 Wherever the former background character
 appears, it is changed to the new background character.
-.RE
 .SS getbkgd
 .PP
 The \fBgetbkgd\fR function returns the given window's current background
 .SS getbkgd
 .PP
 The \fBgetbkgd\fR function returns the given window's current background
index 1b409f258c17662bc3697b37152bc9dd23474c64..ad5cf18f69a1311ed86af8bd7407d022bcdd2420 100644 (file)
@@ -6,8 +6,8 @@
 # Report bugs and new terminal descriptions to
 #      bug-ncurses@gnu.org
 #
 # Report bugs and new terminal descriptions to
 #      bug-ncurses@gnu.org
 #
-#      $Revision: 1.554 $
-#      $Date: 2015/10/24 16:00:04 $
+#      $Revision: 1.558 $
+#      $Date: 2015/11/22 01:01:00 $
 #
 # 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
@@ -1277,7 +1277,7 @@ nsterm-build343|Terminal.app in OS X 10.10,
 # + kLFT5/kRIT5 work, but not up/down with control-modifier
 # + kLFT/kRIT work, but not up/down with shift-modifier
 # + there are a few predefined bindings with Alt, but no clear pattern.
 # + kLFT5/kRIT5 work, but not up/down with control-modifier
 # + kLFT/kRIT work, but not up/down with shift-modifier
 # + there are a few predefined bindings with Alt, but no clear pattern.
-# + uses alt-key as UTF-8 "meta" something like xterm altSendsEscape 
+# + uses alt-key as UTF-8 "meta" something like xterm altSendsEscape
 # Using ncurses test-program with xterm-new:
 # + no italics
 # Using xterm's scripts:
 # Using ncurses test-program with xterm-new:
 # + no italics
 # Using xterm's scripts:
@@ -2211,37 +2211,52 @@ iris-color|xwsh|IRIX ANSI with color,
 # Added several capabilities to pccon+base, reading wsemul_vt100_subr.c -TD
 # Changed kbs to DEL and removed keys that duplicate stty settings -TD
 #
 # Added several capabilities to pccon+base, reading wsemul_vt100_subr.c -TD
 # Changed kbs to DEL and removed keys that duplicate stty settings -TD
 #
+# Notes from testing with vttest:
+#      fails wrapping test
+#      no 8-bit controls
+#      identifies as vt200 with selective erase, but does not implement DECSCA
+#      no vt52 mode
+#      also lacks these:
+#              ESC # 8   DEC Screen Alignment Test (DECALN).
+#              CSI ? 5 h Reverse Video (DECSCNM).
+#
 pccon+keys|OpenBSD PC keyboard keys,
        kbs=\177, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
        kdch1=\E[3~, kend=\E[8~, kent=^M, kf1=\E[11~, kf10=\E[21~,
 pccon+keys|OpenBSD PC keyboard keys,
        kbs=\177, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
        kdch1=\E[3~, kend=\E[8~, kent=^M, kf1=\E[11~, kf10=\E[21~,
-       kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~,
+       kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+       kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+       kf19=\E[33~, kf2=\E[12~, kf20=\E[34~, kf21=\E[35~,
+       kf22=\E[36~, kf23=\E[37~, kf24=\E[38~, kf3=\E[13~,
        kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
        kf9=\E[20~, khome=\E[7~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
        krfr=^R,
 pccon+sgr+acs0|sgr and simple ASCII pseudographics for OpenBSD PC console,
        acsc=+>\,<-\^.v0#`+a\:f\\h#i#j+k+l+m+n+o~p-q-r-s_t+u+v+w+x|y#z#{*|!}#~o,
        kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
        kf9=\E[20~, khome=\E[7~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
        krfr=^R,
 pccon+sgr+acs0|sgr and simple ASCII pseudographics for OpenBSD PC console,
        acsc=+>\,<-\^.v0#`+a\:f\\h#i#j+k+l+m+n+o~p-q-r-s_t+u+v+w+x|y#z#{*|!}#~o,
-       sgr=\E[0%?%p1%p3%|%t;7%;m, sgr0=\E[m,
+       sgr=\E[0%?%p1%p3%|%t;7%;%?%p6%t;1%;%?%p2%t;4%;m,
+       sgr0=\E[m,
 pccon+sgr+acs|sgr and default ASCII pseudographics for OpenBSD PC console,
        acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        enacs=\E)0$<5>, rmacs=\E(B$<5>,
 pccon+sgr+acs|sgr and default ASCII pseudographics for OpenBSD PC console,
        acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        enacs=\E)0$<5>, rmacs=\E(B$<5>,
-       sgr=\E[0%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<5>,
+       sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>,
        sgr0=\E[m\E(B$<5>, smacs=\E(0$<5>,
        sgr0=\E[m\E(B$<5>, smacs=\E(0$<5>,
+# underline renders as color
 pccon+colors|ANSI colors for OpenBSD PC console,
        bce,
 pccon+colors|ANSI colors for OpenBSD PC console,
        bce,
-       colors#8, pairs#64,
-       op=\E[m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+       colors#8, ncv#2, pairs#64,
+       op=\E[47;30m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
 pccon+base|base capabilities for OpenBSD PC console,
        am, km, mc5i, msgr, npc, nxon, xenl, xon,
        cols#80, it#8, lines#24,
 pccon+base|base capabilities for OpenBSD PC console,
        am, km, mc5i, msgr, npc, nxon, xenl, xon,
        cols#80, it#8, lines#24,
-       bel=^G, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J, cuf1=\E[C,
-       cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
-       dch1=\E[P, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
-       el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
+       bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M, cub1=^H, cud1=^J,
+       cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
+       dch=\E[%p1%dP, dch1=\E[P, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
+       el=\E[K, el1=\E[1K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
        il1=\E[L, ind=\ED, nel=\EE, rev=\E[7m, ri=\EM, rmam=\E[?7l,
        il1=\E[L, ind=\ED, nel=\EE, rev=\E[7m, ri=\EM, rmam=\E[?7l,
-       rmso=\E[m, rs2=\Ec$<50>, smam=\E[?7h, smso=\E[7m,
-       tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
+       rmso=\E[27m, rmul=\E[24m, rs2=\Ec$<50>, smam=\E[?7h,
+       smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR,
+       u7=\E[6n,
 pccon0-m|OpenBSD PC console without colors & with simple ASCII pseudographics,
 pccon0-m|OpenBSD PC console without colors & with simple ASCII pseudographics,
-       use=pccon+base, use=pccon+sgr+acs0, use=pccon+keys,
+       use=pccon+sgr+acs0, use=pccon+base, use=pccon+keys,
 pccon0|OpenBSD PC console with simple ASCII pseudographics,
        use=pccon0-m, use=pccon+colors,
 pccon-m|OpenBSD PC console without colors,
 pccon0|OpenBSD PC console with simple ASCII pseudographics,
        use=pccon0-m, use=pccon+colors,
 pccon-m|OpenBSD PC console without colors,
@@ -9750,7 +9765,7 @@ vi603|visual603|visual 603,
 # (800)-800-WYSE (option 5 gets you a human).  There's a Web page at the
 # obvious address, <http://www.wyse.com>.  They keep terminfo entries at
 # https://web.archive.org/web/19970712022641/http://www.wyse.co.uk/support/appnotes/idxappnt.htm
 # (800)-800-WYSE (option 5 gets you a human).  There's a Web page at the
 # obvious address, <http://www.wyse.com>.  They keep terminfo entries at
 # https://web.archive.org/web/19970712022641/http://www.wyse.co.uk/support/appnotes/idxappnt.htm
-# 
+#
 #
 # Wyse bought out Link Technology, Inc. in 1990 and closed it down in 1995.
 # They now own the Qume and Amdek brands, too.  So these are the people to
 #
 # Wyse bought out Link Technology, Inc. in 1990 and closed it down in 1995.
 # They now own the Qume and Amdek brands, too.  So these are the people to
@@ -23767,7 +23782,14 @@ v3220|LANPAR Vision II model 3220/3221/3222,
 #      + updated minitel entries to fix kel problem with emacs, and add
 #        minitel1b-nb (Alexandre Montaron).
 #      + reviewed/updated nsterm entry Terminal.app in OSX -TD
 #      + updated minitel entries to fix kel problem with emacs, and add
 #        minitel1b-nb (Alexandre Montaron).
 #      + reviewed/updated nsterm entry Terminal.app in OSX -TD
-#      + replace some dead URLs in comments with equivalents from the
+#      + replace some dead URLs in commands with equivalents from the
 #        Internet Archive -TD
 #
 #        Internet Archive -TD
 #
+# 2015-11-14
+#      + add bold to pccon+sgr+acs and pccon-base (Tati Chevron).
+#      + add keys f12-f124 to pccon+keys (Tati Chevron).
+#
+# 2015-11-21
+#      + fix some inconsistencies in the pccon* entries -TD
+#
 ######## SHANTIH!  SHANTIH!  SHANTIH!
 ######## SHANTIH!  SHANTIH!  SHANTIH!
index c0b6df2beb7d8d03470c6cc1423c55f3d66a02c4..28dbca41495dd0fd9260ae85069cc03a1cf5aab6 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20151107) unstable; urgency=low
+ncurses6 (6.0+20151121) unstable; urgency=low
 
   * latest weekly patch
 
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Thu, 05 Nov 2015 19:44:10 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Nov 2015 10:55:51 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index c0b6df2beb7d8d03470c6cc1423c55f3d66a02c4..28dbca41495dd0fd9260ae85069cc03a1cf5aab6 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20151107) unstable; urgency=low
+ncurses6 (6.0+20151121) unstable; urgency=low
 
   * latest weekly patch
 
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Thu, 05 Nov 2015 19:44:10 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Nov 2015 10:55:51 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index e1733964940d83efcfb9258a9a362d60d0c5551b..bfe35490c2afcd88a1b3db93c2df731de2c5f3e2 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20151107) unstable; urgency=low
+ncurses6 (6.0+20151121) unstable; urgency=low
 
   * latest weekly patch
 
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Thu, 05 Nov 2015 19:44:10 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Nov 2015 10:55:51 -0500
 
 ncurses6 (5.9-20120608) unstable; urgency=low
 
 
 ncurses6 (5.9-20120608) unstable; urgency=low
 
index dc90ca3a1149163d1c1f43aceb101fe669b31d68..bbc42f6191c9f2965a1b0ddd5fda410f82f492f9 100644 (file)
@@ -1,4 +1,4 @@
-; $Id: mingw-ncurses.nsi,v 1.131 2015/11/06 00:44:10 tom Exp $\r
+; $Id: mingw-ncurses.nsi,v 1.133 2015/11/21 15:55:51 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
@@ -10,7 +10,7 @@
 !define VERSION_MAJOR "6"\r
 !define VERSION_MINOR "0"\r
 !define VERSION_YYYY  "2015"\r
 !define VERSION_MAJOR "6"\r
 !define VERSION_MINOR "0"\r
 !define VERSION_YYYY  "2015"\r
-!define VERSION_MMDD  "1107"\r
+!define VERSION_MMDD  "1121"\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
index ae862e89cea78a49894bb34cbb2f6c2742ada548..03a90f047bb50277e79b89a2864b87e8cce35610 100644 (file)
@@ -3,7 +3,7 @@
 Summary: shared libraries for terminal handling
 Name: mingw32-ncurses6
 Version: 6.0
 Summary: shared libraries for terminal handling
 Name: mingw32-ncurses6
 Version: 6.0
-Release: 20151107
+Release: 20151121
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index eb1e7f108ea8ca90f2d00ebcb3b50e6d12388355..11743f9a3c66d63387bf8ad302cfd4281017e13e 100644 (file)
@@ -1,7 +1,7 @@
 Summary: shared libraries for terminal handling
 Name: ncurses6
 Version: 6.0
 Summary: shared libraries for terminal handling
 Name: ncurses6
 Version: 6.0
-Release: 20151107
+Release: 20151121
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index e255c286bb155ac99a291b3089dd10f6d7d2f877..c1d87d31905e8a225311a4b8ae98f62af9b4d1a3 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: modules,v 1.52 2015/06/27 10:40:27 tom Exp $
+# $Id: modules,v 1.53 2015/11/21 16:05:48 tom Exp $
 ##############################################################################
 # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc.                #
 #                                                                            #
 ##############################################################################
 # Copyright (c) 1998-2014,2015 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -90,6 +90,7 @@ test_instr    progs           $(srcdir)       $(HEADER_DEPS)
 test_inwstr    progs           $(srcdir)       $(HEADER_DEPS)
 test_opaque    progs           $(srcdir)       $(HEADER_DEPS)
 test_setupterm progs           $(srcdir)       $(HEADER_DEPS)
 test_inwstr    progs           $(srcdir)       $(HEADER_DEPS)
 test_opaque    progs           $(srcdir)       $(HEADER_DEPS)
 test_setupterm progs           $(srcdir)       $(HEADER_DEPS)
+test_sgr       progs           $(srcdir)       $(HEADER_DEPS)
 test_vid_puts  progs           $(srcdir)       $(HEADER_DEPS)
 test_vidputs   progs           $(srcdir)       $(HEADER_DEPS)
 testaddch      progs           $(srcdir)       $(HEADER_DEPS)
 test_vid_puts  progs           $(srcdir)       $(HEADER_DEPS)
 test_vidputs   progs           $(srcdir)       $(HEADER_DEPS)
 testaddch      progs           $(srcdir)       $(HEADER_DEPS)
index 94765e2b404530b33869b2eb55e3c963a426007e..704d66688e69f622133678f6a856f8c3c4e822d5 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: programs,v 1.26 2015/06/27 10:40:53 tom Exp $
+# $Id: programs,v 1.27 2015/11/21 16:06:12 tom Exp $
 ##############################################################################
 # Copyright (c) 2006-2014,2015 Free Software Foundation, Inc.                #
 #                                                                            #
 ##############################################################################
 # Copyright (c) 2006-2014,2015 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -87,6 +87,7 @@ test_instr    $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_instr
 test_inwstr    $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_inwstr
 test_opaque    $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_opaque
 test_setupterm $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_setupterm
 test_inwstr    $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_inwstr
 test_opaque    $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_opaque
 test_setupterm $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_setupterm
+test_sgr       $(LDFLAGS_TINFO)        $(LOCAL_LIBS)   test_sgr
 test_vid_puts  $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_vid_puts
 test_vidputs   $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_vidputs
 testaddch      $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   testaddch
 test_vid_puts  $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_vid_puts
 test_vidputs   $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   test_vidputs
 testaddch      $(LDFLAGS_CURSES)       $(LOCAL_LIBS)   testaddch
diff --git a/test/test_sgr.c b/test/test_sgr.c
new file mode 100644 (file)
index 0000000..cff9d0d
--- /dev/null
@@ -0,0 +1,363 @@
+/****************************************************************************
+ * Copyright (c) 2015 Free Software Foundation, Inc.                        *
+ *                                                                          *
+ * Permission is hereby granted, free of charge, to any person obtaining a  *
+ * copy of this software and associated documentation files (the            *
+ * "Software"), to deal in the Software without restriction, including      *
+ * without limitation the rights to use, copy, modify, merge, publish,      *
+ * distribute, distribute with modifications, sublicense, and/or sell       *
+ * copies of the Software, and to permit persons to whom the Software is    *
+ * furnished to do so, subject to the following conditions:                 *
+ *                                                                          *
+ * The above copyright notice and this permission notice shall be included  *
+ * in all copies or substantial portions of the Software.                   *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+ * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+ *                                                                          *
+ * Except as contained in this notice, the name(s) of the above copyright   *
+ * holders shall not be used in advertising or otherwise to promote the     *
+ * sale, use or other dealings in this Software without prior written       *
+ * authorization.                                                           *
+ ****************************************************************************/
+
+/*
+ * Author: Thomas E. Dickey
+ *
+ * $Id: test_sgr.c,v 1.4 2015/11/21 22:43:50 tom Exp $
+ *
+ * A simple demo of the sgr/sgr0 terminal capabilities.
+ */
+#define USE_TINFO
+#include <test.priv.h>
+
+static void failed(const char *) GCC_NORETURN;
+
+static void
+failed(const char *msg)
+{
+    fprintf(stderr, "%s\n", msg);
+    ExitProgram(EXIT_FAILURE);
+}
+
+#if HAVE_TIGETSTR
+
+static bool q_opt = FALSE;
+
+static char *d_opt;
+static char *e_opt;
+static char **db_list;
+static int db_item;
+
+static long total_values;
+
+static char *
+make_dbitem(char *p, char *q)
+{
+    char *result = malloc(strlen(e_opt) + 2 + (size_t) (p - q));
+    sprintf(result, "%s=%.*s", e_opt, (int) (p - q), q);
+    return result;
+}
+
+static void
+make_dblist(void)
+{
+    if (d_opt && e_opt) {
+       int pass;
+
+       for (pass = 0; pass < 2; ++pass) {
+           char *p, *q;
+           size_t count = 0;
+
+           for (p = q = d_opt; *p != '\0'; ++p) {
+               if (*p == ':') {
+                   if (p != q + 1) {
+                       if (pass) {
+                           db_list[count] = make_dbitem(p, q);
+                       }
+                       count++;
+                   }
+                   q = p + 1;
+               }
+           }
+           if (p != q + 1) {
+               if (pass) {
+                   db_list[count] = make_dbitem(p, q);
+               }
+               count++;
+           }
+           if (!pass) {
+               db_list = typeCalloc(char *, count + 1);
+           }
+       }
+    }
+}
+
+static char *
+next_dbitem(void)
+{
+    char *result = 0;
+
+    if (db_list) {
+       if ((result = db_list[db_item]) == 0) {
+           db_item = 0;
+           result = db_list[0];
+       } else {
+           db_item++;
+       }
+    }
+    printf("** %s\n", result);
+    return result;
+}
+
+#ifdef NO_LEAKS
+static void
+free_dblist(void)
+{
+    if (db_list) {
+       int n;
+       for (n = 0; db_list[n]; ++n)
+           free(db_list[n]);
+       free(db_list);
+       db_list = 0;
+    }
+}
+#endif
+
+#define MAXPAR    9
+#define MAXSGR    (1 << MAXPAR)
+#define BITS2P(n) (count & (1 << (n - 1)))
+#define MASK_SMSO (1 << 0)
+#define MASK_BOLD (1 << 5)
+#define MASK_REV  (1 << 2)
+
+static void
+dumpit(unsigned bits, unsigned ignore, const char *sgr, const char *sgr0)
+{
+    static const char sample[] = "abcdefghijklm";
+    static char params[] = "SURBDBIPA";
+    unsigned n;
+
+    printf("%4d ", bits);
+    bits &= ~ignore;
+    for (n = 0; n < MAXPAR; ++n) {
+       putchar((bits & (1 << n)) ? params[n] : '-');
+    }
+    putchar(' ');
+    putp(sgr);
+    putp(sample);
+    putp(sgr0);
+    putchar('\n');
+}
+
+static bool
+one_bit(unsigned a, unsigned b)
+{
+    unsigned c = (a ^ b);
+    bool result = FALSE;
+    if (c) {
+       while (!(c & 1)) {
+           c >>= 1;
+       }
+       result = (c == 1);
+    }
+    return result;
+}
+
+static void
+brute_force(const char *name)
+{
+    unsigned count;
+    char *my_sgr;
+    char *my_sgr0;
+    char *my_bold;
+    char *my_revs;
+    char *my_smso;
+
+    if (db_list) {
+       putenv(next_dbitem());
+    }
+    if (!q_opt)
+       printf("Terminal type \"%s\"\n", name);
+    setupterm((NCURSES_CONST char *) name, 1, (int *) 0);
+    if (!q_opt) {
+       if (strcmp(name, ttytype))
+           printf("... actual \"%s\"\n", ttytype);
+    }
+
+    my_sgr = tigetstr("sgr");
+    my_sgr0 = tigetstr("sgr0");
+    my_bold = tigetstr("bold");
+    my_revs = tigetstr("rev");
+    my_smso = tigetstr("smso");
+
+    if (!VALID_STRING(my_sgr)) {
+       fprintf(stderr, "no \"sgr\" capability found\n");
+    } else if (!VALID_STRING(my_sgr0)) {
+       fprintf(stderr, "no \"sgr0\" capability found\n");
+    } else {
+       char *values[MAXSGR];
+       unsigned j;
+       unsigned ignore = 0;
+       unsigned reason = 0;
+       unsigned repeat = 0;
+       for (count = 0; count < MAXSGR; ++count) {
+           values[count] = tparm(my_sgr,
+                                 BITS2P(1),
+                                 BITS2P(2),
+                                 BITS2P(3),
+                                 BITS2P(4),
+                                 BITS2P(5),
+                                 BITS2P(6),
+                                 BITS2P(7),
+                                 BITS2P(8),
+                                 BITS2P(9));
+           if (values[count] != 0) {
+               values[count] = strdup(values[count]);
+           }
+       }
+       for (count = 0; count < MAXSGR; ++count) {
+           if (values[count] != 0) {
+               for (j = count + 1; j < MAXSGR; ++j) {
+                   if (values[j] == 0)
+                       continue;
+                   if (strcmp(values[count], values[j]))
+                       continue;
+                   if (one_bit(count, j)) {
+                       free(values[j]);
+                       values[j] = 0;
+                   }
+               }
+           }
+       }
+       for (j = 0; j < MAXPAR; ++j) {
+           unsigned mask = (1 << j);
+           for (count = 0; count < MAXSGR; ++count) {
+               if ((count & mask) != 0)
+                   continue;
+               if (values[count] != 0 && values[count + mask] != 0) {
+                   mask = 0;
+                   break;
+               }
+           }
+           ignore |= mask;
+       }
+       /* smso is tested first, but often duplicates bold or reverse. */
+       if (VALID_STRING(my_smso)) {
+           if (VALID_STRING(my_bold) && !strcmp(my_bold, my_smso)) {
+               repeat |= MASK_SMSO;
+               reason = MASK_BOLD;
+           }
+           if (VALID_STRING(my_revs) && !strcmp(my_revs, my_smso)) {
+               repeat |= MASK_SMSO;
+               reason = MASK_REV;
+           }
+       }
+       for (count = 0; count < MAXSGR; ++count) {
+           if (values[count] != 0) {
+               bool found = FALSE;
+               if ((repeat & MASK_SMSO) != 0
+                   && (count & MASK_SMSO) != 0) {
+                   found = TRUE;
+               } else {
+                   for (j = 0; j < count; ++j) {
+                       if (values[j] != 0 && !strcmp(values[j], values[count])) {
+                           if ((repeat & MASK_SMSO) != 0
+                               && (j & MASK_SMSO) != 0
+                               && (count & reason) != 0) {
+                               continue;
+                           }
+                           found = TRUE;
+                           break;
+                       }
+                   }
+               }
+               if (!found) {
+                   dumpit(count, ignore, values[count], my_sgr0);
+                   ++total_values;
+               }
+           }
+       }
+    }
+    del_curterm(cur_term);
+}
+
+static void
+usage(void)
+{
+    static const char *msg[] =
+    {
+       "Usage: test_sgr [options] [terminal]",
+       "",
+       "Print all distinct combinations of sgr capability.",
+       "",
+       "Options:",
+       " -d LIST  colon-separated list of databases to use",
+       " -e NAME  environment variable to set with -d option",
+       " -q       quiet (prints only counts)",
+    };
+    unsigned n;
+    for (n = 0; n < SIZEOF(msg); ++n) {
+       fprintf(stderr, "%s\n", msg[n]);
+    }
+    ExitProgram(EXIT_FAILURE);
+}
+
+int
+main(int argc, char *argv[])
+{
+    int n;
+    char *name;
+
+    while ((n = getopt(argc, argv, "d:e:q")) != -1) {
+       switch (n) {
+       case 'd':
+           d_opt = optarg;
+           break;
+       case 'e':
+           e_opt = optarg;
+           break;
+       case 'q':
+           q_opt = TRUE;
+           break;
+       default:
+           usage();
+           break;
+       }
+    }
+
+    make_dblist();
+
+    if (optind < argc) {
+       for (n = optind; n < argc; ++n) {
+           brute_force(argv[n]);
+       }
+    } else if ((name = getenv("TERM")) != 0) {
+       brute_force(name);
+    } else {
+       static char dumb[] = "dumb";
+       brute_force(dumb);
+    }
+
+    printf("%ld distinct values\n", total_values);
+
+#ifdef NO_LEAKS
+    free_dblist();
+#endif
+
+    ExitProgram(EXIT_SUCCESS);
+}
+
+#else /* !HAVE_TIGETSTR */
+int
+main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
+{
+    failed("This program requires the terminfo functions such as tigetstr");
+    ExitProgram(EXIT_FAILURE);
+}
+#endif /* HAVE_TIGETSTR */