/****************************************************************************
- * Copyright (c) 1998-2018,2019 Free Software Foundation, Inc. *
+ * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 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.279 2019/10/15 22:18:29 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.286 2020/05/31 21:05:44 tom Exp $")
#define STDIN_NAME "<stdin>"
}
}
+static char *
+safe_strdup(const char *value)
+{
+ if (value == NULL)
+ value = "";
+ return strdup(value);
+}
+
static bool
same_color(NCURSES_CONST char *oldcap, NCURSES_CONST char *newcap, int limit)
{
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));
+ char *oldvalue = safe_strdup(TIPARM_1(oldcap, n));
+ char *newvalue = safe_strdup(TIPARM_1(newcap, n));
same += !strcmp(oldvalue, newvalue);
free(oldvalue);
free(newvalue);
DATA( "wingo", 1 ),
};
/* *INDENT-ON* */
-
#undef DATA
unsigned n;
int expected = expected_params(name);
int actual = 0;
int n;
- bool params[NUM_PARM];
+ bool params[1 + NUM_PARM];
char *s = value;
#ifdef set_top_margin_parm
expected = 2;
#endif
- for (n = 0; n < NUM_PARM; n++)
+ for (n = 0; n <= NUM_PARM; n++)
params[n] = FALSE;
while (*s != 0) {
result = TPARM_3(value, numbers[1], strings[2], strings[3]);
break;
case Numbers:
+#define myParam(n) numbers[n]
+ result = TIPARM_9(value,
+ myParam(1),
+ myParam(2),
+ myParam(3),
+ myParam(4),
+ myParam(5),
+ myParam(6),
+ myParam(7),
+ myParam(8),
+ myParam(9));
+#undef myParam
+ break;
default:
(void) _nc_tparm_analyze(value, p_is_s, &ignored);
#define myParam(n) (p_is_s[n - 1] != 0 ? ((TPARM_ARG) strings[n]) : numbers[n])
myParam(7),
myParam(8),
myParam(9));
+#undef myParam
break;
}
return strdup(result);
char *test;
_nc_tparm_err = 0;
- test = TPARM_9(set_attributes,
- num == 1,
- num == 2,
- num == 3,
- num == 4,
- num == 5,
- num == 6,
- num == 7,
- num == 8,
- num == 9);
+ test = TIPARM_9(set_attributes,
+ num == 1,
+ num == 2,
+ num == 3,
+ num == 4,
+ num == 5,
+ num == 6,
+ num == 7,
+ num == 8,
+ num == 9);
if (test != 0) {
if (PRESENT(cap)) {
if (!similar_sgr(num, test, cap)) {
{ NULL, NULL },
};
/* *INDENT-ON* */
-
/*
* SVr4 curses defines the "xcurses" names listed above except for
* the special cases in the "shifted" column. When using these
* 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
if (PRESENT(exit_attribute_mode)) {
zero = strdup(CHECK_SGR(0, exit_attribute_mode));
} else {
- zero = strdup(TPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0));
+ zero = strdup(TIPARM_9(set_attributes, 0, 0, 0, 0, 0, 0, 0, 0, 0));
}
if (_nc_tparm_err)
_nc_warning("stack error in sgr(0) string");
* 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");
}