.\"***************************************************************************
.\" Copyright (c) 1998-2010,2015 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_termattrs.3x,v 1.13 2015/07/21 00:03:34 tom Exp $
.TH curs_termattrs 3X ""
.SH NAME
\fBbaudrate\fR,
\fBerasechar\fR,
\fBerasewchar\fR,
\fBhas_ic\fR,
\fBhas_il\fR,
\fBkillchar\fR,
\fBkillwchar\fR,
\fBlongname\fR,
\fBterm_attrs\fR,
\fBtermattrs\fR,
\fBtermname\fR \- \fBcurses\fR environment query routines
.SH SYNOPSIS
\fB#include <curses.h>\fR
.PP
\fBint baudrate(void);\fR
.br
\fBchar erasechar(void);\fR
.br
\fBint erasewchar(wchar_t *\fR\fIch\fR\fB);\fR
.br
\fBbool has_ic(void);\fR
.br
\fBbool has_il(void);\fR
.br
\fBchar killchar(void);\fR
.br
\fBint killwchar(wchar_t *\fR\fIch\fR\fB);\fR
.br
\fBchar *longname(void);\fR
.br
\fBattr_t term_attrs(void);\fR
.br
\fBchtype termattrs(void);\fR
.br
\fBchar *termname(void);\fR
.br
.SH DESCRIPTION
.SS baudrate
The \fBbaudrate\fR routine returns the output speed of the terminal.  The
number returned is in bits per second, for example \fB9600\fR, and is an
integer.
.SS erasechar, erasewchar
.PP
The \fBerasechar\fR routine returns the user's current erase character.
.PP
The \fBerasewchar\fR routine stores the current erase character
in the location referenced by \fIch\fR.
If no erase character has been defined, the routine fails
and the location referenced by \fIch\fR is not changed.
.SS has_is, has_il
.PP
The \fBhas_ic\fR routine is true if the terminal has insert- and delete-
character capabilities.
.PP
The \fBhas_il\fR routine is true if the terminal has insert- and delete-line
capabilities, or can simulate them using scrolling regions.  This might
be used to determine if it would be appropriate to turn on physical
scrolling using \fBscrollok\fR.
.SS killchar, killwchar
.PP
The \fBkillchar\fR routine returns the user's current line kill character.
.PP
The \fBkillwchar\fR routine stores the current line-kill character
in the location referenced by \fIch\fR.
If no line-kill character has been defined,
the routine fails and the location referenced by \fIch\fR is not changed.
.SS longname
.PP
The \fBlongname\fR routine returns a pointer to a static area
containing a verbose description of the current terminal.  The maximum
length of a verbose description is 128 characters.  It is defined only
after the call to \fBinitscr\fR or \fBnewterm\fR.  The area is
overwritten by each call to \fBnewterm\fR and is not restored by
\fBset_term\fR, so the value should be saved between calls to
\fBnewterm\fR if \fBlongname\fR is going to be used with multiple
terminals.
.SS termattrs, term_attrs
.PP
If a given terminal does not support a video attribute that an
application program is trying to use, \fBcurses\fR may substitute a
different video attribute for it.
The \fBtermattrs\fR and \fBterm_attrs\fR functions
return a logical \fBOR\fR of all video attributes supported by the
terminal using \fIA_\fR and \fIWA_\fR constants respectively.
This information is useful when a \fBcurses\fR program
needs complete control over the appearance of the screen.
.SS termname
.PP
The \fBtermname\fR routine returns the terminal name used by \fBsetupterm\fR.
.SH RETURN VALUE
\fBlongname\fR and \fBtermname\fR return \fBNULL\fR on error.
.PP
Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR
(SVr4 only specifies "an integer value other than \fBERR\fR") upon successful
completion.
.SH NOTES
Note that \fBtermattrs\fR may be a macro.
.SH PORTABILITY
The XSI Curses standard, Issue 4 describes these functions.  It changes the
return type of \fBtermattrs\fR to the new type \fBattr_t\fR.
Most versions of curses truncate the result returned by \fBtermname\fR to
14 characters.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_outopts\fR(3X)
