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