aboutsummaryrefslogtreecommitdiff
path: root/lib/libcurses/insertln.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libcurses/insertln.c')
-rw-r--r--lib/libcurses/insertln.c67
1 files changed, 37 insertions, 30 deletions
diff --git a/lib/libcurses/insertln.c b/lib/libcurses/insertln.c
index 09b8b4353035..9a9e321c72be 100644
--- a/lib/libcurses/insertln.c
+++ b/lib/libcurses/insertln.c
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 1981 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1981, 1993
+ * The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -32,43 +32,50 @@
*/
#ifndef lint
-static char sccsid[] = "@(#)insertln.c 5.4 (Berkeley) 6/1/90";
-#endif /* not lint */
+static char sccsid[] = "@(#)insertln.c 8.1 (Berkeley) 6/4/93";
+#endif /* not lint */
-# include "curses.ext"
+#include <curses.h>
+#include <string.h>
/*
- * This routine performs an insert-line on the window, leaving
- * (_cury,_curx) unchanged.
- *
+ * winsertln --
+ * Do an insert-line on the window, leaving (cury, curx) unchanged.
*/
+int
winsertln(win)
-reg WINDOW *win; {
+ register WINDOW *win;
+{
- reg chtype *temp;
- reg int y;
- reg chtype *end;
- reg int x;
+ register int y, i;
+ register __LINE *temp;
-#ifdef DEBUG
- fprintf(outf, "INSERTLN(%0.2o)\n", win);
+#ifdef DEBUG
+ __CTRACE("insertln: (%0.2o)\n", win);
#endif
- if (win->_orig == NULL)
- temp = win->_y[win->_maxy - 1];
- for (y = win->_maxy - 1; y > win->_cury; --y) {
- if (win->_orig == NULL)
- win->_y[y] = win->_y[y - 1];
+ if (win->orig == NULL)
+ temp = win->lines[win->maxy - 1];
+ for (y = win->maxy - 1; y > (int) win->cury; --y) {
+ win->lines[y]->flags &= ~__ISPASTEOL;
+ win->lines[y - 1]->flags &= ~__ISPASTEOL;
+ if (win->orig == NULL)
+ win->lines[y] = win->lines[y - 1];
else
- bcopy(win->_y[y - 1], win->_y[y], win->_maxx * sizeof(chtype));
- touchline(win, y, 0, win->_maxx - 1);
+ (void)memcpy(win->lines[y]->line,
+ win->lines[y - 1]->line,
+ win->maxx * __LDATASIZE);
+ __touchline(win, y, 0, win->maxx - 1, 0);
}
- if (win->_orig == NULL)
- win->_y[y] = temp;
+ if (win->orig == NULL)
+ win->lines[y] = temp;
else
- temp = win->_y[y];
- for (end = &temp[win->_maxx]; temp < end; )
- *temp++ = ' ';
- touchline(win, y, 0, win->_maxx - 1);
- if (win->_orig == NULL)
- _id_subwins(win);
+ temp = win->lines[y];
+ for(i = 0; i < win->maxx; i++) {
+ temp->line[i].ch = ' ';
+ temp->line[i].attr = 0;
+ }
+ __touchline(win, y, 0, win->maxx - 1, 0);
+ if (win->orig == NULL)
+ __id_subwins(win);
+ return (OK);
}