1 /*
2 * Copyright (c) 1981, 1993, 1994
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)insertln.c 8.2 (Berkeley) 05/04/94";
10 #endif /* not lint */
11
12 #include <string.h>
13
14 #include "curses.h"
15
16 /*
17 * winsertln --
18 * Do an insert-line on the window, leaving (cury, curx) unchanged.
19 */
20 int
winsertln(win)21 winsertln(win)
22 register WINDOW *win;
23 {
24
25 register int y, i;
26 register __LINE *temp;
27
28 #ifdef DEBUG
29 __CTRACE("insertln: (%0.2o)\n", win);
30 #endif
31 if (win->orig == NULL)
32 temp = win->lines[win->maxy - 1];
33 for (y = win->maxy - 1; y > win->cury; --y) {
34 win->lines[y]->flags &= ~__ISPASTEOL;
35 win->lines[y - 1]->flags &= ~__ISPASTEOL;
36 if (win->orig == NULL)
37 win->lines[y] = win->lines[y - 1];
38 else
39 (void)memcpy(win->lines[y]->line,
40 win->lines[y - 1]->line,
41 win->maxx * __LDATASIZE);
42 __touchline(win, y, 0, win->maxx - 1, 0);
43 }
44 if (win->orig == NULL)
45 win->lines[y] = temp;
46 else
47 temp = win->lines[y];
48 for(i = 0; i < win->maxx; i++) {
49 temp->line[i].ch = ' ';
50 temp->line[i].attr = 0;
51 }
52 __touchline(win, y, 0, win->maxx - 1, 0);
53 if (win->orig == NULL)
54 __id_subwins(win);
55 return (OK);
56 }
57