Module Name:    src
Committed By:   roy
Date:           Sat Dec 31 13:50:16 UTC 2016

Modified Files:
        src/distrib/sets/lists/comp: mi
        src/lib/libcurses: Makefile curses.h curses_cursor.3 curses_pad.3
            curses_refresh.3 keypad.c leaveok.c

Log Message:
Implement ncurses extensions is_leaveok and is_keypad.

The former allows the ncurses (and pdcurses) macros getsyx and setsyx
to be implemented, which is needed by a surprising number of applications.

The latter is needed for Python curses support so it doesn't have to dive
into ncurses window structure.


To generate a diff of this commit:
cvs rdiff -u -r1.2084 -r1.2085 src/distrib/sets/lists/comp/mi
cvs rdiff -u -r1.72 -r1.73 src/lib/libcurses/Makefile
cvs rdiff -u -r1.108 -r1.109 src/lib/libcurses/curses.h
cvs rdiff -u -r1.7 -r1.8 src/lib/libcurses/curses_cursor.3
cvs rdiff -u -r1.4 -r1.5 src/lib/libcurses/curses_pad.3
cvs rdiff -u -r1.10 -r1.11 src/lib/libcurses/curses_refresh.3
cvs rdiff -u -r1.12 -r1.13 src/lib/libcurses/keypad.c
cvs rdiff -u -r1.5 -r1.6 src/lib/libcurses/leaveok.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/comp/mi
diff -u src/distrib/sets/lists/comp/mi:1.2084 src/distrib/sets/lists/comp/mi:1.2085
--- src/distrib/sets/lists/comp/mi:1.2084	Fri Dec 30 22:38:38 2016
+++ src/distrib/sets/lists/comp/mi	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: mi,v 1.2084 2016/12/30 22:38:38 roy Exp $
+#	$NetBSD: mi,v 1.2085 2016/12/31 13:50:16 roy Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 ./etc/mtree/set.comp				comp-sys-root
@@ -6663,6 +6663,7 @@
 ./usr/share/man/cat3/getskeyprompt.0		comp-c-catman		skey,.cat
 ./usr/share/man/cat3/getstr.0			comp-c-catman		.cat
 ./usr/share/man/cat3/getsubopt.0		comp-c-catman		.cat
+./usr/share/man/cat3/getsyx.0			comp-c-catman		.cat
 ./usr/share/man/cat3/gettext.0			comp-c-catman		.cat
 ./usr/share/man/cat3/gettmode.0			comp-c-catman		.cat
 ./usr/share/man/cat3/getttyent.0		comp-c-catman		.cat
@@ -6873,6 +6874,8 @@
 ./usr/share/man/cat3/ipsec_strerror.0		comp-c-catman		.cat
 ./usr/share/man/cat3/iruserok.0			comp-c-catman		.cat
 ./usr/share/man/cat3/iruserok_sa.0		comp-c-catman		.cat
+./usr/share/man/cat3/is_keypad.0		comp-c-catman		.cat
+./usr/share/man/cat3/is_leaveok.0		comp-c-catman		.cat
 ./usr/share/man/cat3/is_linetouched.0		comp-c-catman		.cat
 ./usr/share/man/cat3/is_wintouched.0		comp-c-catman		.cat
 ./usr/share/man/cat3/isalnum.0			comp-c-catman		.cat
@@ -8920,6 +8923,7 @@
 ./usr/share/man/cat3/setscrreg.0		comp-c-catman		.cat
 ./usr/share/man/cat3/setservent.0		comp-c-catman		.cat
 ./usr/share/man/cat3/setstate.0			comp-c-catman		.cat
+./usr/share/man/cat3/setsyx.0			comp-c-catman		.cat
 ./usr/share/man/cat3/setterm.0			comp-c-catman		.cat
 ./usr/share/man/cat3/setttyent.0		comp-c-catman		.cat
 ./usr/share/man/cat3/setttyentpath.0		comp-c-catman		.cat
@@ -14011,6 +14015,7 @@
 ./usr/share/man/html3/getutmpx.html		comp-c-htmlman		html
 ./usr/share/man/html3/getutxent.html		comp-c-htmlman		html
 ./usr/share/man/html3/getutxid.html		comp-c-htmlman		html
+./usr/share/man/html3/getsyx.html		comp-c-htmlman		html
 ./usr/share/man/html3/getutxline.html		comp-c-htmlman		html
 ./usr/share/man/html3/getw.html			comp-c-htmlman		html
 ./usr/share/man/html3/getwc.html		comp-c-htmlman		html
@@ -14212,6 +14217,8 @@
 ./usr/share/man/html3/ipsec_strerror.html	comp-c-htmlman		html
 ./usr/share/man/html3/iruserok.html		comp-c-htmlman		html
 ./usr/share/man/html3/iruserok_sa.html		comp-c-htmlman		html
+./usr/share/man/html3/is_keypad.html		comp-c-htmlman		html
+./usr/share/man/html3/is_leaveok.html		comp-c-htmlman		html
 ./usr/share/man/html3/is_linetouched.html	comp-c-htmlman		html
 ./usr/share/man/html3/is_wintouched.html	comp-c-htmlman		html
 ./usr/share/man/html3/isalnum.html		comp-c-htmlman		html
@@ -16212,6 +16219,7 @@
 ./usr/share/man/html3/setscrreg.html		comp-c-htmlman		html
 ./usr/share/man/html3/setservent.html		comp-c-htmlman		html
 ./usr/share/man/html3/setstate.html		comp-c-htmlman		html
+./usr/share/man/html3/setsyx.html		comp-c-htmlman		html
 ./usr/share/man/html3/setterm.html		comp-c-htmlman		html
 ./usr/share/man/html3/setttyent.html		comp-c-htmlman		html
 ./usr/share/man/html3/setttyentpath.html	comp-c-htmlman		html
@@ -21258,6 +21266,7 @@
 ./usr/share/man/man3/getskeyprompt.3		comp-c-man		skey,.man
 ./usr/share/man/man3/getstr.3			comp-c-man		.man
 ./usr/share/man/man3/getsubopt.3		comp-c-man		.man
+./usr/share/man/man3/getsyx.3			comp-c-man		.man
 ./usr/share/man/man3/gettext.3			comp-c-man		.man
 ./usr/share/man/man3/gettmode.3			comp-c-man		.man
 ./usr/share/man/man3/getttyent.3		comp-c-man		.man
@@ -21468,6 +21477,8 @@
 ./usr/share/man/man3/ipsec_strerror.3		comp-c-man		.man
 ./usr/share/man/man3/iruserok.3			comp-c-man		.man
 ./usr/share/man/man3/iruserok_sa.3		comp-c-man		.man
+./usr/share/man/man3/is_keypad.3		comp-c-man		.man
+./usr/share/man/man3/is_leaveok.3		comp-c-man		.man
 ./usr/share/man/man3/is_linetouched.3		comp-c-man		.man
 ./usr/share/man/man3/is_wintouched.3		comp-c-man		.man
 ./usr/share/man/man3/isalnum.3			comp-c-man		.man
@@ -23511,6 +23522,7 @@
 ./usr/share/man/man3/setscrreg.3		comp-c-man		.man
 ./usr/share/man/man3/setservent.3		comp-c-man		.man
 ./usr/share/man/man3/setstate.3			comp-c-man		.man
+./usr/share/man/man3/setsyx.3			comp-c-man		.man
 ./usr/share/man/man3/setterm.3			comp-c-man		.man
 ./usr/share/man/man3/setttyent.3		comp-c-man		.man
 ./usr/share/man/man3/setttyentpath.3		comp-c-man		.man

Index: src/lib/libcurses/Makefile
diff -u src/lib/libcurses/Makefile:1.72 src/lib/libcurses/Makefile:1.73
--- src/lib/libcurses/Makefile:1.72	Fri Dec 30 22:38:38 2016
+++ src/lib/libcurses/Makefile	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.72 2016/12/30 22:38:38 roy Exp $
+#	$NetBSD: Makefile,v 1.73 2016/12/31 13:50:16 roy Exp $
 #	@(#)Makefile	8.2 (Berkeley) 1/2/94
 
 .include <bsd.own.mk>
@@ -88,7 +88,8 @@ MLINKS+= curses_addch.3 addch.3 curses_a
 	 curses_cursor.3 getpary.3 curses_cursor.3 getparx.3 \
 	 curses_cursor.3 getparyx.3 curses_fileio.3 getwin.3 \
 	 curses_input.3 getstr.3 \
-	 curses_tty.3 gettmode.3 curses_cursor.3 getyx.3 \
+	 curses_tty.3 gettmode.3 \
+	 curses_cursor.3 getyx.3 curses_cursor.3 getsyx.3 \
 	 curses_color.3 has_colors.3 curses_tty.3 has_ic.3 \
 	 curses_tty.3 halfdelay.3 curses_tty.3 has_il.3 \
 	 curses_line.3 hline.3 curses_tty.3 idcok.3 \
