Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: termcap bug on Linux
- X-seq: zsh-workers 14516
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx>
- To: Andrej Borsenkow <Andrej.Borsenkow@xxxxxxxxxxxxxx>, ZSH Workers Mailing List <zsh-workers@xxxxxxxxxx>
- Subject: Re: termcap bug on Linux
- Date: Mon, 28 May 2001 22:25:27 +0000
- In-reply-to: <3B10FCA4.2000009@xxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <3B10FCA4.2000009@xxxxxxxxxxxxxx>
On May 27, 5:09pm, Andrej Borsenkow wrote:
} Subject: termcap bug on Linux
}
} Mandrake cooker (currently glibc-2.2.3, termcap-11.0.1-4mdk) compiled
} with termcap, no ncurses. tgetflag() returns 0 for both unset and
} nonexsiting flags, which means that $termcap[cap] returns "no" for
} almost everything except numeric capabilities.
Does the following patch help? This duplicates code from echotc() into
gettermcap() -- so the two should at least now agree with each other,
which they might not have before, even if they're both wrong.
Does something similar need to go into scantermcap() ?
(There are a bunch of extra hunks that just delete whitespace, sorry.)
Common subdirectories: zsh-forge/current/Src/Modules/CVS and zsh-4.0/Src/Modules/CVS
diff -u zsh-forge/current/Src/Modules/termcap.c zsh-4.0/Src/Modules/termcap.c
--- zsh-forge/current/Src/Modules/termcap.c Thu Apr 26 09:08:03 2001
+++ zsh-4.0/Src/Modules/termcap.c Mon May 28 15:21:21 2001
@@ -109,7 +109,7 @@
/* get a string-type capability */
u = buf;
t = tgetstr(s, &u);
- if (!t || !*t) {
+ if (t == (char *)-1 || !t || !*t) {
/* capability doesn't exist, or (if boolean) is off */
zwarnnam(name, "no such capability: %s", s, 0);
return 1;
@@ -225,15 +225,34 @@
pm->level = 0;
u = buf;
+ /* logic in the following cascade copied from echotc, above */
+
if ((num = tgetnum(name)) != -1) {
pm->u.val = num;
pm->flags |= PM_INTEGER;
+ return (HashNode) pm;
+ }
+#if !defined(NCURSES_VERSION) || !defined(COLOR_PAIR)
+ if ((num = tgetflag(name)) > 0) {
+ pm->u.str = dupstring("yes");
+ pm->flags |= PM_SCALAR;
+ return (HashNode) pm;
}
- else if ((num = tgetflag(name)) != -1) {
- pm->u.str = num ? dupstring("yes") : dupstring("no");
+#else /* NCURSES_VERSION && COLOR_PAIR */
+ switch (tgetflag(name)) {
+ case -1:
+ break;
+ case 0:
+ pm->u.str = dupstring("no");
+ pm->flags |= PM_SCALAR;
+ return (HashNode) pm;
+ default:
+ pm->u.str = dupstring("yes");
pm->flags |= PM_SCALAR;
+ return (HashNode) pm;
}
- else if ((tcstr = (char *)tgetstr(name,&u)) != NULL && tcstr != (char *)-1)
+#endif /* NCURSES_VERSION && COLOR_PAIR */
+ if ((tcstr = tgetstr(name, &u)) != NULL && tcstr != (char *)-1)
{
pm->u.str = dupstring(tcstr);
pm->flags |= PM_SCALAR;
@@ -262,7 +281,7 @@
"mi", "ms", "nx", "xb", "NP", "ND", "NR", "os", "5i", "YD", "YE",
"es", "hz", "ul", "xo", NULL};
#endif
-
+
#ifndef HAVE_NUMCODES
static char *numcodes[] = {
"co", "it", "lh", "lw", "li", "lm", "sg", "ma", "Co", "pa", "MW",
@@ -322,7 +341,7 @@
pm->ename = NULL;
pm->old = NULL;
u = buf;
-
+
pm->flags = PM_READONLY | PM_SCALAR;
for (capcode = (char **)boolcodes; *capcode; capcode++) {
if ((num = tgetflag(*capcode)) != -1) {
@@ -331,7 +350,7 @@
func((HashNode) pm, flags);
}
}
-
+
pm->flags = PM_READONLY | PM_INTEGER;
for (capcode = (char **)numcodes; *capcode; capcode++) {
if ((num = tgetnum(*capcode)) != -1) {
@@ -340,7 +359,7 @@
func((HashNode) pm, flags);
}
}
-
+
pm->flags = PM_READONLY | PM_SCALAR;
for (capcode = (char **)strcodes; *capcode; capcode++) {
if ((tcstr = (char *)tgetstr(*capcode,&u)) != NULL &&
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
Messages sorted by:
Reverse Date,
Date,
Thread,
Author