xref: /original-bsd/lib/libcurses/insertln.c (revision 6c57d260)
1 # include	"curses.ext"
2 
3 /*
4  *	This routine performs an insert-line on the window, leaving
5  * (_cury,_curx) unchanged.
6  *
7  * 04/17/81 (Berkeley) @(#)insertln.c	1.4
8  */
9 winsertln(win)
10 reg WINDOW	*win; {
11 
12 	reg char	*temp;
13 	reg int		y;
14 	reg char	*end;
15 
16 	temp = win->_y[win->_maxy-1];
17 	win->_firstch[win->_cury] = 0;
18 	win->_lastch[win->_cury] = win->_maxx - 1;
19 	for (y = win->_maxy - 1; y > win->_cury; --y) {
20 		win->_y[y] = win->_y[y-1];
21 		win->_firstch[y] = 0;
22 		win->_lastch[y] = win->_maxx - 1;
23 	}
24 	for (end = &temp[win->_maxx]; temp < end; )
25 		*temp++ = ' ';
26 	win->_y[win->_cury] = temp - win->_maxx;
27 	if (win->_cury == LINES - 1 && win->_y[LINES-1][COLS-1] != ' ')
28 		if (win->_scroll) {
29 			wrefresh(win);
30 			scroll(win);
31 			win->_cury--;
32 		}
33 		else
34 			return ERR;
35 	return OK;
36 }
37