]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - progs/tic.c
ncurses 6.1 - patch 20190420
[ncurses.git] / progs / tic.c
index 705cac6caf9f731af9b25012c1f218178dd8a5e6..33d1311eb9caf578ce07711e41c6fbf71d01bf01 100644 (file)
@@ -48,7 +48,7 @@
 #include <parametrized.h>
 #include <transform.h>
 
-MODULE_ID("$Id: tic.c,v 1.268 2019/02/23 21:49:28 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.274 2019/04/20 20:28:19 tom Exp $")
 
 #define STDIN_NAME "<stdin>"
 
@@ -1666,6 +1666,7 @@ check_printer(TERMTYPE2 *tp)
 #endif
 }
 
+#if NCURSES_XNAMES
 static bool
 uses_SGR_39_49(const char *value)
 {
@@ -1679,7 +1680,6 @@ uses_SGR_39_49(const char *value)
 static void
 check_screen(TERMTYPE2 *tp)
 {
-#if NCURSES_XNAMES
     if (_nc_user_definable) {
        int have_XT = tigetflag("XT");
        int have_XM = tigetflag("XM");
@@ -1735,8 +1735,10 @@ check_screen(TERMTYPE2 *tp)
            }
        }
     }
-#endif
 }
+#else
+#define check_screen(tp)       /* nothing */
+#endif
 
 /*
  * Returns the expected number of parameters for the given capability.
@@ -1832,59 +1834,21 @@ expected_params(const char *name)
     return result;
 }
 
-typedef struct {
-    const char *name;
-    int n_type;
-    int n_parms;
-} USERCAPS;
-
 /*
- * These are user-capabilities that happen to be used in ncurses' terminal
+ * Check for user-capabilities that happen to be used in ncurses' terminal
  * database.
  */
-static USERCAPS *
+#if NCURSES_XNAMES
+static struct user_table_entry const *
 lookup_user_capability(const char *name)
 {
-    /* *INDENT-OFF* */
-#define DATA(name,type,parms) { name, type, parms }
-    static USERCAPS table[] = {
-       DATA( "AX",    BOOLEAN, 0 ),
-       DATA( "Cr",    STRING,  0 ),
-       DATA( "Cs",    STRING,  1 ),
-       DATA( "E0",    STRING,  0 ),
-       DATA( "E3",    STRING,  0 ),
-       DATA( "G0",    BOOLEAN, 0 ),
-       DATA( "Ms",    STRING,  2 ),
-       DATA( "RGB",   BOOLEAN, 0 ),    /* FIXME can be number or string */
-       DATA( "S0",    STRING,  1 ),
-       DATA( "Se",    STRING,  0 ),
-       DATA( "Smulx", STRING,  1 ),
-       DATA( "Ss",    STRING,  1 ),
-       DATA( "TS",    STRING,  0 ),
-       DATA( "U8",    NUMBER,  0 ),
-       DATA( "XM",    STRING,  1 ),
-       DATA( "XT",    BOOLEAN, 0 ),
-       DATA( "grbom", STRING,  0 ),
-       DATA( "gsbom", STRING,  0 ),
-       DATA( "rmxx",  STRING,  0 ),
-       DATA( "smxx",  STRING,  0 ),
-       DATA( "xm",    STRING,  9 ),
-    };
-#undef DATA
-    /* *INDENT-ON* */
-
-    size_t n;
-    USERCAPS *result = 0;
+    struct user_table_entry const *result = 0;
     if (*name != 'k') {
-       for (n = 0; n < SIZEOF(table); ++n) {
-           if (!strcmp(name, table[n].name)) {
-               result = &table[n];
-               break;
-           }
-       }
+       result = _nc_find_user_entry(name);
     }
     return result;
 }
+#endif
 
 /*
  * If a given name is likely to be a user-capability, return the number of
@@ -1906,12 +1870,15 @@ is_user_capability(const char *name)
        (name[1] >= '0' && name[1] <= '9') &&
        name[2] == '\0') {
        result = (name[1] == '6') ? 2 : 0;
-    } else if (using_extensions) {
-       USERCAPS *p = lookup_user_capability(name);
+    }
+#if NCURSES_XNAMES
+    else if (using_extensions) {
+       struct user_table_entry const *p = lookup_user_capability(name);
        if (p != 0) {
-           result = p->n_parms;
+           result = (int) p->ute_argc;
        }
     }
+#endif
     return result;
 }
 
@@ -1958,6 +1925,7 @@ check_params(TERMTYPE2 *tp, const char *name, char *value, int extended)
        s++;
     }
 
+#if NCURSES_XNAMES
     if (extended) {
        int check = is_user_capability(name);
        if (check != actual) {
@@ -1969,6 +1937,9 @@ check_params(TERMTYPE2 *tp, const char *name, char *value, int extended)
        }
        expected = actual;
     }
+#else
+    (void) extended;
+#endif
 
     if (params[0]) {
        _nc_warning("%s refers to parameter 0 (%%p0), which is not allowed", name);
@@ -1997,13 +1968,16 @@ check_params(TERMTYPE2 *tp, const char *name, char *value, int extended)
            analyzed = popcount;
        }
        if (actual != analyzed && expected != analyzed) {
+#if NCURSES_XNAMES
            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, expected %d",
                            analyzed, name, user_cap);
-           } else {
+           } else
+#endif
+           {
                _nc_warning("tparm analyzed %d parameters for %s, expected %d",
                            analyzed, name, actual);
            }
@@ -2344,8 +2318,7 @@ static void
 check_infotocap(TERMTYPE2 *tp, int i, const char *value)
 {
     const char *name = ExtStrname(tp, i, strnames);
-    int params = (((i < (int) SIZEOF(parametrized)) &&
-                  (i < STRCOUNT))
+    int params = ((i < (int) SIZEOF(parametrized))
                  ? parametrized[i]
                  : ((*value == 'k')
                     ? 0
@@ -2355,6 +2328,7 @@ check_infotocap(TERMTYPE2 *tp, int i, const char *value)
     char *tc_value;
     bool embedded;
 
+    assert(SIZEOF(parametrized) == STRCOUNT);
     if ((ti_value = _nc_tic_expand(value, TRUE, to_char)) == ABSENT_STRING) {
        _nc_warning("tic-expansion of %s failed", name);
     } else if ((tc_value = _nc_infotocap(name, ti_value, params)) == ABSENT_STRING) {
@@ -2845,6 +2819,7 @@ check_sgr_param(TERMTYPE2 *tp, int code, const char *name, char *value)
     }
 }
 
+#if NCURSES_XNAMES
 static int
 standard_type(const char *name)
 {
@@ -2878,20 +2853,12 @@ name_of_type(int type)
 static void
 check_user_capability_type(const char *name, int actual)
 {
-    USERCAPS *p = lookup_user_capability(name);
-    if (p != 0) {
-       if (p->n_type != actual)
-           _nc_warning("expected %s to be %s, but actually %s",
-                       name,
-                       name_of_type(p->n_type),
-                       name_of_type(actual)
-               );
-    } else {
+    if (lookup_user_capability(name) == 0) {
        int expected = standard_type(name);
        if (expected >= 0) {
            _nc_warning("expected %s to be %s, but actually %s",
                        name,
-                       name_of_type(p->n_type),
+                       name_of_type(actual),
                        name_of_type(expected)
                );
        } else if (*name != 'k') {
@@ -2901,6 +2868,7 @@ check_user_capability_type(const char *name, int actual)
        }
     }
 }
+#endif
 
 /* other sanity-checks (things that we don't want in the normal
  * logic that reads a terminfo entry)