/* * Shrink the current window. * Find the window that gains space. Hack at * the window descriptions. Ask the redisplay to * do all the hard work. */ shrinkwind(f, n) { register WINDOW *adjwp; register LINE *lp; register int i; if (n < 0) return enlargewind(f, -n); if (wheadp->w_wndp == NULL) { ewprintf("Only one window"); return FALSE; } /* * Bit of flakiness - KRANDOM means it was an internal call, and * to be trusted implicitly about sizes. */ if ( !(f & FFRAND) && curwp->w_ntrows <= n) { ewprintf("Impossible change"); return (FALSE); } if ((adjwp=curwp->w_wndp) == NULL) { adjwp = wheadp; while (adjwp->w_wndp != curwp) adjwp = adjwp->w_wndp; } if (curwp->w_wndp == adjwp) { /* Grow below. */ lp = adjwp->w_linep; for (i=n-adjwp->w_lines; i>0 && lback(lp)!=adjwp->w_bufp->b_linep; ) { lp = lback(lp); i -= countlines(lp); } if (i>0) i = 0; if (i<0) i = -i; adjwp->w_linep = lp; adjwp->w_lines = i; adjwp->w_toprow -= n; } else { /* Grow above. */ lp = curwp->w_linep; for (i=n + curwp->w_lines; i>0 && lp!=curbp->b_linep;) { i -= countlines(lp); if (i<0) break; lp = lforw(lp); } if (i>0) i=countlines(lp)-1; /* LAST row */ if (i<0) i=countlines(lp)+i; curwp->w_linep = lp; curwp->w_lines = i; curwp->w_toprow += n; } curwp->w_ntrows -= n; adjwp->w_ntrows += n; curwp->w_flag |= WFMODE|WFHARD; adjwp->w_flag |= WFMODE|WFHARD; return (TRUE); }
/* * Shrink the current window. Find the window that gains space. Hack at the * window descriptions. Ask the redisplay to do all the hard work. */ int shrinkwind(int f, int n) { struct mgwin *adjwp; struct line *lp; int i; if (n < 0) return (enlargewind(f, -n)); if (wheadp->w_wndp == NULL) { dobeep(); ewprintf("Only one window"); return (FALSE); } /* * Bit of flakiness - FFRAND means it was an internal call, and * to be trusted implicitly about sizes. */ if (!(f & FFRAND) && curwp->w_ntrows <= n) { dobeep(); ewprintf("Impossible change"); return (FALSE); } if ((adjwp = curwp->w_wndp) == NULL) { adjwp = wheadp; while (adjwp->w_wndp != curwp) adjwp = adjwp->w_wndp; } /* grow below */ if (curwp->w_wndp == adjwp) { lp = adjwp->w_linep; for (i = 0; i < n && lback(lp) != adjwp->w_bufp->b_headp; ++i) lp = lback(lp); adjwp->w_linep = lp; adjwp->w_toprow -= n; /* grow above */ } else { lp = curwp->w_linep; for (i = 0; i < n && lp != curbp->b_headp; ++i) lp = lforw(lp); curwp->w_linep = lp; curwp->w_toprow += n; } curwp->w_ntrows -= n; adjwp->w_ntrows += n; curwp->w_rflag |= WFMODE | WFFULL; adjwp->w_rflag |= WFMODE | WFFULL; return (TRUE); }
/* * Shrink the current window. Find the window that gains space. Hack at the * window descriptions. Ask the redisplay to do all the hard work */ int shrinkwind(int f, int n) { WINDOW *adjwp; LINE *lp; int i; if (n < 0) return (enlargewind(f, -n)); if (wheadp->w_wndp == NULL) { mlwrite("Only one window"); return (FALSE); } if ((adjwp = curwp->w_wndp) == NULL) { adjwp = wheadp; while (adjwp->w_wndp != curwp) adjwp = adjwp->w_wndp; } if (curwp->w_ntrows <= n) { mlwrite("Impossible change"); return (FALSE); } if (curwp->w_wndp == adjwp) { /* Grow below */ lp = adjwp->w_linep; for (i = 0; i < n && lback(lp) != adjwp->w_bufp->b_linep; ++i) lp = lback(lp); adjwp->w_linep = lp; adjwp->w_toprow -= n; } else { /* Grow above */ lp = curwp->w_linep; for (i = 0; i < n && lp != curbp->b_linep; ++i) lp = lforw(lp); curwp->w_linep = lp; curwp->w_toprow += n; } curwp->w_ntrows -= n; adjwp->w_ntrows += n; curwp->w_flag |= WFMODE | WFHARD; adjwp->w_flag |= WFMODE | WFHARD; return (TRUE); }