libpayload: Add PDCurses and ncurses' libform/libmenu
[coreboot.git] / payloads / libpayload / curses / PDCurses-3.4 / pdcurses / addstr.c
1 /* Public Domain Curses */
2
3 #include <curspriv.h>
4
5 RCSID("$Id: addstr.c,v 1.44 2008/07/13 16:08:17 wmcbrine Exp $")
6
7 /*man-start**************************************************************
8
9   Name:                                                         addstr
10
11   Synopsis:
12         int addstr(const char *str);
13         int addnstr(const char *str, int n);
14         int waddstr(WINDOW *win, const char *str);
15         int waddnstr(WINDOW *win, const char *str, int n);
16         int mvaddstr(int y, int x, const char *str);
17         int mvaddnstr(int y, int x, const char *str, int n);
18         int mvwaddstr(WINDOW *win, int y, int x, const char *str);
19         int mvwaddnstr(WINDOW *win, int y, int x, const char *str, int n);
20
21         int addwstr(const wchar_t *wstr);
22         int addnwstr(const wchar_t *wstr, int n);
23         int waddwstr(WINDOW *win, const wchar_t *wstr);
24         int waddnwstr(WINDOW *win, const wchar_t *wstr, int n);
25         int mvaddwstr(int y, int x, const wchar_t *wstr);
26         int mvaddnwstr(int y, int x, const wchar_t *wstr, int n);
27         int mvwaddwstr(WINDOW *win, int y, int x, const wchar_t *wstr);
28         int mvwaddnwstr(WINDOW *win, int y, int x, const wchar_t *wstr, int n);
29
30   Description:
31         These routines write all the characters of the null-terminated
32         string str or wide-character string wstr to the given window.
33         The functionality is similar to calling waddch() once for each
34         character in the string; except that, when PDCurses is built
35         with wide-character support enabled, the narrow-character
36         functions treat the string as a multibyte string in the current
37         locale, and convert it. The routines with n as the last
38         argument write at most n characters; if n is negative, then the
39         entire string will be added.
40
41   Return Value:
42         All functions return OK or ERR.
43
44   Portability                                X/Open    BSD    SYS V
45         addstr                                  Y       Y       Y
46         waddstr                                 Y       Y       Y
47         mvaddstr                                Y       Y       Y
48         mvwaddstr                               Y       Y       Y
49         addnstr                                 Y       -      4.0
50         waddnstr                                Y       -      4.0
51         mvaddnstr                               Y       -      4.0
52         mvwaddnstr                              Y       -      4.0
53         addwstr                                 Y
54         waddwstr                                Y
55         mvaddwstr                               Y
56         mvwaddwstr                              Y
57         addnwstr                                Y
58         waddnwstr                               Y
59         mvaddnwstr                              Y
60         mvwaddnwstr                             Y
61
62 **man-end****************************************************************/
63
64 int waddnstr(WINDOW *win, const char *str, int n)
65 {
66     int i = 0;
67
68     PDC_LOG(("waddnstr() - called: string=\"%s\" n %d \n", str, n));
69
70     if (!win || !str)
71         return ERR;
72
73     while (str[i] && (i < n || n < 0))
74     {
75 #ifdef PDC_WIDE
76         wchar_t wch;
77         int retval = PDC_mbtowc(&wch, str + i, n >= 0 ? n - i : 6);
78
79         if (retval <= 0)
80             return OK;
81
82         i += retval;
83 #else
84         chtype wch = (unsigned char)(str[i++]);
85 #endif
86         if (waddch(win, wch) == ERR)
87             return ERR;
88     }
89
90     return OK;
91 }
92
93 int addstr(const char *str)
94 {
95     PDC_LOG(("addstr() - called: string=\"%s\"\n", str));
96
97     return waddnstr(stdscr, str, -1);
98 }
99
100 int addnstr(const char *str, int n)
101 {
102     PDC_LOG(("addnstr() - called: string=\"%s\" n %d \n", str, n));
103
104     return waddnstr(stdscr, str, n);
105 }
106
107 int waddstr(WINDOW *win, const char *str)
108 {
109     PDC_LOG(("waddstr() - called: string=\"%s\"\n", str));
110
111     return waddnstr(win, str, -1);
112 }
113
114 int mvaddstr(int y, int x, const char *str)
115 {
116     PDC_LOG(("mvaddstr() - called: y %d x %d string=\"%s\"\n", y, x, str));
117
118     if (move(y, x) == ERR)
119         return ERR;
120
121     return waddnstr(stdscr, str, -1);
122 }
123
124 int mvaddnstr(int y, int x, const char *str, int n)
125 {
126     PDC_LOG(("mvaddnstr() - called: y %d x %d string=\"%s\" n %d \n",
127              y, x, str, n));
128
129     if (move(y, x) == ERR)
130         return ERR;
131
132     return waddnstr(stdscr, str, n);
133 }
134
135 int mvwaddstr(WINDOW *win, int y, int x, const char *str)
136 {
137     PDC_LOG(("mvwaddstr() - called: string=\"%s\"\n", str));
138
139     if (wmove(win, y, x) == ERR)
140         return ERR;
141
142     return waddnstr(win, str, -1);
143 }
144
145 int mvwaddnstr(WINDOW *win, int y, int x, const char *str, int n)
146 {
147     PDC_LOG(("mvwaddnstr() - called: y %d x %d string=\"%s\" n %d \n",
148              y, x, str, n));
149
150     if (wmove(win, y, x) == ERR)
151         return ERR;
152
153     return waddnstr(win, str, n);
154 }
155
156 #ifdef PDC_WIDE
157 int waddnwstr(WINDOW *win, const wchar_t *wstr, int n)
158 {
159     int i = 0;
160
161     PDC_LOG(("waddnwstr() - called\n"));
162
163     if (!win || !wstr)
164         return ERR;
165
166     while (wstr[i] && (i < n || n < 0))
167     {
168         chtype wch = wstr[i++];
169
170         if (waddch(win, wch) == ERR)
171             return ERR;
172     }
173
174     return OK;
175 }
176
177 int addwstr(const wchar_t *wstr)
178 {
179     PDC_LOG(("addwstr() - called\n"));
180
181     return waddnwstr(stdscr, wstr, -1);
182 }
183
184 int addnwstr(const wchar_t *wstr, int n)
185 {
186     PDC_LOG(("addnwstr() - called\n"));
187
188     return waddnwstr(stdscr, wstr, n);
189 }
190
191 int waddwstr(WINDOW *win, const wchar_t *wstr)
192 {
193     PDC_LOG(("waddwstr() - called\n"));
194
195     return waddnwstr(win, wstr, -1);
196 }
197
198 int mvaddwstr(int y, int x, const wchar_t *wstr)
199 {
200     PDC_LOG(("mvaddstr() - called\n"));
201
202     if (move(y, x) == ERR)
203         return ERR;
204
205     return waddnwstr(stdscr, wstr, -1);
206 }
207
208 int mvaddnwstr(int y, int x, const wchar_t *wstr, int n)
209 {
210     PDC_LOG(("mvaddnstr() - called\n"));
211
212     if (move(y, x) == ERR)
213         return ERR;
214
215     return waddnwstr(stdscr, wstr, n);
216 }
217
218 int mvwaddwstr(WINDOW *win, int y, int x, const wchar_t *wstr)
219 {
220     PDC_LOG(("mvwaddstr() - called\n"));
221
222     if (wmove(win, y, x) == ERR)
223         return ERR;
224
225     return waddnwstr(win, wstr, -1);
226 }
227
228 int mvwaddnwstr(WINDOW *win, int y, int x, const wchar_t *wstr, int n)
229 {
230     PDC_LOG(("mvwaddnstr() - called\n"));
231
232     if (wmove(win, y, x) == ERR)
233         return ERR;
234
235     return waddnwstr(win, wstr, n);
236 }
237 #endif