+/*
+ * Workaround for clean(er) compile with Solaris's legacy curses.
+ * The same would be needed for HPUX 10.20
+ */
+#ifndef TPUTS_ARG
+#if defined(sun) && !defined(_XOPEN_CURSES) && !defined(NCURSES_VERSION_PATCH)
+#define TPUTS_ARG char
+extern char *tgoto(char *, int, int); /* available, but not prototyped */
+#else
+#define TPUTS_ARG int
+#endif
+#endif
+
+/*
+ * Workarounds for Solaris's X/Open curses
+ */
+#if defined(sun) && defined(_XOPEN_CURSES) && !defined(NCURSES_VERSION_PATCH)
+#if !defined(KEY_MIN) && defined(__KEY_MIN)
+#define KEY_MIN __KEY_MIN
+#endif
+#if !defined(KEY_MAX) && defined(__KEY_MIN)
+#define KEY_MAX __KEY_MAX
+#endif
+#endif
+
+/*
+ * ncurses uses const in some places where X/Open does (or did) not allow.
+ */
+#ifdef NCURSES_VERSION
+#define CONST_MENUS const
+#else
+#define CONST_MENUS /* nothing */
+#endif
+
+/*
+ * Simplify setting up demo of threading with these macros.
+ */
+#if !defined(NCURSES_VERSION_PATCH) || (NCURSES_VERSION_PATCH < 20070915) || !NCURSES_EXT_FUNCS
+typedef int (*NCURSES_CALLBACK)(WINDOW *, void *);
+#define WANT_USE_WINDOW() \
+static int \
+use_window(WINDOW *win, int (*func) (WINDOW *, void *), void *data) \
+{ \
+ return func(win, data); \
+} \
+ extern void _nc_want_use_window(void)
+#define USING_WINDOW(w,func) use_window(w, (NCURSES_CALLBACK) func, w)
+#else
+#define WANT_USE_WINDOW() /* nothing */ \
+ extern void _nc_want_use_window(void)
+#define USING_WINDOW(w,func) func(w)
+#endif
+
+