X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=include%2Fcurses.h.in;h=b86b9ffda85d23542540122ead50a0a80744cc5d;hb=85b1a478852e6473f6f698af5f6fca055f43f21c;hp=a25b9d5cd226cc788a23e2e1a0b2afc57838b3e1;hpb=cf94c7485f7b40ff7870b5bf9a65e7ab87481a76;p=ncurses.git diff --git a/include/curses.h.in b/include/curses.h.in index a25b9d5c..b86b9ffd 100644 --- a/include/curses.h.in +++ b/include/curses.h.in @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * + * Copyright (c) 1998-2011,2012 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 * @@ -32,7 +32,7 @@ * and: Thomas E. Dickey 1996-on * ****************************************************************************/ -/* $Id: curses.h.in,v 1.214 2010/03/30 08:50:18 tom Exp $ */ +/* $Id: curses.h.in,v 1.228 2012/02/18 21:34:30 tom Exp $ */ #ifndef __NCURSES_H #define __NCURSES_H @@ -128,6 +128,13 @@ #undef NCURSES_TPARM_VARARGS #define NCURSES_TPARM_VARARGS @NCURSES_TPARM_VARARGS@ +/* + * Control type used for tparm's arguments. While X/Open equates long and + * char* values, this is not always workable for 64-bit platforms. + */ +#undef NCURSES_TPARM_ARG +#define NCURSES_TPARM_ARG @NCURSES_TPARM_ARG@ + /* * NCURSES_CH_T is used in building the library, but not used otherwise in * this header file, since that would make the normal/wide-character versions @@ -144,18 +151,28 @@ typedef unsigned @cf_cv_typeof_chtype@ chtype; typedef unsigned @cf_cv_typeof_mmask_t@ mmask_t; #endif +/* + * We need FILE, etc. Include this before checking any feature symbols. + */ +#include + /* * 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 #include /* we need va_list */ -#ifdef NCURSES_WIDECHAR +#if NCURSES_WIDECHAR #include /* we want wchar_t */ #endif @@ -338,7 +355,7 @@ typedef struct _win_st WINDOW; 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 */ @@ -362,7 +379,7 @@ typedef unsigned int wint_t@NCURSES_OK_WCHAR_T@; /* * 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@ @@ -430,7 +447,7 @@ struct _win_st 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 */ @@ -828,7 +845,7 @@ extern NCURSES_EXPORT(int) putp (const char *); /* implemented */ #if NCURSES_TPARM_VARARGS extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, ...); /* special */ #else -extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, long,long,long,long,long,long,long,long,long); /* special */ +extern NCURSES_EXPORT(char *) tparm (NCURSES_CONST char *, NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG,NCURSES_TPARM_ARG); /* special */ extern NCURSES_EXPORT(char *) tparm_varargs (NCURSES_CONST char *, ...); /* special */ #endif @@ -850,7 +867,7 @@ extern NCURSES_EXPORT(int) getpary (const WINDOW *); /* generated */ /* * 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 @@ -1093,7 +1110,7 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int); /* /* It seems older SYSV curses versions define these */ #if !NCURSES_OPAQUE -#define getattrs(win) ((win) ? (win)->_attrs : A_NORMAL) +#define getattrs(win) NCURSES_CAST(int, (win) ? (win)->_attrs : A_NORMAL) #define getcurx(win) ((win) ? (win)->_curx : ERR) #define getcury(win) ((win) ? (win)->_cury : ERR) #define getbegx(win) ((win) ? (win)->_begx : ERR) @@ -1111,15 +1128,15 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int); /* #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 = (at), \ + (win)->_attrs = NCURSES_CAST(attr_t, at), \ OK) \ : ERR) #else #define wattrset(win,at) ((win) \ - ? ((win)->_attrs = (at), \ + ? ((win)->_attrs = NCURSES_CAST(attr_t, at), \ OK) \ : ERR) #endif @@ -1141,7 +1158,7 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int); /* #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) @@ -1151,7 +1168,7 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int); /* * These apply to the first 256 color pairs. */ #define COLOR_PAIR(n) NCURSES_BITS(n, 0) -#define PAIR_NUMBER(a) (NCURSES_CAST(int,(((a) & A_COLOR) >> NCURSES_ATTR_SHIFT))) +#define PAIR_NUMBER(a) (NCURSES_CAST(int,((NCURSES_CAST(unsigned long,a) & A_COLOR) >> NCURSES_ATTR_SHIFT))) /* * pseudo functions for standard screen @@ -1252,24 +1269,29 @@ extern NCURSES_EXPORT(int) NCURSES_SP_NAME(use_legacy_coding) (SCREEN*, int); /* * 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) = (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) | COLOR_PAIR(p)), OK) -#define wattr_get(win,a,p,opts) ((void)((a) != (void *)0 && (*(a) = (win)->_attrs)), \ - (void)((p) != (void *)0 && (*(p) = 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 */