1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-10 12:40:58 +02:00

13953: use curses capability inventories instead of hardcoding and presume

that they are terminfo
This commit is contained in:
Clint Adams 2001-04-12 02:49:14 +00:00
parent 15ff54f27a
commit e05ca62a9c
4 changed files with 48 additions and 7 deletions

View file

@ -1,5 +1,10 @@
2001-04-12 Clint Adams <schizo@debian.org>
* 13953: acconfig.h, configure.in, Src/Modules/terminfo.c:
have configure check for the existence of boolcodes,
numcodes, and strcodes symbols, and presume that they
are terminfo capability code inventories.
* 13951: Src/Modules/terminfo.c: make scanterminfo do something
so that ${(k)terminfo} and ${(kv)terminfo} work.

View file

@ -29,6 +29,12 @@
#include "terminfo.mdh"
#include "terminfo.pro"
#ifdef HAVE_CURSES_H
# include <curses.h>
#endif
#ifdef HAVE_TERM_H
# include <term.h>
#endif
static char terminfo_nam[] = "terminfo";
@ -202,20 +208,25 @@ scanterminfo(HashTable ht, ScanFunc func, int flags)
int num;
char **capname, *tistr;
static char *bools[] = {
#ifndef HAVE_BOOLCODES
static char *boolcodes[] = {
"bw", "am", "bce", "ccc", "xhp", "xhpa", "cpix", "crxm", "xt", "xenl",
"eo", "gn", "hc", "chts", "km", "daisy", "hs", "hls", "in", "lpix",
"da", "db", "mir", "msgr", "nxon", "xsb", "npc", "ndscr", "nrrmc",
"os", "mc5i", "xvpa", "sam", "eslok", "hz", "ul", "xon", NULL};
#endif
static char *numerics[] = {
#ifndef HAVE_NUMCODES
static char *numcodes[] = {
"cols", "it", "lh", "lw", "lines", "lm", "xmc", "ma", "colors",
"pairs", "wnum", "ncv", "nlab", "pb", "vt", "wsl", "bitwin",
"bitype", "bufsz", "btns", "spinh", "spinv", "maddr", "mjump",
"mcs", "mls", "npins", "orc", "orhi", "orl", "orvi", "cps", "widcs",
NULL};
#endif
static char *strings[] = {
#ifndef HAVE_STRCODES
static char *strcodes[] = {
"acsc", "cbt", "bel", "cr", "cpi", "lpi", "chr", "cvr", "csr", "rmp",
"tbc", "mgc", "clear", "el1", "el", "ed", "hpa", "cmdch", "cwin",
"cup", "cud1", "home", "civis", "cub1", "mrcup", "cnorm", "cuf1",
@ -265,6 +276,7 @@ scanterminfo(HashTable ht, ScanFunc func, int flags)
"setab", "setaf", "setcolor", "smglr", "slines", "smgtb",
"ehhlm", "elhlm", "elohlm", "erhlm", "ethlm", "evhlm", "sgr1",
"slength", NULL};
#endif
pm = (Param) zhalloc(sizeof(struct param));
pm->sets.cfn = NULL;
@ -276,7 +288,7 @@ scanterminfo(HashTable ht, ScanFunc func, int flags)
pm->old = NULL;
pm->flags = PM_READONLY | PM_SCALAR;
for (capname = bools; *capname; capname++) {
for (capname = (char **)boolcodes; *capname; capname++) {
if ((num = tigetflag(*capname)) != -1) {
pm->u.str = num ? dupstring("yes") : dupstring("no");
pm->nam = dupstring(*capname);
@ -285,7 +297,7 @@ scanterminfo(HashTable ht, ScanFunc func, int flags)
}
pm->flags = PM_READONLY | PM_INTEGER;
for (capname = numerics; *capname; capname++) {
for (capname = (char **)numcodes; *capname; capname++) {
if (((num = tigetnum(*capname)) != -1) && (num != -2)) {
pm->u.val = num;
pm->nam = dupstring(*capname);
@ -294,7 +306,7 @@ scanterminfo(HashTable ht, ScanFunc func, int flags)
}
pm->flags = PM_READONLY | PM_SCALAR;
for (capname = strings; *capname; capname++) {
for (capname = (char **)strcodes; *capname; capname++) {
if ((tistr = (char *)tigetstr(*capname)) != NULL &&
tistr != (char *)-1) {
pm->u.str = dupstring(tistr);

View file

@ -299,3 +299,12 @@
/* Define to 1 if h_errno is not defined by the system */
#undef USE_LOCAL_H_ERRNO
/* Define if you have the terminfo boolcodes symbol. */
#undef HAVE_BOOLCODES
/* Define if you have the terminfo numcodes symbol. */
#undef HAVE_NUMCODES
/* Define if you have the terminfo strcodes symbol. */
#undef HAVE_STRCODES

View file

@ -439,7 +439,7 @@ AC_CHECK_HEADERS(sys/time.h sys/times.h sys/select.h termcap.h termio.h \
limits.h fcntl.h libc.h sys/utsname.h sys/resource.h \
locale.h errno.h stdlib.h unistd.h sys/capability.h \
utmp.h utmpx.h sys/types.h pwd.h grp.h poll.h sys/mman.h \
linux/tasks.h netinet/in_systm.h)
linux/tasks.h netinet/in_systm.h curses.h term.h)
if test $dynamic = yes; then
AC_CHECK_HEADERS(dlfcn.h)
AC_CHECK_HEADERS(dl.h)
@ -515,6 +515,21 @@ case "$host_os" in
esac
AC_SEARCH_LIBS(tgetent, [$termcap_curses_order])
AC_MSG_CHECKING(if boolcodes is available)
AC_TRY_COMPILE([#include <curses.h>
#include <term.h>], [char **test = boolcodes;],
AC_DEFINE(HAVE_BOOLCODES) boolcodes=yes, boolcodes=no)
AC_MSG_RESULT($boolcodes)
AC_MSG_CHECKING(if numcodes is available)
AC_TRY_COMPILE([#include <curses.h>
#include <term.h>], [char **test = numcodes;],
AC_DEFINE(HAVE_NUMCODES) numcodes=yes, numcodes=no)
AC_MSG_RESULT($numcodes)
AC_MSG_CHECKING(if strcodes is available)
AC_TRY_COMPILE([#include <curses.h>
#include <term.h>], [char **test = strcodes;],
AC_DEFINE(HAVE_STRCODES) strcodes=yes, strcodes=no)
AC_MSG_RESULT($strcodes)
dnl Some systems (Solaris 2.x, Linux Redhat 5.x) require
dnl libnsl (Network Services Library) to find yp_all