summary refs log tree commit diff
diff options
context:
space:
mode:
authorBart Schaefer <barts@users.sourceforge.net>2001-04-09 15:58:54 +0000
committerBart Schaefer <barts@users.sourceforge.net>2001-04-09 15:58:54 +0000
commit5d0231e10545a1b5039807095b966cb14b169f3d (patch)
tree07882f980e5e5ac160e69127462aa121ad9449d4
parentb75b87c8d9b676fc6e274cffd97f9736daf270b4 (diff)
downloadzsh-5d0231e10545a1b5039807095b966cb14b169f3d.tar.gz
zsh-5d0231e10545a1b5039807095b966cb14b169f3d.tar.xz
zsh-5d0231e10545a1b5039807095b966cb14b169f3d.zip
Make termcap and terminfo modules always loadable.
-rw-r--r--ChangeLog7
-rw-r--r--Src/Modules/termcap.c8
-rw-r--r--Src/Modules/termcap.mdd7
-rw-r--r--Src/Modules/terminfo.c55
-rw-r--r--Src/Modules/terminfo.mdd7
5 files changed, 61 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index 37c1623d9..f4478a0e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2001-04-09  Bart Schaefer  <schaefer@zsh.org>
+
+	* 13922: Src/Modules/termcap.c, Src/Modules/termcap.mdd,
+	Src/Modules/terminfo.c, Src/Modules/terminfo.mdd: Loading these
+	modules should work even if the corresponding library is not
+	available; in that case echotc or echoti uses bin_notavail.
+
 2001-04-09  Peter Stephenson  <pws@csr.com>
 
 	* unposted: Config/version.mk: 4.0.1-pre-3.
diff --git a/Src/Modules/termcap.c b/Src/Modules/termcap.c
index 9c72bf27f..dad47aa17 100644
--- a/Src/Modules/termcap.c
+++ b/Src/Modules/termcap.c
@@ -32,6 +32,8 @@
 
 /* echotc: output a termcap */
 
+#ifdef HAVE_TGETENT
+
 /**/
 static int
 bin_echotc(char *name, char **argv, char *ops, int func)
@@ -100,6 +102,12 @@ bin_echotc(char *name, char **argv, char *ops, int func)
     return 0;
 }
 
+#else /* ! HAVE_TGETENT */
+
+#define bin_echotc bin_notavail
+
+#endif /* HAVE_TGETENT */
+
 static struct builtin bintab[] = {
     BUILTIN("echotc", 0, bin_echotc, 1, -1, 0, NULL, NULL),
 };
diff --git a/Src/Modules/termcap.mdd b/Src/Modules/termcap.mdd
index 89f939ff8..9a6ddd08e 100644
--- a/Src/Modules/termcap.mdd
+++ b/Src/Modules/termcap.mdd
@@ -7,10 +7,15 @@ link='if test "x$ac_cv_func_tgetent" = xyes; then
 	      echo static
 	  fi
       else
+          echo either;
+      fi
+'
+load='if test "x$ac_cv_func_tgetent" = xyes; then
+          echo yes;
+      else
           echo no;
       fi
 '
-load=yes
 
 autobins="echotc"
 
diff --git a/Src/Modules/terminfo.c b/Src/Modules/terminfo.c
index 7eb47bdb3..0cac6e530 100644
--- a/Src/Modules/terminfo.c
+++ b/Src/Modules/terminfo.c
@@ -35,13 +35,15 @@ static Param terminfo_pm;
 
 /* echoti: output a terminfo capability */
 
+#ifdef HAVE_TIGETSTR
+
 /**/
 static int
 bin_echoti(char *name, char **argv, char *ops, int func)
 {
     char *s, *t;
     int num;
-    
+
     s = *argv++;
     /* This depends on the termcap stuff in init.c */
     if (termflags & TERM_BAD)
@@ -53,7 +55,7 @@ bin_echoti(char *name, char **argv, char *ops, int func)
 	printf("%d\n", num);
 	return 0;
     }
-    
+
     switch (tigetflag(s)) {
     case -1:
 	break;
@@ -64,7 +66,7 @@ bin_echoti(char *name, char **argv, char *ops, int func)
 	puts("yes");
 	return 0;
     }
