X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftrace%2Flib_traceatr.c;h=a4144ab5c4caa10cb815f8cc27d89e8834f3c4c8;hp=8b009953f2467e4cb60f478a62afa51f102c9048;hb=6b99a559185b3b8fad80b56bc2070b08101c33d1;hpb=efd717f13effbf1d0fd743a214aebc0c97c8b66c diff --git a/ncurses/trace/lib_traceatr.c b/ncurses/trace/lib_traceatr.c index 8b009953..a4144ab5 100644 --- a/ncurses/trace/lib_traceatr.c +++ b/ncurses/trace/lib_traceatr.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2014,2016 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 * @@ -43,7 +43,7 @@ #define CUR SP_TERMTYPE #endif -MODULE_ID("$Id: lib_traceatr.c,v 1.85 2016/01/16 21:23:43 tom Exp $") +MODULE_ID("$Id: lib_traceatr.c,v 1.92 2018/05/05 17:49:17 tom Exp $") #define COLOR_OF(c) ((c < 0) ? "default" : (c > 7 ? color_of(c) : colors[c].name)) @@ -67,7 +67,7 @@ color_of(int c) if (c != my_cached) { my_cached = c; my_select = !my_select; - if (c == COLOR_DEFAULT) + if (isDefaultColor(c)) _nc_STRCPY(my_buffer[my_select], "default", COLOR_BUF_SIZE(my_select)); else @@ -123,11 +123,10 @@ _traceattr2(int bufnum, chtype newmode) #endif /* !USE_TERMLIB */ ; #undef DATA - size_t n; - char temp[80]; char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); if (result != 0) { + size_t n; unsigned save_nc_tracing = _nc_tracing; _nc_tracing = 0; @@ -135,12 +134,14 @@ _traceattr2(int bufnum, chtype newmode) _nc_STRCPY(result, l_brace, TRACE_BUF_SIZE(bufnum)); for (n = 0; n < SIZEOF(names); n++) { + if ((newmode & names[n].val) != 0) { if (result[1] != '\0') (void) _nc_trace_bufcat(bufnum, "|"); result = _nc_trace_bufcat(bufnum, names[n].name); if (names[n].val == A_COLOR) { + char temp[80]; short pairnum = (short) PairNumber(newmode); #ifdef USE_TERMLIB /* pair_content lives in libncurses */ @@ -254,7 +255,6 @@ _nc_altcharset_name(attr_t attr, chtype ch) if (SP_PARM != 0 && (attr & A_ALTCHARSET) && (acs_chars != 0)) { char *cp; char *found = 0; - size_t n; for (cp = acs_chars; cp[0] && cp[1]; cp += 2) { if (ChCharOf(UChar(cp[1])) == ChCharOf(ch)) { @@ -264,6 +264,8 @@ _nc_altcharset_name(attr_t attr, chtype ch) } if (found != 0) { + size_t n; + ch = ChCharOf(UChar(*found)); for (n = 0; n < SIZEOF(names); ++n) { if (names[n].val == ch) { @@ -279,22 +281,25 @@ _nc_altcharset_name(attr_t attr, chtype ch) NCURSES_EXPORT(char *) _tracechtype2(int bufnum, chtype ch) { - const char *found; char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); if (result != 0) { + const char *found; + attr_t attr = ChAttrOf(ch); + _nc_STRCPY(result, l_brace, TRACE_BUF_SIZE(bufnum)); - if ((found = _nc_altcharset_name(ChAttrOf(ch), ch)) != 0) { + if ((found = _nc_altcharset_name(attr, ch)) != 0) { (void) _nc_trace_bufcat(bufnum, found); + attr &= ~A_ALTCHARSET; } else (void) _nc_trace_bufcat(bufnum, _nc_tracechar(CURRENT_SCREEN, (int) ChCharOf(ch))); - if (ChAttrOf(ch) != A_NORMAL) { + if (attr != A_NORMAL) { (void) _nc_trace_bufcat(bufnum, " | "); (void) _nc_trace_bufcat(bufnum, - _traceattr2(bufnum + 20, ChAttrOf(ch))); + _traceattr2(bufnum + 20, attr)); } result = _nc_trace_bufcat(bufnum, r_brace); @@ -321,13 +326,13 @@ NCURSES_EXPORT(char *) _tracecchar_t2(int bufnum, const cchar_t *ch) { char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); - attr_t attr; - const char *found; if (result != 0) { _nc_STRCPY(result, l_brace, TRACE_BUF_SIZE(bufnum)); if (ch != 0) { - attr = AttrOfD(ch); + const char *found; + attr_t attr = AttrOfD(ch); + if ((found = _nc_altcharset_name(attr, (chtype) CharOfD(ch))) != 0) { (void) _nc_trace_bufcat(bufnum, found); attr &= ~A_ALTCHARSET; @@ -358,9 +363,10 @@ _tracecchar_t2(int bufnum, const cchar_t *ch) break; } else if (ch->chars[PUTC_i] > 255) { char temp[80]; - sprintf(temp, "{%d:\\u%x}", - wcwidth(ch->chars[PUTC_i]), - ch->chars[PUTC_i]); + _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) + "{%d:\\u%lx}", + wcwidth(ch->chars[PUTC_i]), + (unsigned long) ch->chars[PUTC_i]); (void) _nc_trace_bufcat(bufnum, temp); break; } @@ -378,6 +384,18 @@ _tracecchar_t2(int bufnum, const cchar_t *ch) (void) _nc_trace_bufcat(bufnum, " | "); (void) _nc_trace_bufcat(bufnum, _traceattr2(bufnum + 20, attr)); } +#if NCURSES_EXT_COLORS + /* + * Just in case the extended color is different from the chtype + * value, trace both. + */ + if (ch->ext_color != PairNumber(attr)) { + char temp[80]; + _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) + " X_COLOR{%d:%d}", ch->ext_color, PairNumber(attr)); + (void) _nc_trace_bufcat(bufnum, temp); + } +#endif } result = _nc_trace_bufcat(bufnum, r_brace);