Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Utilities/cmpdcurses/pdcurses/scroll.c
3153 views
1
/* PDCurses */
2
3
#include <curspriv.h>
4
5
/*man-start**************************************************************
6
7
scroll
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
X/Open ncurses NetBSD
35
scroll Y Y Y
36
scrl Y Y Y
37
wscrl Y Y Y
38
39
**man-end****************************************************************/
40
41
int wscrl(WINDOW *win, int n)
42
{
43
int i, l, dir, start, end;
44
chtype blank, *temp;
45
46
/* Check if window scrolls. Valid for window AND pad */
47
48
if (!win || !win->_scroll || !n)
49
return ERR;
50
51
blank = win->_bkgd;
52
53
if (n > 0)
54
{
55
start = win->_tmarg;
56
end = win->_bmarg;
57
dir = 1;
58
}
59
else
60
{
61
start = win->_bmarg;
62
end = win->_tmarg;
63
dir = -1;
64
}
65
66
for (l = 0; l < (n * dir); l++)
67
{
68
temp = win->_y[start];
69
70
/* re-arrange line pointers */
71
72
for (i = start; i != end; i += dir)
73
win->_y[i] = win->_y[i + dir];
74
75
win->_y[end] = temp;
76
77
/* make a blank line */
78
79
for (i = 0; i < win->_maxx; i++)
80
*temp++ = blank;
81
}
82
83
touchline(win, win->_tmarg, win->_bmarg - win->_tmarg + 1);
84
85
PDC_sync(win);
86
return OK;
87
}
88
89
int scrl(int n)
90
{
91
PDC_LOG(("scrl() - called\n"));
92
93
return wscrl(stdscr, n);
94
}
95
96
int scroll(WINDOW *win)
97
{
98
PDC_LOG(("scroll() - called\n"));
99
100
return wscrl(win, 1);
101
}
102
103