/****************************************************************************
- * 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 *
#include <parametrized.h>
#include <transform.h>
-MODULE_ID("$Id: tic.c,v 1.248 2017/12/16 23:05:21 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.256 2018/03/18 00:05:10 tom Exp $")
#define STDIN_NAME "<stdin>"
}
}
+static bool
+same_color(NCURSES_CONST char *oldcap, NCURSES_CONST char *newcap, int limit)
+{
+ bool result = FALSE;
+ if (limit > 16)
+ limit = 16;
+ if (limit >= 8) {
+ 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));
+ same += !strcmp(oldvalue, newvalue);
+ free(oldvalue);
+ free(newvalue);
+ }
+ result = (same == limit);
+ }
+ return result;
+}
+
/*
* Check if the color capabilities are consistent
*/
PAIRED(set_color_pair, initialize_pair);
if (VALID_STRING(set_foreground)
- && VALID_STRING(set_a_foreground)
- && !_nc_capcmp(set_foreground, set_a_foreground))
- _nc_warning("expected setf/setaf to be different");
+ && VALID_STRING(set_a_foreground)) {
+ if (!_nc_capcmp(set_foreground, set_a_foreground)) {
+ _nc_warning("expected setf/setaf to be different");
+ } else if (same_color(set_foreground, set_a_foreground, max_colors)) {
+ _nc_warning("setf/setaf are equivalent");
+ }
+ }
if (VALID_STRING(set_background)
- && VALID_STRING(set_a_background)
- && !_nc_capcmp(set_background, set_a_background))
- _nc_warning("expected setb/setab to be different");
+ && VALID_STRING(set_a_background)) {
+ if (!_nc_capcmp(set_background, set_a_background)) {
+ _nc_warning("expected setb/setab to be different");
+ } else if (same_color(set_background, set_a_background, max_colors)) {
+ _nc_warning("setb/setab are equivalent");
+ }
+ }
/* see: has_colors() */
if (VALID_NUMERIC(max_colors) && VALID_NUMERIC(max_pairs)
- && (((set_foreground != NULL)
- && (set_background != NULL))
- || ((set_a_foreground != NULL)
- && (set_a_background != NULL))
+ && ((VALID_STRING(set_foreground)
+ && VALID_STRING(set_background))
+ || (VALID_STRING(set_a_foreground)
+ && VALID_STRING(set_a_background))
|| set_color_pair)) {
if (!VALID_STRING(orig_pair) && !VALID_STRING(orig_colors))
_nc_warning("expected either op/oc string for resetting colors");
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;
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 {
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
myParam(9));
break;
}
- return result;
+ return strdup(result);
}
#define IsDelay(ch) ((ch) == '.' || isdigit(UChar(ch)))
|| !strcmp(name, "setb")
|| !strcmp(name, "setaf")
|| !strcmp(name, "setab")) {
- limit = max_colors;
+ if ((limit = max_colors) > 16)
+ limit = 16;
}
for (count = 0; count < limit; ++count) {
char *ti_check = check_1_infotocap(name, ti_value, count);
_nc_warning("tparm-conversion of %s(%d) differs between\n\tterminfo %s\n\ttermcap %s",
name, count, ti_check, tc_check);
}
+ free(ti_check);
+ free(tc_check);
}
} else if (params == 0 && !same_ti_tc(ti_value, tc_value, &embedded)) {
if (embedded) {