From 6b4f5830b7910188b532d661f79775306715f67e Mon Sep 17 00:00:00 2001 From: "Thomas E. Dickey" Date: Sun, 17 Feb 2019 02:40:14 +0000 Subject: [PATCH] ncurses 6.1 - patch 20190216 + improve manual page description of TABSIZE. + add test/demo_tabs program. --- MANIFEST | 1 + NEWS | 8 +- VERSION | 2 +- dist.mk | 4 +- doc/html/man/adacurses6-config.1.html | 2 +- doc/html/man/captoinfo.1m.html | 2 +- doc/html/man/clear.1.html | 2 +- doc/html/man/curs_addch.3x.html | 13 +-- doc/html/man/curs_variables.3x.html | 39 ++++++--- doc/html/man/form.3x.html | 2 +- doc/html/man/infocmp.1m.html | 2 +- doc/html/man/infotocap.1m.html | 2 +- doc/html/man/menu.3x.html | 2 +- doc/html/man/ncurses.3x.html | 8 +- doc/html/man/ncurses6-config.1.html | 2 +- doc/html/man/panel.3x.html | 2 +- doc/html/man/tabs.1.html | 12 ++- doc/html/man/terminfo.5.html | 2 +- doc/html/man/tic.1m.html | 2 +- doc/html/man/toe.1m.html | 2 +- doc/html/man/tput.1.html | 2 +- doc/html/man/tset.1.html | 2 +- man/curs_addch.3x | 9 +- man/curs_variables.3x | 37 ++++++-- man/manhtml.aliases | 5 +- man/ncurses.3x | 6 +- man/tabs.1 | 11 ++- ncurses/trace/lib_tracebits.c | 6 +- ncurses/trace/visbuf.c | 7 +- 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/demo_tabs.c | 116 ++++++++++++++++++++++++++ test/modules | 5 +- test/programs | 5 +- test/test.priv.h | 6 +- 40 files changed, 266 insertions(+), 84 deletions(-) create mode 100644 test/demo_tabs.c diff --git a/MANIFEST b/MANIFEST index 27a22f63..6e4e56cb 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1108,6 +1108,7 @@ ./test/demo_menus.c ./test/demo_new_pair.c ./test/demo_panels.c +./test/demo_tabs.c ./test/demo_termcap.c ./test/demo_terminfo.c ./test/ditto.c diff --git a/NEWS b/NEWS index 71f1b8d5..130758db 100644 --- a/NEWS +++ b/NEWS @@ -25,7 +25,7 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------- --- $Id: NEWS,v 1.3272 2019/02/10 00:56:56 tom Exp $ +-- $Id: NEWS,v 1.3275 2019/02/16 23:45:57 tom Exp $ ------------------------------------------------------------------------------- This is a log of changes that ncurses has gone through since Zeyd started @@ -45,6 +45,10 @@ 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. +20190216 + + improve manual page description of TABSIZE. + + add test/demo_tabs program. + 20190209 + add check in tic to provide warnings for mismatched number of parameters in the documented user-capability extensions. @@ -9374,7 +9378,7 @@ it is not possible to add this information. 20000701 pre-release + change minor version to 1, i.e., ncurses 5.1 + add experimental configure option --enable-colorfgbg to check for - $COLORTERM variable as set by rxvt/aterm/Eterm. + $COLORFGBG variable as set by rxvt/aterm/Eterm. + add Eterm terminfo entry (Michael Jennings ). + modify manlinks.sed to pick aliases from the SYNOPSIS section, and several manpages so manlinks.sed can find aliases for creating diff --git a/VERSION b/VERSION index 6d567fe6..c1cda65e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5:0:10 6.1 20190209 +5:0:10 6.1 20190216 diff --git a/dist.mk b/dist.mk index 0e00ff4e..636d49f3 100644 --- a/dist.mk +++ b/dist.mk @@ -25,7 +25,7 @@ # use or other dealings in this Software without prior written # # authorization. # ############################################################################## -# $Id: dist.mk,v 1.1266 2019/02/09 15:12:47 tom Exp $ +# $Id: dist.mk,v 1.1267 2019/02/13 22:19:33 tom Exp $ # 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 = 1 -NCURSES_PATCH = 20190209 +NCURSES_PATCH = 20190216 # We don't append the patch to the version, since this only applies to releases VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR) diff --git a/doc/html/man/adacurses6-config.1.html b/doc/html/man/adacurses6-config.1.html index 1a977aac..a1c82c69 100644 --- a/doc/html/man/adacurses6-config.1.html +++ b/doc/html/man/adacurses6-config.1.html @@ -125,7 +125,7 @@

