xref: /csrg-svn/lib/libcurses/insch.c (revision 3532)
1*3532Sarnold # include	"curses.ext"
2*3532Sarnold 
3*3532Sarnold /*
4*3532Sarnold  *	This routine performs an insert-char on the line, leaving
5*3532Sarnold  * (_cury,_curx) unchanged.
6*3532Sarnold  *
7*3532Sarnold  * @(#)insch.c	1.1 (Berkeley) 04/17/81
8*3532Sarnold  */
9*3532Sarnold winsch(win, c)
10*3532Sarnold reg WINDOW	*win;
11*3532Sarnold char		c; {
12*3532Sarnold 
13*3532Sarnold 	reg char	*temp1, *temp2;
14*3532Sarnold 	reg char	*end;
15*3532Sarnold 
16*3532Sarnold 	end = &win->_y[win->_cury][win->_curx];
17*3532Sarnold 	temp1 = &win->_y[win->_cury][win->_maxx - 1];
18*3532Sarnold 	temp2 = temp1 - 1;
19*3532Sarnold 	while (temp1 > end)
20*3532Sarnold 		*temp1-- = *temp2--;
21*3532Sarnold 	*temp1 = c;
22*3532Sarnold 	win->_lastch[win->_cury] = win->_maxx - 1;
23*3532Sarnold 	if (win->_firstch[win->_cury] == _NOCHANGE ||
24*3532Sarnold 	    win->_firstch[win->_cury] > win->_curx)
25*3532Sarnold 		win->_firstch[win->_cury] = win->_curx;
26*3532Sarnold 	if (win->_cury == LINES - 1 && win->_y[LINES-1][COLS-1] != ' ')
27*3532Sarnold 		if (win->_scroll) {
28*3532Sarnold 			wrefresh(win);
29*3532Sarnold 			scroll(win);
30*3532Sarnold 			win->_cury--;
31*3532Sarnold 		}
32*3532Sarnold 		else {
33*3532Sarnold 			win->_y[LINES-1][COLS-1] = ' ';
34*3532Sarnold 			return ERR;
35*3532Sarnold 		}
36*3532Sarnold 	return OK;
37*3532Sarnold }
38