| /* PDCurses */ | |
| #include <curspriv.h> | |
| /*man-start************************************************************** | |
| scroll | |
| ------ | |
| ### Synopsis | |
| int scroll(WINDOW *win); | |
| int scrl(int n); | |
| int wscrl(WINDOW *win, int n); | |
| ### Description | |
| scroll() causes the window to scroll up one line. This involves | |
| moving the lines in the window data strcture. | |
| With a positive n, scrl() and wscrl() scroll the window up n lines | |
| (line i + n becomes i); otherwise they scroll the window down n | |
| lines. | |
| For these functions to work, scrolling must be enabled via | |
| scrollok(). Note also that scrolling is not allowed if the supplied | |
| window is a pad. | |
| ### Return Value | |
| All functions return OK on success and ERR on error. | |
| ### Portability | |
| X/Open ncurses NetBSD | |
| scroll Y Y Y | |
| scrl Y Y Y | |
| wscrl Y Y Y | |
| **man-end****************************************************************/ | |
| int wscrl(WINDOW *win, int n) | |
| { | |
| int i, l, dir, start, end; | |
| chtype blank, *temp; | |
| /* Check if window scrolls. Valid for window AND pad */ | |
| if (!win || !win->_scroll || !n) | |
| return ERR; | |
| blank = win->_bkgd; | |
| if (n > 0) | |
| { | |
| start = win->_tmarg; | |
| end = win->_bmarg; | |
| dir = 1; | |
| } | |
| else | |
| { | |
| start = win->_bmarg; | |
| end = win->_tmarg; | |
| dir = -1; | |
| } | |
| for (l = 0; l < (n * dir); l++) | |
| { | |
| temp = win->_y[start]; | |
| /* re-arrange line pointers */ | |
| for (i = start; i != end; i += dir) | |
| win->_y[i] = win->_y[i + dir]; | |
| win->_y[end] = temp; | |
| /* make a blank line */ | |
| for (i = 0; i < win->_maxx; i++) | |
| *temp++ = blank; | |
| } | |
| touchline(win, win->_tmarg, win->_bmarg - win->_tmarg + 1); | |
| PDC_sync(win); | |
| return OK; | |
| } | |
| int scrl(int n) | |
| { | |
| PDC_LOG(("scrl() - called\n")); | |
| return wscrl(stdscr, n); | |
| } | |
| int scroll(WINDOW *win) | |
| { | |
| PDC_LOG(("scroll() - called\n")); | |
| return wscrl(win, 1); | |
| } |