| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* 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);
- }
|