X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftrace%2Flib_tracedmp.c;h=c7fcbf2e0d56c7bc57208a719ec511110401d6dd;hp=536231364085c96b601da173df2432bf0198123b;hb=322d0bb55499368c35c8e65ae1ea1c26209bc05e;hpb=7a27c7d49c2e8b4a1ecbe85b4423d647cbc75ea5 diff --git a/ncurses/trace/lib_tracedmp.c b/ncurses/trace/lib_tracedmp.c index 53623136..c7fcbf2e 100644 --- a/ncurses/trace/lib_tracedmp.c +++ b/ncurses/trace/lib_tracedmp.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2008,2009 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 * @@ -39,7 +39,7 @@ #include #include -MODULE_ID("$Id: lib_tracedmp.c,v 1.28 2007/04/21 21:10:54 tom Exp $") +MODULE_ID("$Id: lib_tracedmp.c,v 1.32 2009/04/18 21:01:38 tom Exp $") #ifdef TRACE @@ -68,7 +68,7 @@ _tracedump(const char *name, WINDOW *win) if (width < win->_maxx) ++width; if (++width + 1 > (int) my_length) { - my_length = 2 * (width + 1); + my_length = (unsigned) (2 * (width + 1)); my_buffer = typeRealloc(char, my_length, my_buffer); } @@ -82,16 +82,16 @@ _tracedump(const char *name, WINDOW *win) * we map those to '.' and '?' respectively. */ for (j = 0; j < width; ++j) { - chtype test = CharOf(win->_line[n].text[j]); - ep[j] = (UChar(test) == test + chtype test = (chtype) CharOf(win->_line[n].text[j]); + ep[j] = (char) ((UChar(test) == test #if USE_WIDEC_SUPPORT - && (win->_line[n].text[j].chars[1] == 0) + && (win->_line[n].text[j].chars[1] == 0) #endif - ) - ? (iscntrl(UChar(test)) - ? '.' - : UChar(test)) - : '?'; + ) + ? (iscntrl(UChar(test)) + ? '.' + : UChar(test)) + : '?'); } ep[j] = '\0'; _tracef("%s[%2d] %3ld%3ld ='%s'", @@ -100,6 +100,30 @@ _tracedump(const char *name, WINDOW *win) (long) win->_line[n].lastchar, ep); + /* if there are multi-column characters on the line, print them now */ + if_WIDEC({ + bool multicolumn = FALSE; + for (j = 0; j < width; ++j) + if (WidecExt(win->_line[n].text[j]) != 0) { + multicolumn = TRUE; + break; + } + if (multicolumn) { + ep = my_buffer; + for (j = 0; j < width; ++j) { + chtype test = WidecExt(win->_line[n].text[j]); + if (test) { + ep[j] = (char) (test + '0'); + } else { + ep[j] = ' '; + } + } + ep[j] = '\0'; + _tracef("%*s[%2d]%*s='%s'", (int) strlen(name), + "widec", n, 8, " ", my_buffer); + } + }); + /* dump A_COLOR part, will screw up if there are more than 96 */ havecolors = FALSE; for (j = 0; j < width; ++j) @@ -114,11 +138,11 @@ _tracedump(const char *name, WINDOW *win) if (pair >= 52) ep[j] = '?'; else if (pair >= 36) - ep[j] = pair + 'A'; + ep[j] = (char) (pair + 'A'); else if (pair >= 10) - ep[j] = pair + 'a'; + ep[j] = (char) (pair + 'a'); else if (pair >= 1) - ep[j] = pair + '0'; + ep[j] = (char) (pair + '0'); else ep[j] = ' '; } @@ -129,7 +153,7 @@ _tracedump(const char *name, WINDOW *win) for (i = 0; i < 4; ++i) { const char *hex = " 123456789ABCDEF"; - attr_t mask = (0xf << ((i + 4) * 4)); + attr_t mask = (attr_t) (0xf << ((i + 4) * 4)); haveattrs = FALSE; for (j = 0; j < width; ++j) @@ -156,5 +180,5 @@ _tracedump(const char *name, WINDOW *win) } #else -empty_module(_nc_lib_tracedmp) +EMPTY_MODULE(_nc_lib_tracedmp) #endif /* TRACE */