xref: /illumos-gate/usr/src/ucblib/libcurses/insch.c (revision 4eaa471005973e11a6110b69fe990530b3b95a38)
1 /*
2  * Copyright 2001 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
7 /*	  All Rights Reserved  	*/
8 
9 /*
10  * Copyright (c) 1980 Regents of the University of California.
11  * All rights reserved.  The Berkeley software License Agreement
12  * specifies the terms and conditions for redistribution.
13  */
14 
15 #pragma ident	"%Z%%M%	%I%	%E% SMI"
16 
17 /*LINTLIBRARY*/
18 
19 #ifndef lint
20 static char
21 sccsid[] = "@(#)insch.c 1.6 88/02/08 SMI"; /* from UCB 5.1 85/06/07 */
22 #endif /* not lint */
23 
24 #include	"curses.ext"
25 
26 /*
27  *	This routine performs an insert-char on the line, leaving
28  * (_cury,_curx) unchanged.
29  */
30 
31 int
32 winsch(WINDOW *win, char c)
33 {
34 	char	*temp1, *temp2;
35 	char	*end;
36 
37 	end = &win->_y[win->_cury][win->_curx];
38 	temp1 = &win->_y[win->_cury][win->_maxx - 1];
39 	temp2 = temp1 - 1;
40 	while (temp1 > end)
41 		*temp1-- = *temp2--;
42 	*temp1 = c;
43 	(void) touchline(win, win->_cury, win->_curx, win->_maxx - 1);
44 	if (win->_cury == LINES - 1 && win->_y[LINES-1][COLS-1] != ' ')
45 		if (win->_scroll) {
46 			(void) wrefresh(win);
47 			(void) scroll(win);
48 			win->_cury--;
49 		}
50 		else
51 			return (ERR);
52 	return (OK);
53 }
54