From e05ca62a9cd33a116454bd471e33c17f9c0c8191 Mon Sep 17 00:00:00 2001 From: Clint Adams Date: Thu, 12 Apr 2001 02:49:14 +0000 Subject: 13953: use curses capability inventories instead of hardcoding and presume that they are terminfo --- ChangeLog | 5 +++++ Src/Modules/terminfo.c | 24 ++++++++++++++++++------ acconfig.h | 9 +++++++++ configure.in | 17 ++++++++++++++++- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index ad4b19133..201d9d6d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2001-04-12 Clint Adams + * 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. diff --git a/Src/Modules/terminfo.c b/Src/Modules/terminfo.c index 5d4ab906c..f5d9bc935 100644 --- a/Src/Modules/terminfo.c +++ b/Src/Modules/terminfo.c @@ -29,6 +29,12 @@ #include "terminfo.mdh" #include "terminfo.pro" +#ifdef HAVE_CURSES_H +# include +#endif +#ifdef HAVE_TERM_H +# include +#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); diff --git a/acconfig.h b/acconfig.h index 5b4dd4041..f4744d2d7 100644 --- a/acconfig.h +++ b/acconfig.h @@ -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 diff --git a/configure.in b/configure.in index 722cd24f7..d6cd03753 100644 --- a/configure.in +++ b/configure.in @@ -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 +#include ], [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 +#include ], [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 +#include ], [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 -- cgit 1.4.1