@@ -98,7 +99,9 @@ MLINKS+= curses_addch.3 addch.3 curses_a
 	 curses_color.3 init_pair.3 curses_screen.3 initscr.3 \
 	 curses_insertch.3 insch.3 curses_insdelln.3 insdelln.3 \
 	 curses_insertln.3 insertln.3 curses_inch.3 instr.3 \
-	 curses_tty.3 intrflush.3 curses_touch.3 is_linetouched.3 \
+	 curses_tty.3 intrflush.3 \
+	 curses_pad.3 is_keypad.3 \
+	 curses_refresh.3 is_leaveok.3 curses_touch.3 is_linetouched.3 \
 	 curses_touch.3 is_wintouched.3 curses_screen.3 isendwin.3 \
 	 curses_keyname.3 keyname.3 \
 	 curses_input.3 keypad.3 curses_tty.3 killchar.3 \
@@ -140,6 +143,7 @@ MLINKS+= curses_addch.3 addch.3 curses_a
 	 curses_tty.3 savetty.3 curses_scanw.3 scanw.3 \
 	 curses_scroll.3 scrl.3 curses_scroll.3 scroll.3 \
 	 curses_scroll.3 scrollok.3 curses_scroll.3 setscrreg.3 \
+	 curses_cursor.3 setsyx.3 \
 	 curses_screen.3 set_term.3 curses_screen.3 setterm.3 \
 	 curses_standout.3 standend.3 curses_standout.3 standout.3 \
 	 curses_color.3 start_color.3 curses_pad.3 subpad.3 \

Index: src/lib/libcurses/curses.h
diff -u src/lib/libcurses/curses.h:1.108 src/lib/libcurses/curses.h:1.109
--- src/lib/libcurses/curses.h:1.108	Fri Dec 30 22:38:38 2016
+++ src/lib/libcurses/curses.h	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: curses.h,v 1.108 2016/12/30 22:38:38 roy Exp $	*/
+/*	$NetBSD: curses.h,v 1.109 2016/12/31 13:50:16 roy Exp $	*/
 
 /*
  * Copyright (c) 1981, 1993, 1994
@@ -614,6 +614,24 @@ __END_DECLS
 #define	getmaxyx(w, y, x)	(y) = getmaxy(w), (x) = getmaxx(w)
 #define	getparyx(w, y, x)	(y) = getpary(w), (x) = getparx(w)
 
+#define	getsyx(y, x)						\
+	do {							\
+		if (is_leaveok(curscr))				\
+			(y) = (x) = -1;				\
+		else						\
+			getyx(curscr,(y), (x));			\
+	} while(0 /* CONSTCOND */)
+#define	setsyx(y, x)						\
+	do {							\
+		if ((y) == -1 && (x) == -1)			\
+			leaveok(curscr, TRUE);			\
+		else {						\
+			leaveok(curscr, FALSE);			\
+			wmove(curscr, (y), (x));		\
+		}						\
+	} while(0 /* CONSTCOND */)
+
+
 /* Public function prototypes. */
 __BEGIN_DECLS
 int	 assume_default_colors(short, short);
@@ -923,6 +941,10 @@ int wbkgrnd(WINDOW *, const cchar_t *);
 void wbkgrndset(WINDOW *, const cchar_t *);
 int wgetbkgrnd(WINDOW *, cchar_t *);
 
+/* ncurses window tests */
+bool is_keypad(const WINDOW *);
+bool is_leaveok(const WINDOW *);
+
 /* Private functions that are needed for user programs prototypes. */
 int	 __cputchar(int);
 int	 __waddbytes(WINDOW *, const char *, int, attr_t);

Index: src/lib/libcurses/curses_cursor.3
diff -u src/lib/libcurses/curses_cursor.3:1.7 src/lib/libcurses/curses_cursor.3:1.8
--- src/lib/libcurses/curses_cursor.3:1.7	Wed Feb 24 13:02:13 2010
+++ src/lib/libcurses/curses_cursor.3	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-.\"	$NetBSD: curses_cursor.3,v 1.7 2010/02/24 13:02:13 drochner Exp $
+.\"	$NetBSD: curses_cursor.3,v 1.8 2016/12/31 13:50:16 roy Exp $
 .\"
 .\" Copyright (c) 2002
 .\"	Brett Lymn (bl...@netbsd.org, brett_l...@yahoo.com.au)
