blob: 409c297fb233ad58c34a5b270453a4806ae26fe0 [file] [log] [blame]
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05301.\"***************************************************************************
micky3879b9f5e72025-07-08 18:04:53 -04002.\" Copyright 2018-2023,2024 Thomas E. Dickey *
3.\" Copyright 1998-2010,2017 Free Software Foundation, Inc. *
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +05304.\" *
5.\" Permission is hereby granted, free of charge, to any person obtaining a *
6.\" copy of this software and associated documentation files (the *
7.\" "Software"), to deal in the Software without restriction, including *
8.\" without limitation the rights to use, copy, modify, merge, publish, *
9.\" distribute, distribute with modifications, sublicense, and/or sell *
10.\" copies of the Software, and to permit persons to whom the Software is *
11.\" furnished to do so, subject to the following conditions: *
12.\" *
13.\" The above copyright notice and this permission notice shall be included *
14.\" in all copies or substantial portions of the Software. *
15.\" *
16.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
17.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
18.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
19.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
20.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
21.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
22.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
23.\" *
24.\" Except as contained in this notice, the name(s) of the above copyright *
25.\" holders shall not be used in advertising or otherwise to promote the *
26.\" sale, use or other dealings in this Software without prior written *
27.\" authorization. *
28.\"***************************************************************************
29.\"
micky3879b9f5e72025-07-08 18:04:53 -040030.\" $Id: curs_scanw.3x,v 1.53 2024/04/20 19:18:18 tom Exp $
31.TH curs_scanw 3X 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
32.ie \n(.g \{\
33.ds `` \(lq
34.ds '' \(rq
35.\}
36.el \{\
37.ie t .ds `` ``
38.el .ds `` ""
39.ie t .ds '' ''
40.el .ds '' ""
41.\}
42.
43.de bP
44.ie n .IP \(bu 4
45.el .IP \(bu 2
46..
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053047.SH NAME
micky3879b9f5e72025-07-08 18:04:53 -040048\fB\%scanw\fP,
49\fB\%wscanw\fP,
50\fB\%mvscanw\fP,
51\fB\%mvwscanw\fP,
52\fB\%vwscanw\fP,
53\fB\%vw_scanw\fP \-
54read formatted input from a \fIcurses\fR window
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053055.SH SYNOPSIS
micky3879b9f5e72025-07-08 18:04:53 -040056.nf
57\fB#include <curses.h>
58.PP
59\fBint scanw(const char *\fIfmt\fP, ...);
60\fBint wscanw(WINDOW *\fIwin\fP, const char *\fIfmt\fP, ...);
61\fBint mvscanw(int \fIy\fP, int \fIx\fP, const char *\fIfmt\fP, ...);
62\fBint mvwscanw(WINDOW *\fIwin\fP, int \fIy\fP, int \fIx\fP, const char *\fIfmt\fP, ...);
63.PP
64\fBint vw_scanw(WINDOW *\fIwin\fP, const char *\fIfmt\fP, va_list \fIvarglist\fP);
65.PP
66\fI/* obsolete */\fP
67\fBint vwscanw(WINDOW *\fIwin\fP, const char *\fIfmt\fP, va_list \fIvarglist\fP);
68.fi
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053069.SH DESCRIPTION
micky3879b9f5e72025-07-08 18:04:53 -040070\fB\%scanw\fP,
71\fB\%wscanw\fP,
72\fB\%mvscanw\fP,
73and
74\fB\%mvwscanw\fP
75are analogous to \fI\%scanf\fP(3).
76In effect,
77they call \fB\%wgetstr\fP(3X) with
78.I win
79(or
80.BR \%stdscr )
81as its first argument,
82then attempt conversion of the resulting string with \fI\%vsscanf\fP(3).
83Fields in the string that do not map to a variable in the \fIfmt\fP
84parameter are discarded.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053085.PP
micky3879b9f5e72025-07-08 18:04:53 -040086\fB\%vwscanw\fP
87and
88\fB\%vw_scanw\fP are analogous to \fI\%vscanf\fP(3),
89and perform a \fB\%wscanw\fP using a variable argument list.
90The third argument is a \fI\%va_list\fP,
91a pointer to a list of arguments,
92as defined in \fI\%stdarg.h\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053093.SH RETURN VALUE
micky3879b9f5e72025-07-08 18:04:53 -040094These functions return
95.B ERR
96upon failure and otherwise a count of successful conversions;
97this quantity may be zero.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +053098.PP
micky3879b9f5e72025-07-08 18:04:53 -040099In
100.IR \%ncurses ,
101failure occurs if \fI\%vsscanf\fP(3) returns
102\fBEOF\fP,
103or if the window pointer
104.I win
105is null.
Steve Kondikae271bc2015-11-15 02:50:53 +0100106.PP
micky3879b9f5e72025-07-08 18:04:53 -0400107Functions prefixed with \*(``mv\*('' first perform cursor movement and
108fail if the position
109.RI ( y ,
110.IR x )
111is outside the window boundaries.
112.SH NOTES
113No wide character counterpart functions are defined by the
114\*(``wide\*(''
115.I \%ncurses
116configuration nor by any standard.
117They are unnecessary:
118to retrieve and convert a wide-character string from a
119.I curses
120terminal keyboard,
121use these functions with the \fI\%scanf\fP(3) conversions \*(``%lc\*(''
122and \*(``%ls\*('' for wide characters and strings,
123respectively.
124.PP
125.I \%ncurses
126implements \fI\%vsscanf\fP(3) internally if it is unavailable when the
127library is configured.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530128.SH PORTABILITY
micky3879b9f5e72025-07-08 18:04:53 -0400129X/Open Curses,
130Issue 4 describes these functions.
131It specifies no error conditions for them.
132.PP
133.I \%ncurses
134defines \fB\%vw_scanw\fP and \fB\%vwscanw\fP identically to support
135legacy applications.
136However,
137the latter is obsolete.
138.bP
139X/Open Curses,
140Issue 4 Version 2 (1996),
141marked \fB\%vwscanw\fP as requiring \fI\%varargs.h\fP and
142\*(``TO BE WITHDRAWN\*('',
143and specified \fB\%vw_scanw\fP using the \fI\%stdarg.h\fP interface.
144.bP
145X/Open Curses,
146Issue 5,
147Draft 2 (December 2007) marked \fB\%vwscanw\fP (along with
148\fB\%vwscanw\fP and the \fItermcap\fP interface) as withdrawn.
149After incorporating review comments,
150this became
151X/Open Curses, Issue 7 (2009).
152.bP
153.I \%ncurses
154provides \fB\%vwscanw\fP,
155but marks it as deprecated.
156.PP
157X/Open Curses Issues 4 and 7 both state that these functions return
158\fBERR\fP or \fBOK\fP.
159This is likely an erratum.
160.bP
161Since the underlying \fI\%scanf\fP(3) returns the number of successful
162conversions,
163and SVr4
164.I curses
165was documented to use this feature,
166this may have been an editorial solecism introduced by X/Open,
167rather than an intentional change.
168.bP
169This implementation retains compatibility with SVr4
170.IR curses .
171As of 2018,
172NetBSD
173.I curses
174also returns the number of successful conversions.
175Both
176.I \%ncurses\fP
177and NetBSD
178.I curses
179call \fI\%vsscanf\fP(3) to scan the string,
180which returns \fBEOF\fP on error.
181.bP
182Portable applications should test only if the return value is \fBERR\fP,
183and not compare it to \fBOK\fP,
184since that value (zero) might be misleading.
185.IP
186One portable way to get useful results would be to use a \*(``%n\*(''
187conversion at the end of the format string,
188and check the value of the corresponding variable to determine how many
189conversions succeeded.
190.SH HISTORY
191\fB\%scanw\fP was implemented in 4BSD
192(November 1980);
193.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=4BSD/usr/src/lib/\
194.\" libcurses/scanw.c
195that early version of
196.I curses
197preceded the ANSI C standard of 1989.
198The function was unused in Berkeley distributions for over ten years,
199until 4.4BSD,
200which employed it in a game.
201The 4BSD \fB\%scanw\fP did not use \fI\%varargs.h\fP,
202though that had been available since Seventh Edition Unix (1979).
203.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/include/\
204.\" varargs.h
205In 1991
206(a couple of years after SVr4 was generally available,
207and after the C standard was published),
208other developers updated the library,
209using \fI\%stdarg.h\fP internally in 4.4BSD
210.IR curses .
211Even with this improvement,
212BSD
213.I curses
214did not use function prototypes
215(nor even declare functions)
216in \fI\%curses.h\fP until 1992.
217.PP
218SVr2 (1984) documented \fB\%scanw\fP and \fB\%wscanw\fP tersely as
219\*(``scanf through \fB\%stdscr\fP\*('' and
220\*(``scanf through \fIwin\fP\*('',
221respectively.
222.PP
223SVr3 (1987) added
224\fB\%mvscanw\fP, and
225\fB\%mvwscanw\fP, stating
226.RS
227.PP
228\*(``[t]hese routines correspond to \fIscanf\fP(3S),
229as do their arguments and return values.
230\fB\%wgetstr\fP() is called on the window,
231and the resulting line is used as input for the scan.\*(''
232.RE
233.PP
234SVr3 also implemented \fB\%vwscanw\fP,
235describing its third parameter as a \fI\%va_list\fP,
236defined in \fI\%varargs.h\fP,
237and referred the reader to the manual pages for \fI\%varargs\fP and
238\fI\%vprintf\fP for detailed descriptions.
239(Because the SVr3 documentation does not mention \fI\%vscanf\fP,
240the reference to \fI\%vprintf\fP might not be an error).
241.PP
242SVr4 (1989) introduced no new variations of \fI\%scanw\fP,
243but provided for using either \fI\%varargs.h\fP or \fI\%stdarg.h\fP to
244define the \fI\%va_list\fP type.
245.\" either header declares "va_list", but only one can be used
246.PP
247X/Open Curses, Issue 4 (1995),
248defined \fI\%vw_scanw\fP to replace \fI\%vwscanw\fP,
249stating that its \fI\%va_list\fP type is defined in \fI\%stdarg.h\fP.
Amit Daniel Kachhape6a01f52011-07-20 11:45:59 +0530250.SH SEE ALSO
micky3879b9f5e72025-07-08 18:04:53 -0400251\fB\%curses\fP(3X),
252\fB\%curs_getstr\fP(3X),
253\fB\%curs_printw\fP(3X),
254\fB\%scanf\fP(3),
255\fB\%vscanf\fP(3)