]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - progs/tic.c
ncurses 6.0 - patch 20171216
[ncurses.git] / progs / tic.c
index e8719b85a55e0f8866614f447c80b220eeea1b93..478da6c472a22ada8392fbe9ec3735ad52aeee7a 100644 (file)
@@ -48,7 +48,7 @@
 #include <parametrized.h>
 #include <transform.h>
 
-MODULE_ID("$Id: tic.c,v 1.243 2017/08/26 20:56:55 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.248 2017/12/16 23:05:21 tom Exp $")
 
 #define STDIN_NAME "<stdin>"
 
@@ -674,8 +674,6 @@ add_digit(int *target, int source)
     *target = (*target * 10) + (source - '0');
 }
 
-#define VtoTrace(opt) (unsigned) ((opt > 0) ? opt : (opt == 0))
-
 int
 main(int argc, char *argv[])
 {
@@ -1537,27 +1535,62 @@ check_keypad(TERMTYPE2 *tp)
 static void
 check_printer(TERMTYPE2 *tp)
 {
+    (void) tp;
+#if defined(enter_doublewide_mode) && defined(exit_doublewide_mode)
     PAIRED(enter_doublewide_mode, exit_doublewide_mode);
+#endif
+#if defined(enter_italics_mode) && defined(exit_italics_mode)
     PAIRED(enter_italics_mode, exit_italics_mode);
+#endif
+#if defined(enter_leftward_mode) && defined(exit_leftward_mode)
     PAIRED(enter_leftward_mode, exit_leftward_mode);
+#endif
+#if defined(enter_micro_mode) && defined(exit_micro_mode)
     PAIRED(enter_micro_mode, exit_micro_mode);
+#endif
+#if defined(enter_shadow_mode) && defined(exit_shadow_mode)
     PAIRED(enter_shadow_mode, exit_shadow_mode);
+#endif
+#if defined(enter_subscript_mode) && defined(exit_subscript_mode)
     PAIRED(enter_subscript_mode, exit_subscript_mode);
+#endif
+#if defined(enter_superscript_mode) && defined(exit_superscript_mode)
     PAIRED(enter_superscript_mode, exit_superscript_mode);
+#endif
+#if defined(enter_upward_mode) && defined(exit_upward_mode)
     PAIRED(enter_upward_mode, exit_upward_mode);
+#endif
 
+#if defined(start_char_set_def) && defined(stop_char_set_def)
     ANDMISSING(start_char_set_def, stop_char_set_def);
+#endif
 
     /* if we have a parameterized form, then the non-parameterized is easy */
+#if defined(set_bottom_margin_parm) && defined(set_bottom_margin)
     ANDMISSING(set_bottom_margin_parm, set_bottom_margin);
+#endif
+#if defined(set_left_margin_parm) && defined(set_left_margin)
     ANDMISSING(set_left_margin_parm, set_left_margin);
+#endif
+#if defined(set_right_margin_parm) && defined(set_right_margin)
     ANDMISSING(set_right_margin_parm, set_right_margin);
+#endif
+#if defined(set_top_margin_parm) && defined(set_top_margin)
     ANDMISSING(set_top_margin_parm, set_top_margin);
+#endif
 
+#if defined(parm_down_micro) && defined(micro_down)
     ANDMISSING(parm_down_micro, micro_down);
+#endif
+#if defined(parm_left_micro) && defined(micro_left)
     ANDMISSING(parm_left_micro, micro_left);
+#endif
+#if defined(parm_right_micro) && defined(micro_right)
     ANDMISSING(parm_right_micro, micro_right);
+#endif
+#if defined(parm_up_micro) && defined(micro_up)
     ANDMISSING(parm_up_micro, micro_up);
+#endif
 }
 
 static bool
@@ -1722,14 +1755,22 @@ expected_params(const char *name)
     return result;
 }
 
+/*
+ * ncurses assumes that u6 could be used for getting the cursor-position, but
+ * that is not implemented.  Make a special case for that, to quiet needless
+ * warnings.
+ *
+ * There are other string-capability extensions (see terminfo.src) which could
+ * have parameters such as "Ss", "%u", but are not used by ncurses.
+ */
 static int
 is_user_capability(const char *name)
 {
-    int result = 0;
+    int result = -1;
     if (name[0] == 'u' &&
        (name[1] >= '0' && name[1] <= '9') &&
        name[2] == '\0')
-       result = 1;
+       result = (name[1] == '6') ? 2 : 0;
     return result;
 }
 
@@ -1811,7 +1852,10 @@ check_params(TERMTYPE2 *tp, const char *name, char *value, int extended)
            analyzed = popcount;
        }
        if (actual != analyzed && expected != analyzed) {
-           if (is_user_capability(name)) {
+           int user_cap = is_user_capability(name);
+           if ((user_cap == analyzed) && using_extensions) {
+               ;               /* ignore */
+           } else if (user_cap >= 0) {
                _nc_warning("tparm will use %d parameters for %s",
                            analyzed, name);
            } else {
@@ -1890,7 +1934,7 @@ skip_DECSCNM(const char *value, int *flag)
 }
 
 static void
-check_delays(const char *name, const char *value)
+check_delays(TERMTYPE2 *tp, const char *name, const char *value)
 {
     const char *p, *q;
     const char *first = 0;
@@ -1940,6 +1984,14 @@ check_delays(const char *name, const char *value)
                    _nc_warning("function-key %s has delay", name);
                } else if (proportional && !line_capability(name)) {
                    _nc_warning("non-line capability using proportional delay: %s", name);
+               } else if (!xon_xoff &&
+                          !mandatory &&
+                          strchr(_nc_first_name(tp->term_names), '+') == 0) {
+                   _nc_warning("%s in %s is used since no xon/xoff",
+                               (proportional
+                                ? "proportional delay"
+                                : "delay"),
+                               name);
                }
            } else {
                p = q - 1;      /* restart scan */
@@ -2664,11 +2716,11 @@ check_termtype(TERMTYPE2 *tp, bool literal)
             * check for consistent number of parameters.
             */
            if (j >= SIZEOF(parametrized) ||
-               is_user_capability(name) ||
+               is_user_capability(name) > 0 ||
                parametrized[j] > 0) {
                check_params(tp, name, a, (j >= STRCOUNT));
            }
-           check_delays(ExtStrname(tp, (int) j, strnames), a);
+           check_delays(tp, ExtStrname(tp, (int) j, strnames), a);
            if (capdump) {
                check_infotocap(tp, (int) j, a);
            }
@@ -2756,7 +2808,9 @@ check_termtype(TERMTYPE2 *tp, bool literal)
                       _nc_visbuf(exit_attribute_mode)));
            }
        }
+#if defined(exit_italics_mode)
        CHECK_SGR0(exit_italics_mode);
+#endif
        CHECK_SGR0(exit_standout_mode);
        CHECK_SGR0(exit_underline_mode);
        if (check_sgr0 != exit_attribute_mode) {