'\" t
.\"***************************************************************************
.\" Copyright (c) 1998-2006,2010 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_inch.3x,v 1.17 2010/12/04 18:36:44 tom Exp $
.TH curs_inch 3X ""
.SH NAME
\fBinch\fR,
\fBwinch\fR,
\fBmvinch\fR,
\fBmvwinch\fR \- get a character and attributes from a \fBcurses\fR window
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBchtype inch(void);\fR
.br
\fBchtype winch(WINDOW *win);\fR
.br
\fBchtype mvinch(int y, int x);\fR
.br
\fBchtype mvwinch(WINDOW *win, int y, int x);\fR
.br
.SH DESCRIPTION
These routines return the character, of type \fBchtype\fR, at the current
position in the named window.  If any attributes are set for that position,
their values are OR'ed into the value returned.  Constants defined in
\fB<curses.h>\fR can be used with the \fB&\fR (logical AND) operator to
extract the character or attributes alone.
.
.SS Attributes
The following bit-masks may be AND-ed with characters returned by \fBwinch\fR.
.
.TS
l l .
\fBA_CHARTEXT\fR	Bit-mask to extract character
\fBA_ATTRIBUTES\fR	Bit-mask to extract attributes
\fBA_COLOR\fR	Bit-mask to extract color-pair field information
.TE
.SH RETURN VALUE
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 NOTES
Note that all of these routines may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
.SH SEE ALSO
\fBcurses\fR(3X).
.PP
Comparable functions in the wide-character (ncursesw) library are
described in
\fBcurs_in_wch\fR(3X).
