static NCURSES_INLINE int #undef wbkgrnd #endif wbkgrnd(WINDOW *win, const ARG_CH_T ch) { int code = ERR; int x, y; NCURSES_CH_T new_bkgd = CHDEREF(ch); T((T_CALLED("wbkgd(%p,%s)"), (void *) win, _tracech_t(ch))); if (win) { NCURSES_CH_T old_bkgrnd; wgetbkgrnd(win, &old_bkgrnd); (void) wbkgrndset(win, CHREF(new_bkgd)); (void) wattrset(win, AttrOf(win->_nc_bkgd)); for (y = 0; y <= win->_maxy; y++) { for (x = 0; x <= win->_maxx; x++) { if (CharEq(win->_line[y].text[x], old_bkgrnd)) { win->_line[y].text[x] = win->_nc_bkgd; } else { NCURSES_CH_T wch = win->_line[y].text[x]; RemAttr(wch, (~(A_ALTCHARSET | A_CHARTEXT))); win->_line[y].text[x] = _nc_render(win, wch); } } } touchwin(win); _nc_synchook(win); code = OK; } returnCode(code); }
int getbkgrnd(cchar_t *wch) { #ifndef HAVE_WCHAR return ERR; #else return wgetbkgrnd( stdscr, wch ); #endif /* HAVE_WCHAR */ }
static void send_bytes(int portfd, const unsigned char* buf, int n, WINDOW* win) { ssize_t written = 0; while (written < n) { ssize_t rc = write(portfd, &buf[written], n - written); if (rc >= 0) written += rc; else if (errno != EINTR) exit_error("send bytes", errno); } int xmax, ymax; getmaxyx(win, ymax, xmax); --xmax; if (n > xmax) { buf += n - xmax; n = xmax; } int x, y; getyx(win, y, x); int ndel = x + n - xmax; if (ndel > 0) { wmove(win, y, 0); for (int i = 0; i < ndel; ++i) wdelch(win); wmove(win, y, x - ndel); } for (int i = 0; i < n; ++i) { cchar_t cc; wchar_t wc[CCHARW_MAX]; attr_t attrs; short color_pair; wgetbkgrnd(win, &cc); getcchar(&cc, wc, &attrs, &color_pair, 0); wc[0] = kc_to_wide_char(buf[i]); setcchar(&cc, wc, attrs, color_pair, 0); wadd_wch(win, &cc); } while (tcdrain(portfd) < 0) { if (errno != EINTR) exit_error("send bytes", errno); } }
static NCURSES_INLINE void #endif wbkgrndset(WINDOW *win, const ARG_CH_T ch) { T((T_CALLED("wbkgdset(%p,%s)"), (void *) win, _tracech_t(ch))); if (win) { attr_t off = AttrOf(win->_nc_bkgd); attr_t on = AttrOf(CHDEREF(ch)); toggle_attr_off(WINDOW_ATTRS(win), off); toggle_attr_on(WINDOW_ATTRS(win), on); #if NCURSES_EXT_COLORS { int pair; if ((pair = GetPair(win->_nc_bkgd)) != 0) SET_WINDOW_PAIR(win, 0); if ((pair = GetPair(CHDEREF(ch))) != 0) SET_WINDOW_PAIR(win, pair); } #endif if (CharOf(CHDEREF(ch)) == L('\0')) { SetChar(win->_nc_bkgd, BLANK_TEXT, AttrOf(CHDEREF(ch))); if_EXT_COLORS(SetPair(win->_nc_bkgd, GetPair(CHDEREF(ch)))); } else { win->_nc_bkgd = CHDEREF(ch); } #if USE_WIDEC_SUPPORT /* * If we're compiled for wide-character support, _bkgrnd is the * preferred location for the background information since it stores * more than _bkgd. Update _bkgd each time we modify _bkgrnd, so the * macro getbkgd() will work. */ { cchar_t wch; int tmp; (void) wgetbkgrnd(win, &wch); tmp = _nc_to_char((wint_t) CharOf(wch)); win->_bkgd = (((tmp == EOF) ? ' ' : (chtype) tmp) | (AttrOf(wch) & ALL_BUT_COLOR) | ColorPair(GET_WINDOW_PAIR(win))); } #endif } returnVoid; }
static void receive_kctext(int portfd, WINDOW* win) { unsigned char buf[64]; ssize_t count; while ((count = read(portfd, buf, sizeof buf)) < 0) switch (errno) { case EINTR: continue; #if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN) case EWOULDBLOCK: #endif case EAGAIN: return; default: exit_error("receive KC text", errno); } cchar_t cc; wchar_t wc[CCHARW_MAX]; attr_t attrs; short color_pair; wgetbkgrnd(win, &cc); getcchar(&cc, wc, &attrs, &color_pair, 0); for (ssize_t i = 0; i < count; ++i) { unsigned int byte = buf[i]; if (byte != 0x00 && byte != 0x03 && byte != 0x0D) { wc[0] = (byte == 0x0A) ? L'\n' : kc_to_wide_char(byte); setcchar(&cc, wc, attrs, color_pair, 0); wadd_wch(win, &cc); } } wnoutrefresh(win); }
int getbkgrnd(cchar_t *wch) { PDC_LOG(("getbkgrnd() - called\n")); return wgetbkgrnd(stdscr, wch); }
//------------------------------------------------------------------------------ int getbkgrnd( cchar_t* wch ) { __QCS_FCONTEXT( "getbkgrnd" ); return wgetbkgrnd( stdscr, wch ); }
int getbkgrnd(cchar_t *wch) { return wgetbkgrnd( stdscr, wch ); }