static void repaint_line(unsigned newChrSet) { register TScreen *screen = &term->screen; int curcol = screen->cur_col; int currow = screen->cur_row; int len = screen->max_col + 1; int width = len; unsigned oldChrSet = SCRN_BUF_CSETS(screen, currow)[0]; /* * Ignore repetition. */ if (oldChrSet == newChrSet) return; TRACE(("repaint_line(%2d,%2d) (%d)\n", currow, screen->cur_col, newChrSet)); HideCursor(); /* If switching from single-width, keep the cursor in the visible part * of the line. */ if (CSET_DOUBLE(newChrSet)) { width /= 2; if (curcol > width) curcol = width; } /* * ScrnRefresh won't paint blanks for us if we're switching between a * single-size and double-size font. */ if (CSET_DOUBLE(oldChrSet) != CSET_DOUBLE(newChrSet)) { ClearCurBackground( screen, CursorY(screen, currow), CurCursorX(screen, currow, 0), FontHeight(screen), len * CurFontWidth(screen, currow)); } /* FIXME: do VT220 softchars allow double-sizes? */ memset(SCRN_BUF_CSETS(screen, currow), newChrSet, len); screen->cur_col = 0; ScrnRefresh(screen, currow, 0, 1, len, True); screen->cur_col = curcol; }
static void repaint_line(unsigned newChrSet) { register TScreen *screen = &term->screen; int curcol = screen->cur_col; int len = screen->max_col + 1; int width = len; TRACE(("repaint_line(%2d,%2d) (%d)\n", screen->cur_row, screen->cur_col, newChrSet)) /* If switching from single-width, keep the cursor in the visible part * of the line. */ if (CSET_DOUBLE(newChrSet)) { width /= 2; if (curcol > width) curcol = width; } /* FIXME: do VT220 softchars allow double-sizes? */ memset(SCRN_BUF_CSETS(screen, screen->cur_row), newChrSet, len); screen->cur_col = 0; ScrnRefresh (screen, screen->cur_row, 0, 1, len, True); screen->cur_col = curcol; }
/* * Insert n blanks at the cursor's position, no wraparound */ void InsertChar (register TScreen *screen, register int n) { if(screen->cursor_state) HideCursor(); screen->do_wrap = 0; if(screen->cur_row - screen->topline <= screen->max_row) { if(!AddToRefresh(screen)) { int col = screen->max_col + 1 - n; if(screen->scroll_amt) FlushScroll(screen); #if OPT_DEC_CHRSET if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, screen->cur_row)[0])) { col = (screen->max_col + 1) / 2 - n; } #endif /* * prevent InsertChar from shifting the end of a line over * if it is being appended to */ if (non_blank_line (screen->visbuf, screen->cur_row, screen->cur_col, screen->max_col + 1)) horizontal_copy_area(screen, screen->cur_col, col - screen->cur_col, n); ClearCurBackground( screen, CursorY (screen, screen->cur_row), CurCursorX (screen, screen->cur_row, screen->cur_col), FontHeight(screen), n * CurFontWidth(screen,screen->cur_row)); } } /* adjust screen->buf */ ScrnInsertChar(screen, n, screen->max_col + 1); }
/* * Deletes n chars at the cursor's position, no wraparound. */ void DeleteChar (register TScreen *screen, register int n) { register int width; if(screen->cursor_state) HideCursor(); screen->do_wrap = 0; if (n > (width = screen->max_col + 1 - screen->cur_col)) n = width; if(screen->cur_row - screen->topline <= screen->max_row) { if(!AddToRefresh(screen)) { int col = screen->max_col + 1 - n; if(screen->scroll_amt) FlushScroll(screen); #if OPT_DEC_CHRSET if (CSET_DOUBLE(SCRN_BUF_CSETS(screen, screen->cur_row)[0])) { col = (screen->max_col + 1) / 2 - n; } #endif horizontal_copy_area(screen, screen->cur_col+n, col - screen->cur_col, -n); ClearCurBackground ( screen, CursorY (screen, screen->cur_row), CurCursorX(screen, screen->cur_row, col), FontHeight(screen), n * CurFontWidth(screen,screen->cur_row)); } } /* adjust screen->buf */ ScrnDeleteChar (screen, n, screen->max_col + 1); }
screen, CursorY (screen, row), CurCursorX (screen, row, col), FontHeight(screen), len * CurFontWidth(screen,row)); } } memset(SCRN_BUF_CHARS(screen, row) + col, ' ', len); memset(SCRN_BUF_ATTRS(screen, row) + col, flags, len); if_OPT_ISO_COLORS(screen,{ memset(SCRN_BUF_COLOR(screen, row) + col, xtermColorPair(), len); }) if_OPT_DEC_CHRSET({ memset(SCRN_BUF_CSETS(screen, row) + col, curXtermChrSet(screen->cur_row), len); }) return rc; } /* * Clear the next n characters on the cursor's line, including the cursor's * position. */ void ClearRight (register TScreen *screen, int n) { int len = (screen->max_col - screen->cur_col + 1); if (n < 0) /* the remainder of the line */