/****************************************************************************
- * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2010,2011 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 *
* and: Thomas E. Dickey 1996-on *
****************************************************************************/
-/* $Id: curses.h.in,v 1.219 2011/01/01 21:52:45 tom Exp $ */
+/* $Id: curses.h.in,v 1.227 2011/10/29 20:01:35 tom Exp $ */
#ifndef __NCURSES_H
#define __NCURSES_H
/*
* With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
- * conflicting) when _XOPEN_SOURCE is 500 or greater.
+ * conflicting) when _XOPEN_SOURCE is 500 or greater. If NCURSES_WIDECHAR is
+ * not already defined, e.g., if the platform relies upon nonstandard feature
+ * test macros, define it at this point if the standard feature test macros
+ * indicate that it should be defined.
*/
-#undef NCURSES_WIDECHAR
-#if defined(_XOPEN_SOURCE_EXTENDED) || defined(_XPG5)
-#define NCURSES_WIDECHAR
+#ifndef NCURSES_WIDECHAR
+#if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
+#define NCURSES_WIDECHAR 1
+#else
+#define NCURSES_WIDECHAR 0
#endif
+#endif /* NCURSES_WIDECHAR */
#include <stdarg.h> /* we need va_list */
-#ifdef NCURSES_WIDECHAR
+#if NCURSES_WIDECHAR
#include <stddef.h> /* we want wchar_t */
#endif
typedef chtype attr_t; /* ...must be at least as wide as chtype */
-#ifdef NCURSES_WIDECHAR
+#if NCURSES_WIDECHAR
#if @NCURSES_LIBUTF8@
#ifdef mblen /* libutf8.h defines it w/o undefining first */
/*
* cchar_t stores an array of CCHARW_MAX wide characters. The first is
* normally a spacing character. The others are non-spacing. If those
- * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
+ * (spacing and nonspacing) do not fill the array, a null L'\0' follows.
* Otherwise, a null is assumed to follow when extracting via getcchar().
*/
#define CCHARW_MAX @NCURSES_CCHARW_MAX@
NCURSES_SIZE_T _yoffset; /* real begy is _begy + _yoffset */
-#ifdef NCURSES_WIDECHAR
+#if NCURSES_WIDECHAR
cchar_t _bkgrnd; /* current background char/attribute pair */
#if @NCURSES_EXT_COLORS@
int _color; /* current color-pair for non-space character */
/*
* vid_attr() was implemented originally based on a draft of X/Open curses.
*/
-#ifndef NCURSES_WIDECHAR
+#if !NCURSES_WIDECHAR
#define vid_attr(a,pair,opts) vidattr(a)
#endif
#define wattroff(win,at) wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
#if !NCURSES_OPAQUE
-#if defined(NCURSES_WIDECHAR) && @NCURSES_EXT_COLORS@
+#if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
#define wattrset(win,at) ((win) \
? ((win)->_color = PAIR_NUMBER(at), \
(win)->_attrs = NCURSES_CAST(attr_t, at), \
#define winsstr(w, s) winsnstr(w, s, -1)
#if !NCURSES_OPAQUE
-#define redrawwin(win) wredrawln(win, 0, (win)->_maxy+1)
+#define redrawwin(win) wredrawln(win, 0, ((win) ? (win)->_maxy+1 : -1))
#endif /* NCURSES_OPAQUE */
#define waddstr(win,str) waddnstr(win,str,-1)
* Some wide-character functions can be implemented without the extensions.
*/
#if !NCURSES_OPAQUE
-#define getbkgd(win) ((win)->_bkgd)
+#define getbkgd(win) ((win) ? ((win)->_bkgd) : 0)
#endif /* NCURSES_OPAQUE */
#define slk_attr_off(a,v) ((v) ? ERR : slk_attroff(a))
#define slk_attr_on(a,v) ((v) ? ERR : slk_attron(a))
#if !NCURSES_OPAQUE
-#if defined(NCURSES_WIDECHAR) && @NCURSES_EXT_COLORS@
-#define wattr_set(win,a,p,opts) ((win)->_attrs = ((a) & ~A_COLOR), \
- (win)->_color = (p), \
+#if NCURSES_WIDECHAR && @NCURSES_EXT_COLORS@
+#define wattr_set(win,a,p,opts) (((win) \
+ ? ((win)->_attrs = ((a) & ~A_COLOR), \
+ (win)->_color = (p)) \
+ : OK), \
OK)
-#define wattr_get(win,a,p,opts) ((void)((a) != (void *)0 && (*(a) = (win)->_attrs)), \
- (void)((p) != (void *)0 && (*(p) = (short)(win)->_color)), \
+#define wattr_get(win,a,p,opts) ((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
+ (void)(((p) != (void *)0) ? (*(p) = (win) ? (short)(win)->_color : 0) : OK), \
OK)
#else
-#define wattr_set(win,a,p,opts) ((win)->_attrs = (((a) & ~A_COLOR) | (attr_t)COLOR_PAIR(p)), OK)
-#define wattr_get(win,a,p,opts) ((void)((a) != (void *)0 && (*(a) = (win)->_attrs)), \
- (void)((p) != (void *)0 && (*(p) = (short)PAIR_NUMBER((win)->_attrs))), \
+#define wattr_set(win,a,p,opts) (((win) \
+ ? ((win)->_attrs = (((a) & ~A_COLOR) | (attr_t)COLOR_PAIR(p))) \
+ : OK), \
+ OK)
+#define wattr_get(win,a,p,opts) ((void)(((a) != (void *)0) ? (*(a) = (win) ? (win)->_attrs : 0) : OK), \
+ (void)(((p) != (void *)0) ? (*(p) = (win) ? (short)PAIR_NUMBER((win)->_attrs) : 0) : OK), \
OK)
#endif
#endif /* NCURSES_OPAQUE */