aboutsummaryrefslogtreecommitdiff
path: root/scripts/kconfig/libcurses/scroll.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scripts/kconfig/libcurses/scroll.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/scripts/kconfig/libcurses/scroll.c b/scripts/kconfig/libcurses/scroll.c
new file mode 100644
index 000000000..a53d71bad
--- /dev/null
+++ b/scripts/kconfig/libcurses/scroll.c
@@ -0,0 +1,103 @@
1/* PDCurses */
2
3#include "curspriv.h"
4
5/*man-start**************************************************************
6
7scroll
8------
9
10### Synopsis
11
12 int scroll(WINDOW *win);
13 int scrl(int n);
14 int wscrl(WINDOW *win, int n);
15
16### Description
17
18 scroll() causes the window to scroll up one line. This involves
19 moving the lines in the window data strcture.
20
21 With a positive n, scrl() and wscrl() scroll the window up n lines
22 (line i + n becomes i); otherwise they scroll the window down n
23 lines.
24
25 For these functions to work, scrolling must be enabled via
26 scrollok(). Note also that scrolling is not allowed if the supplied
27 window is a pad.
28
29### Return Value
30
31 All functions return OK on success and ERR on error.
32
33### Portability
34
35 Function | X/Open | ncurses | NetBSD
36 :---------------------|:------:|:-------:|:------:
37 scroll | Y | Y | Y
38 scrl | Y | Y | Y
39 wscrl | Y | Y | Y
40
41**man-end****************************************************************/
42
43int wscrl(WINDOW *win, int n)
44{
45 int i, l, dir, start, end;
46 chtype blank, *temp;
47
48 /* Check if window scrolls. Valid for window AND pad */
49
50 if (!win || !win->_scroll || !n)
51 return ERR;
52
53 blank = win->_bkgd;
54
55 if (n > 0)
56 {
57 start = win->_tmarg;
58 end = win->_bmarg;
59 dir = 1;
60 }
61 else
62 {
63 start = win->_bmarg;
64 end = win->_tmarg;
65 dir = -1;
66 }
67
68 for (l = 0; l < (n * dir); l++)
69 {
70 temp = win->_y[start];
71
72 /* re-arrange line pointers */
73
74 for (i = start; i != end; i += dir)
75 win->_y[i] = win->_y[i + dir];
76
77 win->_y[end] = temp;
78
79 /* make a blank line */
80
81 for (i = 0; i < win->_maxx; i++)
82 *temp++ = blank;
83 }
84
85 touchline(win, win->_tmarg, win->_bmarg - win->_tmarg + 1);
86
87 PDC_sync(win);
88 return OK;
89}
90
91int scrl(int n)
92{
93 PDC_LOG(("scrl() - called\n"));
94
95 return wscrl(stdscr, n);
96}
97
98int scroll(WINDOW *win)
99{
100 PDC_LOG(("scroll() - called\n"));
101
102 return wscrl(win, 1);
103}