diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2021-02-25 17:22:00 +0000 |
---|---|---|
committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2021-02-25 17:22:00 +0000 |
commit | bf0ab54638a5ef969749f6ceae30e864f9556ea8 (patch) | |
tree | 11690c2184e55d37bcd3c7fd13f3d0d9d20dbcb0 /progs | |
parent | 72c3fc31f590566e93496732d6fa769cd353e270 (diff) | |
download | src-bf0ab54638a5ef969749f6ceae30e864f9556ea8.tar.gz src-bf0ab54638a5ef969749f6ceae30e864f9556ea8.zip |
Vendor import ncurses 6.2-20210220vendor/ncurses/6.2-20210220vendor/ncurses
Diffstat (limited to 'progs')
-rw-r--r-- | progs/Makefile.in | 24 | ||||
-rw-r--r-- | progs/dump_entry.c | 22 | ||||
-rw-r--r-- | progs/dump_entry.h | 4 | ||||
-rw-r--r-- | progs/infocmp.c | 9 | ||||
-rw-r--r-- | progs/progs.priv.h | 20 | ||||
-rw-r--r-- | progs/reset_cmd.c | 43 | ||||
-rw-r--r-- | progs/tabs.c | 4 | ||||
-rw-r--r-- | progs/tic.c | 124 | ||||
-rw-r--r-- | progs/tparm_type.c | 30 | ||||
-rw-r--r-- | progs/tparm_type.h | 6 | ||||
-rw-r--r-- | progs/tput.c | 20 | ||||
-rw-r--r-- | progs/tset.c | 15 |
12 files changed, 231 insertions, 90 deletions
diff --git a/progs/Makefile.in b/progs/Makefile.in index 79cbc99ecf28..1511ec271210 100644 --- a/progs/Makefile.in +++ b/progs/Makefile.in @@ -1,6 +1,6 @@ -# $Id: Makefile.in,v 1.103 2020/02/02 23:34:34 tom Exp $ +# $Id: Makefile.in,v 1.108 2021/01/23 20:42:08 tom Exp $ ############################################################################## -# Copyright 2020 Thomas E. Dickey # +# Copyright 2020,2021 Thomas E. Dickey # # Copyright 1998-2016,2018 Free Software Foundation, Inc. # # # # Permission is hereby granted, free of charge, to any person obtaining a # @@ -47,7 +47,7 @@ SHELL = @SHELL@ VPATH = @srcdir@ THIS = Makefile -CF_MFLAGS = @cf_cv_makeflags@ +TOP_MFLAGS = @cf_cv_makeflags@ DESTDIR="$(DESTDIR)" RPATH_LIST="$(RPATH_LIST)" @SET_MAKE@ x = @EXEEXT@ @@ -90,7 +90,7 @@ ETAGS = @ETAGS@ CC = @CC@ CPP = @CPP@ -CFLAGS = @CFLAGS@ +CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@ INCDIR = $(top_srcdir)/include CPPFLAGS = -DHAVE_CONFIG_H -I../progs @CPPFLAGS@ @@ -98,9 +98,9 @@ CPPFLAGS = -DHAVE_CONFIG_H -I../progs @CPPFLAGS@ CCFLAGS = $(CPPFLAGS) $(CFLAGS) CFLAGS_LIBTOOL = $(CCFLAGS) -CFLAGS_NORMAL = $(CCFLAGS) -CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE -CFLAGS_PROFILE = $(CCFLAGS) -pg +CFLAGS_NORMAL = $(CCFLAGS) -DNCURSES_STATIC +CFLAGS_DEBUG = $(CCFLAGS) -DNCURSES_STATIC @CC_G_OPT@ -DTRACE +CFLAGS_PROFILE = $(CCFLAGS) -DNCURSES_STATIC -pg CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@) @@ -203,10 +203,10 @@ install.progs: $(AUTO_SRC) $(PROGS) $(DESTDIR)$(bindir) @MAKE_TERMINFO@ $(LIBTOOL_INSTALL) $(INSTALL_PROG) toe$x $(DESTDIR)$(bindir)/$(actual_toe) @MAKE_TERMINFO@ @echo "linking $(actual_infotocap) to $(actual_tic)" @MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_infotocap) -@MAKE_TERMINFO@ (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_infotocap)) +@MAKE_TERMINFO@ ( cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_infotocap) ) @MAKE_TERMINFO@ @echo "linking $(actual_captoinfo) to $(actual_tic)" @MAKE_TERMINFO@ -@rm -f $(DESTDIR)$(bindir)/$(actual_captoinfo) -@MAKE_TERMINFO@ (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_captoinfo)) +@MAKE_TERMINFO@ ( cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tic) $(actual_captoinfo) ) $(LIBTOOL_INSTALL) $(INSTALL_PROG) infocmp$x $(DESTDIR)$(bindir)/$(actual_infocmp) $(LIBTOOL_INSTALL) $(INSTALL_PROG) clear$x $(DESTDIR)$(bindir)/$(actual_clear) $(LIBTOOL_INSTALL) $(INSTALL_PROG) tabs$x $(DESTDIR)$(bindir)/$(actual_tabs) @@ -214,7 +214,7 @@ install.progs: $(AUTO_SRC) $(PROGS) $(DESTDIR)$(bindir) $(LIBTOOL_INSTALL) $(INSTALL_PROG) tset$x $(DESTDIR)$(bindir)/$(actual_tset) @echo "linking $(actual_reset) to $(actual_tset)" -@rm -f $(DESTDIR)$(bindir)/$(actual_reset) - (cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tset) $(actual_reset)) + ( cd $(DESTDIR)$(bindir) && $(LN_S) $(actual_tset) $(actual_reset) ) uninstall.progs: @MAKE_TERMINFO@ -@$(LIBTOOL_CLEAN) rm -f $(DESTDIR)$(bindir)/$(actual_tic) @@ -323,9 +323,9 @@ realclean :: distclean ../include/hashsize.h \ ../include/parametrized.h \ ../include/term.h : - cd ../include; $(MAKE) $(CF_MFLAGS) + ( cd ../include && $(MAKE) $(TOP_MFLAGS) ) $(DEPS_CURSES) : - cd ../ncurses; $(MAKE) $(CF_MFLAGS) + ( cd ../ncurses && $(MAKE) $(TOP_MFLAGS) ) lint: @MAKE_TERMINFO@ $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/tic.c $(srcdir)/dump_entry.c $(LINT_LIBS) diff --git a/progs/dump_entry.c b/progs/dump_entry.c index 85d56eb92c2d..75bbe059cd0b 100644 --- a/progs/dump_entry.c +++ b/progs/dump_entry.c @@ -40,7 +40,7 @@ #include "termsort.c" /* this C file is generated */ #include <parametrized.h> /* so is this */ -MODULE_ID("$Id: dump_entry.c,v 1.176 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: dump_entry.c,v 1.181 2020/12/26 18:25:18 tom Exp $") #define DISCARD(string) string = ABSENT_STRING #define PRINTF (void) printf @@ -747,7 +747,7 @@ leading_DYN(DYNBUF * buffer, const char *leading) } bool -has_params(const char *src) +has_params(const char *src, bool formatting) { bool result = FALSE; int len = (int) strlen(src); @@ -765,7 +765,11 @@ has_params(const char *src) } } if (!ifthen) { - result = ((len > 50) && params); + if (formatting) { + result = ((len > 50) && params); + } else { + result = params; + } } return result; } @@ -774,7 +778,7 @@ static char * fmt_complex(TERMTYPE2 *tterm, const char *capability, char *src, int level) { bool percent = FALSE; - bool params = has_params(src); + bool params = has_params(src, TRUE); while (*src != '\0') { switch (*src) { @@ -801,7 +805,7 @@ fmt_complex(TERMTYPE2 *tterm, const char *capability, char *src, int level) strncpy_DYN(&tmpbuf, "%", (size_t) 1); strncpy_DYN(&tmpbuf, src, (size_t) 1); src++; - params = has_params(src); + params = has_params(src, TRUE); if (!params && *src != '\0' && *src != '%') { strncpy_DYN(&tmpbuf, "\n", (size_t) 1); indent_DYN(&tmpbuf, level + 1); @@ -1110,7 +1114,7 @@ fmt_entry(TERMTYPE2 *tterm, ? parametrized[i] : ((*srccap == 'k') ? 0 - : has_params(srccap))); + : has_params(srccap, FALSE))); char *cv = _nc_infotocap(name, srccap, params); if (cv == 0) { @@ -1125,7 +1129,7 @@ fmt_entry(TERMTYPE2 *tterm, char *s = srccap, *d = buffer; int need = 3 + (int) strlen(name); while ((*d = *s++) != 0) { - if ((d - buffer + 1) >= (int) sizeof(buffer)) { + if ((d - buffer + 2) >= (int) sizeof(buffer)) { fprintf(stderr, "%s: value for %s is too long\n", _nc_progname, @@ -1343,7 +1347,7 @@ kill_labels(TERMTYPE2 *tterm, int target) int n; int result = 0; char *cap; - char name[10]; + char name[20]; for (n = 0; n <= 10; ++n) { _nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "lf%d", n); @@ -1369,7 +1373,7 @@ kill_fkeys(TERMTYPE2 *tterm, int target) int n; int result = 0; char *cap; - char name[10]; + char name[20]; for (n = 60; n >= 0; --n) { _nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "kf%d", n); diff --git a/progs/dump_entry.h b/progs/dump_entry.h index 984fee709551..98551914cd63 100644 --- a/progs/dump_entry.h +++ b/progs/dump_entry.h @@ -34,7 +34,7 @@ ****************************************************************************/ /* - * $Id: dump_entry.h,v 1.42 2020/02/02 23:34:34 tom Exp $ + * $Id: dump_entry.h,v 1.43 2020/11/14 18:16:57 tom Exp $ * * Dump control definitions and variables */ @@ -73,7 +73,7 @@ typedef int (*PredFunc) (PredType, PredIdx); typedef void (*PredHook) (PredType, PredIdx, const char *); extern NCURSES_CONST char *nametrans(const char *); -extern bool has_params(const char *src); +extern bool has_params(const char *, bool); extern int fmt_entry(TERMTYPE2 *, PredFunc, int, int, int, int); extern int show_entry(void); extern void compare_entry(PredHook, TERMTYPE2 *, bool); diff --git a/progs/infocmp.c b/progs/infocmp.c index f42ff3416ece..dbdbdc2dfe35 100644 --- a/progs/infocmp.c +++ b/progs/infocmp.c @@ -43,7 +43,7 @@ #include <dump_entry.h> -MODULE_ID("$Id: infocmp.c,v 1.144 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: infocmp.c,v 1.145 2020/07/07 20:28:47 tom Exp $") #define MAX_STRING 1024 /* maximum formatted string */ @@ -1194,8 +1194,9 @@ usage(void) DATA("Options:") }; #undef DATA + /* length is given here so the compiler can make everything readonly */ #define DATA(s) s - static const char options[][45] = + static const char options[][46] = { " -0 print single-row" ," -1 print single-column" @@ -1835,8 +1836,8 @@ main(int argc, char *argv[]) tname[termcount]); status = _nc_read_entry2(tname[termcount], - tfile[termcount], - &entries[termcount].tterm); + tfile[termcount], + &entries[termcount].tterm); } if (status <= 0) { diff --git a/progs/progs.priv.h b/progs/progs.priv.h index da7a5154f734..3dc177d0a866 100644 --- a/progs/progs.priv.h +++ b/progs/progs.priv.h @@ -31,7 +31,7 @@ * Author: Thomas E. Dickey 1997-on * ****************************************************************************/ /* - * $Id: progs.priv.h,v 1.48 2020/02/02 23:34:34 tom Exp $ + * $Id: progs.priv.h,v 1.52 2020/09/05 19:35:06 tom Exp $ * * progs.priv.h * @@ -58,10 +58,6 @@ #include <unistd.h> #endif -#if HAVE_SYS_BSDTYPES_H -#include <sys/bsdtypes.h> /* needed for ISC */ -#endif - #if HAVE_LIMITS_H # include <limits.h> #elif HAVE_SYS_PARAM_H @@ -119,10 +115,20 @@ extern char *optarg; extern int optind; #endif /* HAVE_GETOPT_H */ +#undef _NC_WINDOWS +#if (defined(_WIN32) || defined(_WIN64)) +#define _NC_WINDOWS 1 +#endif + #define NCURSES_INTERNALS 1 #define NCURSES_OPAQUE 0 #include <curses.h> + +#if !(defined(NCURSES_WGETCH_EVENTS) && defined(NEED_KEY_EVENT)) +#undef KEY_EVENT /* reduce compiler-warnings with Visual C++ */ +#endif + #include <term_entry.h> #include <nc_termios.h> #include <tic.h> @@ -155,6 +161,10 @@ extern int optind; #endif /* gcc workarounds */ /* usually in <unistd.h> */ +#ifndef STDIN_FILENO +#define STDIN_FILENO 0 +#endif + #ifndef STDOUT_FILENO #define STDOUT_FILENO 1 #endif diff --git a/progs/reset_cmd.c b/progs/reset_cmd.c index 9d23cd05ec2e..5e517cc74e9e 100644 --- a/progs/reset_cmd.c +++ b/progs/reset_cmd.c @@ -53,7 +53,7 @@ #include <sys/ptem.h> #endif -MODULE_ID("$Id: reset_cmd.c,v 1.19 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: reset_cmd.c,v 1.24 2020/11/21 22:11:10 tom Exp $") /* * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS, @@ -363,6 +363,13 @@ default_erase(void) void set_control_chars(TTY * tty_settings, int my_erase, int my_intr, int my_kill) { +#if defined(EXP_WIN32_DRIVER) + /* noop */ + (void) tty_settings; + (void) my_erase; + (void) my_intr; + (void) my_kill; +#else if (DISABLED(tty_settings->c_cc[VERASE]) || my_erase >= 0) { tty_settings->c_cc[VERASE] = UChar((my_erase >= 0) ? my_erase @@ -380,6 +387,7 @@ set_control_chars(TTY * tty_settings, int my_erase, int my_intr, int my_kill) ? my_kill : CKILL); } +#endif } /* @@ -389,6 +397,9 @@ set_control_chars(TTY * tty_settings, int my_erase, int my_intr, int my_kill) void set_conversions(TTY * tty_settings) { +#if defined(EXP_WIN32_DRIVER) + /* FIXME */ +#else #ifdef ONLCR tty_settings->c_oflag |= ONLCR; #endif @@ -412,6 +423,7 @@ set_conversions(TTY * tty_settings) tty_settings->c_oflag &= ~OXTABS; #endif /* OXTABS */ tty_settings->c_lflag |= (ECHOE | ECHOK); +#endif } static bool @@ -501,16 +513,15 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings) } else #if defined(set_lr_margin) if (VALID_STRING(set_lr_margin)) { - need_flush |= sent_string(TPARM_2(set_lr_margin, 0, - columns - 1)); + need_flush |= sent_string(TIPARM_2(set_lr_margin, 0, columns - 1)); } else #endif #if defined(set_left_margin_parm) && defined(set_right_margin_parm) if (VALID_STRING(set_left_margin_parm) && VALID_STRING(set_right_margin_parm)) { - need_flush |= sent_string(TPARM_1(set_left_margin_parm, 0)); - need_flush |= sent_string(TPARM_1(set_right_margin_parm, - columns - 1)); + need_flush |= sent_string(TIPARM_1(set_left_margin_parm, 0)); + need_flush |= sent_string(TIPARM_1(set_right_margin_parm, + columns - 1)); } else #endif if (VALID_STRING(set_left_margin) @@ -518,8 +529,8 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings) need_flush |= to_left_margin(); need_flush |= sent_string(set_left_margin); if (VALID_STRING(parm_right_cursor)) { - need_flush |= sent_string(TPARM_1(parm_right_cursor, - columns - 1)); + need_flush |= sent_string(TIPARM_1(parm_right_cursor, + columns - 1)); } else { for (i = 0; i < columns - 1; i++) { out_char(' '); @@ -552,15 +563,23 @@ show_tty_change(TTY * old_settings, int which, unsigned def) { - unsigned older, newer; + unsigned older = 0, newer = 0; char *p; +#if defined(EXP_WIN32_DRIVER) + /* noop */ + (void) old_settings; + (void) new_settings; + (void) name; + (void) which; + (void) def; +#else newer = new_settings->c_cc[which]; older = old_settings->c_cc[which]; if (older == newer && older == def) return; - +#endif (void) fprintf(stderr, "%s %s ", name, older == newer ? "is" : "set to"); if (DISABLED(newer)) { @@ -604,9 +623,13 @@ reset_flush(void) void print_tty_chars(TTY * old_settings, TTY * new_settings) { +#if defined(EXP_WIN32_DRIVER) + /* noop */ +#else show_tty_change(old_settings, new_settings, "Erase", VERASE, CERASE); show_tty_change(old_settings, new_settings, "Kill", VKILL, CKILL); show_tty_change(old_settings, new_settings, "Interrupt", VINTR, CINTR); +#endif } #if HAVE_SIZECHANGE diff --git a/progs/tabs.c b/progs/tabs.c index 8a3bc108fe8d..0539e85653ea 100644 --- a/progs/tabs.c +++ b/progs/tabs.c @@ -39,7 +39,7 @@ #include <progs.priv.h> #include <tty_settings.h> -MODULE_ID("$Id: tabs.c,v 1.42 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: tabs.c,v 1.45 2020/05/27 23:47:22 tom Exp $") static void usage(void) GCC_NORETURN; @@ -75,7 +75,7 @@ do_tabs(int *tab_list) } } if (stop <= max_cols) { - tputs(tparm(set_tab, stop), 1, putch); + tputs(TIPARM_1(set_tab, stop), 1, putch); last = stop; } else { break; diff --git a/progs/tic.c b/progs/tic.c index 328bcd6b2772..9b02a23216fa 100644 --- a/progs/tic.c +++ b/progs/tic.c @@ -49,7 +49,7 @@ #include <parametrized.h> #include <transform.h> -MODULE_ID("$Id: tic.c,v 1.282 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: tic.c,v 1.291 2021/02/20 23:57:24 tom Exp $") #define STDIN_NAME "<stdin>" @@ -1179,6 +1179,14 @@ check_acs(TERMTYPE2 *tp) } } +static char * +safe_strdup(const char *value) +{ + if (value == NULL) + value = ""; + return strdup(value); +} + static bool same_color(NCURSES_CONST char *oldcap, NCURSES_CONST char *newcap, int limit) { @@ -1189,8 +1197,8 @@ same_color(NCURSES_CONST char *oldcap, NCURSES_CONST char *newcap, int limit) int n; int same; for (n = same = 0; n < limit; ++n) { - char *oldvalue = strdup(TPARM_1(oldcap, n)); - char *newvalue = strdup(TPARM_1(newcap, n)); + char *oldvalue = safe_strdup(TIPARM_1(oldcap, n)); + char *newvalue = safe_strdup(TIPARM_1(newcap, n)); same += !strcmp(oldvalue, newvalue); free(oldvalue); free(newvalue); @@ -1703,6 +1711,7 @@ check_screen(TERMTYPE2 *tp) int have_bce = back_color_erase; bool have_kmouse = FALSE; bool use_sgr_39_49 = FALSE; + const char *name_39_49 = "orig_pair or orig_colors"; char *name = _nc_first_name(tp->term_names); bool is_screen = !strncmp(name, "screen", 6); bool screen_base = (is_screen @@ -1720,10 +1729,15 @@ check_screen(TERMTYPE2 *tp) if (VALID_STRING(key_mouse)) { have_kmouse = !strcmp("\033[M", key_mouse); } - if (VALID_STRING(orig_colors)) { - use_sgr_39_49 = uses_SGR_39_49(orig_colors); - } else if (VALID_STRING(orig_pair)) { - use_sgr_39_49 = uses_SGR_39_49(orig_pair); + if (have_bce) { + if (VALID_STRING(orig_pair)) { + name_39_49 = "orig_pair"; + use_sgr_39_49 = uses_SGR_39_49(orig_pair); + } + if (!use_sgr_39_49 && VALID_STRING(orig_colors)) { + name_39_49 = "orig_colors"; + use_sgr_39_49 = uses_SGR_39_49(orig_colors); + } } if (have_XM && have_XT) { @@ -1738,10 +1752,14 @@ check_screen(TERMTYPE2 *tp) _nc_warning("expected kmous capability with XT"); } } - if (!have_bce && max_colors > 0) - _nc_warning("expected bce capability with XT"); - if (!use_sgr_39_49 && have_bce && max_colors > 0) - _nc_warning("expected orig_colors capability with XT to have 39/49 parameters"); + if (max_colors > 0) { + if (!have_bce) { + _nc_warning("expected bce capability with XT"); + } else if (!use_sgr_39_49) { + _nc_warning("expected %s capability with XT " + "to have 39/49 parameters", name_39_49); + } + } if (VALID_STRING(to_status_line)) _nc_warning("\"tsl\" capability is redundant, given XT"); } else { @@ -1835,7 +1853,6 @@ expected_params(const char *name) DATA( "wingo", 1 ), }; /* *INDENT-ON* */ - #undef DATA unsigned n; @@ -1910,7 +1927,7 @@ check_params(TERMTYPE2 *tp, const char *name, char *value, int extended) int expected = expected_params(name); int actual = 0; int n; - bool params[NUM_PARM]; + bool params[1 + NUM_PARM]; char *s = value; #ifdef set_top_margin_parm @@ -1919,7 +1936,7 @@ check_params(TERMTYPE2 *tp, const char *name, char *value, int extended) expected = 2; #endif - for (n = 0; n < NUM_PARM; n++) + for (n = 0; n <= NUM_PARM; n++) params[n] = FALSE; while (*s != 0) { @@ -2173,6 +2190,9 @@ check_1_infotocap(const char *name, NCURSES_CONST char *value, int count) char *result; char blob[NUM_PARM * 10]; char *next = blob; + TParams expect; + TParams actual; + int nparam; *next++ = '\0'; for (k = 1; k <= NUM_PARM; k++) { @@ -2184,7 +2204,16 @@ check_1_infotocap(const char *name, NCURSES_CONST char *value, int count) next += strlen(next) + 1; } - switch (tparm_type(name)) { + expect = tparm_type(name); + nparam = _nc_tparm_analyze(value, p_is_s, &ignored); + actual = guess_tparm_type(nparam, p_is_s); + + if (expect != actual) { + _nc_warning("%s has mismatched parameters", name); + actual = Other; + } + + switch (actual) { case Num_Str: result = TPARM_2(value, numbers[1], strings[2]); break; @@ -2192,8 +2221,21 @@ check_1_infotocap(const char *name, NCURSES_CONST char *value, int count) result = TPARM_3(value, numbers[1], strings[2], strings[3]); break; case Numbers: +#define myParam(n) numbers[n] + result = TIPARM_9(value, + myParam(1), + myParam(2), + myParam(3), + myParam(4), + myParam(5), + myParam(6), + myParam(7), + myParam(8), + myParam(9)); +#undef myParam + break; + case Other: default: - (void) _nc_tparm_analyze(value, p_is_s, &ignored); #define myParam(n) (p_is_s[n - 1] != 0 ? ((TPARM_ARG) strings[n]) : numbers[n]) result = TPARM_9(value, myParam(1), @@ -2205,6 +2247,7 @@ check_1_infotocap(const char *name, NCURSES_CONST char *value, int count) myParam(7), myParam(8), myParam(9)); +#undef myParam break; } return strdup(result); @@ -2339,14 +2382,13 @@ check_infotocap(TERMTYPE2 *tp, int i, const char *value) ? parametrized[i] : ((*value == 'k') ? 0 - : has_params(value))); - int to_char = 0; + : has_params(value, FALSE))); char *ti_value; char *tc_value; bool embedded; assert(SIZEOF(parametrized) == STRCOUNT); - if ((ti_value = _nc_tic_expand(value, TRUE, to_char)) == ABSENT_STRING) { + if (!VALID_STRING(value) || (ti_value = strdup(value)) == NULL) { _nc_warning("tic-expansion of %s failed", name); } else if ((tc_value = _nc_infotocap(name, ti_value, params)) == ABSENT_STRING) { _nc_warning("tic-conversion of %s failed", name); @@ -2369,12 +2411,14 @@ check_infotocap(TERMTYPE2 *tp, int i, const char *value) if (strcmp(ti_check, tc_check)) { if (first) { fprintf(stderr, "check_infotocap(%s)\n", name); - fprintf(stderr, "...ti '%s'\n", ti_value); - fprintf(stderr, "...tc '%s'\n", tc_value); + fprintf(stderr, "...ti '%s'\n", _nc_visbuf2(0, ti_value)); + fprintf(stderr, "...tc '%s'\n", _nc_visbuf2(0, tc_value)); first = FALSE; } _nc_warning("tparm-conversion of %s(%d) differs between\n\tterminfo %s\n\ttermcap %s", - name, count, ti_check, tc_check); + name, count, + _nc_visbuf2(0, ti_check), + _nc_visbuf2(1, tc_check)); } free(ti_check); free(tc_check); @@ -2509,22 +2553,29 @@ similar_sgr(int num, char *a, char *b) return ((num != 0) || (*a == 0)); } +static void +check_tparm_err(int num) +{ + if (_nc_tparm_err) + _nc_warning("tparam error in sgr(%d): %s", num, sgr_names[num]); +} + static char * check_sgr(TERMTYPE2 *tp, char *zero, int num, char *cap, const char *name) { char *test; _nc_tparm_err = 0; - test = TPARM_9(set_attributes, - num == 1, - num == 2, - num == 3, - num == 4, - num == 5, - num == 6, - num == 7, - num == 8, - num == 9); + test = TIPARM_9(set_attributes, + num == 1, + num == 2, + num == 3, + num == 4, + num == 5, + num == 6, + num == 7, + num == 8, + num == 9); if (test != 0) { if (PRESENT(cap)) { if (!similar_sgr(num, test, cap)) { @@ -2539,8 +2590,7 @@ check_sgr(TERMTYPE2 *tp, char *zero, int num, char *cap, const char *name) } else if (PRESENT(cap)) { _nc_warning("sgr(%d) missing, but %s present", num, name); } - if (_nc_tparm_err) - _nc_warning("stack error in sgr(%d) string", num); + check_tparm_err(num); return test; } @@ -2695,7 +2745,6 @@ check_conflict(TERMTYPE2 *tp) { NULL, NULL }, }; /* *INDENT-ON* */ - /* * SVr4 curses defines the "xcurses" names listed above except for * the special cases in the "shifted" column. When using these @@ -2973,10 +3022,9 @@ check_termtype(TERMTYPE2 *tp, bool literal) if (PRESENT(exit_attribute_mode)) { zero = strdup(CHECK_SGR(0, exit_attribute_mode)); } else { - zero = strdup(TPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0)); + zero = strdup(TIPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0)); } - if (_nc_tparm_err) - _nc_warning("stack error in sgr(0) string"); + check_tparm_err(0); if (zero != 0) { CHECK_SGR(1, enter_standout_mode); diff --git a/progs/tparm_type.c b/progs/tparm_type.c index da681ce90fe2..3da4a0774af5 100644 --- a/progs/tparm_type.c +++ b/progs/tparm_type.c @@ -33,7 +33,7 @@ #include <tparm_type.h> -MODULE_ID("$Id: tparm_type.c,v 1.3 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: tparm_type.c,v 1.4 2020/10/24 17:30:32 tom Exp $") /* * Lookup the type of call we should make to tparm(). This ignores the actual @@ -70,3 +70,31 @@ tparm_type(const char *name) } return result; } + +TParams +guess_tparm_type(int nparam, char **p_is_s) +{ + TParams result = Other; + switch (nparam) { + case 0: + case 1: + if (!p_is_s[0]) + result = Numbers; + break; + case 2: + if (!p_is_s[0] && !p_is_s[1]) + result = Numbers; + if (!p_is_s[0] && p_is_s[1]) + result = Num_Str; + break; + case 3: + if (!p_is_s[0] && !p_is_s[1] && !p_is_s[2]) + result = Numbers; + if (!p_is_s[0] && p_is_s[1] && p_is_s[2]) + result = Num_Str_Str; + break; + default: + break; + } + return result; +} diff --git a/progs/tparm_type.h b/progs/tparm_type.h index 77f4f21cfb56..7c102a309c1a 100644 --- a/progs/tparm_type.h +++ b/progs/tparm_type.h @@ -32,7 +32,7 @@ ****************************************************************************/ /* - * $Id: tparm_type.h,v 1.2 2020/02/02 23:34:34 tom Exp $ + * $Id: tparm_type.h,v 1.3 2020/10/24 17:11:33 tom Exp $ * * determine expected/actual number of parameters to setup for tparm */ @@ -43,11 +43,13 @@ #include <progs.priv.h> typedef enum { - Numbers = 0 + Other = -1 + ,Numbers = 0 ,Num_Str ,Num_Str_Str } TParams; extern TParams tparm_type(const char *name); +extern TParams guess_tparm_type(int nparam, char **p_is_s); #endif /* TPARM_TYPE_H */ diff --git a/progs/tput.c b/progs/tput.c index 295b83fb8161..cac8d292a94b 100644 --- a/progs/tput.c +++ b/progs/tput.c @@ -51,7 +51,7 @@ #include <transform.h> #include <tty_settings.h> -MODULE_ID("$Id: tput.c,v 1.81 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: tput.c,v 1.84 2020/10/24 18:29:38 tom Exp $") #define PUTS(s) fputs(s, stdout) @@ -63,7 +63,7 @@ static bool is_reset = FALSE; static bool is_clear = FALSE; static void -quit(int status, const char *fmt,...) +quit(int status, const char *fmt, ...) { va_list argp; @@ -251,6 +251,21 @@ tput_cmd(int fd, TTY * saved_settings, bool opt_x, int argc, char *argv[]) s = TPARM_3(s, numbers[1], strings[2], strings[3]); break; case Numbers: +#define myParam(n) numbers[n] + s = TIPARM_9(s, + myParam(1), + myParam(2), + myParam(3), + myParam(4), + myParam(5), + myParam(6), + myParam(7), + myParam(8), + myParam(9)); +#undef myParam + break; + case Other: + /* FALLTHRU */ default: (void) _nc_tparm_analyze(s, p_is_s, &ignored); #define myParam(n) (p_is_s[n - 1] != 0 ? ((TPARM_ARG) strings[n]) : numbers[n]) @@ -264,6 +279,7 @@ tput_cmd(int fd, TTY * saved_settings, bool opt_x, int argc, char *argv[]) myParam(7), myParam(8), myParam(9)); +#undef myParam break; } } diff --git a/progs/tset.c b/progs/tset.c index ca0520e215a1..4d33ca8789c2 100644 --- a/progs/tset.c +++ b/progs/tset.c @@ -98,7 +98,7 @@ char *ttyname(int fd); #endif -MODULE_ID("$Id: tset.c,v 1.121 2020/02/02 23:34:34 tom Exp $") +MODULE_ID("$Id: tset.c,v 1.125 2020/09/05 22:54:47 tom Exp $") #ifndef environ extern char **environ; @@ -133,7 +133,7 @@ exit_error(void) } static void -err(const char *fmt,...) +err(const char *fmt, ...) { va_list ap; va_start(ap, fmt); @@ -227,10 +227,16 @@ static MAP *cur, *maplist; #define DATA(name,value) { { name }, value } typedef struct speeds { - const char string[7]; + const char string[8]; int speed; } SPEEDS; +#if defined(EXP_WIN32_DRIVER) +static const SPEEDS speeds[] = +{ + {"0", 0} +}; +#else static const SPEEDS speeds[] = { DATA("0", B0), @@ -331,6 +337,7 @@ static const SPEEDS speeds[] = #endif }; #undef DATA +#endif static int tbaudrate(char *rate) @@ -839,6 +846,8 @@ main(int argc, char **argv) oldmode = mode; #ifdef TERMIOS ospeed = (NCURSES_OSPEED) cfgetospeed(&mode); +#elif defined(EXP_WIN32_DRIVER) + ospeed = 0; #else ospeed = (NCURSES_OSPEED) mode.sg_ospeed; #endif |