aboutsummaryrefslogtreecommitdiff
path: root/lib/ncurses
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2021-01-12 16:34:49 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2021-02-25 13:25:11 +0000
commit61f66a1f4403fded9aae14d890ad96914a3c0bc1 (patch)
tree4f46a9193517fbef9a3e8566d8367e5145c9b2da /lib/ncurses
parent3fd63ddfdf3541faea762143365dbc70c16fa49e (diff)
downloadsrc-61f66a1f4403fded9aae14d890ad96914a3c0bc1.tar.gz
src-61f66a1f4403fded9aae14d890ad96914a3c0bc1.zip
ncurses: Add support for terminfo database
Along with the termcap database, ncurses will now lookup for the terminfo database, note that the terminfo database is being looked up first and then it fallsback on the termcap one. While here drop our custom reader for the termcap database, over the time it is needed maintenance to be able to catchup with changes on ncurses side. Install the ncurses tools which are needed to deal with the terminfo database: tic, infocmp, toe Replace our termcap only aware tools with the ncurses counterpart: tput, tabs, tset, clear and reset In particular they can your the extra capabilities described in the terminfo database, which does not exist in termcap Note that to add a new terminfo information to the database from ports the ports will just need to add their extra information into: /usr/local/share/site-terminfo/<firstletteroftheterm>/<term> Tested by: jbeich, manu
Diffstat (limited to 'lib/ncurses')
-rw-r--r--lib/ncurses/config.mk14
-rw-r--r--lib/ncurses/ncurses/Makefile9
-rw-r--r--lib/ncurses/ncurses/ncurses_cfg.h63
-rw-r--r--lib/ncurses/ncurses/termcap.c266
4 files changed, 46 insertions, 306 deletions
diff --git a/lib/ncurses/config.mk b/lib/ncurses/config.mk
index f199c5829b65..7a64a7b948ee 100644
--- a/lib/ncurses/config.mk
+++ b/lib/ncurses/config.mk
@@ -3,8 +3,11 @@
# This Makefile is shared by libncurses, libform, libmenu, libpanel.
NCURSES_DIR= ${SRCTOP}/contrib/ncurses
+NCURSES_MAJOR= 6
+NCURSES_MINOR= 2
+NCURSES_PATCH= 20200215
-CFLAGS+= -D_XOPEN_SOURCE_EXTENDED -DENABLE_WIDEC
+CFLAGS+= -D_XOPEN_SOURCE_EXTENDED
NCURSES_CFG_H= ${.CURDIR}/ncurses_cfg.h
CFLAGS+= -I.
@@ -41,5 +44,12 @@ MANFILTER= sed -e 's%@TERMINFO@%${TERMINFODIR}/terminfo%g' \
-e 's%@NCURSES_MAJOR@%${NCURSES_MAJOR}%g' \
-e 's%@NCURSES_MINOR@%${NCURSES_MINOR}%g' \
-e 's%@NCURSES_PATCH@%${NCURSES_PATCH}%g' \
+ -e 's%@TSET@%tset%g' \
+ -e 's%@RESET@%reset%g' \
+ -e 's%@CLEAR@%clear%g' \
+ -e 's%@TABS@%tabs%g' \
-e 's%@TIC@%tic%g' \
- -e 's%@INFOCMP@%infocmp%g'
+ -e 's%@TOE@%toe%g' \
+ -e 's%@INFOCMP@%infocmp%g' \
+ -e 's%@CAPTOINFO@%captoinfo%g' \
+ -e 's%@INFOTOCAP@%infotocap%g'
diff --git a/lib/ncurses/ncurses/Makefile b/lib/ncurses/ncurses/Makefile
index 6f03d93a9ac6..aff569a79845 100644
--- a/lib/ncurses/ncurses/Makefile
+++ b/lib/ncurses/ncurses/Makefile
@@ -216,6 +216,7 @@ SRCS+= \
obsolete.c \
parse_entry.c \
read_entry.c \
+ read_termcap.c \
strings.c \
trim_sgr0.c \
write_entry.c
@@ -270,14 +271,10 @@ DBGSRCS= \
trace_xnames.c \
varargs.c
-# From our old libtermcap.
-# Used instead of the hideous read_termcap.c abomination.
-SRCS+= termcap.c
-
CLEANFILES= ${GENSRCS} ${GENHDRS} keys.list make_hash term.h.new \
make_keys MKterm.h.awk comp_captab.c curses.head
-CFLAGS+= -DFREEBSD_NATIVE -DTERMIOS
+CFLAGS+= -DTERMIOS
# Installed
HEADERS= curses.h term.h termcap.h unctrl.h
@@ -416,7 +413,7 @@ make_hash: make_hash.c hashsize.h ncurses_def.h ${HEADERS} ${BUILD_TOOLS_META}
MKterm.h.awk: MKterm.h.awk.in
sed <${NCURSES_DIR}/include/MKterm.h.awk.in >$@ \
-e "/@BROKEN_LINKER@/s%%${BROKEN_LINKER}%" \
- -e "s%@NCURSES_USE_DATABASE@%0%g" \
+ -e "s%@NCURSES_USE_DATABASE@%1%g" \
-e "s%@NCURSES_USE_TERMCAP@%1%g" \
-e "/@NCURSES_MAJOR@/s%%${NCURSES_MAJOR}%" \
-e "/@NCURSES_MINOR@/s%%${NCURSES_MINOR}%" \
diff --git a/lib/ncurses/ncurses/ncurses_cfg.h b/lib/ncurses/ncurses/ncurses_cfg.h
index 0a92c2f23ba4..49cef464b803 100644
--- a/lib/ncurses/ncurses/ncurses_cfg.h
+++ b/lib/ncurses/ncurses/ncurses_cfg.h
@@ -59,6 +59,8 @@
#define HAVE_LONG_FILE_NAMES 1
#define MIXEDCASE_FILENAMES 1
#define USE_SYSMOUSE 1
+#define TERMINFO_DIRS "/usr/share/terminfo:/usr/local/share/site-terminfo"
+#define TERMINFO "/usr/share/terminfo"
#define HAVE_BIG_CORE 1
#define TERMPATH "/etc/termcap:/usr/share/misc/termcap"
#define USE_GETCAP 1
@@ -70,6 +72,23 @@
#define USE_LINKS 1
#define BSD_TPUTS 1
#define HAVE_LANGINFO_CODESET 1
+#define USE_WIDEC_SUPPORT 1
+#define NCURSES_WIDECHAR 1
+#define HAVE_WCHAR_H 1
+#define HAVE_WCTYPE_H 1
+#define HAVE_PUTWC 1
+#define HAVE_BTOWC 1
+#define HAVE_WCTOB 1
+#define HAVE_MBTOWC 1
+#define HAVE_WCTOMB 1
+#define HAVE_MBLEN 1
+#define HAVE_MBRLEN 1
+#define HAVE_MBRTOWC 1
+#define HAVE_WCSRTOMBS 1
+#define HAVE_MBSRTOWCS 1
+#define HAVE_WCSTOMBS 1
+#define HAVE_MBSTOWCS 1
+#define NEED_WCHAR_H 1
#define HAVE_FSEEKO 1
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
@@ -96,6 +115,10 @@
#define HAVE_WRESIZE 1
#define NCURSES_SP_FUNCS 1
#define HAVE_TPUTS_SP 1
+#define NCURSES_EXT_COLORS 1
+#define HAVE_ALLOC_PAIR 1
+#define HAVE_INIT_EXTENDED_COLOR 1
+#define HAVE_RESET_COLOR_PAIRS 1
#define NCURSES_EXT_PUTWIN 1
#define NCURSES_NO_PADDING 1
#define USE_SIGWINCH 1
@@ -133,6 +156,11 @@
#define HAVE_UNISTD_H 1
#define HAVE_GETOPT_H 1
#define HAVE_GETOPT_HEADER 1
+#define DECL_ENVIRON 1
+#define HAVE_ENVIRON 1
+#define HAVE_PUTENV 1
+#define HAVE_SETENV 1
+#define HAVE_STRDUP 1
#define HAVE_SYS_TIME_SELECT 1
#define SIG_ATOMIC_T volatile sig_atomic_t
#define HAVE_ERRNO 1
@@ -153,6 +181,7 @@
#define HAVE_SETVBUF 1
#define HAVE_SIGACTION 1
#define HAVE_SIGVEC 1
+#define HAVE_SNPRINTF 1
#define HAVE_STRDUP 1
#define HAVE_STRSTR 1
#define HAVE_SYSCONF 1
@@ -181,11 +210,12 @@
#define USE_FOPEN_BIN_R 1
#define USE_OPENPTY_HEADER <libutil.h>
#define USE_XTERM_PTY 1
-#define USE_HASHED_DB 1
#define HAVE_TYPEINFO 1
#define HAVE_IOSTREAM 1
#define IOSTREAM_NAMESPACE 1
+#define SIZEOF_BOOL 1
#define CPP_HAS_STATIC_CAST 1
+#define SIZEOF_WCHAR_T 4
#define HAVE_SLK_COLOR 1
#define HAVE_PANEL_H 1
#define HAVE_LIBPANEL 1
@@ -198,37 +228,6 @@
#define NCURSES_OSPEED_COMPAT 1
#define HAVE_CURSES_DATA_BOOLNAMES 1
-/*
- * Begin FreeBSD-specific changes
- */
-/* Support ENABLE_WIDEC */
-#ifdef ENABLE_WIDEC
-#define USE_WIDEC_SUPPORT 1
-#define NCURSES_WIDECHAR 1
-#define NCURSES_EXT_FUNCS 1
-#define NCURSES_EXT_COLORS 1
-#define HAVE_ALLOC_PAIR 1
-#define HAVE_INIT_EXTENDED_COLOR 1
-#define HAVE_RESET_COLOR_PAIRS 1
-#define HAVE_PUTWC 1
-#define HAVE_BTOWC 1
-#define HAVE_WCTOB 1
-#define HAVE_MBTOWC 1
-#define HAVE_WCTOMB 1
-#define HAVE_MBLEN 1
-#define HAVE_MBRLEN 1
-#define HAVE_MBRTOWC 1
-#define HAVE_WCSRTOMBS 1
-#define HAVE_MBSRTOWCS 1
-#define HAVE_WCSTOMBS 1
-#define HAVE_MBSTOWCS 1
-#define NEED_WCHAR_H 1
-#define SIZEOF_WCHAR_T 4
-#endif
-/*
- * End FreeBSD-specific changes
- */
-
#include <ncurses_def.h>
/* The C compiler may not treat these properly but C++ has to */
diff --git a/lib/ncurses/ncurses/termcap.c b/lib/ncurses/ncurses/termcap.c
deleted file mode 100644
index 535301a1b474..000000000000
--- a/lib/ncurses/ncurses/termcap.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/* A portion of this file is from ncurses: */
-/***************************************************************************
-* COPYRIGHT NOTICE *
-****************************************************************************
-* ncurses is copyright (C) 1992-1995 *
-* Zeyd M. Ben-Halim *
-* zmbenhal@netcom.com *
-* Eric S. Raymond *
-* esr@snark.thyrsus.com *
-* *
-* Permission is hereby granted to reproduce and distribute ncurses *
-* by any means and for any fee, whether alone or as part of a *
-* larger distribution, in source or in binary form, PROVIDED *
-* this notice is included with any such distribution, and is not *
-* removed from any of its header files. Mention of ncurses in any *
-* applications linked with it is highly appreciated. *
-* *
-* ncurses comes AS IS with no warranty, implied or expressed. *
-* *
-***************************************************************************/
-
-#include <curses.priv.h>
-
-#include <string.h>
-#include <term.h>
-#include <tic.h>
-#include <term_entry.h>
-
-/* The rest is from BSD */
-/*-
- * SPDX-License-Identifier: BSD-3-Clause
- *
- * Copyright (c) 1980, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#if 0
-#ifndef lint
-static const char sccsid[] = "@(#)termcap.c 8.1 (Berkeley) 6/4/93";
-#endif /* not lint */
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include "pathnames.h"
-
-#define PBUFSIZ MAXPATHLEN /* max length of filename path */
-#define PVECSIZ 32 /* max number of names in path */
-#define TBUFSIZ 1024 /* max length of _nc_tgetent buffer */
-
-char _nc_termcap[TBUFSIZ + 1]; /* Last getcap, provided to tgetent() emul */
-
-/*
- * termcap - routines for dealing with the terminal capability data base
- *
- * BUG: Should use a "last" pointer in tbuf, so that searching
- * for capabilities alphabetically would not be a n**2/2
- * process when large numbers of capabilities are given.
- * Note: If we add a last pointer now we will screw up the
- * tc capability. We really should compile termcap.
- *
- * Essentially all the work here is scanning and decoding escapes
- * in string capabilities. We don't use stdio because the editor
- * doesn't, and because living w/o it is not hard.
- */
-
-/*
- * Get an entry for terminal name in buffer _nc_termcap from the termcap
- * file.
- */
-int
-_nc_read_termcap_entry(const char *const name, TERMTYPE2 *const tp)
-{
- ENTRY *ep;
- char *p;
- char *cp;
- char *dummy;
- char **fname;
- char *home;
- int i;
- char pathbuf[PBUFSIZ]; /* holds raw path of filenames */
- char *pathvec[PVECSIZ]; /* to point to names in pathbuf */
- char **pvec; /* holds usable tail of path vector */
- char *termpath;
-
- _nc_termcap[0] = '\0'; /* in case */
- dummy = NULL;
- fname = pathvec;
- pvec = pathvec;
- p = pathbuf;
- cp = getenv("TERMCAP");
- /*
- * TERMCAP can have one of two things in it. It can be the
- * name of a file to use instead of /etc/termcap. In this
- * case it better start with a "/". Or it can be an entry to
- * use so we don't have to read the file. In this case it
- * has to already have the newlines crunched out. If TERMCAP
- * does not hold a file name then a path of names is searched
- * instead. The path is found in the TERMPATH variable, or
- * becomes "$HOME/.termcap /etc/termcap" if no TERMPATH exists.
- */
- if (!cp || *cp != '/') { /* no TERMCAP or it holds an entry */
- if ( (termpath = getenv("TERMPATH")) )
- strncpy(pathbuf, termpath, PBUFSIZ);
- else {
- if ( (home = getenv("HOME")) ) {/* set up default */
- strncpy(pathbuf, home, PBUFSIZ - 1); /* $HOME first */
- pathbuf[PBUFSIZ - 2] = '\0'; /* -2 because we add a slash */
- p += strlen(pathbuf); /* path, looking in */
- *p++ = '/';
- } /* if no $HOME look in current directory */
- strncpy(p, _PATH_DEF, PBUFSIZ - (p - pathbuf));
- }
- }
- else /* user-defined name in TERMCAP */
- strncpy(pathbuf, cp, PBUFSIZ); /* still can be tokenized */
-
- /* For safety */
- if (issetugid())
- strcpy(pathbuf, _PATH_DEF_SEC);
-
- pathbuf[PBUFSIZ - 1] = '\0';
-
- *fname++ = pathbuf; /* tokenize path into vector of names */
- while (*++p)
- if (*p == ' ' || *p == ':') {
- *p = '\0';
- while (*++p)
- if (*p != ' ' && *p != ':')
- break;
- if (*p == '\0')
- break;
- *fname++ = p;
- if (fname >= pathvec + PVECSIZ) {
- fname--;
- break;
- }
- }
- *fname = (char *) 0; /* mark end of vector */
- if (cp && *cp && *cp != '/')
- if (cgetset(cp) < 0)
- return(-2);
-
- i = cgetent(&dummy, pathvec, (char *)name);
-
- if (i == 0) {
- char *pd, *ps, *tok, *s, *tcs;
- size_t len;
-
- pd = _nc_termcap;
- ps = dummy;
- if ((tok = strchr(ps, ':')) == NULL) {
- len = strlen(ps);
- if (len >= TBUFSIZ)
- i = -1;
- else
- strcpy(pd, ps);
- goto done;
- }
- len = tok - ps + 1;
- if (pd + len + 1 - _nc_termcap >= TBUFSIZ) {
- i = -1;
- goto done;
- }
- memcpy(pd, ps, len);
- ps += len;
- pd += len;
- *pd = '\0';
- tcs = pd - 1;
- for (;;) {
- while ((tok = strsep(&ps, ":")) != NULL &&
- *(tok - 2) != '\\' &&
- (*tok == '\0' || *tok == '\\' || !isgraph(UChar(*tok))))
- ;
- if (tok == NULL)
- break;
- for (s = tcs; s != NULL && s[1] != '\0';
- s = strchr(s, ':')) {
- s++;
- if (s[0] == tok[0] && s[1] == tok[1])
- goto skip_it;
- }
- len = strlen(tok);
- if (pd + len + 1 - _nc_termcap >= TBUFSIZ) {
- i = -1;
- break;
- }
- memcpy(pd, tok, len);
- pd += len;
- *pd++ = ':';
- *pd = '\0';
- skip_it: ;
- }
- }
-done:
- if (dummy)
- free(dummy);
-
-
-/*
- * From here on is ncurses-specific glue code
- */
-
- if (i < 0)
- return(TGETENT_ERR);
-
- _nc_set_source("TERMCAP");
- _nc_read_entry_source((FILE *)NULL, _nc_termcap, FALSE, TRUE, NULLHOOK);
-
- if (_nc_head == (ENTRY *)NULL)
- return(TGETENT_ERR);
-
- /* resolve all use references */
- _nc_resolve_uses2(TRUE, FALSE);
-
- for_entry_list(ep)
- if (_nc_name_match(ep->tterm.term_names, name, "|:"))
- {
- /*
- * Make a local copy of the terminal capabilities, delinked
- * from the list.
- */
- memcpy(tp, &ep->tterm, sizeof(TERMTYPE));
- _nc_delink_entry(_nc_head, &(ep->tterm));
- free(ep);
- _nc_free_entries(_nc_head);
- _nc_head = _nc_tail = NULL; /* do not reuse! */
-
- return TGETENT_YES; /* OK */
- }
-
- _nc_free_entries(_nc_head);
- _nc_head = _nc_tail = NULL; /* do not reuse! */
- return(TGETENT_NO); /* not found */
-}