Module Name: src Committed By: roy Date: Fri Jan 25 17:28:50 UTC 2013
Modified Files: src/lib/libterminfo: term.h terminfo.3 tparm.c Log Message: Provide a disabled implentation of tlparm and ti_tlparm for completeness. This also improves the readability of _ti_tiparm. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/lib/libterminfo/term.h \ src/lib/libterminfo/tparm.c cvs rdiff -u -r1.9 -r1.10 src/lib/libterminfo/terminfo.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libterminfo/term.h diff -u src/lib/libterminfo/term.h:1.13 src/lib/libterminfo/term.h:1.14 --- src/lib/libterminfo/term.h:1.13 Fri Jan 25 12:52:45 2013 +++ src/lib/libterminfo/term.h Fri Jan 25 17:28:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: term.h,v 1.13 2013/01/25 12:52:45 roy Exp $ */ +/* $NetBSD: term.h,v 1.14 2013/01/25 17:28:50 roy Exp $ */ /* * Copyright (c) 2009, 2010, 2011, 2013 The NetBSD Foundation, Inc. @@ -1974,12 +1974,20 @@ int ti_puts(const TERMINAL *, const cha int (*)(int, void *), void *); int ti_putp(const TERMINAL *, const char *); -/* Using tparm can be kunkly, so provide a variadic function */ +/* Using tparm can be kunkly, so provide a variadic function + * Numbers have to be passed as int */ /* This is not standard, but ncurses also provides this */ char * tiparm(const char *, ...); /* And a thread safe version */ char * ti_tiparm(TERMINAL *, const char *, ...); +#ifdef TPARM_TLPARM +/* Same as the above, but numbers have to be passed as long */ +char * tlparm(const char *, ...); +/* And a thread safe version */ +char * ti_tlparm(TERMINAL *, const char *, ...); +#endif + /* Default to X/Open tparm, but allow it to be variadic also */ #ifdef TPARM_VARARGS # define tparm tiparm Index: src/lib/libterminfo/tparm.c diff -u src/lib/libterminfo/tparm.c:1.13 src/lib/libterminfo/tparm.c:1.14 --- src/lib/libterminfo/tparm.c:1.13 Fri Jan 25 12:30:05 2013 +++ src/lib/libterminfo/tparm.c Fri Jan 25 17:28:50 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: tparm.c,v 1.13 2013/01/25 12:30:05 roy Exp $ */ +/* $NetBSD: tparm.c,v 1.14 2013/01/25 17:28:50 roy Exp $ */ /* * Copyright (c) 2009, 2011, 2013 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: tparm.c,v 1.13 2013/01/25 12:30:05 roy Exp $"); +__RCSID("$NetBSD: tparm.c,v 1.14 2013/01/25 17:28:50 roy Exp $"); #include <sys/param.h> #include <assert.h> @@ -44,6 +44,10 @@ __RCSID("$NetBSD: tparm.c,v 1.13 2013/01 #define LONG_STR_MAX ((CHAR_BIT * sizeof(long)) / 3) #define BUFINC 128 /* Size to increament the terminal buffer by */ +#define VA_LONG_LONG 1 +#define VA_CHAR_INT 2 +//#define VA_CHAR_LONG 3 + static TERMINAL *dumbterm; /* For non thread safe functions */ typedef struct { @@ -178,7 +182,7 @@ _ti_parm_analyse(const char *str, int *p } static char * -_ti_tiparm(TERMINAL *term, const char *str, int va_long, va_list parms) +_ti_tiparm(TERMINAL *term, const char *str, int va_type, va_list parms) { char c, fmt[64], *fp, *ostr; long val, val2; @@ -224,7 +228,7 @@ _ti_tiparm(TERMINAL *term, const char *s memset(¶ms, 0, sizeof(params)); for (l = 0; l < max; l++) { if (piss[l]) { - if (va_long) { + if (va_type == VA_LONG_LONG) { /* This only works if char * fits into a long * on this platform. */ if (sizeof(char *) <= sizeof(long)/*CONSTCOND*/) @@ -237,10 +241,10 @@ _ti_tiparm(TERMINAL *term, const char *s } else params[l].string = va_arg(parms, char *); } else { - if (va_long) - params[l].num = va_arg(parms, long); - else + if (va_type == VA_CHAR_INT) params[l].num = (long)va_arg(parms, int); + else + params[l].num = va_arg(parms, long); } } @@ -548,7 +552,7 @@ ti_tiparm(TERMINAL *term, const char *st _DIAGASSERT(str != NULL); va_start(va, str); - ret = _ti_tiparm(term, str, 0, va); + ret = _ti_tiparm(term, str, VA_CHAR_INT, va); va_end(va); return ret; } @@ -562,16 +566,28 @@ tiparm(const char *str, ...) _DIAGASSERT(str != NULL); va_start(va, str); - ret = _ti_tiparm(NULL, str, 0, va); + ret = _ti_tiparm(NULL, str, VA_CHAR_INT, va); va_end(va); return ret; } -/* Same as tiparm, but accepts long instead of int for the numeric params. - * Currently there is no need for this to be a public interface and is only - * consumed by tparm. If we need this to be public, and I really cannot - * imagine why, then we would need ti_tlparm() as well. */ -static char * +#ifdef VA_CHAR_LONG +char * +ti_tlparm(TERMINAL *term, const char *str, ...) +{ + va_list va; + char *ret; + + _DIAGASSERT(term != NULL); + _DIAGASSERT(str != NULL); + + va_start(va, str); + ret = _ti_tiparm(term, str, VA_CHAR_LONG, va); + va_end(va); + return ret; +} + +char * tlparm(const char *str, ...) { va_list va; @@ -580,7 +596,22 @@ tlparm(const char *str, ...) _DIAGASSERT(str != NULL); va_start(va, str); - ret = _ti_tiparm(NULL, str, 1, va); + ret = _ti_tiparm(NULL, str, VA_CHAR_LONG, va); + va_end(va); + return ret; +} +#endif + +static char * +_tparm(const char *str, ...) +{ + va_list va; + char *ret; + + _DIAGASSERT(str != NULL); + + va_start(va, str); + ret = _ti_tiparm(NULL, str, VA_LONG_LONG, va); va_end(va); return ret; } @@ -591,5 +622,5 @@ tparm(const char *str, long p6, long p7, long p8, long p9) { - return tlparm(str, p1, p2, p3, p4, p5, p6, p7, p8, p9); + return _tparm(str, p1, p2, p3, p4, p5, p6, p7, p8, p9); } Index: src/lib/libterminfo/terminfo.3 diff -u src/lib/libterminfo/terminfo.3:1.9 src/lib/libterminfo/terminfo.3:1.10 --- src/lib/libterminfo/terminfo.3:1.9 Fri Jan 25 12:30:05 2013 +++ src/lib/libterminfo/terminfo.3 Fri Jan 25 17:28:50 2013 @@ -1,4 +1,4 @@ -.\" $NetBSD: terminfo.3,v 1.9 2013/01/25 12:30:05 roy Exp $ +.\" $NetBSD: terminfo.3,v 1.10 2013/01/25 17:28:50 roy Exp $ .\" .\" Copyright (c) 2009, 2011 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -219,11 +219,12 @@ always goes to stdout. The .Fn tiparm function allows variadic parameters instead of 9 fixed longs. -Numeric parameters must be integers (int) instead of longs. -String parameters can be used even if the platform cannot fit a +Numeric parameters must be passed as +.Vt int . +String parameters must be passed as .Vt char * -into a -.Vt long . +and works on all platforms, unlike +.Fn tparm . .Pp The .Fn ti_*