xref: /original-bsd/usr.bin/window/wwdelline.c (revision 82b6afa4)
184cec3c4Sedward /*
2*82b6afa4Sbostic  * Copyright (c) 1983, 1993
3*82b6afa4Sbostic  *	The Regents of the University of California.  All rights reserved.
4bac0d407Sbostic  *
58e751acfSbostic  * This code is derived from software contributed to Berkeley by
68e751acfSbostic  * Edward Wang at The University of California, Berkeley.
78e751acfSbostic  *
8122a1d9eSbostic  * %sccs.include.redist.c%
984cec3c4Sedward  */
1084cec3c4Sedward 
11bac0d407Sbostic #ifndef lint
12*82b6afa4Sbostic static char sccsid[] = "@(#)wwdelline.c	8.1 (Berkeley) 06/06/93";
13bac0d407Sbostic #endif /* not lint */
14bac0d407Sbostic 
153612e9c5Sedward #include "ww.h"
163612e9c5Sedward 
wwdelline(w,row)175f188731Sedward wwdelline(w, row)
183612e9c5Sedward register struct ww *w;
195f188731Sedward int row;
203612e9c5Sedward {
213612e9c5Sedward 	register i;
223fb0dc45Sedward 	register union ww_char **cpp, **cqq;
23f40811deSedward 	register union ww_char *cp;
24ab5996c6Sedward 	int row1, row2;
253fb0dc45Sedward 	char deleted;
26f40811deSedward 	int visible;
273fb0dc45Sedward 
283fb0dc45Sedward 	/*
293fb0dc45Sedward 	 * Scroll first.
303fb0dc45Sedward 	 */
315f188731Sedward 	if ((row1 = row) < w->ww_i.t) {
325f188731Sedward 		row1 = w->ww_i.t;
335f188731Sedward 	}
345f188731Sedward 	if ((row2 = w->ww_b.b) > w->ww_i.b) {
355f188731Sedward 		row2 = w->ww_i.b;
36f40811deSedward 		visible = 0;
37f40811deSedward 	} else
38f40811deSedward 		visible = 1;
39ab5996c6Sedward 	deleted = wwscroll1(w, row1, row2, 1, visible);
403612e9c5Sedward 
413612e9c5Sedward 	/*
423612e9c5Sedward 	 * Fix the buffer.
433612e9c5Sedward 	 * But leave clearing the last line for wwclreol().
443612e9c5Sedward 	 */
455f188731Sedward 	cpp = &w->ww_buf[row];
463612e9c5Sedward 	cqq = cpp + 1;
47f40811deSedward 	cp = *cpp;
485f188731Sedward 	for (i = w->ww_b.b - row; --i > 0;)
493612e9c5Sedward 		*cpp++ = *cqq++;
50f40811deSedward 	*cpp = cp;
513612e9c5Sedward 
523612e9c5Sedward 	/*
533fb0dc45Sedward 	 * Now clear the last line.
543612e9c5Sedward 	 */
55f40811deSedward 	if (visible)
565f188731Sedward 		wwclreol1(w, w->ww_b.b - 1, w->ww_b.l, deleted);
5782187d2dSedward 	else {
5882187d2dSedward 		cp += w->ww_b.l;
595f188731Sedward 		for (i = w->ww_b.nc; --i >= 0;)
60f40811deSedward 			cp++->c_w = ' ';
613612e9c5Sedward 	}
6282187d2dSedward }
63