xref: /original-bsd/usr.bin/window/wwinsline.c (revision 8251a00e)
1 #ifndef lint
2 static	char *sccsid = "@(#)wwinsline.c	3.2 83/08/11";
3 #endif
4 
5 #include "ww.h"
6 
7 wwinsline(w, line)
8 register struct ww *w;
9 int line;
10 {
11 	register i;
12 	register union ww_char **cpp, **cqq;
13 	union ww_char *tmp;
14 	int srow, erow;
15 	char deleted;
16 
17 	/*
18 	 * Scroll first.
19 	 */
20 	if ((srow = line - w->ww_scroll) < 0)
21 		srow = 0;
22 	if ((erow = w->ww_nline - w->ww_scroll - 1) >= w->ww_w.nr)
23 		erow = w->ww_w.nr - 1;
24 	deleted = wwscroll1(w, srow, erow, -1, 1);
25 
26 	/*
27 	 * Fix the buffer.
28 	 * But leave clearing the last line for wwclreol().
29 	 */
30 	cpp = &w->ww_buf[w->ww_nline];
31 	cqq = cpp - 1;
32 	tmp = *cqq;
33 	for (i = w->ww_nline - line - 1; --i >= 0;)
34 		*--cpp = *--cqq;
35 	*cqq = tmp;
36 
37 	/*
38 	 * Now clear the last line.
39 	 */
40 	wwclreol1(w, line, 0, deleted);
41 }
42