-    
+
 /* get a string-type capability */
     t = (char *)tigetstr(s);
     if (!t || t == (char *)-1 || !*t) {
@@ -72,11 +74,17 @@ bin_echoti(char *name, char **argv, char *ops, int func)
 	zwarnnam(name, "no such terminfo capability: %s", s, 0);
 	return 1;
     }
-    
+
     tputs(t, 1, putchar);
     return 0;
 }
 
+#else
+
+#define bin_echoti bin_notavail
+
+#endif
+
 static struct builtin bintab[] = {
     BUILTIN("echoti", 0, bin_echoti, 1, -1, 0, NULL, NULL),
 };
@@ -85,6 +93,8 @@ static struct builtin bintab[] = {
 
 static int incleanup;
 
+#ifdef HAVE_TIGETSTR
+
 /* Empty dummy function for special hash parameters. */
 
 /**/
@@ -101,19 +111,19 @@ createtihash()
 {
     Param pm;
     HashTable ht;
-    
+
     unsetparam(terminfo_nam);
-    
+
     if (!(pm = createparam(terminfo_nam, PM_SPECIAL|PM_HIDE|PM_HIDEVAL|
 			   PM_REMOVABLE|PM_HASHED)))
 	return NULL;
-    
+
     pm->level = pm->old ? locallevel : 0;
     pm->gets.hfn = hashgetfn;
     pm->sets.hfn = hashsetfn;
     pm->unsetfn = stdunsetfn;
     pm->u.hash = ht = newhashtable(7, terminfo_nam, NULL);
-    
+
     ht->hash        = hasher;
     ht->emptytable  = (TableFunc) shempty;
     ht->filltable   = NULL;
@@ -142,9 +152,9 @@ getterminfo(HashTable ht, char *name)
 	return NULL;
     if ((termflags & TERM_UNKNOWN) && (isset(INTERACTIVE) || !init_term()))
 	return NULL;
-    
+
     unmetafy(name, &len);
-    
+
     pm = (Param) zhalloc(sizeof(struct param));
     pm->nam = dupstring(name);
     pm->flags = PM_READONLY;
@@ -156,7 +166,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;
@@ -172,12 +182,11 @@ getterminfo(HashTable ht, char *name)
     }
     else
     {
-	zwarn("no such capability: %s", name, 0);
+	/* zwarn("no such capability: %s", name, 0); */
 	pm->u.str = dupstring("");
 	pm->flags |= PM_UNSET;
     }
     return (HashNode) pm;
-    
 }
 
 /**/
@@ -186,12 +195,14 @@ scanterminfo(HashTable ht, ScanFunc func, int flags)
 {
 }
 
+#endif /* HAVE_TIGETSTR */
+
 /**/
 int
 setup_(Module m)
 {
     incleanup = 0;
-    
+
     return 0;
 }
 
@@ -199,9 +210,13 @@ setup_(Module m)
 int
 boot_(Module m)
 {
+#ifdef HAVE_TIGETSTR
     setupterm((char *)0, 1, (int *)0);
 
-    return !createtihash() || !addbuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab));
+    if (!createtihash())
+    	return 1;
+#endif
+    return  !addbuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab));
 }
 
 /**/
@@ -209,14 +224,16 @@ int
 cleanup_(Module m)
 {
     Param pm;
-    
+
     incleanup = 1;
-    
+
+#ifdef HAVE_TIGETSTR
     if ((pm = (Param) paramtab->getnode(paramtab, terminfo_nam)) &&
 	pm == terminfo_pm) {
 	pm->flags &= ~PM_READONLY;
 	unsetparam_pm(pm, 0, 1);
     }
+#endif
     deletebuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab));
     return 0;
 }
@@ -227,7 +244,3 @@ finish_(Module m)
 {
     return 0;
 }
-
-
-
-
diff --git a/Src/Modules/terminfo.mdd b/Src/Modules/terminfo.mdd
index dd01bed3a..580aa2893 100644
--- a/Src/Modules/terminfo.mdd
+++ b/Src/Modules/terminfo.mdd
@@ -7,10 +7,15 @@ link='if test "x$ac_cv_func_tigetstr" = xyes; then
 	      echo static
 	  fi
       else
+          echo either;
+      fi
+'
+load='if test "x$ac_cv_func_tigetstr" = xyes; then
+          echo yes;
+      else
           echo no;
       fi
 '
-load=yes
 
 autobins="echoti"
 autoparams="terminfo"