SEE ALSO

        curses(3x)
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/captoinfo.1m.html b/doc/html/man/captoinfo.1m.html
index 1fe16e09..926b1704 100644
--- a/doc/html/man/captoinfo.1m.html
+++ b/doc/html/man/captoinfo.1m.html
@@ -190,7 +190,7 @@
 

SEE ALSO

        infocmp(1m), curses(3x), terminfo(5)
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 

AUTHOR

diff --git a/doc/html/man/clear.1.html b/doc/html/man/clear.1.html
index 405d47ca..b53f89f2 100644
--- a/doc/html/man/clear.1.html
+++ b/doc/html/man/clear.1.html
@@ -148,7 +148,7 @@
 

SEE ALSO

        tput(1), terminfo(5)
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/curs_addch.3x.html b/doc/html/man/curs_addch.3x.html
index 74834b36..8cdd9869 100644
--- a/doc/html/man/curs_addch.3x.html
+++ b/doc/html/man/curs_addch.3x.html
@@ -1,7 +1,7 @@
 
 
 
@@ -242,11 +242,12 @@
 
 
 

TABSIZE

-       The  TABSIZE variable is implemented in some versions of curses, but is
-       not part of X/Open curses.
+       The  TABSIZE  variable  is  implemented  in  SVr4 and other versions of
+       curses, but is not part of X/Open curses  (see  curs_variables(3x)  for
+       more details).
 
        If ch is a carriage return, the cursor is moved to the beginning of the
-       current  row of the window.  This is true of other implementations, but
+       current row of the window.  This is true of other implementations,  but
        is not documented.
 
 
@@ -254,7 +255,7 @@
        curses(3x),  curs_attr(3x),  curs_clear(3x),  curs_inch(3x),  curs_out-
        opts(3x), curs_refresh(3x), curs_variables(3x), putc(3).
 
-       Comparable  functions  in  the  wide-character  (ncursesw)  library are
+       Comparable functions  in  the  wide-character  (ncursesw)  library  are
        described in curs_add_wch(3x).
 
 
diff --git a/doc/html/man/curs_variables.3x.html b/doc/html/man/curs_variables.3x.html
index 72baa562..bf39786c 100644
--- a/doc/html/man/curs_variables.3x.html
+++ b/doc/html/man/curs_variables.3x.html
@@ -1,6 +1,6 @@
 
 
 
@@ -146,21 +146,38 @@
 
 
 

PORTABILITY

-       ESCDELAY  and TABSIZE are extensions, not provided in most other imple-
-       mentations of curses.
+       TABSIZE  is  a feature of SVr4 curses which is not documented by X/Open
+       curses.
 
-       ESCDELAY is an extension in AIX curses:
+       o   In SVr4 curses, TABSIZE is initially set from the terminal descrip-
+           tion's  init_tabs capability.  After that, it can be altered by the
+           applications using SVr4 curses.
 
-       o   In AIX, the units for ESCDELAY are fifths of a millisecond.
+           SVr4 curses uses the current value of TABSIZE to compute the  posi-
+           tion  of  tabstops  for  updating both the virtual screen with add-
+           ch(3x) as well as the physical screen with mvcur(3x).
 
-       o   The default value for AIX's ESCDELAY is 0.1 seconds.
+       o   This implementation uses the current value of TABSIZE only for  up-
+           dating  the  virtual  screen.   It  uses the terminal description's
+           init_tabs capability  for  computing  tab  stops  on  the  physical
+           screen.
 
-       o   AIX also enforces a limit of 10,000 seconds for ESCDELAY; this  im-
+       o   Other  implementations  differ.  For instance, NetBSD curses allows
+           TABSIZE to be set through an environment variable.  This  implemen-
+           tation does not.
+
+       ESCDELAY is an extension in AIX curses:
+
+       o   In AIX, the units for ESCDELAY are fifths of a millisecond.
+
+       o   The default value for AIX's ESCDELAY is 0.1 seconds.
+
+       o   AIX  also enforces a limit of 10,000 seconds for ESCDELAY; this im-
            plementation currently has no upper limit.
 
