X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftic.c;h=6ee1766604343a6f7b9b5e068bcc67b0622b34f4;hp=3c9a6049105d95febda50491955a1a60ac469a12;hb=ff4cca6e1dfc932e229643403cdd59a6dd4b1abb;hpb=bfe753d2dbaed1587556f1dc89bb14066d075c8c diff --git a/progs/tic.c b/progs/tic.c index 3c9a6049..6ee17666 100644 --- a/progs/tic.c +++ b/progs/tic.c @@ -46,7 +46,7 @@ #include #include -MODULE_ID("$Id: tic.c,v 1.185 2013/03/17 00:57:05 tom Exp $") +MODULE_ID("$Id: tic.c,v 1.188 2013/08/24 21:48:21 tom Exp $") #define STDIN_NAME "" @@ -380,11 +380,11 @@ open_tempfile(char *filename) _nc_STRCPY(filename, "/tmp/XXXXXX", PATH_MAX); #if HAVE_MKSTEMP { - int oldmask = umask(077); + int oldmask = (int) umask(077); int fd = mkstemp(filename); if (fd >= 0) result = fdopen(fd, "w"); - umask(oldmask); + umask((mode_t) oldmask); } #else if (tmpnam(filename) != 0) @@ -1224,6 +1224,19 @@ check_ansi_cursor(char *list[4]) } #define EXPECTED(name) if (!PRESENT(name)) _nc_warning("expected " #name) +#define UNEXPECTED(name) if (PRESENT(name)) _nc_warning("unexpected " #name ", for %s", why) + +static void +check_noaddress(TERMTYPE *tp, const char *why) +{ + UNEXPECTED(column_address); + UNEXPECTED(cursor_address); + UNEXPECTED(cursor_home); + UNEXPECTED(cursor_mem_address); + UNEXPECTED(cursor_to_ll); + UNEXPECTED(row_address); + UNEXPECTED(row_address); +} static void check_cursor(TERMTYPE *tp) @@ -1231,6 +1244,43 @@ check_cursor(TERMTYPE *tp) int count; char *list[4]; + if (hard_copy) { + check_noaddress(tp, "hard_copy"); + } else if (generic_type) { + check_noaddress(tp, "generic_type"); + } else if (strchr(tp->term_names, '+') == 0) { + int y = 0; + int x = 0; + if (PRESENT(column_address)) + ++y; + if (PRESENT(cursor_address)) + y = x = 10; + if (PRESENT(cursor_home)) + ++y, ++x; + if (PRESENT(cursor_mem_address)) + y = x = 10; + if (PRESENT(cursor_to_ll)) + ++y, ++x; + if (PRESENT(row_address)) + ++x; + if (PRESENT(cursor_down)) + ++y; + if (PRESENT(cursor_up)) + ++y; + if (PRESENT(cursor_left)) + ++x; + if (PRESENT(cursor_right)) + ++x; + if (x < 2 && y < 2) { + _nc_warning("terminal lacks cursor addressing"); + } else { + if (x < 2) + _nc_warning("terminal lacks cursor column-addressing"); + if (y < 2) + _nc_warning("terminal lacks cursor row-addressing"); + } + } + /* it is rare to have an insert-line feature without a matching delete */ ANDMISSING(parm_insert_line, insert_line); ANDMISSING(parm_delete_line, delete_line); @@ -1412,7 +1462,7 @@ check_keypad(TERMTYPE *tp) /* * These warnings are useful for consistency checks - it is possible that - * there are real terminals with mismatches in these + * there are real terminals with mismatches in these */ ANDMISSING(key_ic, key_dc); } @@ -1456,6 +1506,7 @@ uses_SGR_39_49(const char *value) static void check_screen(TERMTYPE *tp) { +#if NCURSES_XNAMES if (_nc_user_definable) { int have_XT = tigetflag("XT"); int have_XM = tigetflag("XM"); @@ -1507,6 +1558,7 @@ check_screen(TERMTYPE *tp) _nc_warning("Expected XT to be set, given kmous"); } } +#endif } /*