ncurses 6.0 - patch 20151128
authorThomas E. Dickey <dickey@invisible-island.net>
Sun, 29 Nov 2015 01:57:16 +0000 (01:57 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sun, 29 Nov 2015 01:57:16 +0000 (01:57 +0000)
+ add missing assignment in lib_getch.c to make notimeout() work
  (Debian #805618).
+ add 't' toggle for notimeout() function in test/ncurses.c a/A screens
+ add viewdata terminal description (Alexandre Montaron).
+ fix a case in tic/infocmp for formatting capabilities where a
  backslash at the end of a string was mishandled.
+ fix some typos in curs_inopts.3x (Benno Schulenberg).

18 files changed:
NEWS
VERSION
dist.mk
form/form.h
form/form.priv.h
form/frm_driver.c
man/curs_inopts.3x
man/form_field_opts.3x
misc/terminfo.src
ncurses/base/lib_getch.c
package/debian-mingw/changelog
package/debian-mingw64/changelog
package/debian/changelog
package/mingw-ncurses.nsi
package/mingw-ncurses.spec
package/ncurses.spec
progs/dump_entry.c
test/ncurses.c

diff --git a/NEWS b/NEWS
index c90b0f21ef6401a91d8ad1c43e906d8c5ead87a8..6a6a33701b6dc6ca9d803488db6cd67cc086091b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,7 +25,7 @@
 -- sale, use or other dealings in this Software without prior written        --
 -- authorization.                                                            --
 -------------------------------------------------------------------------------
--- $Id: NEWS,v 1.2530 2015/11/21 23:33:30 tom Exp $
+-- $Id: NEWS,v 1.2536 2015/11/29 01:31:02 tom Exp $
 -------------------------------------------------------------------------------
 
 This is a log of changes that ncurses has gone through since Zeyd started
@@ -45,6 +45,15 @@ 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.
 
+20151128
+       + add missing assignment in lib_getch.c to make notimeout() work
+         (Debian #805618).
+       + add 't' toggle for notimeout() function in test/ncurses.c a/A screens
+       + add viewdata terminal description (Alexandre Montaron).
+       + fix a case in tic/infocmp for formatting capabilities where a
+         backslash at the end of a string was mishandled.
+       + fix some typos in curs_inopts.3x (Benno Schulenberg).
+
 20151121
        + fix some inconsistencies in the pccon* entries -TD
        + add bold to pccon+sgr+acs and pccon-base (Tati Chevron).
diff --git a/VERSION b/VERSION
index ccabf823e95b6833c881b35deb1162b8a535bc8b..d9059c303940cbdd7b4fa2a9655e352e1fa5ae72 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-5:0:9  6.0     20151121
+5:0:9  6.0     20151128
diff --git a/dist.mk b/dist.mk
index 6652459761d1a16a96f2e38a0b8223bef516ab4c..a1e3fe5a82d3ea8345ab458942e37c19314e5523 100644 (file)
--- 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.1080 2015/11/21 15:55:51 tom Exp $
+# $Id: dist.mk,v 1.1081 2015/11/28 16:31:05 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 = 0
-NCURSES_PATCH = 20151121
+NCURSES_PATCH = 20151128
 
 # We don't append the patch to the version, since this only applies to releases
 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
index 09856dc0f5fa8ce788e4be1bfd4dba3fbeb40396..05a7861af887ab29fc180ba39c91d077105eb4b4 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2014,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            *
@@ -30,7 +30,7 @@
  *   Author:  Juergen Pfeifer, 1995,1997                                    *
  ****************************************************************************/
 
-/* $Id: form.h,v 0.24 2014/07/26 20:52:28 tom Exp $ */
+/* $Id: form.h,v 0.25 2015/11/28 20:13:39 Leon.Winter Exp $ */
 
 #ifndef FORM_H
 #define FORM_H
@@ -205,6 +205,7 @@ typedef void (*Form_Hook)(FORM *);
 #define O_PASSOK               (0x0100U)
 #define O_STATIC               (0x0200U)
 #define O_DYNAMIC_JUSTIFY      (0x0400U)       /* ncurses extension    */
+#define O_NO_LEFT_STRIP                (0x0800U)       /* ncurses extension    */
 
 /* form options */
 #define O_NL_OVERLOAD          (0x0001U)
index 4d1dfe7bf01e533d8790bc4759c819dcb3d59bd3..625fc1073c0e9688eaa4a8d4ee10ff99820ee488 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2014,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            *
@@ -30,7 +30,7 @@
  *   Author:  Juergen Pfeifer, 1995,1997                                    *
  ****************************************************************************/
 
-/* $Id: form.priv.h,v 0.38 2014/11/01 13:56:14 tom Exp $ */
+/* $Id: form.priv.h,v 0.39 2015/11/28 20:13:39 Leon.Winter Exp $ */
 
 #ifndef FORM_PRIV_H
 #define FORM_PRIV_H 1
@@ -162,7 +162,8 @@ TypeArgument;
 
 #define ALL_FIELD_OPTS (Field_Options)( \
                        STD_FIELD_OPTS |\
-                       O_DYNAMIC_JUSTIFY)
+                       O_DYNAMIC_JUSTIFY |\
+                       O_NO_LEFT_STRIP)
 
 #define C_BLANK ' '
 #define is_blank(c) ((c)==C_BLANK)
index eebde42b2750e0258e9f73a09946e47966faeee4..f78a45e6b060853a0534684f8fce1a00c17ca9a6 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2013,2014 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2014,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            *
@@ -32,7 +32,7 @@
 
 #include "form.priv.h"
 
-MODULE_ID("$Id: frm_driver.c,v 1.115 2014/09/25 21:55:24 tom Exp $")
+MODULE_ID("$Id: frm_driver.c,v 1.117 2015/11/28 20:39:09 tom Exp $")
 
 /*----------------------------------------------------------------------------
   This is the core module of the form library. It contains the majority
@@ -979,7 +979,9 @@ Perform_Justification(FIELD *field, WINDOW *win)
   int len;
   int col = 0;
 
-  bp = Get_Start_Of_Data(field->buf, Buffer_Length(field));
+  bp = (Field_Has_Option(field, O_NO_LEFT_STRIP)
+       ? field->buf
+       : Get_Start_Of_Data(field->buf, Buffer_Length(field)));
   len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp);
 
   if (len > 0)
@@ -1023,7 +1025,9 @@ Undo_Justification(FIELD *field, WINDOW *win)
   FIELD_CELL *bp;
   int len;
 
-  bp = Get_Start_Of_Data(field->buf, Buffer_Length(field));
+  bp = (Field_Has_Option(field, O_NO_LEFT_STRIP)
+       ? field->buf
+       : Get_Start_Of_Data(field->buf, Buffer_Length(field)));
   len = (int)(After_End_Of_Data(field->buf, Buffer_Length(field)) - bp);
 
   if (len > 0)
index 7b9a1be310f1b9b713bafe57edc275d9c28dbfaf..b3d071bc1c3539144fe3c18e6d5d3cafb346255b 100644 (file)
@@ -26,7 +26,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: curs_inopts.3x,v 1.19 2015/04/11 10:21:38 tom Exp $
+.\" $Id: curs_inopts.3x,v 1.20 2015/11/28 19:03:12 Benno.Schulenberg Exp $
 .TH curs_inopts 3X ""
 .ie \n(.g .ds `` \(lq
 .el       .ds `` ``
@@ -93,7 +93,7 @@
 .br
 .SH DESCRIPTION
 The \fBncurses\fP library provides several functions which let an application
-change way input from the terminal is handled.
+change the way input from the terminal is handled.
 Some are global, applying to all windows.
 Others apply only to a specific window.
 Window-specific settings are not automatically applied to new or derived
@@ -141,19 +141,19 @@ The \fBhalfdelay\fR routine is used for half-delay mode, which is similar to
 available to the program.
 However, after blocking for \fItenths\fR tenths of
 seconds, ERR is returned if nothing has been typed.
-The value of \fBtenths\fR
+The value of \fItenths\fR
 must be a number between 1 and 255.
 Use \fBnocbreak\fR to leave half-delay
 mode.
 .\"
 .SS intrflush
 .PP
-If the \fBintrflush\fR option is enabled, (\fIbf\fR is \fBTRUE\fR), when an
-interrupt key is pressed on the keyboard (interrupt, break, quit) all output in
+If the \fBintrflush\fR option is enabled (\fIbf\fR is \fBTRUE\fR), and an
+interrupt key is pressed on the keyboard (interrupt, break, quit), all output in
 the tty driver queue will be flushed, giving the effect of faster response to
 the interrupt, but causing \fBcurses\fR to have the wrong idea of what is on
 the screen.
-Disabling (\fIbf\fR is \fBFALSE\fR), the option prevents the
+Disabling the option (\fIbf\fR is \fBFALSE\fR) prevents the
 flush.
 The default for the option is inherited from the tty driver settings.
 The window argument is ignored.
index ff27fe123501b3a5c9cb9819b0331bfa07384739..f1249a3880cde5df64d1a6c560a4256386959348 100644 (file)
@@ -1,6 +1,6 @@
 '\" t
 .\"***************************************************************************
-.\" Copyright (c) 1998-2010,2014 Free Software Foundation, Inc.              *
+.\" Copyright (c) 1998-2014,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            *
@@ -27,7 +27,7 @@
 .\" authorization.                                                           *
 .\"***************************************************************************
 .\"
-.\" $Id: form_field_opts.3x,v 1.17 2014/07/26 21:21:57 tom Exp $
+.\" $Id: form_field_opts.3x,v 1.19 2015/11/28 20:40:13 tom Exp $
 .TH form_field_opts 3X ""
 .SH NAME
 \fBform_field_opts\fR \- set and get field options
@@ -91,10 +91,13 @@ O_WRAP
 Words that do not fit on a line are wrapped to the next line.  Words are
 blank-separated.
 .PP
-One extension option is defined (extensions are off by default):
+These extension options are defined (extensions are off by default):
 .TP 5
 O_DYNAMIC_JUSTIFY
 Permit dynamic fields to be justified, like static fields.
+.TP 5
+O_NO_LEFT_STRIP
+Preserve leading whitespace in the field buffer, which is normally discarded.
 .SH RETURN VALUE
 Except for \fBfield_opts\fR, each routine returns one of the following:
 .TP 5
index ad5cf18f69a1311ed86af8bd7407d022bcdd2420..612b47a16fdef9d17dec8dcc90b8cc6240d4f0d2 100644 (file)
@@ -6,8 +6,8 @@
 # Report bugs and new terminal descriptions to
 #      bug-ncurses@gnu.org
 #
-#      $Revision: 1.558 $
-#      $Date: 2015/11/22 01:01:00 $
+#      $Revision: 1.559 $
+#      $Date: 2015/11/28 21:35: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
@@ -18753,6 +18753,25 @@ minitel1b-nb|minitel 1b (40cols) noir & blanc sans couleurs avec bold et dim ...
        sgr0=\EI\E\\\EB, smacs=^N, .invis=\E@, .rs2=^L\EB,
        .u8=\001Cu|\004, use=minitel1b,
 
+# From: Alexandre Montaron, 19 Nov 2015
+#
+# He comments:
+# viewdata lacks a true cup capabilitie,
+# so I achieved it with home and cud1/cuf1 sequences only !
+viewdata|prestel/viewdata terminals,
+       am, bw, eslok, hz,
+       cols#40, lines#24,
+       bel=^G, civis=^T, clear=^L, cnorm=^Q, cr=^M, cub1=^H, cud1=^J,
+       cuf1=^I,
+       cup=\036%?%p1%{07}%>%t\n\n\n\n\n\n\n\n%;%?%p1%{15}%>%t\n\n\n\n\n\n\n\n%;%?%p1%{4}%&%t\n\n\n\n%;%?%p1%{2}%&%t\n\n%;%?%p1%{1}%&%t\n%;%?%p2%{07}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{15}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{23}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{31}%>%t\011\011\011\011\011\011\011\011%;%?%p2%{4}%&%t\011\011\011\011%;%?%p2%{2}%&%t\011\011%;%?%p2%{1}%&%t\011%;,
+       cuu1=^K, home=^^, nel=^M^J, .el=^X, .ind=^J,
+       .rep=%p1%c\022%p2%'?'%+%c, .ri=^K,
+# Also:
+# viewdata-rv works with some applications (e.g. emacs, xemacs) but fails with vim.
+viewdata-rv|prestel/viewdata terminals with reverse capabilitie (as green),
+       xmc#1,
+       rmso=\EG, smso=\EB, use=viewdata,
+
 ######## OBSOLETE VDT TYPES
 #
 # These terminals are *long* dead -- these entries are retained for
@@ -23792,4 +23811,7 @@ v3220|LANPAR Vision II model 3220/3221/3222,
 # 2015-11-21
 #      + fix some inconsistencies in the pccon* entries -TD
 #
+# 2015-11-28
+#        add viewdata (Alexandre Montaron).
+#
 ######## SHANTIH!  SHANTIH!  SHANTIH!
index 42eb9cca38e58c7014fee6bf35c4da41fbc3a2ec..4048fde57265dcbf3d88d07ff1b2facef2998206 100644 (file)
@@ -42,7 +42,7 @@
 
 #include <curses.priv.h>
 
-MODULE_ID("$Id: lib_getch.c,v 1.132 2015/05/09 17:10:41 tom Exp $")
+MODULE_ID("$Id: lib_getch.c,v 1.133 2015/11/29 01:28:52 tom Exp $")
 
 #include <fifo_defs.h>
 
@@ -497,6 +497,8 @@ _nc_wgetch(WINDOW *win,
            TR(TRACE_IEVENT, ("timed delay in wgetch()"));
            if (sp->_cbreak > 1)
                delay = (sp->_cbreak - 1) * 100;
+           else if (win->_notimeout)
+               delay = 0;
            else
                delay = win->_delay;
 
index 28dbca41495dd0fd9260ae85069cc03a1cf5aab6..ca97e78c5bfd1dfbcbc8a29ab3de5004ae9be2e2 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20151121) unstable; urgency=low
+ncurses6 (6.0+20151128) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Nov 2015 10:55:51 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 28 Nov 2015 11:31:05 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index 28dbca41495dd0fd9260ae85069cc03a1cf5aab6..ca97e78c5bfd1dfbcbc8a29ab3de5004ae9be2e2 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20151121) unstable; urgency=low
+ncurses6 (6.0+20151128) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Nov 2015 10:55:51 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 28 Nov 2015 11:31:05 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index bfe35490c2afcd88a1b3db93c2df731de2c5f3e2..ee011aff1b4f92dda9f2cda8bc023f398780bc74 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.0+20151121) unstable; urgency=low
+ncurses6 (6.0+20151128) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Nov 2015 10:55:51 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 28 Nov 2015 11:31:05 -0500
 
 ncurses6 (5.9-20120608) unstable; urgency=low
 
index bbc42f6191c9f2965a1b0ddd5fda410f82f492f9..e0328074832ed84d98bf67d425f6bd41786ba0b1 100644 (file)
@@ -1,4 +1,4 @@
-; $Id: mingw-ncurses.nsi,v 1.133 2015/11/21 15:55:51 tom Exp $\r
+; $Id: mingw-ncurses.nsi,v 1.134 2015/11/28 16:31:05 tom Exp $\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_MMDD  "1121"\r
+!define VERSION_MMDD  "1128"\r
 !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}\r
 \r
 !define MY_ABI   "5"\r
index 03a90f047bb50277e79b89a2864b87e8cce35610..7e2cec2c305c082bf4f7e551d85ae7e4caf68078 100644 (file)
@@ -3,7 +3,7 @@
 Summary: shared libraries for terminal handling
 Name: mingw32-ncurses6
 Version: 6.0
-Release: 20151121
+Release: 20151128
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index 11743f9a3c66d63387bf8ad302cfd4281017e13e..7ff615dba93533eaef4d5ce6896fd41d7b1434e0 100644 (file)
@@ -1,7 +1,7 @@
 Summary: shared libraries for terminal handling
 Name: ncurses6
 Version: 6.0
-Release: 20151121
+Release: 20151128
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index 19d6cde72a233e7648acb78807bce2be2033982b..7be9b9127b82535c8e25f8c87315bed3672ab730 100644 (file)
@@ -39,7 +39,7 @@
 #include "termsort.c"          /* this C file is generated */
 #include <parametrized.h>      /* so is this */
 
-MODULE_ID("$Id: dump_entry.c,v 1.123 2015/09/05 23:31:12 tom Exp $")
+MODULE_ID("$Id: dump_entry.c,v 1.124 2015/11/28 22:54:33 tom Exp $")
 
 #define DISCARD(string) string = ABSENT_STRING
 #define PRINTF (void) printf
@@ -510,6 +510,10 @@ fmt_complex(TERMTYPE *tterm, const char *capability, char *src, int level)
 
     while (*src != '\0') {
        switch (*src) {
+       case '^':
+           percent = FALSE;
+           strncpy_DYN(&tmpbuf, src++, (size_t) 1);
+           break;
        case '\\':
            percent = FALSE;
            strncpy_DYN(&tmpbuf, src++, (size_t) 1);
index 48e889b3b9158d9e79e10593c4f48516f81e74a7..9fb47f1254568634849465a7b568a732b45b9565 100644 (file)
@@ -40,7 +40,7 @@ AUTHOR
    Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
            Thomas E. Dickey (beginning revision 1.27 in 1996).
 
-$Id: ncurses.c,v 1.423 2015/10/31 19:53:06 tom Exp $
+$Id: ncurses.c,v 1.425 2015/11/29 01:26:41 tom Exp $
 
 ***************************************************************************/
 
@@ -636,15 +636,22 @@ setup_getch(WINDOW *win, GetchFlags flags)
 }
 
 static void
-init_getch(WINDOW *win, GetchFlags flags)
+init_getch(WINDOW *win, GetchFlags flags, int delay)
 {
     memset(flags, FALSE, NUM_GETCH_FLAGS);
     flags[UChar('k')] = (win == stdscr);
     flags[UChar('m')] = TRUE;
+    flags[UChar('t')] = (delay != 0);
 
     setup_getch(win, flags);
 }
 
+static bool
+blocking_getch(GetchFlags flags, int delay)
+{
+    return ((delay < 0) && flags['t']);
+}
+
 static void
 wgetch_help(WINDOW *win, GetchFlags flags)
 {
@@ -655,7 +662,8 @@ wgetch_help(WINDOW *win, GetchFlags flags)
        ,"k  -- toggle keypad/literal mode"
        ,"m  -- toggle meta (7-bit/8-bit) mode"
        ,"^q -- quit"
-       ,"s  -- shell out\n"
+       ,"s  -- shell out"
+       ,"t  -- toggle timeout"
        ,"w  -- create a new window"
 #ifdef SIGTSTP
        ,"z  -- suspend this process"
@@ -810,9 +818,9 @@ wgetch_test(unsigned level, WINDOW *win, int delay)
     int c;
     int incount = 0;
     GetchFlags flags;
-    bool blocking = (delay < 0);
 
-    init_getch(win, flags);
+    init_getch(win, flags, delay);
+    notimeout(win, FALSE);
     wtimeout(win, delay);
     getyx(win, first_y, first_x);
 
@@ -823,7 +831,7 @@ wgetch_test(unsigned level, WINDOW *win, int delay)
     for (;;) {
        while ((c = wGetchar(win)) == ERR) {
            incount++;
-           if (blocking) {
+           if (blocking_getch(flags, delay)) {
                (void) wprintw(win, "%05d: input error", incount);
                break;
            } else {
@@ -831,7 +839,7 @@ wgetch_test(unsigned level, WINDOW *win, int delay)
            }
            wgetch_wrap(win, first_y);
        }
-       if (c == ERR && blocking) {
+       if (c == ERR && blocking_getch(flags, delay)) {
            wprintw(win, "ERR");
            wgetch_wrap(win, first_y);
        } else if (isQuit(c)) {
@@ -860,6 +868,10 @@ wgetch_test(unsigned level, WINDOW *win, int delay)
            wgetch_help(win, flags);
        } else if (c == 's') {
            ShellOut(TRUE);
+       } else if (c == 't') {
+           notimeout(win, flags[UChar('t')]);
+           flags[UChar('t')] = !flags[UChar('t')];
+           wgetch_help(win, flags);
        } else if (c == 'w') {
            int high = getmaxy(win) - 1 - first_y + 1;
            int wide = getmaxx(win) - first_x;
@@ -931,7 +943,7 @@ wgetch_test(unsigned level, WINDOW *win, int delay)
     wtimeout(win, -1);
 
     if (!level)
-       init_getch(win, flags);
+       init_getch(win, flags, delay);
 }
 
 static int
@@ -958,7 +970,7 @@ begin_getch_test(void)
        delay = -1;
     }
     raw();
-    move(5, 0);
+    move(6, 0);
     return delay;
 }
 
@@ -1060,11 +1072,11 @@ wget_wch_test(unsigned level, WINDOW *win, int delay)
     wint_t c;
     int incount = 0;
     GetchFlags flags;
-    bool blocking = (delay < 0);
     int code;
     char *temp;
 
-    init_getch(win, flags);
+    init_getch(win, flags, delay);
+    notimeout(win, FALSE);
     wtimeout(win, delay);
     getyx(win, first_y, first_x);
 
@@ -1075,7 +1087,7 @@ wget_wch_test(unsigned level, WINDOW *win, int delay)
     for (;;) {
        while ((code = wGet_wchar(win, &c)) == ERR) {
            incount++;
-           if (blocking) {
+           if (blocking_getch(flags, delay)) {
                (void) wprintw(win, "%05d: input error", incount);
                break;
            } else {
@@ -1083,7 +1095,7 @@ wget_wch_test(unsigned level, WINDOW *win, int delay)
            }
            wgetch_wrap(win, first_y);
        }
-       if (code == ERR && blocking) {
+       if (code == ERR && blocking_getch(flags, delay)) {
            wprintw(win, "ERR");
            wgetch_wrap(win, first_y);
        } else if (isQuit((int) c)) {
@@ -1125,6 +1137,10 @@ wget_wch_test(unsigned level, WINDOW *win, int delay)
            wgetch_help(win, flags);
        } else if (c == 's') {
            ShellOut(TRUE);
+       } else if (c == 't') {
+           notimeout(win, flags[UChar('t')]);
+           flags[UChar('t')] = !flags[UChar('t')];
+           wgetch_help(win, flags);
        } else if (c == 'w') {
            int high = getmaxy(win) - 1 - first_y + 1;
            int wide = getmaxx(win) - first_x;
@@ -1184,7 +1200,7 @@ wget_wch_test(unsigned level, WINDOW *win, int delay)
     wtimeout(win, -1);
 
     if (!level)
-       init_getch(win, flags);
+       init_getch(win, flags, delay);
 }
 
 static void