-       This  implementation has long used ESCDELAY with units of milliseconds,
-       making it impossible to be completely compatible with  AIX.   Likewise,
-       most  users have either decided to override the value, or rely upon its
+       This implementation has long used ESCDELAY with units of  milliseconds,
+       making  it  impossible to be completely compatible with AIX.  Likewise,
+       most users have either decided to override the value, or rely upon  its
        default value.
 
 
diff --git a/doc/html/man/form.3x.html b/doc/html/man/form.3x.html
index add1da1b..4b2ac570 100644
--- a/doc/html/man/form.3x.html
+++ b/doc/html/man/form.3x.html
@@ -246,7 +246,7 @@
        curses(3x)  and  related  pages  whose names begin "form_" for detailed
        descriptions of the entry points.
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/infocmp.1m.html b/doc/html/man/infocmp.1m.html
index f899bf78..d46f8fd4 100644
--- a/doc/html/man/infocmp.1m.html
+++ b/doc/html/man/infocmp.1m.html
@@ -481,7 +481,7 @@
 
        https://invisible-island.net/ncurses/tctest.html
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 

AUTHOR

diff --git a/doc/html/man/infotocap.1m.html b/doc/html/man/infotocap.1m.html
index 13cfd50a..ab8b0f4a 100644
--- a/doc/html/man/infotocap.1m.html
+++ b/doc/html/man/infotocap.1m.html
@@ -85,7 +85,7 @@
 

SEE ALSO

        curses(3x), tic(1m), infocmp(1m), terminfo(5)
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 

AUTHOR

diff --git a/doc/html/man/menu.3x.html b/doc/html/man/menu.3x.html
index 1baa6566..7ef05ebc 100644
--- a/doc/html/man/menu.3x.html
+++ b/doc/html/man/menu.3x.html
@@ -221,7 +221,7 @@
        curses(3x)  and  related  pages  whose names begin "menu_" for detailed
        descriptions of the entry points.
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/ncurses.3x.html b/doc/html/man/ncurses.3x.html
index 2af18f53..f060b652 100644
--- a/doc/html/man/ncurses.3x.html
+++ b/doc/html/man/ncurses.3x.html
@@ -1,7 +1,7 @@
 
 
 
@@ -59,7 +59,7 @@
        method of updating  character  screens  with  reasonable  optimization.
        This  implementation  is  "new  curses"  (ncurses)  and is the approved
        replacement for 4.4BSD classic curses,  which  has  been  discontinued.
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
        The  ncurses  library emulates the curses library of System V Release 4
        UNIX, and XPG4 (X/Open Portability Guide) curses  (also  known  as  XSI
@@ -640,7 +640,7 @@
                     use_env                  curs_util(3x)
                     use_extended_names       curs_extend(3x)*
                     use_legacy_coding        legacy_coding(3x)*
-                    use_tioctl               curs_util(3x)
+                    use_tioctl               curs_util(3x)*
                     vid_attr                 curs_terminfo(3x)
 
                     vid_puts                 curs_terminfo(3x)
diff --git a/doc/html/man/ncurses6-config.1.html b/doc/html/man/ncurses6-config.1.html
index 93b05b64..d88aa76c 100644
--- a/doc/html/man/ncurses6-config.1.html
+++ b/doc/html/man/ncurses6-config.1.html
@@ -112,7 +112,7 @@
 

SEE ALSO

        curses(3x)
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/panel.3x.html b/doc/html/man/panel.3x.html
index 0b66b887..3a74743a 100644
--- a/doc/html/man/panel.3x.html
+++ b/doc/html/man/panel.3x.html
@@ -204,7 +204,7 @@
 

SEE ALSO

        curses(3x), curs_variables(3x),
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 

AUTHOR

diff --git a/doc/html/man/tabs.1.html b/doc/html/man/tabs.1.html
index d082112b..5498b362 100644
--- a/doc/html/man/tabs.1.html
+++ b/doc/html/man/tabs.1.html
@@ -1,6 +1,6 @@
 
 
 
@@ -66,6 +66,12 @@
        ing the tabstops), and later cat the file to the screen,  setting  tab-
        stops at that point.
 
+       These  are  hardware  tabs, which cannot be queried rapidly by applica-
+       tions running in the terminal, if at all.  Curses and other full-screen
+       applications  may  use  hardware tabs in optimizing their output to the
+       terminal.  If the hardware tabstops differ from the information in  the
+       terminal database, the result is unpredictable.
+
 
 

