1 /* Public Domain Curses */
2
3 #include <curspriv.h>
4
5 RCSID("$Id: clear.c,v 1.35 2008/07/13 16:08:18 wmcbrine Exp $")
6
7 /*man-start**************************************************************
8
9 Name: clear
10
11 Synopsis:
12 int clear(void);
13 int wclear(WINDOW *win);
14 int erase(void);
15 int werase(WINDOW *win);
16 int clrtobot(void);
17 int wclrtobot(WINDOW *win);
18 int clrtoeol(void);
19 int wclrtoeol(WINDOW *win);
20
21 Description:
22 erase() and werase() copy blanks (i.e. the background chtype) to
23 every cell of the window.
24
25 clear() and wclear() are similar to erase() and werase(), but
26 they also call clearok() to ensure that the window is
27 cleared on the next wrefresh().
28
29 clrtobot() and wclrtobot() clear the window from the current
30 cursor position to the end of the window.
31
32 clrtoeol() and wclrtoeol() clear the window from the current
33 cursor position to the end of the current line.
34
35 Return Value:
36 All functions return OK on success and ERR on error.
37
38 Portability X/Open BSD SYS V
39 clear Y Y Y
40 wclear Y Y Y
41 erase Y Y Y
42 werase Y Y Y
43 clrtobot Y Y Y
44 wclrtobot Y Y Y
45 clrtoeol Y Y Y
46 wclrtoeol Y Y Y
47
48 **man-end****************************************************************/
49
wclrtoeol(WINDOW * win)50 int wclrtoeol(WINDOW *win)
51 {
52 int x, y, minx;
53 chtype blank, *ptr;
54
55 PDC_LOG(("wclrtoeol() - called: Row: %d Col: %d\n",
56 win->_cury, win->_curx));
57
58 if (!win)
59 return ERR;
60
61 y = win->_cury;
62 x = win->_curx;
63
64 /* wrs (4/10/93) account for window background */
65
66 blank = win->_bkgd;
67
68 for (minx = x, ptr = &win->_y[y][x]; minx < win->_maxx; minx++, ptr++)
69 *ptr = blank;
70
71 if (x < win->_firstch[y] || win->_firstch[y] == _NO_CHANGE)
72 win->_firstch[y] = x;
73
74 win->_lastch[y] = win->_maxx - 1;
75
76 PDC_sync(win);
77 return OK;
78 }
79
clrtoeol(void)80 int clrtoeol(void)
81 {
82 PDC_LOG(("clrtoeol() - called\n"));
83
84 return wclrtoeol(stdscr);
85 }
86
wclrtobot(WINDOW * win)87 int wclrtobot(WINDOW *win)
88 {
89 PDC_LOG(("wclrtobot() - called\n"));
90
91 if (!win)
92 return ERR;
93
94 int savey = win->_cury;
95 int savex = win->_curx;
96
97 /* should this involve scrolling region somehow ? */
98
99 if (win->_cury + 1 < win->_maxy)
100 {
101 win->_curx = 0;
102 win->_cury++;
103 for (; win->_maxy > win->_cury; win->_cury++)
104 wclrtoeol(win);
105 win->_cury = savey;
106 win->_curx = savex;
107 }
108 wclrtoeol(win);
109
110 PDC_sync(win);
111 return OK;
112 }
113
clrtobot(void)114 int clrtobot(void)
115 {
116 PDC_LOG(("clrtobot() - called\n"));
117
118 return wclrtobot(stdscr);
119 }
120
werase(WINDOW * win)121 int werase(WINDOW *win)
122 {
123 PDC_LOG(("werase() - called\n"));
124
125 if (wmove(win, 0, 0) == ERR)
126 return ERR;
127
128 return wclrtobot(win);
129 }
130
erase(void)131 int erase(void)
132 {
133 PDC_LOG(("erase() - called\n"));
134
135 return werase(stdscr);
136 }
137
wclear(WINDOW * win)138 int wclear(WINDOW *win)
139 {
140 PDC_LOG(("wclear() - called\n"));
141
142 if (!win)
143 return ERR;
144
145 win->_clear = TRUE;
146 return werase(win);
147 }
148
clear(void)149 int clear(void)
150 {
151 PDC_LOG(("clear() - called\n"));
152
153 return wclear(stdscr);
154 }
155