ncurses 6.1 - patch 20180707
[ncurses.git] / ncurses / trace / lib_traceatr.c
index 1476b8458c3d260c61e8ab1d66645f5591f6bf89..a4144ab5c4caa10cb815f8cc27d89e8834f3c4c8 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
 /****************************************************************************
- * 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            *
  *                                                                          *
  * 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
 
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_traceatr.c,v 1.88 2017/03/01 00:04:04 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))
 
 
 #define COLOR_OF(c) ((c < 0) ? "default" : (c > 7 ? color_of(c) : colors[c].name))
 
@@ -285,19 +285,21 @@ _tracechtype2(int bufnum, chtype ch)
 
     if (result != 0) {
        const char *found;
 
     if (result != 0) {
        const char *found;
+       attr_t attr = ChAttrOf(ch);
 
        _nc_STRCPY(result, l_brace, TRACE_BUF_SIZE(bufnum));
 
        _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);
            (void) _nc_trace_bufcat(bufnum, found);
+           attr &= ~A_ALTCHARSET;
        } else
            (void) _nc_trace_bufcat(bufnum,
                                    _nc_tracechar(CURRENT_SCREEN,
                                                  (int) ChCharOf(ch)));
 
        } 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,
            (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);
        }
 
        result = _nc_trace_bufcat(bufnum, r_brace);
@@ -362,9 +364,9 @@ _tracecchar_t2(int bufnum, const cchar_t *ch)
                    } else if (ch->chars[PUTC_i] > 255) {
                        char temp[80];
                        _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp))
                    } else if (ch->chars[PUTC_i] > 255) {
                        char temp[80];
                        _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp))
-                                   "{%d:\\u%x}",
+                                   "{%d:\\u%lx}",
                                    wcwidth(ch->chars[PUTC_i]),
                                    wcwidth(ch->chars[PUTC_i]),
-                                   ch->chars[PUTC_i]);
+                                   (unsigned long) ch->chars[PUTC_i]);
                        (void) _nc_trace_bufcat(bufnum, temp);
                        break;
                    }
                        (void) _nc_trace_bufcat(bufnum, temp);
                        break;
                    }
@@ -382,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));
            }
                (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);
        }
 
        result = _nc_trace_bufcat(bufnum, r_brace);