@@ -30,13 +30,14 @@
 .\" SUCH DAMAGE.
 .\"
 .\"
-.Dd February 23, 2010
+.Dd December 31, 2016
 .Dt CURSES 3
 .Os
 .Sh NAME
 .Nm curses_cursor ,
 .Nm getcury ,
 .Nm getcurx ,
+.Nm getsyx ,
 .Nm getyx ,
 .Nm getbegy ,
 .Nm getbegx ,
@@ -48,6 +49,7 @@
 .Nm getparx ,
 .Nm getparyx ,
 .Nm move ,
+.Nm setsyx ,
 .Nm wmove ,
 .Nm mvcur ,
 .Nm wcursyncup
@@ -60,6 +62,8 @@
 .Fn getcury "WINDOW *win"
 .Ft int
 .Fn getcurx "WINDOW *win"
+.Ft int
+.Fn getsyx "int y" "int x"
 .Ft void
 .Fn getyx "WINDOW *win" "int y" "int x"
 .Ft int
@@ -83,6 +87,8 @@
 .Ft int
 .Fn move "int y" "int x"
 .Ft int
+.Fn setsyx "int y" "int x"
+.Ft int
 .Fn wmove "WINDOW *win" "int y" "int x"
 .Ft int
 .Fn mvcur "int oldy" "int oldx" "int y" "int x"
@@ -107,6 +113,30 @@ and
 to the current row and column positions of the cursor in the window
 .Fa win .
 .Pp
+The
+.Fn getsyx
+macro sets the values of
+.Fa y
+and
+.Fa x
+of the current window if
+.Fn is_leaveok
+is false, otherwise \-1, \-1.
+The
+.Fn setsyx
+macro sets the row and column positions, respectively, of the cursor in the
+current window to the values of
+.Fa y
+and
+.Fa x.
+If both
+.Fa y
+and
+.Fa x
+are both \-1 then
+.Fn leaveok
+is set.
+.Pp
 The origin row and columns of a window
 .Fa win
 can be
@@ -221,3 +251,11 @@ functions are extensions.
 .Sh HISTORY
 The Curses package appeared in
 .Bx 4.0 .
+The
+.Fn getsyx
+and
+.Fn setsyx
+functions are
+.Em ncurses
+extensions to the Curses library and were added in
+.Nx 8.0 .

Index: src/lib/libcurses/curses_pad.3
diff -u src/lib/libcurses/curses_pad.3:1.4 src/lib/libcurses/curses_pad.3:1.5
--- src/lib/libcurses/curses_pad.3:1.4	Wed Apr 30 13:10:51 2008
+++ src/lib/libcurses/curses_pad.3	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-.\"	$NetBSD: curses_pad.3,v 1.4 2008/04/30 13:10:51 martin Exp $
+.\"	$NetBSD: curses_pad.3,v 1.5 2016/12/31 13:50:16 roy Exp $
 .\" Copyright (c) 2002 The NetBSD Foundation, Inc.
 .\" All rights reserved.
 .\"
@@ -25,7 +25,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd December 4, 2002
+.Dd December 31, 2016
 .Dt CURSES_PAD 3
 .Os
 .Sh NAME
@@ -47,6 +47,8 @@
 .Fn prefresh "WINDOW *pad" "int pbeg_y" "int pbeg_x" "int sbeg_y" "int sbeg_x" "int smax_y" "int smax_x"
 .Ft int
 .Fn pnoutrefresh "WINDOW *pad" "int pbeg_y" "int pbeg_x" "int sbeg_y" "int sbeg_x" "int smax_y" "int smax_x"
+.Ft bool
+.Fn is_keypad "const WINDOW *pad"
 .Sh DESCRIPTION
 These functions create and display pads on the current screen.
 .Pp
@@ -108,6 +110,10 @@ and
 functions can be used together to speed up terminal redraws by
 deferring the actual terminal updates until after a batch of updates
 to multiple pads has been done.
+.Pp
+The
+.Fn is_keypad
+function returns true if the given window is a pad, otherwise false.
 .Sh RETURN VALUES
 Functions returning pointers will return
 .Dv NULL
@@ -140,3 +146,9 @@ Single Unix Specification.
 .Sh HISTORY
 The Curses package appeared in
 .Bx 4.0 .
+The
+.Fn is_keypad
+function is a
+.Em ncurses
+extension to the Curses library and was added in
+.Nx 8.0 .

