1 /* Public Domain Curses */
2
3 #include <curspriv.h>
4
5 /*man-start**************************************************************
6
7 instr
8 -----
9
10 ### Synopsis
11
12 int instr(char *str);
13 int innstr(char *str, int n);
14 int winstr(WINDOW *win, char *str);
15 int winnstr(WINDOW *win, char *str, int n);
16 int mvinstr(int y, int x, char *str);
17 int mvinnstr(int y, int x, char *str, int n);
18 int mvwinstr(WINDOW *win, int y, int x, char *str);
19 int mvwinnstr(WINDOW *win, int y, int x, char *str, int n);
20
21 int inwstr(wchar_t *wstr);
22 int innwstr(wchar_t *wstr, int n);
23 int winwstr(WINDOW *win, wchar_t *wstr);
24 int winnwstr(WINDOW *win, wchar_t *wstr, int n);
25 int mvinwstr(int y, int x, wchar_t *wstr);
26 int mvinnwstr(int y, int x, wchar_t *wstr, int n);
27 int mvwinwstr(WINDOW *win, int y, int x, wchar_t *wstr);
28 int mvwinnwstr(WINDOW *win, int y, int x, wchar_t *wstr, int n);
29
30 ### Description
31
32 These functions take characters (or wide characters) from the
33 current or specified position in the window, and return them as
34 a string in str (or wstr). Attributes are ignored. The functions
35 with n as the last argument return a string at most n characters
36 long.
37
38 ### Return Value
39
40 Upon successful completion, innstr(), mvinnstr(), mvwinnstr()
41 and winnstr() return the number of characters actually read into
42 the string; instr(), mvinstr(), mvwinstr() and winstr() return
43 OK. Otherwise, all these functions return ERR.
44
45 ### Portability
46 X/Open BSD SYS V
47 instr Y - 4.0
48 winstr Y - 4.0
49 mvinstr Y - 4.0
50 mvwinstr Y - 4.0
51 innstr Y - 4.0
52 winnstr Y - 4.0
53 mvinnstr Y - 4.0
54 mvwinnstr Y - 4.0
55 inwstr Y
56 winwstr Y
57 mvinwstr Y
58 mvwinwstr Y
59 innwstr Y
60 winnwstr Y
61 mvinnwstr Y
62 mvwinnwstr Y
63
64 **man-end****************************************************************/
65
winnstr(WINDOW * win,char * str,int n)66 int winnstr(WINDOW *win, char *str, int n)
67 {
68 #ifdef PDC_WIDE
69 wchar_t wstr[513];
70
71 if (n < 0 || n > 512)
72 n = 512;
73
74 if (winnwstr(win, wstr, n) == ERR)
75 return ERR;
76
77 return PDC_wcstombs(str, wstr, n);
78 #else
79 chtype *src;
80 int i;
81
82 PDC_LOG(("winnstr() - called: n %d \n", n));
83
84 if (!win || !str)
85 return ERR;
86
87 if (n < 0 || (win->_curx + n) > win->_maxx)
88 n = win->_maxx - win->_curx;
89
90 src = win->_y[win->_cury] + win->_curx;
91
92 for (i = 0; i < n; i++)
93 str[i] = src[i] & A_CHARTEXT;
94
95 str[i] = '\0';
96
97 return i;
98 #endif
99 }
100
instr(char * str)101 int instr(char *str)
102 {
103 PDC_LOG(("instr() - called: string=\"%s\"\n", str));
104
105 return (ERR == winnstr(stdscr, str, stdscr->_maxx)) ? ERR : OK;
106 }
107
winstr(WINDOW * win,char * str)108 int winstr(WINDOW *win, char *str)
109 {
110 PDC_LOG(("winstr() - called: \n"));
111
112 return (ERR == winnstr(win, str, win->_maxx)) ? ERR : OK;
113 }
114
mvinstr(int y,int x,char * str)115 int mvinstr(int y, int x, char *str)
116 {
117 PDC_LOG(("mvinstr() - called: y %d x %d \n", y, x));
118
119 if (move(y, x) == ERR)
120 return ERR;
121
122 return (ERR == winnstr(stdscr, str, stdscr->_maxx)) ? ERR : OK;
123 }
124
mvwinstr(WINDOW * win,int y,int x,char * str)125 int mvwinstr(WINDOW *win, int y, int x, char *str)
126 {
127 PDC_LOG(("mvwinstr() - called: y %d x %d \n", y, x));
128
129 if (wmove(win, y, x) == ERR)
130 return ERR;
131
132 return (ERR == winnstr(win, str, win->_maxx)) ? ERR : OK;
133 }
134
innstr(char * str,int n)135 int innstr(char *str, int n)
136 {
137 PDC_LOG(("innstr() - called: n %d \n", n));
138
139 return winnstr(stdscr, str, n);
140 }
141
mvinnstr(int y,int x,char * str,int n)142 int mvinnstr(int y, int x, char *str, int n)
143 {
144 PDC_LOG(("mvinnstr() - called: y %d x %d n %d \n", y, x, n));
145
146 if (move(y, x) == ERR)
147 return ERR;
148
149 return winnstr(stdscr, str, n);
150 }
151
mvwinnstr(WINDOW * win,int y,int x,char * str,int n)152 int mvwinnstr(WINDOW *win, int y, int x, char *str, int n)
153 {
154 PDC_LOG(("mvwinnstr() - called: y %d x %d n %d \n", y, x, n));
155
156 if (wmove(win, y, x) == ERR)
157 return ERR;
158
159 return winnstr(win, str, n);
160 }
161
162 #ifdef PDC_WIDE
winnwstr(WINDOW * win,wchar_t * wstr,int n)163 int winnwstr(WINDOW *win, wchar_t *wstr, int n)
164 {
165 chtype *src;
166 int i;
167
168 PDC_LOG(("winnstr() - called: n %d \n", n));
169
170 if (!win || !wstr)
171 return ERR;
172
173 if (n < 0 || (win->_curx + n) > win->_maxx)
174 n = win->_maxx - win->_curx;
175
176 src = win->_y[win->_cury] + win->_curx;
177
178 for (i = 0; i < n; i++)
179 wstr[i] = src[i] & A_CHARTEXT;
180
181 wstr[i] = L'\0';
182
183 return i;
184 }
185
inwstr(wchar_t * wstr)186 int inwstr(wchar_t *wstr)
187 {
188 PDC_LOG(("inwstr() - called\n"));
189
190 return (ERR == winnwstr(stdscr, wstr, stdscr->_maxx)) ? ERR : OK;
191 }
192
winwstr(WINDOW * win,wchar_t * wstr)193 int winwstr(WINDOW *win, wchar_t *wstr)
194 {
195 PDC_LOG(("winwstr() - called\n"));
196
197 return (ERR == winnwstr(win, wstr, win->_maxx)) ? ERR : OK;
198 }
199
mvinwstr(int y,int x,wchar_t * wstr)200 int mvinwstr(int y, int x, wchar_t *wstr)
201 {
202 PDC_LOG(("mvinwstr() - called\n"));
203
204 if (move(y, x) == ERR)
205 return ERR;
206
207 return (ERR == winnwstr(stdscr, wstr, stdscr->_maxx)) ? ERR : OK;
208 }
209
mvwinwstr(WINDOW * win,int y,int x,wchar_t * wstr)210 int mvwinwstr(WINDOW *win, int y, int x, wchar_t *wstr)
211 {
212 PDC_LOG(("mvwinstr() - called\n"));
213
214 if (wmove(win, y, x) == ERR)
215 return ERR;
216
217 return (ERR == winnwstr(win, wstr, win->_maxx)) ? ERR : OK;
218 }
219
innwstr(wchar_t * wstr,int n)220 int innwstr(wchar_t *wstr, int n)
221 {
222 PDC_LOG(("innwstr() - called\n"));
223
224 return winnwstr(stdscr, wstr, n);
225 }
226
mvinnwstr(int y,int x,wchar_t * wstr,int n)227 int mvinnwstr(int y, int x, wchar_t *wstr, int n)
228 {
229 PDC_LOG(("mvinnstr() - called\n"));
230
231 if (move(y, x) == ERR)
232 return ERR;
233
234 return winnwstr(stdscr, wstr, n);
235 }
236
mvwinnwstr(WINDOW * win,int y,int x,wchar_t * wstr,int n)237 int mvwinnwstr(WINDOW *win, int y, int x, wchar_t *wstr, int n)
238 {
239 PDC_LOG(("mvwinnwstr() - called\n"));
240
241 if (wmove(win, y, x) == ERR)
242 return ERR;
243
244 return winnwstr(win, wstr, n);
245 }
246 #endif
247