1 /* 2 * Copyright (c) 1983, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Edward Wang at The University of California, Berkeley. 7 * 8 * %sccs.include.redist.c% 9 */ 10 11 #ifndef lint 12 static char sccsid[] = "@(#)wwinsline.c 8.1 (Berkeley) 06/06/93"; 13 #endif /* not lint */ 14 15 #include "ww.h" 16 17 wwinsline(w, row) 18 register struct ww *w; 19 int row; 20 { 21 register i; 22 register union ww_char **cpp, **cqq; 23 register union ww_char *cp; 24 int row1, row2; 25 char deleted; 26 int visible; 27 28 /* 29 * Scroll first. 30 */ 31 if ((row1 = row) < w->ww_i.t) { 32 row1 = w->ww_i.t; 33 visible = 0; 34 } else 35 visible = 1; 36 if ((row2 = w->ww_b.b) > w->ww_i.b) { 37 row2 = w->ww_i.b; 38 } 39 deleted = wwscroll1(w, row1, row2, -1, visible); 40 41 /* 42 * Fix the buffer. 43 * But leave clearing the last line for wwclreol(). 44 */ 45 cpp = &w->ww_buf[w->ww_b.b]; 46 cqq = cpp - 1; 47 cp = *cqq; 48 for (i = w->ww_b.b - row; --i > 0;) 49 *--cpp = *--cqq; 50 *cqq = cp; 51 52 /* 53 * Now clear the last line. 54 */ 55 if (visible) 56 wwclreol1(w, row, w->ww_b.l, deleted); 57 else { 58 cp += w->ww_b.l; 59 for (i = w->ww_b.nc; --i >= 0;) 60 cp++->c_w = ' '; 61 } 62 } 63