]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - progs/tic.c
ncurses 6.1 - patch 20180217
[ncurses.git] / progs / tic.c
index 3545c3c92a9b401db68eceddf5f99477e3f6d8d4..da227c327adb1bb5c9a7a79684ac79c074783aa4 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -48,7 +48,7 @@
 #include <parametrized.h>
 #include <transform.h>
 
-MODULE_ID("$Id: tic.c,v 1.244 2017/09/20 00:39:37 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.252 2018/01/25 19:16:50 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[])
 {
@@ -1616,6 +1614,9 @@ check_screen(TERMTYPE2 *tp)
        bool have_kmouse = FALSE;
        bool use_sgr_39_49 = FALSE;
        char *name = _nc_first_name(tp->term_names);
+       bool is_screen = !strncmp(name, "screen", 6);
+       bool screen_base = (is_screen
+                           && strchr(name, '.') == 0);
 
        if (!VALID_BOOLEAN(have_bce)) {
            have_bce = FALSE;
@@ -1637,12 +1638,10 @@ check_screen(TERMTYPE2 *tp)
 
        if (have_XM && have_XT) {
            _nc_warning("Screen's XT capability conflicts with XM");
-       } else if (have_XT
-                  && strstr(name, "screen") != 0
-                  && strchr(name, '.') != 0) {
+       } else if (have_XT && screen_base) {
            _nc_warning("Screen's \"screen\" entries should not have XT set");
        } else if (have_XT) {
-           if (!have_kmouse && have_bce) {
+           if (!have_kmouse && is_screen) {
                if (VALID_STRING(key_mouse)) {
                    _nc_warning("Value of kmous inconsistent with screen's usage");
                } else {
@@ -1656,8 +1655,11 @@ check_screen(TERMTYPE2 *tp)
            if (VALID_STRING(to_status_line))
                _nc_warning("\"tsl\" capability is redundant, given XT");
        } else {
-           if (have_kmouse && !have_XM)
+           if (have_kmouse
+               && !have_XM
+               && !screen_base && strchr(name, '+') == 0) {
                _nc_warning("Expected XT to be set, given kmous");
+           }
        }
     }
 #endif
@@ -1757,14 +1759,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;
 }
 
@@ -1846,7 +1856,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 {
@@ -1925,7 +1938,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;
@@ -1975,6 +1988,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 */
@@ -2699,11 +2720,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);
            }