X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftrace%2Flib_traceatr.c;h=b3d3b7cf1e289f8ab8afffb19476955ccc107c4d;hp=108eb8b4d33559e448a6c55bd7b01dd187636b27;hb=3996fe0bf797f113d6abc4329cc869951735a4d8;hpb=a1aff38c9421e79f92cd4e8ab0587fdf3806cc28 diff --git a/ncurses/trace/lib_traceatr.c b/ncurses/trace/lib_traceatr.c index 108eb8b4..b3d3b7cf 100644 --- a/ncurses/trace/lib_traceatr.c +++ b/ncurses/trace/lib_traceatr.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 * @@ -30,6 +30,7 @@ * Author: Thomas Dickey 1996-on * * and: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * + * and: Juergen Pfeifer * ****************************************************************************/ /* @@ -37,9 +38,12 @@ */ #include -#include /* acs_chars */ -MODULE_ID("$Id: lib_traceatr.c,v 1.59 2007/06/09 17:22:10 tom Exp $") +#ifndef CUR +#define CUR SP_TERMTYPE +#endif + +MODULE_ID("$Id: lib_traceatr.c,v 1.68 2009/12/12 21:37:37 tom Exp $") #define COLOR_OF(c) ((c < 0) ? "default" : (c > 7 ? color_of(c) : colors[c].name)) @@ -75,8 +79,6 @@ color_of(int c) NCURSES_EXPORT(char *) _traceattr2(int bufnum, chtype newmode) { - char *buf = _nc_trace_buf(bufnum, BUFSIZ); - char temp[80]; static const struct { unsigned int val; const char *name; @@ -117,47 +119,54 @@ _traceattr2(int bufnum, chtype newmode) #endif /* !USE_TERMLIB */ ; size_t n; - unsigned save_nc_tracing = _nc_tracing; - _nc_tracing = 0; + char temp[80]; + char *result = _nc_trace_buf(bufnum, BUFSIZ); + + if (result != 0) { + unsigned save_nc_tracing = _nc_tracing; - strcpy(buf, l_brace); + _nc_tracing = 0; - for (n = 0; n < SIZEOF(names); n++) { - if ((newmode & names[n].val) != 0) { - if (buf[1] != '\0') - buf = _nc_trace_bufcat(bufnum, "|"); - buf = _nc_trace_bufcat(bufnum, names[n].name); + strcpy(result, l_brace); - if (names[n].val == A_COLOR) { - short pairnum = PAIR_NUMBER(newmode); + for (n = 0; n < SIZEOF(names); n++) { + if ((newmode & names[n].val) != 0) { + if (result[1] != '\0') + result = _nc_trace_bufcat(bufnum, "|"); + result = _nc_trace_bufcat(bufnum, names[n].name); + + if (names[n].val == A_COLOR) { + short pairnum = PAIR_NUMBER(newmode); #ifdef USE_TERMLIB - /* pair_content lives in libncurses */ - (void) sprintf(temp, "{%d}", pairnum); -#else - short fg, bg; - - if (pair_content(pairnum, &fg, &bg) == OK) { - (void) sprintf(temp, - "{%d = {%s, %s}}", - pairnum, - COLOR_OF(fg), - COLOR_OF(bg)); - } else { + /* pair_content lives in libncurses */ (void) sprintf(temp, "{%d}", pairnum); - } +#else + short fg, bg; + + if (pair_content(pairnum, &fg, &bg) == OK) { + (void) sprintf(temp, + "{%d = {%s, %s}}", + pairnum, + COLOR_OF(fg), + COLOR_OF(bg)); + } else { + (void) sprintf(temp, "{%d}", pairnum); + } #endif - buf = _nc_trace_bufcat(bufnum, temp); + result = _nc_trace_bufcat(bufnum, temp); + } } } - } - if (ChAttrOf(newmode) == A_NORMAL) { - if (buf[1] != '\0') - (void) _nc_trace_bufcat(bufnum, "|"); - (void) _nc_trace_bufcat(bufnum, "A_NORMAL"); - } + if (ChAttrOf(newmode) == A_NORMAL) { + if (result != 0 && result[1] != '\0') + (void) _nc_trace_bufcat(bufnum, "|"); + (void) _nc_trace_bufcat(bufnum, "A_NORMAL"); + } - _nc_tracing = save_nc_tracing; - return (_nc_trace_bufcat(bufnum, r_brace)); + _nc_tracing = save_nc_tracing; + result = _nc_trace_bufcat(bufnum, r_brace); + } + return result; } NCURSES_EXPORT(char *) @@ -181,51 +190,55 @@ _nc_altcharset_name(attr_t attr, chtype ch) unsigned int val; const char *name; } ALT_NAMES; +#if NCURSES_SP_FUNCS + SCREEN *sp = CURRENT_SCREEN; +#endif + static const ALT_NAMES names[] = + { + {'l', "ACS_ULCORNER"}, /* upper left corner */ + {'m', "ACS_LLCORNER"}, /* lower left corner */ + {'k', "ACS_URCORNER"}, /* upper right corner */ + {'j', "ACS_LRCORNER"}, /* lower right corner */ + {'t', "ACS_LTEE"}, /* tee pointing right */ + {'u', "ACS_RTEE"}, /* tee pointing left */ + {'v', "ACS_BTEE"}, /* tee pointing up */ + {'w', "ACS_TTEE"}, /* tee pointing down */ + {'q', "ACS_HLINE"}, /* horizontal line */ + {'x', "ACS_VLINE"}, /* vertical line */ + {'n', "ACS_PLUS"}, /* large plus or crossover */ + {'o', "ACS_S1"}, /* scan line 1 */ + {'s', "ACS_S9"}, /* scan line 9 */ + {'`', "ACS_DIAMOND"}, /* diamond */ + {'a', "ACS_CKBOARD"}, /* checker board (stipple) */ + {'f', "ACS_DEGREE"}, /* degree symbol */ + {'g', "ACS_PLMINUS"}, /* plus/minus */ + {'~', "ACS_BULLET"}, /* bullet */ + {',', "ACS_LARROW"}, /* arrow pointing left */ + {'+', "ACS_RARROW"}, /* arrow pointing right */ + {'.', "ACS_DARROW"}, /* arrow pointing down */ + {'-', "ACS_UARROW"}, /* arrow pointing up */ + {'h', "ACS_BOARD"}, /* board of squares */ + {'i', "ACS_LANTERN"}, /* lantern symbol */ + {'0', "ACS_BLOCK"}, /* solid square block */ + {'p', "ACS_S3"}, /* scan line 3 */ + {'r', "ACS_S7"}, /* scan line 7 */ + {'y', "ACS_LEQUAL"}, /* less/equal */ + {'z', "ACS_GEQUAL"}, /* greater/equal */ + {'{', "ACS_PI"}, /* Pi */ + {'|', "ACS_NEQUAL"}, /* not equal */ + {'}', "ACS_STERLING"}, /* UK pound sign */ + {'\0', (char *) 0} + }; const char *result = 0; +#if NCURSES_SP_FUNCS + (void) sp; +#endif if ((attr & A_ALTCHARSET) && (acs_chars != 0)) { char *cp; char *found = 0; - /* *INDENT-OFF* */ - static const ALT_NAMES names[] = - { - { 'l', "ACS_ULCORNER" }, /* upper left corner */ - { 'm', "ACS_LLCORNER" }, /* lower left corner */ - { 'k', "ACS_URCORNER" }, /* upper right corner */ - { 'j', "ACS_LRCORNER" }, /* lower right corner */ - { 't', "ACS_LTEE" }, /* tee pointing right */ - { 'u', "ACS_RTEE" }, /* tee pointing left */ - { 'v', "ACS_BTEE" }, /* tee pointing up */ - { 'w', "ACS_TTEE" }, /* tee pointing down */ - { 'q', "ACS_HLINE" }, /* horizontal line */ - { 'x', "ACS_VLINE" }, /* vertical line */ - { 'n', "ACS_PLUS" }, /* large plus or crossover */ - { 'o', "ACS_S1" }, /* scan line 1 */ - { 's', "ACS_S9" }, /* scan line 9 */ - { '`', "ACS_DIAMOND" }, /* diamond */ - { 'a', "ACS_CKBOARD" }, /* checker board (stipple) */ - { 'f', "ACS_DEGREE" }, /* degree symbol */ - { 'g', "ACS_PLMINUS" }, /* plus/minus */ - { '~', "ACS_BULLET" }, /* bullet */ - { ',', "ACS_LARROW" }, /* arrow pointing left */ - { '+', "ACS_RARROW" }, /* arrow pointing right */ - { '.', "ACS_DARROW" }, /* arrow pointing down */ - { '-', "ACS_UARROW" }, /* arrow pointing up */ - { 'h', "ACS_BOARD" }, /* board of squares */ - { 'i', "ACS_LANTERN" }, /* lantern symbol */ - { '0', "ACS_BLOCK" }, /* solid square block */ - { 'p', "ACS_S3" }, /* scan line 3 */ - { 'r', "ACS_S7" }, /* scan line 7 */ - { 'y', "ACS_LEQUAL" }, /* less/equal */ - { 'z', "ACS_GEQUAL" }, /* greater/equal */ - { '{', "ACS_PI" }, /* Pi */ - { '|', "ACS_NEQUAL" }, /* not equal */ - { '}', "ACS_STERLING" }, /* UK pound sign */ - { '\0', (char *) 0 } - }; - /* *INDENT-OFF* */ - const ALT_NAMES *sp; + const ALT_NAMES *strp; for (cp = acs_chars; cp[0] && cp[1]; cp += 2) { if (ChCharOf(cp[1]) == ChCharOf(ch)) { @@ -236,9 +249,9 @@ _nc_altcharset_name(attr_t attr, chtype ch) if (found != 0) { ch = ChCharOf(*found); - for (sp = names; sp->val; sp++) - if (sp->val == ch) { - result = sp->name; + for (strp = names; strp->val; strp++) + if (strp->val == ch) { + result = strp->name; break; } } @@ -250,31 +263,37 @@ NCURSES_EXPORT(char *) _tracechtype2(int bufnum, chtype ch) { const char *found; + char *result = _nc_trace_buf(bufnum, BUFSIZ); - strcpy(_nc_trace_buf(bufnum, BUFSIZ), l_brace); - if ((found = _nc_altcharset_name(ChAttrOf(ch), ch)) != 0) { - (void) _nc_trace_bufcat(bufnum, found); - } else - (void) _nc_trace_bufcat(bufnum, _tracechar((int)ChCharOf(ch))); + if (result != 0) { + strcpy(result, l_brace); + if ((found = _nc_altcharset_name(ChAttrOf(ch), ch)) != 0) { + (void) _nc_trace_bufcat(bufnum, found); + } else + (void) _nc_trace_bufcat(bufnum, + _nc_tracechar(CURRENT_SCREEN, + (int) ChCharOf(ch))); - if (ChAttrOf(ch) != A_NORMAL) { - (void) _nc_trace_bufcat(bufnum, " | "); - (void) _nc_trace_bufcat(bufnum, - _traceattr2(bufnum + 20, ChAttrOf(ch))); - } + if (ChAttrOf(ch) != A_NORMAL) { + (void) _nc_trace_bufcat(bufnum, " | "); + (void) _nc_trace_bufcat(bufnum, + _traceattr2(bufnum + 20, ChAttrOf(ch))); + } - return (_nc_trace_bufcat(bufnum, r_brace)); + result = _nc_trace_bufcat(bufnum, r_brace); + } + return result; } NCURSES_EXPORT(char *) -_tracechtype (chtype ch) +_tracechtype(chtype ch) { return _tracechtype2(0, ch); } /* Trace 'chtype' return-values */ NCURSES_EXPORT(chtype) -_nc_retrace_chtype (chtype code) +_nc_retrace_chtype(chtype code) { T((T_RETURN("%s"), _tracechtype(code))); return code; @@ -282,63 +301,73 @@ _nc_retrace_chtype (chtype code) #if USE_WIDEC_SUPPORT NCURSES_EXPORT(char *) -_tracecchar_t2 (int bufnum, const cchar_t *ch) +_tracecchar_t2(int bufnum, const cchar_t *ch) { - char *buf = _nc_trace_buf(bufnum, BUFSIZ); + char *result = _nc_trace_buf(bufnum, BUFSIZ); attr_t attr; const char *found; - strcpy(buf, l_brace); - if (ch != 0) { - attr = AttrOfD(ch); - if ((found = _nc_altcharset_name(attr, (chtype) CharOfD(ch))) != 0) { - (void) _nc_trace_bufcat(bufnum, found); - attr &= ~A_ALTCHARSET; - } else if (isWidecExt(CHDEREF(ch))) { - (void) _nc_trace_bufcat(bufnum, "{NAC}"); - attr &= ~A_CHARTEXT; - } else { - PUTC_DATA; - int n; - - PUTC_INIT; - (void) _nc_trace_bufcat(bufnum, "{ "); - for (PUTC_i = 0; PUTC_i < CCHARW_MAX; ++PUTC_i) { - PUTC_ch = ch->chars[PUTC_i]; - if (PUTC_ch == L'\0') - break; - PUTC_n = wcrtomb(PUTC_buf, ch->chars[PUTC_i], &PUT_st); - if (PUTC_n <= 0) { - if (PUTC_ch != L'\0') { - /* it could not be a multibyte sequence */ - (void) _nc_trace_bufcat(bufnum, _tracechar(UChar(ch->chars[PUTC_i]))); + if (result != 0) { + strcpy(result, l_brace); + if (ch != 0) { + attr = AttrOfD(ch); + if ((found = _nc_altcharset_name(attr, (chtype) CharOfD(ch))) != 0) { + (void) _nc_trace_bufcat(bufnum, found); + attr &= ~A_ALTCHARSET; + } else if (isWidecExt(CHDEREF(ch))) { + (void) _nc_trace_bufcat(bufnum, "{NAC}"); + attr &= ~A_CHARTEXT; + } else { + PUTC_DATA; + int n; + + PUTC_INIT; + (void) _nc_trace_bufcat(bufnum, "{ "); + for (PUTC_i = 0; PUTC_i < CCHARW_MAX; ++PUTC_i) { + PUTC_ch = ch->chars[PUTC_i]; + if (PUTC_ch == L'\0') { + if (PUTC_i == 0) + result = _nc_trace_bufcat(bufnum, "\\000"); + break; + } + PUTC_n = wcrtomb(PUTC_buf, ch->chars[PUTC_i], &PUT_st); + if (PUTC_n <= 0) { + if (PUTC_ch != L'\0') { + /* it could not be a multibyte sequence */ + (void) _nc_trace_bufcat(bufnum, + _nc_tracechar(CURRENT_SCREEN, + UChar(ch->chars[PUTC_i]))); + } + break; + } + for (n = 0; n < PUTC_n; n++) { + if (n) + (void) _nc_trace_bufcat(bufnum, ", "); + (void) _nc_trace_bufcat(bufnum, + _nc_tracechar(CURRENT_SCREEN, + UChar(PUTC_buf[n]))); } - break; - } - for (n = 0; n < PUTC_n; n++) { - if (n) - (void) _nc_trace_bufcat(bufnum, ", "); - (void) _nc_trace_bufcat(bufnum, _tracechar(UChar(PUTC_buf[n]))); } + (void) _nc_trace_bufcat(bufnum, " }"); + } + if (attr != A_NORMAL) { + (void) _nc_trace_bufcat(bufnum, " | "); + (void) _nc_trace_bufcat(bufnum, _traceattr2(bufnum + 20, attr)); } - (void) _nc_trace_bufcat(bufnum, " }"); - } - if (attr != A_NORMAL) { - (void) _nc_trace_bufcat(bufnum, " | "); - (void) _nc_trace_bufcat(bufnum, _traceattr2(bufnum + 20, attr)); } - } - return (_nc_trace_bufcat(bufnum, r_brace)); + result = _nc_trace_bufcat(bufnum, r_brace); + } + return result; } NCURSES_EXPORT(char *) -_tracecchar_t (const cchar_t *ch) +_tracecchar_t(const cchar_t *ch) { return _tracecchar_t2(0, ch); } #endif #else -empty_module(_nc_lib_traceatr) +EMPTY_MODULE(_nc_lib_traceatr) #endif /* TRACE */