/* * Implements the vi "^F" command. * * Scroll forward by a specified number of lines, or by a full page if no * argument. */ int forwpage(int f, int n) { LINE *lp; int status; if ((n = full_pages(f, n)) < 0) return backpage(f, -n); if ((status = (lforw(DOT.l) != buf_head(curbp))) == TRUE) { lp = curwp->w_line.l; n -= line_height(curwp, lp); while (lp != buf_head(curbp)) { lp = lforw(lp); if ((n -= line_height(curwp, lp)) < 0) break; } if (n < 0) curwp->w_line.l = lp; DOT.l = lp; (void) firstnonwhite(FALSE, 1); curwp->w_flag |= WFHARD | WFMODE; } return status; }
/* ARGSUSED */ int forwpage(int f, int n) { struct line *lp; if (!(f & FFARG)) { n = curwp->w_ntrows - 2; /* Default scroll. */ if (n <= 0) /* Forget the overlap */ n = 1; /* if tiny window. */ } else if (n < 0) return (backpage(f | FFRAND, -n)); lp = curwp->w_linep; while (n-- && lforw(lp) != curbp->b_headp) { lp = lforw(lp); } curwp->w_linep = lp; curwp->w_flag |= WFFULL; /* if in current window, don't move dot */ for (n = curwp->w_ntrows; n-- && lp != curbp->b_headp; lp = lforw(lp)) if (lp == curwp->w_dotp) return (TRUE); /* Advance the dot the slow way, for line nos */ while (curwp->w_dotp != curwp->w_linep) { curwp->w_dotp = lforw(curwp->w_dotp); curwp->w_dotline++; } curwp->w_doto = 0; return (TRUE); }
int back1page(int f, int n) { if (!(f & FFARG)) { n = 1; f = FFUNIV; } backpage(f | FFRAND, n); return (TRUE); }
/* * Scroll forward by a specified number of lines, or by a full page if no * argument. Bound to "C-V". The "2" in the arithmetic on the window size is * the overlap; this value is the default overlap value in ITS EMACS. Because * this zaps the top line in the display window, we have to do a hard update. */ PASCAL NEAR forwpage( int f, int n )/* prefix flag and argument */ { register LINE *lp; if (f == FALSE) { n = curwp->w_ntrows - 2; /* Default scroll. */ if (n <= 0) /* Forget the overlap */ n = 1; /* if tiny window. */ } else if (n < 0) return(backpage(f, -n)); lp = curwp->w_linep; while (n-- && lp!=curbp->b_linep) lp = lforw(lp); curwp->w_linep = lp; curwp->w_dotp = lp; curwp->w_doto = 0; curwp->w_flag |= WFHARD; return(TRUE); }
/* * Scroll forward by a specified number of lines, or by a full page if no * argument. Bound to "C-V". The "2" in the arithmetic on the window size is * the overlap; this value is the default overlap value in ITS EMACS. Because * this zaps the top line in the display window, we have to do a hard update. */ int forwpage (int f, int n) { LINE *lp; if (f == FALSE) { n = curwp->w_ntrows - 2; /* Default scroll */ if (n <= 0) /* Forget the overlap */ n = 1; /* if tiny window */ } else if (n < 0) return (backpage (f, -n)); else /* Convert from pages */ n *= curwp->w_ntrows; /* to lines */ lp = curwp->w_linep; while (n-- && lp != curbp->b_linep) lp = lforw (lp); curwp->w_linep = lp; curwp->w_dotp = lp; curwp->w_doto = 0; curwp->w_flag |= WFHARD; return (TRUE); }