curs_getcchar.3x - Man Page

convert between a wide-character string and a curses complex character

Synopsis

#include <curses.h>

int gettchar(const cchar_t * wch, wchar_t * wc,
      attr_t * attrs, short * pair, void * opts);
int settchar(cchar_t * wch, const wchar_t * wc,
      const attr_t attrs, short pair, const void * opts);

Description

The curses complex character data type cchar_t is a structure type comprising a wide-character string, a set of attributes, and a color pair identifier. The cchar_t structure is opaque; do not attempt to access its members directly. The library provides functions to manipulate this type.

getcchar

getcchar destructures a cchar_t into its components.

If wc is not a null pointer, getcchar:

  • stores the wide-character string in the curses complex character wch into wc;
  • stores the attributes in attrs; and
  • stores the color pair identifier in pair.

If wc is a null pointer, getcchar counts the wchar_t wide characters in wch, returns that value, and leaves attrs and pair unchanged.

setcchar

setcchar constructs a curses complex character wch from the components wc, attrs, and pair. The wide-character string wch must be terminated with a null wide character L'\0' and must contain at most one spacing character, which, if present, must be the first wide character in the string.

Up to CCHARW_MAX - 1 non-spacing characters may follow (see curs_variables(3X)). ncurses ignores any additional non-spacing characters.

The string may contain a single control character instead. In that case, no non-spacing characters are allowed.

Return Value

If getcchar is passed a null pointer as its wc argument, it returns the number of wide characters for a given wch that it would store in wc, counting a trailing null wide character. If getcchar is not passed a null pointer as its wc argument, it returns OK on success and ERR on failure.

In ncurses, getcchar returns ERR if either attrs or pair is a null pointer and wc is not.

setcchar returns OK on success and ERR on failure.

In ncurses, setcchar returns ERR if

Notes

wch may be a value stored by setcchar or another curses function with a writable cchar_t argument. If wch is constructed by any other means, the library's behavior is unspecified.

Extensions

X/Open Curses documents the opts argument as reserved for future use, saying that it must be a null pointer. The ncurses 6 ABI uses it with functions that have a color pair parameter to support extended color pairs.

Portability

Applications employing ncurses extensions should condition their use on the visibility of the NCURSES_VERSION preprocessor macro.

These functions are described in X/Open Curses Issue 4. It specifies no error conditions for them.

X/Open Curses does not detail the layout of the cchar_t structure, describing only its minimal required contents:

Non-spacing characters are optional, in the sense that zero or more may be stored in a cchar_t. XOpen/Curses specifies a limit:

Implementations may limit the number of non-spacing characters that can be associated with a spacing character, provided any limit is at least 5.

Then-contemporary Unix implementations adhered to that limit.

ncurses defined its cchar_t in 1995 using 5 as the total of spacing and non-spacing characters (CCHARW_MAX). That was probably due to a misreading of the AIX 4 header files, because the X/Open Curses document was not generally available at that time. Later (in 2002), this detail was overlooked when work began to implement the functions using the structure.

In practice, a mere four non-spacing characters may seem adequate. X/Open Curses documents possible applications of non-spacing characters, including their use as ligatures (a feature apparently not supported by any curses implementation). Unicode does not limit the (analogous) number of combining characters in a grapheme cluster; some applications may be affected. ncurses can be compiled with a different CCHARW_MAX value; doing so alters the library's ABI.

History

These functions were initially specified by X/Open Curses Issue 4 (1995).

See Also

curses(3X), curs_attr(3X), curs_color(3X), wcwidth(3)

Referenced By

The man pages getcchar.3x(3), gettchar.3x(3), setcchar.3x(3) and settchar.3x(3) are aliases of curs_getcchar.3x(3).

2025-01-18 ncurses 6.5 Library calls