whline(WINDOW *win, chtype ch, int n) { int code = ERR; NCURSES_SIZE_T start; NCURSES_SIZE_T end; T((T_CALLED("whline(%p,%s,%d)"), win, _tracechtype(ch), n)); if (win) { struct ldat *line = &(win->_line[win->_cury]); NCURSES_CH_T wch; start = win->_curx; end = start + n - 1; if (end > win->_maxx) end = win->_maxx; CHANGED_RANGE(line, start, end); if (ch == 0) SetChar(wch, ChCharOf(ACS_HLINE), ChAttrOf(ACS_HLINE)); else SetChar(wch, ChCharOf(ch), ChAttrOf(ch)); wch = _nc_render(win, wch); while (end >= start) { line->text[end] = wch; end--; } _nc_synchook(win); code = OK; } returnCode(code); }
wvline(WINDOW *win, chtype ch, int n) { int code = ERR; NCURSES_SIZE_T row, col; NCURSES_SIZE_T end; T((T_CALLED("wvline(%p,%s,%d)"), win, _tracechtype(ch), n)); if (win) { NCURSES_CH_T wch; row = win->_cury; col = win->_curx; end = row + n - 1; if (end > win->_maxy) end = win->_maxy; if (ch == 0) SetChar(wch, ChCharOf(ACS_VLINE), ChAttrOf(ACS_VLINE)); else SetChar(wch, ChCharOf(ch), ChAttrOf(ch)); wch = _nc_render(win, wch); while (end >= row) { struct ldat *line = &(win->_line[end]); line->text[col] = wch; CHANGED_CELL(line, col); end--; } _nc_synchook(win); code = OK; } returnCode(code); }
_tracechtype2(int bufnum, chtype ch) { 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(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 (attr != A_NORMAL) { (void) _nc_trace_bufcat(bufnum, " | "); (void) _nc_trace_bufcat(bufnum, _traceattr2(bufnum + 20, attr)); } result = _nc_trace_bufcat(bufnum, r_brace); } return result; }
_tracechtype2(int bufnum, chtype ch) { const char *found; 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 (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)); }
static char * decode_chtype(char *source, chtype fillin, chtype *target) { attr_t attr = ChAttrOf(fillin); int color = PAIR_NUMBER((int) attr); int value; T(("decode_chtype '%s'", source)); source = decode_attr(source, &attr, &color); source = decode_char(source, &value); *target = (ChCharOf(value) | attr | (chtype) COLOR_PAIR(color)); /* FIXME - ignore combining characters */ return source; }
_tracechtype2(int bufnum, chtype ch) { const char *found; char *result = _nc_trace_buf(bufnum, BUFSIZ); 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))); } result = _nc_trace_bufcat(bufnum, r_brace); } return result; }
waddchnstr(WINDOW *win, const chtype *astr, int n) { NCURSES_SIZE_T y = win->_cury; NCURSES_SIZE_T x = win->_curx; int code = OK; struct ldat *line; T((T_CALLED("waddchnstr(%p,%p,%d)"), win, astr, n)); if (!win) returnCode(ERR); if (n < 0) { const chtype *str; n = 0; for (str = (const chtype *) astr; *str != 0; str++) n++; } if (n > win->_maxx - x + 1) n = win->_maxx - x + 1; if (n == 0) returnCode(code); line = &(win->_line[y]); #if USE_WIDEC_SUPPORT { int i; for (i = 0; i < n; ++i) SetChar(line->text[i + x], ChCharOf(astr[i]), ChAttrOf(astr[i])); } #else memcpy(line->text + x, astr, n * sizeof(*astr)); #endif CHANGED_RANGE(line, x, x + n - 1); _nc_synchook(win); returnCode(code); }
_traceattr2(int bufnum, attr_t newmode) { char *buf = _nc_trace_buf(bufnum, BUFSIZ); char temp[80]; static const struct { unsigned int val; const char *name; } names[] = { /* *INDENT-OFF* */ { A_STANDOUT, "A_STANDOUT" }, { A_UNDERLINE, "A_UNDERLINE" }, { A_REVERSE, "A_REVERSE" }, { A_BLINK, "A_BLINK" }, { A_DIM, "A_DIM" }, { A_BOLD, "A_BOLD" }, { A_ALTCHARSET, "A_ALTCHARSET" }, { A_INVIS, "A_INVIS" }, { A_PROTECT, "A_PROTECT" }, { A_CHARTEXT, "A_CHARTEXT" }, { A_NORMAL, "A_NORMAL" }, { A_COLOR, "A_COLOR" }, /* *INDENT-ON* */ } #ifndef USE_TERMLIB , colors[] = { /* *INDENT-OFF* */ { COLOR_BLACK, "COLOR_BLACK" }, { COLOR_RED, "COLOR_RED" }, { COLOR_GREEN, "COLOR_GREEN" }, { COLOR_YELLOW, "COLOR_YELLOW" }, { COLOR_BLUE, "COLOR_BLUE" }, { COLOR_MAGENTA, "COLOR_MAGENTA" }, { COLOR_CYAN, "COLOR_CYAN" }, { COLOR_WHITE, "COLOR_WHITE" }, /* *INDENT-ON* */ } #endif /* !USE_TERMLIB */ ; size_t n; unsigned save_nc_tracing = _nc_tracing; _nc_tracing = 0; strcpy(buf, l_brace); 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); 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 { (void) sprintf(temp, "{%d}", pairnum); } #endif buf = _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"); } _nc_tracing = save_nc_tracing; return (_nc_trace_bufcat(bufnum, r_brace)); }
_traceattr2(int bufnum, chtype newmode) { #define DATA(name) { name, { #name } } static const struct { unsigned int val; const char name[14]; } names[] = { DATA(A_STANDOUT), DATA(A_UNDERLINE), DATA(A_REVERSE), DATA(A_BLINK), DATA(A_DIM), DATA(A_BOLD), DATA(A_ALTCHARSET), DATA(A_INVIS), DATA(A_PROTECT), DATA(A_CHARTEXT), DATA(A_NORMAL), DATA(A_COLOR), #if USE_ITALIC DATA(A_ITALIC), #endif } #ifndef USE_TERMLIB , colors[] = { DATA(COLOR_BLACK), DATA(COLOR_RED), DATA(COLOR_GREEN), DATA(COLOR_YELLOW), DATA(COLOR_BLUE), DATA(COLOR_MAGENTA), DATA(COLOR_CYAN), DATA(COLOR_WHITE), } #endif /* !USE_TERMLIB */ ; #undef DATA char *result = _nc_trace_buf(bufnum, (size_t) BUFSIZ); if (result != 0) { size_t n; unsigned save_nc_tracing = _nc_tracing; _nc_tracing = 0; _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 */ _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "{%d}", pairnum); #else NCURSES_COLOR_T fg, bg; if (pair_content(pairnum, &fg, &bg) == OK) { _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "{%d = {%s, %s}}", pairnum, COLOR_OF(fg), COLOR_OF(bg)); } else { _nc_SPRINTF(temp, _nc_SLIMIT(sizeof(temp)) "{%d}", pairnum); } #endif result = _nc_trace_bufcat(bufnum, temp); } } } 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; result = _nc_trace_bufcat(bufnum, r_brace); } return result; }