diff options
Diffstat (limited to 'lib/libcurses/insertln.c')
| -rw-r--r-- | lib/libcurses/insertln.c | 67 |
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); } |
