xref: /aosp_15_r20/external/coreboot/payloads/libpayload/curses/PDCurses/pdcurses/clear.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
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