diff options
author | ache <ache@FreeBSD.org> | 1998-01-02 04:36:51 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1998-01-02 04:36:51 +0000 |
commit | 533db3b201ab193b971a34bcef090d11bb0f4d15 (patch) | |
tree | 26b32e41615afb10ff19f8aaa642de47134ce56a /lib/libncurses/lib_insdel.c | |
parent | 8a719f4f6a5228ee1a499af703c7b6cdfa493c59 (diff) | |
download | FreeBSD-src-533db3b201ab193b971a34bcef090d11bb0f4d15.zip FreeBSD-src-533db3b201ab193b971a34bcef090d11bb0f4d15.tar.gz |
1) Redo internal interface to be more latest ncurses-like
2) Fix winsdel called in last line of the window (nothing happens in
old variant)
3) Add range checks to wscrl() and internal soft scroll function
Diffstat (limited to 'lib/libncurses/lib_insdel.c')
-rw-r--r-- | lib/libncurses/lib_insdel.c | 36 |
1 files changed, 8 insertions, 28 deletions
diff --git a/lib/libncurses/lib_insdel.c b/lib/libncurses/lib_insdel.c index eb30f20..8729efe 100644 --- a/lib/libncurses/lib_insdel.c +++ b/lib/libncurses/lib_insdel.c @@ -12,40 +12,20 @@ ** */ -#include <stdlib.h> #include "curses.priv.h" -#include "terminfo.h" int winsdelln(WINDOW *win, int n) { - int ret, sscroll, stop, sbot; +int code = ERR; T(("winsdel(%x,%d) called", win, n)); - if (n == 0) - return OK; - if (win->_cury == win->_maxy && abs(n) == 1) - return wclrtoeol(win); - if (n < 0 && win->_cury - n > win->_maxy) - /* request to delete too many lines */ - /* should we truncate to an appropriate number? */ - return ERR; - - sscroll = win->_scroll; - stop = win->_regtop; - sbot = win->_regbottom; - - win->_scroll = TRUE; - win->_regtop = win->_cury; - if (win->_regtop > win->_regbottom) - win->_regbottom = win->_maxy; - - ret = wscrl(win, -n); - - win->_scroll = sscroll; - win->_regtop = stop; - win->_regbottom = sbot; - - return ret; + if (win) { + if (n != 0) { + _nc_scroll_window(win, -n, win->_cury, win->_maxy, _nc_background(win)); + } + code = OK; + } + return code; } |