OPTIONS

 
@@ -164,7 +170,7 @@
 

SEE ALSO

        tset(1), infocmp(1m), curses(3x), terminfo(5).
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/terminfo.5.html b/doc/html/man/terminfo.5.html
index 206ead16..4dc182e0 100644
--- a/doc/html/man/terminfo.5.html
+++ b/doc/html/man/terminfo.5.html
@@ -74,7 +74,7 @@
        Terminfo describes terminals by giving a set of capabilities which they
        have, by specifying how to perform screen operations, and by specifying
        padding  requirements  and  initialization  sequences.   This describes
-       ncurses version 6.1 (patch 20190121).
+       ncurses version 6.1 (patch 20190216).
 
 
 

Terminfo Entry Syntax

diff --git a/doc/html/man/tic.1m.html b/doc/html/man/tic.1m.html
index 62069c72..5c437e85 100644
--- a/doc/html/man/tic.1m.html
+++ b/doc/html/man/tic.1m.html
@@ -364,7 +364,7 @@
        infocmp(1m),   captoinfo(1m),   infotocap(1m),   toe(1m),   curses(3x),
        term(5).  terminfo(5).
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 

AUTHOR

diff --git a/doc/html/man/toe.1m.html b/doc/html/man/toe.1m.html
index 8ae6f3a2..0b08e503 100644
--- a/doc/html/man/toe.1m.html
+++ b/doc/html/man/toe.1m.html
@@ -113,7 +113,7 @@
        tic(1m), infocmp(1m), captoinfo(1m),  infotocap(1m),  curses(3x),  ter-
        minfo(5).
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/tput.1.html b/doc/html/man/tput.1.html
index 02094a7f..67898ac9 100644
--- a/doc/html/man/tput.1.html
+++ b/doc/html/man/tput.1.html
@@ -522,7 +522,7 @@
 

SEE ALSO

        clear(1), stty(1), tabs(1), tset(1), terminfo(5), curs_termcap(3x).
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/doc/html/man/tset.1.html b/doc/html/man/tset.1.html
index a3e17817..d1738b82 100644
--- a/doc/html/man/tset.1.html
+++ b/doc/html/man/tset.1.html
@@ -389,7 +389,7 @@
        csh(1),  sh(1),  stty(1),   curs_terminfo(3x),   tty(4),   terminfo(5),
        ttys(5), environ(7)
 
-       This describes ncurses version 6.1 (patch 20190121).
+       This describes ncurses version 6.1 (patch 20190216).
 
 
 
diff --git a/man/curs_addch.3x b/man/curs_addch.3x
index d502faab..729382d4 100644
--- a/man/curs_addch.3x
+++ b/man/curs_addch.3x
@@ -1,6 +1,6 @@
 '\" t
 .\"***************************************************************************