Index: src/lib/libcurses/curses_refresh.3
diff -u src/lib/libcurses/curses_refresh.3:1.10 src/lib/libcurses/curses_refresh.3:1.11
--- src/lib/libcurses/curses_refresh.3:1.10	Wed Apr 16 13:35:01 2003
+++ src/lib/libcurses/curses_refresh.3	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-.\"	$NetBSD: curses_refresh.3,v 1.10 2003/04/16 13:35:01 wiz Exp $
+.\"	$NetBSD: curses_refresh.3,v 1.11 2016/12/31 13:50:16 roy Exp $
 .\"
 .\" Copyright (c) 2002
 .\"	Brett Lymn (bl...@netbsd.org, brett_l...@yahoo.com.au)
@@ -30,7 +30,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"
-.Dd March 26, 2003
+.Dd December 31, 2016
 .Dt CURSES_REFRESH 3
 .Os
 .Sh NAME
@@ -40,6 +40,7 @@
 .Nm wnoutrefresh ,
 .Nm doupdate ,
 .Nm leaveok ,
+.Nm is_leaveok ,
 .Nm flushok
 .Nd curses terminal update routines
 .Sh LIBRARY
@@ -56,6 +57,8 @@
 .Fn doupdate "void"
 .Ft int
 .Fn leaveok "WINDOW *win" "boolf flag"
+.Ft bool
+.Fn is_leaveok "const WINDOW *win"
 .Ft int
 .Fn flushok "WINDOW *win" "boolf flag"
 .Sh DESCRIPTION
@@ -116,6 +119,9 @@ to
 .Dv FALSE
 ensures that the screen cursor is positioned at the current cursor
 position after a refresh operation has taken place.
+The
+.Fn is_leaveok
+function returns the setting.
 .Pp
 The
 .Fn flushok
@@ -155,3 +161,10 @@ Single Unix Specification.
 .Sh HISTORY
 The Curses package appeared in
 .Bx 4.0 .
+The
+.Fn is_leaveok
+function is a
+.Em ncurses
+extension to the Curses library and was added in
+.Nx 8.0 .
+

Index: src/lib/libcurses/keypad.c
diff -u src/lib/libcurses/keypad.c:1.12 src/lib/libcurses/keypad.c:1.13
--- src/lib/libcurses/keypad.c:1.12	Wed Feb  3 15:34:40 2010
+++ src/lib/libcurses/keypad.c	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: keypad.c,v 1.12 2010/02/03 15:34:40 roy Exp $  */
+/*	$NetBSD: keypad.c,v 1.13 2016/12/31 13:50:16 roy Exp $  */
 
 /*-
  * Copyright (c) 1998-1999 Brett Lymn (bl...@baea.com.au, brett_l...@yahoo.com)
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: keypad.c,v 1.12 2010/02/03 15:34:40 roy Exp $");
+__RCSID("$NetBSD: keypad.c,v 1.13 2016/12/31 13:50:16 roy Exp $");
 #endif				/* not lint */
 
 #include "curses.h"
@@ -57,3 +57,14 @@ keypad(WINDOW *win, bool bf)
 
 	return OK;
 }
+
+/*
+ * is_keypad --
+ *	Return true if window is set for keypad.
+ */
+bool
+is_keypad(const WINDOW *win)
+{
+
+	return win->flags & __KEYPAD ? true : false;
+}

Index: src/lib/libcurses/leaveok.c
diff -u src/lib/libcurses/leaveok.c:1.5 src/lib/libcurses/leaveok.c:1.6
--- src/lib/libcurses/leaveok.c:1.5	Mon Apr 28 20:23:01 2008
+++ src/lib/libcurses/leaveok.c	Sat Dec 31 13:50:16 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: leaveok.c,v 1.5 2008/04/28 20:23:01 martin Exp $	*/
+/*	$NetBSD: leaveok.c,v 1.6 2016/12/31 13:50:16 roy Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: leaveok.c,v 1.5 2008/04/28 20:23:01 martin Exp $");
+__RCSID("$NetBSD: leaveok.c,v 1.6 2016/12/31 13:50:16 roy Exp $");
 #endif				/* not lint */
 
 #include "curses.h"
@@ -50,3 +50,14 @@ leaveok(WINDOW *win, bool bf)
 		win->flags &= ~__LEAVEOK;
 	return (OK);
 }
+
+/*
+ * is_leaveok --
+ *	Return true if window is set for leaveok.
+ */
+bool
+is_leaveok(const WINDOW *win)
+{
+
+	return win->flags & __LEAVEOK ? true : false;
+}

Reply via email to