xref: /illumos-gate/usr/src/ucblib/libcurses/insch.c (revision dd72704bd9e794056c558153663c739e2012d721)
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 /*LINTLIBRARY*/
16 
17 #ifndef lint
18 static char
19 sccsid[] = "@(#)insch.c 1.6 88/02/08 SMI"; /* from UCB 5.1 85/06/07 */
20 #endif /* not lint */
21 
22 #include	"curses.ext"
23 
24 /*
25  *	This routine performs an insert-char on the line, leaving
26  * (_cury,_curx) unchanged.
27  */
28 
29 int
30 winsch(WINDOW *win, char c)
31 {
32 	char	*temp1, *temp2;
33 	char	*end;
34 
35 	end = &win->_y[win->_cury][win->_curx];
36 	temp1 = &win->_y[win->_cury][win->_maxx - 1];
37 	temp2 = temp1 - 1;
38 	while (temp1 > end)
39 		*temp1-- = *temp2--;
40 	*temp1 = c;
41 	(void) touchline(win, win->_cury, win->_curx, win->_maxx - 1);
42 	if (win->_cury == LINES - 1 && win->_y[LINES-1][COLS-1] != ' ')
43 		if (win->_scroll) {
44 			(void) wrefresh(win);
45 			(void) scroll(win);
46 			win->_cury--;
47 		}
48 		else
49 			return (ERR);
50 	return (OK);
51 }
52