-.\" Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.              *
+.\" Copyright (c) 1998-2018,2019 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            *
@@ -27,7 +27,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: curs_addch.3x,v 1.46 2018/07/28 21:02:35 tom Exp $
+.\" $Id: curs_addch.3x,v 1.47 2019/02/16 23:50:17 tom Exp $
 .TH curs_addch 3X ""
 .ie \n(.g .ds `` \(lq
 .el       .ds `` ``
@@ -252,8 +252,9 @@ before attempting call \fBwaddch\fP, and
 call \fBwadd_wch\fP for characters which cannot be handled by \fBwaddch\fP.
 .SS TABSIZE
 .LP
-The \fBTABSIZE\fR variable is implemented in some versions of curses,
-but is not part of X/Open curses.
+The \fBTABSIZE\fR variable is implemented in SVr4 and other versions of curses,
+but is not part of X/Open curses
+(see \fBcurs_variables\fR(3X) for more details).
 .LP
 If \fIch\fR is a carriage return,
 the cursor is moved to the beginning of the current row of the window.
diff --git a/man/curs_variables.3x b/man/curs_variables.3x
index 6b9fb59a..fffad714 100644
--- a/man/curs_variables.3x
+++ b/man/curs_variables.3x
@@ -1,5 +1,5 @@
 .\"***************************************************************************
-.\" Copyright (c) 2010-2017,2018 Free Software Foundation, Inc.              *
+.\" Copyright (c) 2010-2018,2019 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            *
@@ -26,7 +26,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: curs_variables.3x,v 1.11 2018/07/28 22:37:10 tom Exp $
+.\" $Id: curs_variables.3x,v 1.12 2019/02/16 23:43:23 tom Exp $
 .TH curs_variables 3X ""
 .ie \n(.g .ds `` \(lq
 .el       .ds `` ``
@@ -139,19 +139,38 @@ or \fBnewterm\fR(3X).
 If \fBcurses\fP is configured to use separate curses/terminfo libraries,
 most of these variables reside in the curses library.
 .SH PORTABILITY
-ESCDELAY and TABSIZE are extensions,
-not provided in most other implementations of curses.
+\fBTABSIZE\fP is a feature of SVr4 curses
+which is not documented by X/Open curses.
+.bP
+In SVr4 curses, \fBTABSIZE\fP is initially set from the terminal description's
+\fBinit_tabs\fP capability.
+After that, it can be altered by the applications using SVr4 curses.
+.IP
+SVr4 curses uses the current value of \fBTABSIZE\fP to
+compute the position of tabstops for updating both
+the virtual screen with \fBaddch\fP(3X) as well as
+the physical screen with \fBmvcur\fP(3X).
+.bP
+This implementation uses the current value of \fBTABSIZE\fP only for
+updating the virtual screen.
+It uses the terminal description's \fBinit_tabs\fP capability for
+computing tab stops on the physical screen.
+.bP
+Other implementations differ.
+For instance, NetBSD curses allows \fBTABSIZE\fP to be set through
+an environment variable.
+This implementation does not.
 .PP
-ESCDELAY is an extension in AIX curses:
+\fBESCDELAY\fP is an extension in AIX curses:
 .bP
-In AIX, the units for ESCDELAY are \fIfifths\fP of a millisecond.
+In AIX, the units for \fBESCDELAY\fP are \fIfifths\fP of a millisecond.
 .bP
-The default value for AIX's ESCDELAY is 0.1 seconds.
+The default value for AIX's \fBESCDELAY\fP is 0.1 seconds.
 .bP
-AIX also enforces a limit of 10,000 seconds for ESCDELAY;
+AIX also enforces a limit of 10,000 seconds for \fBESCDELAY\fP;
 this implementation currently has no upper limit.
 .PP
-This implementation has long used ESCDELAY with units of milliseconds,
+This implementation has long used \fBESCDELAY\fP with units of milliseconds,
 making it impossible to be completely compatible with AIX.
 Likewise, most users have either decided to override the value,
 or rely upon its default value.
diff --git a/man/manhtml.aliases b/man/manhtml.aliases
index 5c97b54f..6db78f3a 100644
--- a/man/manhtml.aliases
+++ b/man/manhtml.aliases
@@ -1,6 +1,6 @@
-# $Id: manhtml.aliases,v 1.12 2017/04/22 14:07:02 tom Exp $
+# $Id: manhtml.aliases,v 1.13 2019/02/16 23:44:49 tom Exp $
 #***************************************************************************
-# Copyright (c) 2013-2016,2017 Free Software Foundation, Inc.              *
+# Copyright (c) 2013-2017,2019 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            *
@@ -43,6 +43,7 @@ is_scrollok(3X)		curs_opaque(3X)
 keypad(3X)		curs_inopts(3X)
 longname(3X)		curs_termattrs(3X)
 meta(3X)		curs_inopts(3X)
+mvcur(3X)		curs_terminfo(3X)
 newterm(3X)		curs_initscr(3X)
 refresh(3X)		curs_refresh(3X)
 reset_shell_mode(3X)	curs_kernel(3X)
diff --git a/man/ncurses.3x b/man/ncurses.3x
index a8d67af5..475046b1 100644
--- a/man/ncurses.3x
+++ b/man/ncurses.3x
@@ -1,6 +1,6 @@
 '\" t
 .\"***************************************************************************
-.\" Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.              *
+.\" Copyright (c) 1998-2018,2019 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            *
@@ -27,7 +27,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: ncurses.3x,v 1.140 2018/07/28 23:30:17 tom Exp $
+.\" $Id: ncurses.3x,v 1.141 2019/02/16 15:07:20 tom Exp $
 .hy 0
 .TH ncurses 3X ""
 .ie \n(.g .ds `` \(lq
@@ -679,7 +679,7 @@ use_default_colors/\fBdefault_colors\fR(3X)*
 use_env/\fBcurs_util\fR(3X)
 use_extended_names/\fBcurs_extend\fR(3X)*
 use_legacy_coding/\fBlegacy_coding\fR(3X)*
-use_tioctl/\fBcurs_util\fR(3X)
+use_tioctl/\fBcurs_util\fR(3X)*
 vid_attr/\fBcurs_terminfo\fR(3X)
 vid_puts/\fBcurs_terminfo\fR(3X)
 vidattr/\fBcurs_terminfo\fR(3X)
diff --git a/man/tabs.1 b/man/tabs.1
index d34f8e0f..2a127f33 100644
--- a/man/tabs.1
+++ b/man/tabs.1
@@ -1,5 +1,5 @@
 .\"***************************************************************************
-.\" Copyright (c) 2008-2017,2018 Free Software Foundation, Inc.              *
+.\" Copyright (c) 2008-2018,2019 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            *
@@ -26,7 +26,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: tabs.1,v 1.19 2018/07/28 21:46:31 tom Exp $
+.\" $Id: tabs.1,v 1.20 2019/02/16 23:56:38 tom Exp $
 .TH @TABS@ 1 ""
 .ds n 5
 .ie \n(.g .ds `` \(lq
@@ -69,6 +69,13 @@ Like \fB@CLEAR@\fR(1), \fB@TABS@\fR writes to the standard output.
 You can redirect the standard output to a file (which prevents
 \fB@TABS@\fR from actually changing the tabstops),
 and later \fBcat\fP the file to the screen, setting tabstops at that point.
+.PP
+These are hardware tabs, which cannot be queried rapidly by applications
+running in the terminal, if at all.
+Curses and other full-screen applications may use hardware tabs
+in optimizing their output to the terminal.
+If the hardware tabstops differ from the information in the terminal
+database, the result is unpredictable.
 .SH OPTIONS
 .SS General Options
 .TP 5
diff --git a/ncurses/trace/lib_tracebits.c b/ncurses/trace/lib_tracebits.c
index f880b674..43b29a94 100644
--- a/ncurses/trace/lib_tracebits.c
+++ b/ncurses/trace/lib_tracebits.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2012,2015 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2015,2019 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            *
@@ -34,7 +34,7 @@
 
 #include 
 
-MODULE_ID("$Id: lib_tracebits.c,v 1.26 2015/04/19 14:58:39 tom Exp $")
+MODULE_ID("$Id: lib_tracebits.c,v 1.27 2019/02/16 22:12:08 tom Exp $")
 
 #if HAVE_SYS_TERMIO_H
 #include 		/* needed for ISC */
@@ -130,7 +130,7 @@ _nc_trace_ttymode(TTY * tty)
 	DATA(ONOCR),
 	DATA(ONLRET),
 	DATAX()
-#define ALLOUT	(OPOST|OFLAGS_TABS|ONLCR|OCRNL|ONOCR|ONLRET)
+#define ALLOUT	(OPOST|OFLAGS_TABS|ONLCR|OCRNL|ONOCR|ONLRET|OFLAGS_TABS)
     }, cflags[] =
     {
 	DATA(CLOCAL),
diff --git a/ncurses/trace/visbuf.c b/ncurses/trace/visbuf.c
index 581bfbd2..17b590a7 100644
--- a/ncurses/trace/visbuf.c
+++ b/ncurses/trace/visbuf.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 2001-2016,2017 Free Software Foundation, Inc.              *
+ * Copyright (c) 2001-2017,2019 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            *
@@ -42,7 +42,7 @@
 #include 
 #include 
 
-MODULE_ID("$Id: visbuf.c,v 1.49 2017/10/21 23:34:20 tom Exp $")
+MODULE_ID("$Id: visbuf.c,v 1.50 2019/02/16 21:18:42 tom Exp $")
 
 #define NUM_VISBUFS 4
 
@@ -80,6 +80,9 @@ _nc_vischar(char *tp, unsigned c LIMIT_ARG)
     } else if (c == '\b') {
 	*tp++ = '\\';
 	*tp++ = 'b';
+    } else if (c == '\t') {
+	*tp++ = '\\';
+	*tp++ = 't';
     } else if (c == '\033') {
 	*tp++ = '\\';
 	*tp++ = 'e';
diff --git a/package/debian-mingw/changelog b/package/debian-mingw/changelog
index c549a7c8..f1b53834 100644
--- a/package/debian-mingw/changelog
+++ b/package/debian-mingw/changelog
@@ -1,8 +1,8 @@
-ncurses6 (6.1+20190209) unstable; urgency=low
+ncurses6 (6.1+20190216) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey   Sat, 09 Feb 2019 10:12:47 -0500
+ -- Thomas E. Dickey   Wed, 13 Feb 2019 17:19:33 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
diff --git a/package/debian-mingw64/changelog b/package/debian-mingw64/changelog
index c549a7c8..f1b53834 100644
--- a/package/debian-mingw64/changelog
+++ b/package/debian-mingw64/changelog
@@ -1,8 +1,8 @@
-ncurses6 (6.1+20190209) unstable; urgency=low
+ncurses6 (6.1+20190216) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey   Sat, 09 Feb 2019 10:12:47 -0500
+ -- Thomas E. Dickey   Wed, 13 Feb 2019 17:19:33 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
diff --git a/package/debian/changelog b/package/debian/changelog
index 07da9be8..f0ae539b 100644
--- a/package/debian/changelog
+++ b/package/debian/changelog
@@ -1,8 +1,8 @@
-ncurses6 (6.1+20190209) unstable; urgency=low
+ncurses6 (6.1+20190216) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey   Sat, 09 Feb 2019 10:12:47 -0500
+ -- Thomas E. Dickey   Wed, 13 Feb 2019 17:19:33 -0500
 
 ncurses6 (5.9-20120608) unstable; urgency=low
 
diff --git a/package/mingw-ncurses.nsi b/package/mingw-ncurses.nsi
index f8f3dd8a..9fabdcbb 100644
--- a/package/mingw-ncurses.nsi
+++ b/package/mingw-ncurses.nsi
@@ -1,4 +1,4 @@
-; $Id: mingw-ncurses.nsi,v 1.313 2019/02/09 15:12:47 tom Exp $
+; $Id: mingw-ncurses.nsi,v 1.314 2019/02/13 22:19:33 tom Exp $
 
 ; TODO add examples
 ; TODO bump ABI to 6
@@ -10,7 +10,7 @@
 !define VERSION_MAJOR "6"
 !define VERSION_MINOR "1"
 !define VERSION_YYYY  "2019"
-!define VERSION_MMDD  "0209"
+!define VERSION_MMDD  "0216"
 !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}
 
 !define MY_ABI   "5"
diff --git a/package/mingw-ncurses.spec b/package/mingw-ncurses.spec
index e8753e1e..11df0aa9 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.1
-Release: 20190209
+Release: 20190216
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
diff --git a/package/ncurses.spec b/package/ncurses.spec
index 6b16ccc8..b74ee1e1 100644
--- a/package/ncurses.spec
+++ b/package/ncurses.spec
@@ -1,7 +1,7 @@
 Summary: shared libraries for terminal handling
 Name: ncurses6
 Version: 6.1
-Release: 20190209
+Release: 20190216
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
diff --git a/package/ncursest.spec b/package/ncursest.spec
index c9072a03..b699a9a9 100644
--- a/package/ncursest.spec
+++ b/package/ncursest.spec
@@ -1,7 +1,7 @@
 Summary: Curses library with POSIX thread support.
 Name: ncursest6
 Version: 6.1
-Release: 20190209
+Release: 20190216
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
diff --git a/test/demo_tabs.c b/test/demo_tabs.c
new file mode 100644
index 00000000..68023a32
--- /dev/null
+++ b/test/demo_tabs.c
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * Copyright (c) 2019 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: demo_tabs.c,v 1.2 2019/02/17 01:01:11 tom Exp $
+ *
+ * A simple demo of tabs in curses.
+ */
+#include "test.priv.h"
+
+static void
+usage(void)
+{
+    static const char *msg[] =
+    {
+	"Usage: demo_tabs [options]",
+	"",
+	"Print a grid to test tab-stops with the curses interface",
+	"",
+	"Options:",
+	" -l COUNT total number of lines to show",
+	" -t NUM   set TABSIZE variable to the given value",
+    };
+    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 tabstop;
+    int n, col, row, step;
+    int line_limit = -1;
+    int curses_stops = -1;
+
+    while ((n = getopt(argc, argv, "l:t:")) != -1) {
+	switch (n) {
+	case 'l':
+	    line_limit = atoi(optarg);
+	    break;
+	case 't':
+	    curses_stops = atoi(optarg);
+	    break;
+	default:
+	    usage();
+	    break;
+	}
+    }
+
+    initscr();
+    noecho();
+    cbreak();
+    if (curses_stops > 0)
+	set_tabsize(curses_stops);
+    tabstop = tigetnum("it");
+    if (tabstop <= 0)
+	tabstop = 8;
+    for (row = 0; row < LINES; ++row) {
+	move(row, 0);
+	for (col = step = 0; col < COLS - 1; ++col) {
+	    if (row == 0) {
+		chtype ch = '-';
+		if ((col % tabstop) == 0)
+		    ch = '+';
+		addch(ch);
+	    } else if (col + 1 < row) {
+		addch('*');
+	    } else {
+		printw("%x", step);
+		col = (row + (tabstop * ++step));
+		col /= tabstop;
+		col *= tabstop;
+		col -= 1;
+		if ((col + tabstop) < COLS)
+		    addch('\t');
+		refresh();
+	    }
+	}
+	addch('\n');
+	if (line_limit > 0 && row >= line_limit)
+	    break;
+    }
+    getch();
+    endwin();
+    ExitProgram(EXIT_SUCCESS);
+}
diff --git a/test/modules b/test/modules
index 4862b100..40a0c09b 100644
--- a/test/modules
+++ b/test/modules
@@ -1,6 +1,6 @@
-# $Id: modules,v 1.69 2018/12/29 15:32:12 tom Exp $
+# $Id: modules,v 1.70 2019/02/16 19:35:47 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.                #
+# Copyright (c) 1998-2018,2019 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"), #
@@ -47,6 +47,7 @@ demo_keyok	progs		$(srcdir)	$(HEADER_DEPS)
 demo_menus	progs		$(srcdir)	$(HEADER_DEPS)	../include/menu.h
 demo_new_pair	progs		$(srcdir)	$(HEADER_DEPS)	$(srcdir)/popup_msg.h
 demo_panels	progs		$(srcdir)	$(HEADER_DEPS)	../include/panel.h
+demo_tabs	progs		$(srcdir)	$(HEADER_DEPS)
 demo_termcap	progs		$(srcdir)	$(HEADER_DEPS)
 demo_terminfo	progs		$(srcdir)	$(HEADER_DEPS)
 ditto		progs		$(srcdir)	$(HEADER_DEPS)
diff --git a/test/programs b/test/programs
index e9e5144c..e1266b86 100644
--- a/test/programs
+++ b/test/programs
@@ -1,6 +1,6 @@
-# $Id: programs,v 1.43 2018/12/29 15:32:00 tom Exp $
+# $Id: programs,v 1.44 2019/02/16 21:38:16 tom Exp $
 ##############################################################################
-# Copyright (c) 2006-2017,2018 Free Software Foundation, Inc.                #
+# Copyright (c) 2006-2018,2019 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"), #
@@ -45,6 +45,7 @@ demo_keyok	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	demo_keyok
 demo_menus	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	demo_menus
 demo_new_pair	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	demo_new_pair popup_msg
 demo_panels	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	demo_panels
+demo_tabs	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	demo_tabs
 demo_termcap	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	demo_termcap
 demo_terminfo	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	demo_terminfo
 ditto		$(LDFLAGS_THREADS)	$(LOCAL_LIBS)	ditto
diff --git a/test/test.priv.h b/test/test.priv.h
index f820a33d..ec7d29ad 100644
--- a/test/test.priv.h
+++ b/test/test.priv.h
@@ -29,7 +29,7 @@
 /****************************************************************************
  *  Author: Thomas E. Dickey                    1996-on                     *
  ****************************************************************************/
-/* $Id: test.priv.h,v 1.177 2019/02/02 19:57:53 tom Exp $ */
+/* $Id: test.priv.h,v 1.178 2019/02/17 01:03:18 tom Exp $ */
 
 #ifndef __TEST_PRIV_H
 #define __TEST_PRIV_H 1
@@ -469,6 +469,10 @@ extern int optind;
 #define slk_clear()		/* nothing */
 #endif
 
+#if !NCURSES_EXT_FUNCS
+#define set_tabsize(n)	TABSIZE = (n)
+#endif
+
 #if HAVE_TPUTS_SP
 #define USE_SP_FUNCS 1
 #else
-- 
2.44.0