xref: /aosp_15_r20/external/coreboot/payloads/libpayload/curses/PDCurses/pdcurses/addchstr.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* Public Domain Curses */
2 
3 #include <curspriv.h>
4 
5 RCSID("$Id: addchstr.c,v 1.43 2008/07/13 16:08:17 wmcbrine Exp $")
6 
7 /*man-start**************************************************************
8 
9   Name:                                                         addchstr
10 
11   Synopsis:
12         int addchstr(const chtype *ch);
13         int addchnstr(const chtype *ch, int n);
14         int waddchstr(WINDOW *win, const chtype *ch);
15         int waddchnstr(WINDOW *win, const chtype *ch, int n);
16         int mvaddchstr(int y, int x, const chtype *ch);
17         int mvaddchnstr(int y, int x, const chtype *ch, int n);
18         int mvwaddchstr(WINDOW *, int y, int x, const chtype *ch);
19         int mvwaddchnstr(WINDOW *, int y, int x, const chtype *ch, int n);
20 
21         int add_wchstr(const cchar_t *wch);
22         int add_wchnstr(const cchar_t *wch, int n);
23         int wadd_wchstr(WINDOW *win, const cchar_t *wch);
24         int wadd_wchnstr(WINDOW *win, const cchar_t *wch, int n);
25         int mvadd_wchstr(int y, int x, const cchar_t *wch);
26         int mvadd_wchnstr(int y, int x, const cchar_t *wch, int n);
27         int mvwadd_wchstr(WINDOW *win, int y, int x, const cchar_t *wch);
28         int mvwadd_wchnstr(WINDOW *win, int y, int x, const cchar_t *wch,
29                 int n);
30 
31   Description:
32         These routines write a chtype or cchar_t string directly into
33         the window structure, starting at the current or specified
34         position. The four routines with n as the last argument copy at
35         most n elements, but no more than will fit on the line. If n =
36         -1 then the whole string is copied, up to the maximum number
37         that will fit on the line.
38 
39         The cursor position is not advanced. These routines do not check
40         for newline or other special characters, nor does any line
41         wrapping occur.
42 
43   Return Value:
44         All functions return OK or ERR.
45 
46   Portability                                X/Open    BSD    SYS V
47         addchstr                                Y       -      4.0
48         waddchstr                               Y       -      4.0
49         mvaddchstr                              Y       -      4.0
50         mvwaddchstr                             Y       -      4.0
51         addchnstr                               Y       -      4.0
52         waddchnstr                              Y       -      4.0
53         mvaddchnstr                             Y       -      4.0
54         mvwaddchnstr                            Y       -      4.0
55         add_wchstr                              Y
56         wadd_wchstr                             Y
57         mvadd_wchstr                            Y
58         mvwadd_wchstr                           Y
59         add_wchnstr                             Y
60         wadd_wchnstr                            Y
61         mvadd_wchnstr                           Y
62         mvwadd_wchnstr                          Y
63 
64 **man-end****************************************************************/
65 
66 #include <string.h>
67 
waddchnstr(WINDOW * win,const chtype * ch,int n)68 int waddchnstr(WINDOW *win, const chtype *ch, int n)
69 {
70     int y, x, maxx, minx;
71     chtype *ptr;
72 
73     PDC_LOG(("waddchnstr() - called: win=%p n=%d\n", win, n));
74 
75     if (!win || !ch || !n || n < -1)
76         return ERR;
77 
78     x = win->_curx;
79     y = win->_cury;
80     ptr = &(win->_y[y][x]);
81 
82     if (n == -1 || n > win->_maxx - x)
83         n = win->_maxx - x;
84 
85     minx = win->_firstch[y];
86     maxx = win->_lastch[y];
87 
88     for (; n && *ch; n--, x++, ptr++, ch++)
89     {
90         if (*ptr != *ch)
91         {
92             if (x < minx || minx == _NO_CHANGE)
93                 minx = x;
94 
95             if (x > maxx)
96                 maxx = x;
97 
98             PDC_LOG(("y %d x %d minx %d maxx %d *ptr %x *ch"
99                      " %x firstch: %d lastch: %d\n",
100                      y, x, minx, maxx, *ptr, *ch,
101                      win->_firstch[y], win->_lastch[y]));
102 
103             *ptr = *ch;
104         }
105     }
106 
107     win->_firstch[y] = minx;
108     win->_lastch[y] = maxx;
109 
110     return OK;
111 }
112 
addchstr(const chtype * ch)113 int addchstr(const chtype *ch)
114 {
115     PDC_LOG(("addchstr() - called\n"));
116 
117     return waddchnstr(stdscr, ch, -1);
118 }
119 
addchnstr(const chtype * ch,int n)120 int addchnstr(const chtype *ch, int n)
121 {
122     PDC_LOG(("addchnstr() - called\n"));
123 
124     return waddchnstr(stdscr, ch, n);
125 }
126 
waddchstr(WINDOW * win,const chtype * ch)127 int waddchstr(WINDOW *win, const chtype *ch)
128 {
129     PDC_LOG(("waddchstr() - called: win=%p\n", win));
130 
131     return waddchnstr(win, ch, -1);
132 }
133 
mvaddchstr(int y,int x,const chtype * ch)134 int mvaddchstr(int y, int x, const chtype *ch)
135 {
136     PDC_LOG(("mvaddchstr() - called: y %d x %d\n", y, x));
137 
138     if (move(y, x) == ERR)
139         return ERR;
140 
141     return waddchnstr(stdscr, ch, -1);
142 }
143 
mvaddchnstr(int y,int x,const chtype * ch,int n)144 int mvaddchnstr(int y, int x, const chtype *ch, int n)
145 {
146     PDC_LOG(("mvaddchnstr() - called: y %d x %d n %d\n", y, x, n));
147 
148     if (move(y, x) == ERR)
149         return ERR;
150 
151     return waddchnstr(stdscr, ch, n);
152 }
153 
mvwaddchstr(WINDOW * win,int y,int x,const chtype * ch)154 int mvwaddchstr(WINDOW *win, int y, int x, const chtype *ch)
155 {
156     PDC_LOG(("mvwaddchstr() - called:\n"));
157 
158     if (wmove(win, y, x) == ERR)
159         return ERR;
160 
161     return waddchnstr(win, ch, -1);
162 }
163 
mvwaddchnstr(WINDOW * win,int y,int x,const chtype * ch,int n)164 int mvwaddchnstr(WINDOW *win, int y, int x, const chtype *ch, int n)
165 {
166     PDC_LOG(("mvwaddchnstr() - called: y %d x %d n %d \n", y, x, n));
167 
168     if (wmove(win, y, x) == ERR)
169         return ERR;
170 
171     return waddchnstr(win, ch, n);
172 }
173 
174 #ifdef PDC_WIDE
wadd_wchnstr(WINDOW * win,const cchar_t * wch,int n)175 int wadd_wchnstr(WINDOW *win, const cchar_t *wch, int n)
176 {
177     PDC_LOG(("wadd_wchnstr() - called: win=%p n=%d\n", win, n));
178 
179     return waddchnstr(win, wch, n);
180 }
181 
add_wchstr(const cchar_t * wch)182 int add_wchstr(const cchar_t *wch)
183 {
184     PDC_LOG(("add_wchstr() - called\n"));
185 
186     return wadd_wchnstr(stdscr, wch, -1);
187 }
188 
add_wchnstr(const cchar_t * wch,int n)189 int add_wchnstr(const cchar_t *wch, int n)
190 {
191     PDC_LOG(("add_wchnstr() - called\n"));
192 
193     return wadd_wchnstr(stdscr, wch, n);
194 }
195 
wadd_wchstr(WINDOW * win,const cchar_t * wch)196 int wadd_wchstr(WINDOW *win, const cchar_t *wch)
197 {
198     PDC_LOG(("wadd_wchstr() - called: win=%p\n", win));
199 
200     return wadd_wchnstr(win, wch, -1);
201 }
202 
mvadd_wchstr(int y,int x,const cchar_t * wch)203 int mvadd_wchstr(int y, int x, const cchar_t *wch)
204 {
205     PDC_LOG(("mvadd_wchstr() - called: y %d x %d\n", y, x));
206 
207     if (move(y, x) == ERR)
208         return ERR;
209 
210     return wadd_wchnstr(stdscr, wch, -1);
211 }
212 
mvadd_wchnstr(int y,int x,const cchar_t * wch,int n)213 int mvadd_wchnstr(int y, int x, const cchar_t *wch, int n)
214 {
215     PDC_LOG(("mvadd_wchnstr() - called: y %d x %d n %d\n", y, x, n));
216 
217     if (move(y, x) == ERR)
218         return ERR;
219 
220     return wadd_wchnstr(stdscr, wch, n);
221 }
222 
mvwadd_wchstr(WINDOW * win,int y,int x,const cchar_t * wch)223 int mvwadd_wchstr(WINDOW *win, int y, int x, const cchar_t *wch)
224 {
225     PDC_LOG(("mvwadd_wchstr() - called:\n"));
226 
227     if (wmove(win, y, x) == ERR)
228         return ERR;
229 
230     return wadd_wchnstr(win, wch, -1);
231 }
232 
mvwadd_wchnstr(WINDOW * win,int y,int x,const cchar_t * wch,int n)233 int mvwadd_wchnstr(WINDOW *win, int y, int x, const cchar_t *wch, int n)
234 {
235     PDC_LOG(("mvwadd_wchnstr() - called: y %d x %d n %d \n", y, x, n));
236 
237     if (wmove(win, y, x) == ERR)
238         return ERR;
239 
240     return wadd_wchnstr(win, wch, n);
241 }
242 #endif
243