.\"***************************************************************************
.\" Copyright (c) 2002-2003,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_wch.3x,v 1.6 2006/02/25 21:47:06 tom Exp $
.TH curs_get_wch 3X ""
.SH NAME
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR,
\fBmvwget_wch\fR,
\fBunget_wch\fR \- get (or push back) a wide character from curses terminal keyboard
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint get_wch(wint_t *\fR\fIwch\fR\fB);\fR
.br
\fBint wget_wch(WINDOW *\fR\fIwin\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR
.br
\fBint mvget_wch(int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR
.br
\fBint mvwget_wch(WINDOW *\fR\fIwin\fR\fB, int \fR\fIy\fR\fB, int \fR\fIx\fR\fB, wint_t *\fR\fIwch\fR\fB);\fR
.br
\fBint unget_wch(const wchar_t \fR\fIwch\fR\fB);\fR
.SH DESCRIPTION
The
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR, and
\fBmvwget_wch\fR
functions read a character
from the terminal associated with the current or specified window.
In no-delay mode,
if no input is waiting, the value \fBERR\fR is returned.
In delay mode,
the program waits until the system passes text through to the program.
Depending on the setting of \fBcbreak\fR,
this is after one character (cbreak mode),
or after the first newline (nocbreak mode).
In half-delay mode,
the program waits until the user types a character or the specified
timeout interval has elapsed.
.PP
Unless \fBnoecho\fR has been set,
these routines echo the character into the designated window.
.PP
If the window is not a pad and has been moved or modified since the
last call to \fBwrefresh\fR,
\fBwrefresh\fR will be called before another character is read.
.PP
If \fBkeypad\fR is enabled,
these functions respond to
the pressing of a function key by setting the object pointed to by
\fIwch\fR
to the corresponding
\fBKEY_\fR
value defined
in
\fB<curses.h>\fR
and returning
\fBKEY_CODE_YES\fR.
If a character (such as escape) that could be the
beginning of a function key is received, curses sets a timer.
If the remainder
of the sequence does arrive within the designated time, curses passes through
the character; otherwise, curses returns the function key value.
For this
reason, many terminals experience a delay between the time a user presses
the escape key and the time the escape is returned to the program.
.PP
The
\fBunget_wch\fR
function pushes the wide character
\fIwch\fR
back onto the head of the input queue, so the wide character
is returned by the next call to
\fBget_wch\fR.
The pushback of
one character is guaranteed.
If the program calls
\fBunget_wch\fR
too many times without an intervening call to
\fBget_wch\fR,
the operation may fail.
.SH NOTES
The header file
\fB<curses.h>\fR
automatically
includes the header file
\fB<stdio.h>\fR.
.PP
Applications should not define the escape key by itself as a single-character
function.
.PP
When using
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR, or
\fBmvwget_wch\fR, applications should
not use
\fBnocbreak\fR
mode and
\fBecho\fR
mode
at the same time.
Depending on the state of the tty driver when each character
is typed, the program may produce undesirable results.
.PP
All functions except \fBwget_wch\fR and \fBunget_wch\fR
may be macros.
.SH RETURN VALUES
When
\fBget_wch\fR,
\fBwget_wch\fR,
\fBmvget_wch\fR, and
\fBmvwget_wch\fR
functions successfully
report the pressing of a function key, they return
\fBKEY_CODE_YES\fR.
When they successfully report a wide character, they return
\fBOK\fR.
Otherwise, they return
\fBERR\fR.
.PP
Upon successful completion,
\fBunget_wch\fR
returns
\fBOK\fR.
Otherwise, the function returns
\fBERR\fR.
.SH SEE ALSO
\fBcurses\fR(3X),
\fBcurs_getch\fR(3X),
\fBcurs_ins_wch\fR(3X),
\fBcurs_inopts\fR(3X),
\fBcurs_move\fR(3X),
\fBcurs_refresh\fR(3X)
