xref: /csrg-svn/usr.bin/window/wwinsline.c (revision 62479)
118739Sedward /*
2*62479Sbostic  * Copyright (c) 1983, 1993
3*62479Sbostic  *	The Regents of the University of California.  All rights reserved.
433514Sbostic  *
542954Sbostic  * This code is derived from software contributed to Berkeley by
642954Sbostic  * Edward Wang at The University of California, Berkeley.
742954Sbostic  *
842835Sbostic  * %sccs.include.redist.c%
918739Sedward  */
1018739Sedward 
1133514Sbostic #ifndef lint
12*62479Sbostic static char sccsid[] = "@(#)wwinsline.c	8.1 (Berkeley) 06/06/93";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1514416Sedward #include "ww.h"
1614416Sedward 
wwinsline(w,row)1714987Sedward wwinsline(w, row)
1814416Sedward register struct ww *w;
1914987Sedward int row;
2014416Sedward {
2114416Sedward 	register i;
2214459Sedward 	register union ww_char **cpp, **cqq;
2314717Sedward 	register union ww_char *cp;
2414987Sedward 	int row1, row2;
2514459Sedward 	char deleted;
2614717Sedward 	int visible;
2714416Sedward 
2814416Sedward 	/*
2914459Sedward 	 * Scroll first.
3014416Sedward 	 */
3114987Sedward 	if ((row1 = row) < w->ww_i.t) {
3214987Sedward 		row1 = w->ww_i.t;
3314717Sedward 		visible = 0;
3414717Sedward 	} else
3514717Sedward 		visible = 1;
3614987Sedward 	if ((row2 = w->ww_b.b) > w->ww_i.b) {
3714987Sedward 		row2 = w->ww_i.b;
3814987Sedward 	}
3914987Sedward 	deleted = wwscroll1(w, row1, row2, -1, visible);
4014459Sedward 
4114416Sedward 	/*
4214459Sedward 	 * Fix the buffer.
4314459Sedward 	 * But leave clearing the last line for wwclreol().
4414416Sedward 	 */
4514987Sedward 	cpp = &w->ww_buf[w->ww_b.b];
4614459Sedward 	cqq = cpp - 1;
4714717Sedward 	cp = *cqq;
4814987Sedward 	for (i = w->ww_b.b - row; --i > 0;)
4914459Sedward 		*--cpp = *--cqq;
5014717Sedward 	*cqq = cp;
5114416Sedward 
5214416Sedward 	/*
5314459Sedward 	 * Now clear the last line.
5414416Sedward 	 */
5514717Sedward 	if (visible)
5614987Sedward 		wwclreol1(w, row, w->ww_b.l, deleted);
5733683Sedward 	else {
5833683Sedward 		cp += w->ww_b.l;
5914987Sedward 		for (i = w->ww_b.nc; --i >= 0;)
6014717Sedward 			cp++->c_w = ' ';
6133683Sedward 	}
6214416Sedward }
63