diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | Src/Modules/terminfo.c | 103 | ||||
-rw-r--r-- | Src/Modules/terminfo.mdd | 2 | ||||
-rw-r--r-- | configure.in | 3 |
4 files changed, 67 insertions, 50 deletions
diff --git a/ChangeLog b/ChangeLog index cd3903cd5..daf4dbb85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2000-12-04 Clint Adams <schizo@debian.org> + + * 13227: configure.in, Src/Modules/terminfo.c, + Src/Modules/terminfo.mdd: do not build terminfo + module if tigetstr() is not found in the same library + as tgetent(), indentation fix, use tputs() in echoti + builtin for outputting string capabilities, use + setupterm() for module boot. + 2000-12-04 Peter Stephenson <pws@csr.com> * 13226: configure.in, Config/defs.mk, Config/installfns.sh, diff --git a/Src/Modules/terminfo.c b/Src/Modules/terminfo.c index 3ad8a8a27..4fe1b3cec 100644 --- a/Src/Modules/terminfo.c +++ b/Src/Modules/terminfo.c @@ -39,46 +39,47 @@ static Param terminfo_pm; int bin_echoti(char *name, char **argv, char *ops, int func) { - char *s, buf[2048], *t, *u; - int num, argct; + char *s, *t; + int num; s = *argv++; + /* This depends on the termcap stuff in init.c */ if (termflags & TERM_BAD) return 1; if ((termflags & TERM_UNKNOWN) && (isset(INTERACTIVE) || !init_term())) return 1; /* if the specified capability has a numeric value, display it */ if (((num = tigetnum(s)) != -1) && (num != -2)) { - printf("%d\n", num); - return 0; -} - -switch (tigetflag(s)) { - case -1: - break; - case 0: - puts("no"); - return 0; - default: - puts("yes"); - return 0; -} - + printf("%d\n", num); + return 0; + } + + switch (tigetflag(s)) { + case -1: + break; + case 0: + puts("no"); + return 0; + default: + puts("yes"); + return 0; + } + /* get a string-type capability */ -t = tigetstr(s); -if (!t || !*t) { - /* capability doesn't exist, or (if boolean) is off */ - zwarnnam(name, "no such terminfo capability: %s", s, 0); - return 1; -} - -printf("%s", t); -return 0; + t = (char *)tigetstr(s); + if (!t || !*t) { + /* capability doesn't exist, or (if boolean) is off */ + zwarnnam(name, "no such terminfo capability: %s", s, 0); + return 1; + } + + tputs(t, 1, putchar); + return 0; } static struct builtin bintab[] = { -BUILTIN("echoti", 0, bin_echoti, 1, -1, 0, NULL, NULL), - }; + BUILTIN("echoti", 0, bin_echoti, 1, -1, 0, NULL, NULL), +}; /* This says if we are cleaning up when the module is unloaded. */ @@ -100,7 +101,7 @@ createtihash() { Param pm; HashTable ht; - + unsetparam(terminfo_nam); if (!(pm = createparam(terminfo_nam, PM_SPECIAL|PM_HIDE|PM_HIDEVAL| @@ -136,13 +137,14 @@ getterminfo(HashTable ht, char *name) char *tistr; Param pm = NULL; + /* This depends on the termcap stuff in init.c */ if (termflags & TERM_BAD) - return 1; + return NULL; if ((termflags & TERM_UNKNOWN) && (isset(INTERACTIVE) || !init_term())) - return 1; - + return NULL; + unmetafy(name, &len); - + pm = (Param) zhalloc(sizeof(struct param)); pm->nam = dupstring(name); pm->flags = PM_READONLY; @@ -154,7 +156,7 @@ getterminfo(HashTable ht, char *name) pm->ename = NULL; pm->old = NULL; pm->level = 0; - + if (((num = tigetnum(name)) != -1) && (num != -2)) { pm->u.val = num; pm->flags |= PM_INTEGER; @@ -163,26 +165,25 @@ getterminfo(HashTable ht, char *name) pm->u.str = num ? dupstring("yes") : dupstring("no"); pm->flags |= PM_SCALAR; } - else if ((tistr = tigetstr(name)) != NULL) + else if ((tistr = (char *)tigetstr(name)) != NULL) { pm->u.str = dupstring(tistr); pm->flags |= PM_SCALAR; } else { - zwarn("no such capability: %s", name, 0); - pm->u.str = dupstring(""); - pm->flags |= PM_UNSET; + zwarn("no such capability: %s", name, 0); + pm->u.str = dupstring(""); + pm->flags |= PM_UNSET; } return (HashNode) pm; - + } /**/ static void scanterminfo(HashTable ht, ScanFunc func, int flags) { -return 0; } /**/ @@ -190,7 +191,7 @@ int setup_(Module m) { incleanup = 0; - + return 0; } @@ -198,6 +199,8 @@ setup_(Module m) int boot_(Module m) { + setupterm((char *)0, 1, (int *)0); + return !createtihash() || !addbuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab)); } @@ -206,14 +209,14 @@ int cleanup_(Module m) { Param pm; - + incleanup = 1; - - if ((pm = (Param) paramtab->getnode(paramtab, terminfo_nam)) && - pm == terminfo_pm) { - pm->flags &= ~PM_READONLY; - unsetparam_pm(pm, 0, 1); - } + + if ((pm = (Param) paramtab->getnode(paramtab, terminfo_nam)) && + pm == terminfo_pm) { + pm->flags &= ~PM_READONLY; + unsetparam_pm(pm, 0, 1); + } deletebuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab)); return 0; } @@ -224,3 +227,7 @@ finish_(Module m) { return 0; } + + + + diff --git a/Src/Modules/terminfo.mdd b/Src/Modules/terminfo.mdd index cb628dd30..742c35745 100644 --- a/Src/Modules/terminfo.mdd +++ b/Src/Modules/terminfo.mdd @@ -1,5 +1,5 @@ name=zsh/terminfo -link=either +link=`if test "x$ac_cv_have_tigetstr" = xyes; then echo either; else echo no; fi` load=yes autobins="echoti" diff --git a/configure.in b/configure.in index 9e3cd4c54..e59674287 100644 --- a/configure.in +++ b/configure.in @@ -848,7 +848,8 @@ AC_CHECK_FUNCS(strftime difftime gettimeofday \ signgam \ putenv getenv \ brk sbrk \ - pathconf sysconf) + pathconf sysconf \ + tigetflag tigetnum tigetstr) AC_FUNC_STRCOLL AC_FUNC_MMAP |