static int tcapeeop(void) { int i, starting_col, starting_row; /* * If the terminal doesn't have back color erase, then we have to * erase manually to preserve the background color. */ if(pico_usingcolor() && (!_bce || !_cleartoeos)){ extern int ttcol, ttrow; starting_col = ttcol; starting_row = ttrow; tcapeeol(); /* rest of this line */ for(i = ttrow+1; i <= term.t_nrow; i++){ /* the remaining lines */ tcapmove(i, 0); tcapeeol(); } tcapmove(starting_row, starting_col); } else if(_cleartoeos) putpad(_cleartoeos); /* return ignored */ return(0); }
static int tcapeeol(void) { int c, starting_col, starting_line; char *last_bg_color; /* * If the terminal doesn't have back color erase, then we have to * erase manually to preserve the background color. */ if(pico_usingcolor() && (!_bce || !_cleartoeoln)){ extern int ttcol, ttrow; starting_col = ttcol; starting_line = ttrow; last_bg_color = pico_get_last_bg_color(); pico_set_nbg_color(); for(c = ttcol; c < term.t_ncol; c++) ttputc(' '); tcapmove(starting_line, starting_col); if(last_bg_color){ pico_set_bg_color(last_bg_color); free(last_bg_color); } } else if(_cleartoeoln) putpad(_cleartoeoln); /* return ignored */ return(0); }
static void tcapscroll_reg(int from, int to, int numlines) { int i; if (to == from) return; if (to < from) { tcapscrollregion(to, from + numlines - 1); tcapmove(from + numlines - 1, 0); for (i = from - to; i > 0; i--) putpad(SF); } else { /* from < to */ tcapscrollregion(from, to + numlines - 1); tcapmove(from, 0); for (i = to - from; i > 0; i--) putpad(SR); } tcapscrollregion(0, term.t_nrow); }
static void tcapscroll_delins(int from, int to, int numlines) { int i; if (to == from) return; if (to < from) { tcapmove(to, 0); for (i = from - to; i > 0; i--) putpad(DL); tcapmove(to + numlines, 0); for (i = from - to; i > 0; i--) putpad(AL); } else { tcapmove(from + numlines, 0); for (i = to - from; i > 0; i--) putpad(DL); tcapmove(from, 0); for (i = to - from; i > 0; i--) putpad(AL); } }
/* move howmany lines starting at from to to */ static void tcapscroll_delins(int from, int to, int n) { int i; if (to == from) return; if (DL && AL) { if (to < from) { tcapmove(to,0); putpad(tgoto(DL,0,from-to)); tcapmove(to+n,0); putpad(tgoto(AL,0,from-to)); } else { tcapmove(from+n,0); putpad(tgoto(DL,0,to-from)); tcapmove(from,0); putpad(tgoto(AL,0,to-from)); } } else { /* must be dl and al */ #if OPT_PRETTIER_SCROLL if (absol(from-to) > 1) { tcapscroll_delins(from, (from<to) ? to-1:to+1, n); if (from < to) from = to-1; else from = to+1; } #endif if (to < from) { tcapmove(to,0); for (i = from - to; i > 0; i--) putpad(dl); tcapmove(to+n,0); for (i = from - to; i > 0; i--) putpad(al); } else { tcapmove(from+n,0); for (i = to - from; i > 0; i--) putpad(dl); tcapmove(from,0); for (i = to - from; i > 0; i--) putpad(al); } } }
/* * o_scrolldown - open a line at the given row position. * use either region scrolling or deleteline/insertline * to open a new line. */ int o_scrolldown(int row, int n) { register int i; if(_scrollregion != NULL){ putpad(tgoto(_scrollregion, term.t_nrow - (term.t_mrow+1), row)); tcapmove(row, 0); for(i = 0; i < n; i++) putpad( (_scrollup != NULL && *_scrollup != '\0') ? _scrollup : "\n" ); putpad(tgoto(_scrollregion, term.t_nrow, 0)); tcapmove(row, 0); } else{ /* * this code causes a jiggly motion of the keymenu when scrolling */ for(i = 0; i < n; i++){ tcapmove(term.t_nrow - (term.t_mrow+1), 0); putpad(_deleteline); tcapmove(row, 0); putpad(_insertline); } #ifdef NOWIGGLYLINES /* * this code causes a sweeping motion up and down the display */ tcapmove(term.t_nrow - term.t_mrow - n, 0); for(i = 0; i < n; i++) putpad(_deleteline); tcapmove(row, 0); for(i = 0; i < n; i++) putpad(_insertline); #endif } /* return ignored */ return(0); }
/* * o_scrollup - open a line at the given row position. * use either region scrolling or deleteline/insertline * to open a new line. */ int o_scrollup(int row, int n) { register int i; if(_scrollregion != NULL){ putpad(tgoto(_scrollregion, term.t_nrow - (term.t_mrow+1), row)); /* setting scrolling region moves cursor to home */ tcapmove(term.t_nrow-(term.t_mrow+1), 0); for(i = 0;i < n; i++) putpad((_scrolldown == NULL || _scrolldown[0] == '\0') ? "\n" : _scrolldown); putpad(tgoto(_scrollregion, term.t_nrow, 0)); tcapmove(2, 0); } else{ for(i = 0; i < n; i++){ tcapmove(row, 0); putpad(_deleteline); tcapmove(term.t_nrow - (term.t_mrow+1), 0); putpad(_insertline); } #ifdef NOWIGGLYLINES /* see note above */ tcapmove(row, 0); for(i = 0; i < n; i++) putpad(_deleteline); tcapmove(term.t_nrow - term.t_mrow - n, 0); for(i = 0;i < n; i++) putpad(_insertline); #endif } /* return ignored */ return(0); }