.\"***************************************************************************
.\" Copyright (c) 1998-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_inchstr.3x,v 1.12 2006/12/02 17:00:58 tom Exp $
.TH curs_inchstr 3X ""
.na
.hy 0
.SH NAME
\fBinchstr\fR,
\fBinchnstr\fR,
\fBwinchstr\fR,
\fBwinchnstr\fR,
\fBmvinchstr\fR,
\fBmvinchnstr\fR,
\fBmvwinchstr\fR,
\fBmvwinchnstr\fR - get a string of characters (and attributes) from a \fBcurses\fR window
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.sp
\fBint inchstr(chtype *chstr);\fR
.br
\fBint inchnstr(chtype *chstr, int n);\fR
.br
\fBint winchstr(WINDOW *win, chtype *chstr);\fR
.br
\fBint winchnstr(WINDOW *win, chtype *chstr, int n);\fR
.br
\fBint mvinchstr(int y, int x, chtype *chstr);\fR
.br
\fBint mvinchnstr(int y, int x, chtype *chstr, int n);\fR
.br
\fBint mvwinchstr(WINDOW *win, int y, int x, chtype *chstr);\fR
.br
\fBint mvwinchnstr(WINDOW *win, int y, int x, chtype *chstr, int n);\fR
.br
.SH DESCRIPTION
These routines return a NULL-terminated array of \fBchtype\fR quantities,
starting at the current cursor position in the named window and ending at the
right margin of the window.  The four functions with \fIn\fR as
the last argument, return a leading substring at most \fIn\fR characters long
(exclusive of the trailing (chtype)0).
Constants defined in \fB<curses.h>\fR can be used with the \fB&\fR (logical
AND) operator to extract the character or the attribute alone from any position
in the \fIchstr\fR [see \fBcurs_inch\fR(3X)].
.SH RETURN VALUE
All routines return the integer \fBERR\fR upon failure and an integer value
other than \fBERR\fR upon successful completion (the number of characters
retrieved, exclusive of the trailing 0).
.PP
No error conditions are defined.
If the \fIchstr\fP parameter is null,
no data is returned,
and the return value is zero.
.SH NOTES
Note that all routines except \fBwinchnstr\fR may be macros.  SVr4 does not
document whether the result string is 0-terminated; it does not document
whether a length limit argument includes any trailing 0; and it does not
document the meaning of the return value.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.  It is no
more specific than the SVr4 documentation on the trailing 0.  It does specify
that the successful return of the functions is \fBOK\fR.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_inch\fR(3X).
.PP
Comparable functions in the wide-character (ncursesw) library are
described in
\fBcurs_in_wchstr\fR(3X).
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
.\"# mode:nroff
.\"# fill-column:79
.\"# End:
