.\"***************************************************************************
.\" Copyright (c) 2002-2010,2012 Free Software Foundation, Inc.              *
.\"                                                                          *
.\" Permission is hereby granted, free of charge, to any person obtaining a  *
.\" copy of this software and associated documentation files (the            *
.\" "Software"), to deal in the Software without restriction, including      *
.\" without limitation the rights to use, copy, modify, merge, publish,      *
.\" distribute, distribute with modifications, sublicense, and/or sell       *
.\" copies of the Software, and to permit persons to whom the Software is    *
.\" furnished to do so, subject to the following conditions:                 *
.\"                                                                          *
.\" The above copyright notice and this permission notice shall be included  *
.\" in all copies or substantial portions of the Software.                   *
.\"                                                                          *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
.\"                                                                          *
.\" Except as contained in this notice, the name(s) of the above copyright   *
.\" holders shall not be used in advertising or otherwise to promote the     *
.\" sale, use or other dealings in this Software without prior written       *
.\" authorization.                                                           *
.\"***************************************************************************
.\"
.\" $Id: curs_get_wstr.3x,v 1.9 2012/11/03 23:03:59 tom Exp $
.TH curs_get_wstr 3X ""
.na
.hy 0
.SH NAME
\fBget_wstr\fR,
\fBgetn_wstr\fR,
\fBwget_wstr\fR,
\fBwgetn_wstr\fR,
\fBmvget_wstr\fR,
\fBmvgetn_wstr\fR,
\fBmvwget_wstr\fR,
\fBmvwgetn_wstr\fR \- get an array of wide characters from a curses terminal keyboard
.ad
.hy
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.sp
\fBint get_wstr(wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint getn_wstr(wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint wget_wstr(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint wgetn_wstr(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvget_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvgetn_wstr(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.br
\fBint mvwget_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB);\fR
.br
\fBint mvwgetn_wstr(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwstr\fR\fB, int \fR\fIn\fR\fB);\fR
.fi
.SH DESCRIPTION
The effect of
\fBget_wstr\fR
is as though a series of calls
to
\fBget_wch\fR
were made, until a newline, other end-of-line, or end-of-file condition is processed.
An end-of-file condition is represented by \fBWEOF\fR, as defined in \fB<wchar.h>\fR.
The newline and end-of-line conditions are represented by the \fB\\n\fR \fBwchar_t\fR value.
In all instances, the end of the string is terminated by a null \fBwchar_t\fR.
The routine places resulting values in the area pointed to by \fIwstr\fR.
.PP
The user's erase and kill characters are interpreted.  If keypad
mode is on for the window, \fBKEY_LEFT\fR and \fBKEY_BACKSPACE\fR
are both considered equivalent to the user's kill character.
.PP
Characters input are echoed only if \fBecho\fR is currently on.  In that case,
backspace is echoed as deletion of the previous character (typically a left
motion).
.PP
The effect of
\fBwget_wstr\fR
is as though a series of
calls to
\fBwget_wch\fR
were made.
.PP
The effect of
\fBmvget_wstr\fR
is as though a call to
\fBmove\fR
and then a series of calls to
\fBget_wch\fR
were
made.
.PP
The effect of
\fBmvwget_wstr\fR
is as though a call to
\fBwmove\fR
and then a series of calls to
\fBwget_wch\fR
were made.
.PP
The
\fBgetn_wstr\fR,
\fBmvgetn_wstr\fR,
\fBmvwgetn_wstr\fR, and
\fBwgetn_wstr\fR
functions are identical
to the
\fBget_wstr\fR,
\fBmvget_wstr\fR,
\fBmvwget_wstr\fR, and
\fBwget_wstr\fR
functions, respectively,
except that the
\fB*n_*\fR
versions read at most
\fIn\fR
characters, letting the application prevent overflow of the
input buffer.
.SH NOTES
Using
\fBget_wstr\fR,
\fBmvget_wstr\fR,
\fBmvwget_wstr\fR, or
\fBwget_wstr\fR
to read a line that
overflows the array pointed to by
\fBwstr\fR
causes undefined
results.
The use of
\fBgetn_wstr\fR,
\fBmvgetn_wstr\fR,
\fBmvwgetn_wstr\fR, or
\fBwgetn_wstr\fR, respectively, is recommended.
.PP
These functions cannot return \fBKEY_\fR values because there
is no way to distinguish a \fBKEY_\fR value from a valid \fBwchar_t\fR value.
.PP
All of these routines except \fBwgetn_wstr\fR may be macros.
.SH RETURN VALUE
All of these functions return \fBOK\fR upon successful completion.
Otherwise, they return \fBERR\fR.
.PP
Functions using a window parameter return an error if it is null.
.RS
.TP 5
\fBwgetn_wstr\fP
returns an error if the associated call to \fBwget_wch\fP failed.
.RE
.PP
Functions with a "mv" prefix first perform a cursor movement using
\fBwmove\fP, and return an error if the position is outside the window,
or if the window pointer is null.
.SH PORTABILITY
These functions are described in The Single Unix Specification, Version 2.
No error conditions are defined.
This implementation returns ERR if the window pointer is null,
or if the lower-level \fBwget_wch\fR call returns an ERR.
In the latter case,
an ERR return without other data is treated as an end-of-file condition,
and the returned array contains a \fBWEOF\fR followed by a null \fBwchar_t\fR.
.PP
X/Open curses documents these functions to pass an array of \fBwchar_t\fR,
but all of the vendors implement this using \fBwint_t\fR.
.SH SEE ALSO
Functions:
\fBcurses\fR(3X),
\fBcurs_get_wch\fR(3X),
\fBcurs_getstr\fR(3X).
