diff --git a/distrib/sets/lists/comp/mi b/distrib/sets/lists/comp/mi index 5533114f5f44..a659f256b772 100644 --- a/distrib/sets/lists/comp/mi +++ b/distrib/sets/lists/comp/mi @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.2083 2016/12/22 16:32:31 maya Exp $ +# $NetBSD: mi,v 1.2084 2016/12/30 22:38:38 roy Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. ./etc/mtree/set.comp comp-sys-root @@ -6380,6 +6380,7 @@ ./usr/share/man/cat3/field_type.0 comp-c-catman .cat ./usr/share/man/cat3/field_userptr.0 comp-c-catman .cat ./usr/share/man/cat3/fileno.0 comp-c-catman .cat +./usr/share/man/cat3/filter.0 comp-c-catman .cat ./usr/share/man/cat3/finite.0 comp-c-catman .cat ./usr/share/man/cat3/finitef.0 comp-c-catman .cat ./usr/share/man/cat3/flags_to_string.0 comp-c-catman .cat @@ -13720,6 +13721,7 @@ ./usr/share/man/html3/field_type.html comp-c-htmlman html ./usr/share/man/html3/field_userptr.html comp-c-htmlman html ./usr/share/man/html3/fileno.html comp-c-htmlman html +./usr/share/man/html3/filter.html comp-c-htmlman html ./usr/share/man/html3/finite.html comp-c-htmlman html ./usr/share/man/html3/finitef.html comp-c-htmlman html ./usr/share/man/html3/flags_to_string.html comp-c-htmlman html @@ -20973,6 +20975,7 @@ ./usr/share/man/man3/field_type.3 comp-c-man .man ./usr/share/man/man3/field_userptr.3 comp-c-man .man ./usr/share/man/man3/fileno.3 comp-c-man .man +./usr/share/man/man3/filter.3 comp-c-man .man ./usr/share/man/man3/finite.3 comp-c-man .man ./usr/share/man/man3/finitef.3 comp-c-man .man ./usr/share/man/man3/flags_to_string.3 comp-c-man .man diff --git a/lib/libcurses/Makefile b/lib/libcurses/Makefile index 0f0a69cdc11c..074037c5c284 100644 --- a/lib/libcurses/Makefile +++ b/lib/libcurses/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.71 2014/07/05 22:31:32 dholland Exp $ +# $NetBSD: Makefile,v 1.72 2016/12/30 22:38:38 roy Exp $ # @(#)Makefile 8.2 (Berkeley) 1/2/94 .include @@ -75,7 +75,7 @@ MLINKS+= curses_addch.3 addch.3 curses_addchstr.3 addchnstr.3 \ curses_refresh.3 doupdate.3 curses_window.3 dupwin.3 \ curses_tty.3 echo.3 curses_echochar.3 echochar.3 \ curses_screen.3 endwin.3 curses_clear.3 erase.3 \ - curses_tty.3 erasechar.3 \ + curses_tty.3 erasechar.3 curses_screen.3 filter.3 \ curses_tty.3 flash.3 curses_tty.3 flushinp.3 \ curses_refresh.3 flushok.3 \ curses_termcap.3 fullname.3 curses_attributes.3 getattrs.3 \ diff --git a/lib/libcurses/curses.h b/lib/libcurses/curses.h index 5c183b05e1b6..771311e942b9 100644 --- a/lib/libcurses/curses.h +++ b/lib/libcurses/curses.h @@ -1,4 +1,4 @@ -/* $NetBSD: curses.h,v 1.107 2015/06/08 12:38:57 joerg Exp $ */ +/* $NetBSD: curses.h,v 1.108 2016/12/30 22:38:38 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -638,6 +638,7 @@ int doupdate(void); int echo(void); int endwin(void); char erasechar(void); +void filter(void); int flash(void); int flushinp(void); int flushok(WINDOW *, bool); diff --git a/lib/libcurses/curses_private.h b/lib/libcurses/curses_private.h index e1dfda3d8a80..ac511b9f6d6f 100644 --- a/lib/libcurses/curses_private.h +++ b/lib/libcurses/curses_private.h @@ -1,4 +1,4 @@ -/* $NetBSD: curses_private.h,v 1.51 2016/10/23 21:20:56 christos Exp $ */ +/* $NetBSD: curses_private.h,v 1.52 2016/12/30 22:38:38 roy Exp $ */ /*- * Copyright (c) 1998-2000 Brett Lymn @@ -252,6 +252,7 @@ struct __screen { int resized; wchar_t *unget_list; int unget_len, unget_pos; + int filtered; #ifdef HAVE_WCHAR #define MB_LEN_MAX 8 #define MAX_CBUF_SIZE MB_LEN_MAX diff --git a/lib/libcurses/curses_screen.3 b/lib/libcurses/curses_screen.3 index c8b91ebf3aab..0abe9c6c73df 100644 --- a/lib/libcurses/curses_screen.3 +++ b/lib/libcurses/curses_screen.3 @@ -1,4 +1,4 @@ -.\" $NetBSD: curses_screen.3,v 1.15 2012/04/21 12:27:28 roy Exp $ +.\" $NetBSD: curses_screen.3,v 1.16 2016/12/30 22:38:38 roy Exp $ .\" .\" Copyright (c) 2002 .\" Brett Lymn (blymn@NetBSD.org, brett_lymn@yahoo.com.au) @@ -30,10 +30,11 @@ .\" SUCH DAMAGE. .\" .\" -.Dd April 5, 2012 +.Dd December 30, 2016 .Dt CURSES_SCREEN 3 .Os .Sh NAME +.Nm filter , .Nm curses_screen , .Nm newterm , .Nm set_term , @@ -48,6 +49,8 @@ .Lb libcurses .Sh SYNOPSIS .In curses.h +.Ft void +.Fn filter "void" .Ft SCREEN * .Fn newterm "char *type" "FILE *outfd" "FILE *infd" .Ft SCREEN * @@ -170,6 +173,23 @@ The argument must be a valid name or alias in the .Xr terminfo 5 database for this function to succeed. +.Pp +The +.Fn filter +function changes the way the terminal is initialised. +A subsequent call to +.Fn initscr +or +.Fn newterm +performs the following additonal actions: +.Bl -bullet -compact +.It +Disable use of clear, cud, cud1, cup, cuu, cuu1 and vpa. +.It +Set the value of the home string to the value of the cr string. +.It +Set lines equal to 1. +.El .Sh RETURN VALUES Functions returning pointers will return .Dv NULL diff --git a/lib/libcurses/screen.c b/lib/libcurses/screen.c index 89ec9bf5e38a..a9098735e546 100644 --- a/lib/libcurses/screen.c +++ b/lib/libcurses/screen.c @@ -1,4 +1,4 @@ -/* $NetBSD: screen.c,v 1.24 2015/11/26 01:05:08 christos Exp $ */ +/* $NetBSD: screen.c,v 1.25 2016/12/30 22:38:38 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)screen.c 8.2 (blymn) 11/27/2001"; #else -__RCSID("$NetBSD: screen.c,v 1.24 2015/11/26 01:05:08 christos Exp $"); +__RCSID("$NetBSD: screen.c,v 1.25 2016/12/30 22:38:38 roy Exp $"); #endif #endif /* not lint */ @@ -43,6 +43,18 @@ __RCSID("$NetBSD: screen.c,v 1.24 2015/11/26 01:05:08 christos Exp $"); #include "curses.h" #include "curses_private.h" +static int filtered; + +/* + * filter has to be called before either initscr or newterm. + */ +void +filter(void) +{ + + filtered = TRUE; +} + /* * set_term -- * Change the term to the given screen. @@ -128,6 +140,8 @@ newterm(char *type, FILE *outfd, FILE *infd) new_screen->outfd = outfd; new_screen->echoit = new_screen->nl = 1; new_screen->pfast = new_screen->rawmode = new_screen->noqch = 0; + new_screen->filtered = filtered; + filtered = FALSE; /* filter() must preceed each newterm() */ new_screen->nca = A_NORMAL; new_screen->color_type = COLOR_NONE; new_screen->COLOR_PAIRS = 0; diff --git a/lib/libcurses/setterm.c b/lib/libcurses/setterm.c index b8ac9c8b4e46..a40073681b56 100644 --- a/lib/libcurses/setterm.c +++ b/lib/libcurses/setterm.c @@ -1,4 +1,4 @@ -/* $NetBSD: setterm.c,v 1.54 2016/01/09 19:05:13 jdc Exp $ */ +/* $NetBSD: setterm.c,v 1.55 2016/12/30 22:38:38 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)setterm.c 8.8 (Berkeley) 10/25/94"; #else -__RCSID("$NetBSD: setterm.c,v 1.54 2016/01/09 19:05:13 jdc Exp $"); +__RCSID("$NetBSD: setterm.c,v 1.55 2016/12/30 22:38:38 roy Exp $"); #endif #endif /* not lint */ @@ -99,8 +99,27 @@ _cursesi_setterm(char *type, SCREEN *screen) } } + if (screen->filtered) { + /* Disable use of clear, cud, cud1, cup, cuu1 and vpa. */ + screen->term->strs[TICODE_clear] = NULL; + screen->term->strs[TICODE_cud] = NULL; + screen->term->strs[TICODE_cud1] = NULL; + screen->term->strs[TICODE_cup] = NULL; + screen->term->strs[TICODE_cuu] = NULL; + screen->term->strs[TICODE_cuu1] = NULL; + screen->term->strs[TICODE_vpa] = NULL; + /* Set the value of the home string to the value of + * the cr string. */ + screen->term->strs[TICODE_home] = screen->term->strs[TICODE_cr]; + /* Set lines equal to 1. */ + screen->LINES = 1; + } +#ifdef DEBUG + __CTRACE(__CTRACE_INIT, "setterm: filtered %d", screen->filtered); +#endif + /* POSIX 1003.2 requires that the environment override. */ - if ((p = getenv("LINES")) != NULL) + if (!screen->filtered && (p = getenv("LINES")) != NULL) screen->LINES = (int) strtol(p, NULL, 0); if ((p = getenv("COLUMNS")) != NULL) screen->COLS = (int) strtol(p, NULL, 0);