.\"***************************************************************************
.\" Copyright (c) 2001-2006,2008 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_getcchar.3x,v 1.11 2008/05/17 19:37:05 tom Exp $
.TH curs_getcchar 3X ""
.SH NAME
\fBgetcchar\fP,
\fBsetcchar\fP \- Get a wide character string and rendition from a \fBcchar_t\fP or set a \fBcchar_t\fP from a wide-character string
.SH SYNOPSIS
\fB#include <curses.h>\fP
.sp
\fBint getcchar(\fP
.br
.B "        const cchar_t *\fIwcval\fP,"
.br
.B "        wchar_t *\fIwch\fP,"
.br
.B "        attr_t *\fIattrs\fP,"
.br
.B "        short *\fIcolor_pair\fP,"
.br
.B "        void *\fIopts\fP );"
.sp
.B "int setcchar("
.br
.B "        cchar_t *\fIwcval\fP,"
.br
.B "        const wchar_t *\fIwch\fP,"
.br
.B "        const attr_t \fIattrs\fP,"
.br
.B "        short \fIcolor_pair\fP,"
.br
.B "        void *\fIopts\fP );"
.SH DESCRIPTION
.PP
The \fBgetcchar\fP function gets a wide-character string
and rendition from a \fBcchar_t\fP argument.
When \fIwch\fP is not a null pointer,
the \fBgetcchar\fP function does the following:
.TP 5
-
Extracts information from a \fBcchar_t\fP value \fIwcval\fP
.TP 5
-
Stores the character attributes in the location pointed to by \fIattrs\fP
.TP 5
-
Stores the color-pair in the location pointed to by \fIcolor_pair\fP
.TP 5
-
Stores the wide-character string,
characters referenced by \fIwcval\fP, into the array pointed to by \fIwch\fP.
.PP
When
\fIwch\fP
is a null pointer, the
\fBgetcchar\fP
function does the following:
.TP 5
-
Obtains the number of wide characters pointed to by \fIwcval\fP
.TP 5
-
Does not change the data referenced by
\fIattrs\fP
or
\fIcolor_pair\fP
.PP
The \fBsetcchar\fP function initializes the location pointed to by \fIwcval\fP
by using:
.TP 5
-
The character attributes in
\fIattrs\fP
.TP 5
-
The color pair in
\fIcolor_pair\fP
.TP 5
-
The wide-character string pointed to by \fIwch\fP.
The string must be L'\\0' terminated,
contain at most one spacing character,
which must be the first.
.IP
Up to \fBCCHARW_MAX\fP-1 nonspacing characters may follow.
Additional nonspacing characters are ignored.
.IP
The string may contain a single control character instead.
In that case, no nonspacing characters are allowed.
.SH NOTES
.PP
The \fIopts\fP argument is reserved for future use.
Currently, an application must provide a null pointer as \fIopts\fP.
.PP
The \fIwcval\fP argument may be a value generated by a call to
\fBsetcchar\fP or by a function that has a \fBcchar_t\fP output argument.
If \fIwcval\fP is constructed by any other means, the effect is unspecified.
.SH RETURN VALUES
.PP
When \fIwch\fP is a null pointer,
\fBgetcchar\fP returns the number of wide characters referenced by
\fIwcval\fP.
.PP
When \fIwch\fP is not a null pointer,
\fBgetcchar\fP returns \fBOK\fP upon successful completion,
and \fBERR\fP otherwise.
.PP
Upon successful completion, \fBsetcchar\fP returns \fBOK\fP.
Otherwise, it returns \fBERR\fP.
.SH SEE ALSO
.PP
Functions:
\fBcurs_attr\fR(3X),
\fBcurs_color\fR(3X),
\fBcurses\fR(3X),
\fBwcwidth\fR(3).
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
.\"# mode:nroff
.\"# fill-column:79
.\"# End:
