xref: /csrg-svn/usr.bin/window/wwdelline.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[] = "@(#)wwdelline.c	8.1 (Berkeley) 06/06/93";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1514417Sedward #include "ww.h"
1614417Sedward 
wwdelline(w,row)1714987Sedward wwdelline(w, row)
1814417Sedward register struct ww *w;
1914987Sedward int row;
2014417Sedward {
2114417Sedward 	register i;
2214459Sedward 	register union ww_char **cpp, **cqq;
2314717Sedward 	register union ww_char *cp;
2414976Sedward 	int row1, row2;
2514459Sedward 	char deleted;
2614717Sedward 	int visible;
2714417Sedward 
2814417Sedward 	/*
2914459Sedward 	 * Scroll first.
3014459Sedward 	 */
3114987Sedward 	if ((row1 = row) < w->ww_i.t) {
3214987Sedward 		row1 = w->ww_i.t;
3314987Sedward 	}
3414987Sedward 	if ((row2 = w->ww_b.b) > w->ww_i.b) {
3514987Sedward 		row2 = w->ww_i.b;
3614717Sedward 		visible = 0;
3714717Sedward 	} else
3814717Sedward 		visible = 1;
3914976Sedward 	deleted = wwscroll1(w, row1, row2, 1, visible);
4014459Sedward 
4114459Sedward 	/*
4214417Sedward 	 * Fix the buffer.
4314417Sedward 	 * But leave clearing the last line for wwclreol().
4414417Sedward 	 */
4514987Sedward 	cpp = &w->ww_buf[row];
4614459Sedward 	cqq = cpp + 1;
4714717Sedward 	cp = *cpp;
4814987Sedward 	for (i = w->ww_b.b - row; --i > 0;)
4914459Sedward 		*cpp++ = *cqq++;
5014717Sedward 	*cpp = cp;
5114417Sedward 
5214417Sedward 	/*
5314459Sedward 	 * Now clear the last line.
5414417Sedward 	 */
5514717Sedward 	if (visible)
5614987Sedward 		wwclreol1(w, w->ww_b.b - 1, 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 	}
6214417Sedward }
63