0eea85a74136a56aabdda28374a35b3abb470f64
[coreboot.git] / payloads / libpayload / curses / PDCurses-3.4 / pdcurses / addchstr.c
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
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
113 int addchstr(const chtype *ch)
114 {
115     PDC_LOG(("addchstr() - called\n"));
116
117     return waddchnstr(stdscr, ch, -1);
118 }
119
120 int addchnstr(const chtype *ch, int n)
121 {
122     PDC_LOG(("addchnstr() - called\n"));
123
124     return waddchnstr(stdscr, ch, n);
125 }
126
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
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
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
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
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
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
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
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
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
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
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
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
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