#include <parametrized.h>
#include <transform.h>
-MODULE_ID("$Id: tic.c,v 1.271 2019/03/17 00:46:55 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.281 2019/11/09 18:51:36 tom Exp $")
#define STDIN_NAME "<stdin>"
while ((ch = *t++) != 0) {
*d++ = (char) ch;
if (ch == '\\') {
- *d++ = *t++;
+ if ((*d++ = *t++) == '\0')
+ break;
} else if ((ch == '%')
&& (*t == L_BRACE)) {
char *v = 0;
if (!quiet) {
(void) fseek(tmp_fp, qp->cstart, SEEK_SET);
while (j-- > 0) {
- if (infodump)
- (void) putchar(fgetc(tmp_fp));
- else
- put_translate(fgetc(tmp_fp));
+ int ch = fgetc(tmp_fp);
+ if (ch == EOF || ferror(tmp_fp)) {
+ break;
+ } else if (infodump) {
+ (void) putchar(ch);
+ } else {
+ put_translate(ch);
+ }
}
}
static void
check_colors(TERMTYPE2 *tp)
{
+ char *value;
+
if ((max_colors > 0) != (max_pairs > 0)
|| ((max_colors > max_pairs) && (initialize_pair == 0)))
_nc_warning("inconsistent values for max_colors (%d) and max_pairs (%d)",
_nc_warning("expected ccc because initc is given");
}
}
+ value = tigetstr("RGB");
+ if (VALID_STRING(value)) {
+ int r, g, b;
+ char bad;
+ int code = sscanf(value, "%d/%d/%d%c", &r, &g, &b, &bad);
+ if (code != 3 || r <= 0 || g <= 0 || b <= 0) {
+ _nc_warning("unexpected value for RGB capability: %s", value);
+ }
+ }
}
static int
#endif
}
+#if NCURSES_XNAMES
static bool
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");
}
}
}
-#endif
}
+#else
+#define check_screen(tp) /* nothing */
+#endif
/*
* Returns the expected number of parameters for the given capability.
* Check for user-capabilities that happen to be used in ncurses' terminal
* database.
*/
+#if NCURSES_XNAMES
static struct user_table_entry const *
lookup_user_capability(const char *name)
{
}
return result;
}
+#endif
/*
* If a given name is likely to be a user-capability, return the number of
(name[1] >= '0' && name[1] <= '9') &&
name[2] == '\0') {
result = (name[1] == '6') ? 2 : 0;
- } else if (using_extensions) {
+ }
+#if NCURSES_XNAMES
+ else if (using_extensions) {
struct user_table_entry const *p = lookup_user_capability(name);
if (p != 0) {
result = (int) p->ute_argc;
}
}
+#endif
return result;
}
s++;
}
+#if NCURSES_XNAMES
if (extended) {
int check = is_user_capability(name);
- if (check != actual) {
+ if (check != actual && (check >= 0 && actual >= 0)) {
_nc_warning("extended %s capability has %d parameters, expected %d",
name, actual, check);
} else if (debug_level > 1) {
}
expected = actual;
}
+#else
+ (void) extended;
+#endif
if (params[0]) {
_nc_warning("%s refers to parameter 0 (%%p0), which is not allowed", name);
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);
}
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
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) {
}
}
+#if NCURSES_XNAMES
static int
standard_type(const char *name)
{
}
}
}
+#endif
/* other sanity-checks (things that we don't want in the normal
* logic that reads a terminfo entry)
check_printer(tp);
check_screen(tp);
+ /*
+ * These are probably both or none.
+ */
+ PAIRED(parm_index, parm_rindex);
+ PAIRED(parm_ich, parm_dch);
+
/*
* These may be mismatched because the terminal description relies on
* restoring the cursor visibility by resetting it.
* ncurses handles it.
*/
if ((PRESENT(enter_insert_mode) || PRESENT(exit_insert_mode))
- && PRESENT(parm_ich)) {
+ && PRESENT(insert_character)) {
_nc_warning("non-curses applications may be confused by ich1 with smir/rmir");
}