.\"***************************************************************************
.\" Copyright (c) 2002-2005,2006 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.6 2006/02/25 21:49:19 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 VALUES
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
.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).
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
.\"# mode:nroff
.\"# fill-column:79
.\"# End:
