]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/curses.priv.h
ncurses 5.7 - patch 20091031
[ncurses.git] / ncurses / curses.priv.h
index 31f41a885c150036b2de6824794b9f3848cb27e2..1f5507b2a02a25d926ff237de409ffd5fa016e78 100644 (file)
@@ -35,7 +35,7 @@
 
 
 /*
- * $Id: curses.priv.h,v 1.435 2009/08/22 22:33:25 tom Exp $
+ * $Id: curses.priv.h,v 1.442 2009/10/31 20:33:43 tom Exp $
  *
  *     curses.priv.h
  *
@@ -196,11 +196,10 @@ extern NCURSES_EXPORT(void *) _nc_memmove (void *, const void *, size_t);
 /*
  * Options for terminal drivers, etc...
  */
-#if 0
+#ifdef USE_TERM_DRIVER
 #define USE_SP_RIPOFF     1
 #define USE_SP_TERMTYPE   1
 #define USE_SP_WINDOWLIST 1
-#define USE_TERM_DRIVER   1
 #endif
 
 /*
@@ -481,6 +480,36 @@ extern NCURSES_EXPORT(int) _nc_sigprocmask(int, const sigset_t *, sigset_t *);
 
 #endif /* USE_PTHREADS */
 
+/*
+ * When using sp-funcs, locks are targeted to SCREEN-level granularity.
+ * So the locking is done in the non-sp-func (which calls the sp-func) rather
+ * than in the sp-func itself.
+ *
+ * Use the _nc_nonsp_XXX functions in the function using "NCURSES_SP_NAME()".
+ * Use the _nc_sp_XXX functions in the function using "#if NCURSES_SP_FUNCS".
+ */
+#if NCURSES_SP_FUNCS
+
+#define _nc_nonsp_lock_global(name)    /* nothing */
+#define _nc_nonsp_try_global(name)    0
+#define _nc_nonsp_unlock_global(name)  /* nothing */
+
+#define _nc_sp_lock_global(name)       _nc_lock_global(name)
+#define _nc_sp_try_global(name)         _nc_try_global(name)
+#define _nc_sp_unlock_global(name)     _nc_unlock_global(name)
+
+#else
+
+#define _nc_nonsp_lock_global(name)    _nc_lock_global(name)
+#define _nc_nonsp_try_global(name)      _nc_try_global(name)
+#define _nc_nonsp_unlock_global(name)  _nc_unlock_global(name)
+
+#define _nc_sp_lock_global(name)       /* nothing */
+#define _nc_sp_try_global(name)    0
+#define _nc_sp_unlock_global(name)     /* nothing */
+
+#endif
+
 #if HAVE_GETTIMEOFDAY
 # define PRECISE_GETTIME 1
 # define TimeType struct timeval
@@ -939,9 +968,6 @@ struct screen {
        bool            _nc_sp_idlok;
        bool            _nc_sp_idcok;
 
-#define _nc_idlok SP_PARM->_nc_sp_idlok
-#define _nc_idcok SP_PARM->_nc_sp_idcok
-
        /*
         * These are the data that support the mouse interface.
         */
@@ -1231,7 +1257,7 @@ extern NCURSES_EXPORT_VAR(SIG_ATOMIC_T) _nc_have_sigwinch;
                                        putc(PUTC_ch,b);                            \
                                    break;                                          \
                                }                                                   \
-                               fwrite(PUTC_buf, (unsigned) PUTC_n, 1, b);          \
+                               IGNORE_RC(fwrite(PUTC_buf, (unsigned) PUTC_n, 1, b)); \
                            }                                                       \
                            COUNT_OUTCHARS(PUTC_i);                                 \
                        } } } while (0)
@@ -1474,6 +1500,15 @@ extern NCURSES_EXPORT(const char *) _nc_viscbuf (const NCURSES_CH_T *, int);
 
 #endif /* TRACE/!TRACE */
 
+/*
+ * Workaround for defective implementation of gcc attribute warn_unused_result
+ */
+#if defined(__GNUC__) && defined(_FORTIFY_SOURCE)
+#define IGNORE_RC(func) errno = func
+#else
+#define IGNORE_RC(func) (void) func
+#endif /* gcc workarounds */
+
 /*
  * Return-codes for tgetent() and friends.
  */
@@ -1684,6 +1719,7 @@ extern NCURSES_EXPORT(char *) _nc_get_locale(void);
 extern NCURSES_EXPORT(int)    _nc_unicode_locale(void);
 extern NCURSES_EXPORT(int)    _nc_locale_breaks_acs(TERMINAL *);
 extern NCURSES_EXPORT(int)    _nc_setupterm(NCURSES_CONST char *, int, int *, bool);
+extern NCURSES_EXPORT(void)   _nc_tinfo_cmdch(TERMINAL *, char);
 
 /* lib_set_term.c */
 extern NCURSES_EXPORT(int)    _nc_ripoffline(int, int(*)(WINDOW*, int));
@@ -1782,6 +1818,10 @@ extern NCURSES_EXPORT(int) _nc_waddch_nosync (WINDOW *, const NCURSES_CH_T);
 extern NCURSES_EXPORT(void) _nc_scroll_window (WINDOW *, int const, NCURSES_SIZE_T const, NCURSES_SIZE_T const, NCURSES_CH_T);
 #endif
 
+#if USE_WIDEC_SUPPORT
+extern NCURSES_EXPORT(int) _nc_insert_wch(WINDOW *, const cchar_t *);
+#endif
+
 #if USE_WIDEC_SUPPORT && !defined(USE_TERMLIB)
 extern NCURSES_EXPORT(size_t) _nc_wcrtomb (char *, wchar_t, mbstate_t *);
 #endif
@@ -1803,6 +1843,26 @@ extern NCURSES_EXPORT(int) _nc_eventlist_timeout(_nc_eventlist *);
 #define wgetnstr_events(win, str, maxlen, evl) wgetnstr(win, str, maxlen)
 #endif
 
+/*
+ * Wide-character macros to hide some platform-differences.
+ */
+#if USE_WIDEC_SUPPORT
+#if HAVE_MBTOWC && HAVE_MBLEN
+#define reset_mbytes(state) IGNORE_RC(mblen(NULL, 0)), IGNORE_RC(mbtowc(NULL, NULL, 0))
+#define count_mbytes(buffer,length,state) mblen(buffer,length)
+#define check_mbytes(wch,buffer,length,state) \
+       (int) mbtowc(&wch, buffer, length)
+#define state_unused
+#elif HAVE_MBRTOWC && HAVE_MBRLEN
+#define reset_mbytes(state) init_mb(state)
+#define count_mbytes(buffer,length,state) mbrlen(buffer,length,&state)
+#define check_mbytes(wch,buffer,length,state) \
+       (int) mbrtowc(&wch, buffer, length, &state)
+#else
+make an error
+#endif
+#endif
+
 /*
  * Not everyone has vsscanf(), but we'd like to use it for scanw().
  */
@@ -1838,7 +1898,7 @@ extern NCURSES_EXPORT_VAR(SCREEN *) SP;
 #define _nc_set_screen(sp)      SP = sp
 #endif
 
-#if NCURSES_SP_FUNCS && 0
+#if NCURSES_SP_FUNCS
 #define CURRENT_SCREEN_PRE      (IsPreScreen(CURRENT_SCREEN) ? CURRENT_SCREEN : new_prescr())
 #else
 #define CURRENT_SCREEN_PRE      CURRENT_SCREEN
@@ -2057,7 +2117,6 @@ extern NCURSES_EXPORT(WINDOW *) _nc_stdscr_of(SCREEN*);
 extern NCURSES_EXPORT(int)      _nc_outc_wrapper(SCREEN*,int);
 
 #if USE_REENTRANT
-extern NCURSES_EXPORT(char *)    NCURSES_SP_NAME(_nc_ttytype)(SCREEN*);
 extern NCURSES_EXPORT(int)       NCURSES_SP_NAME(_nc_TABSIZE)(SCREEN*);
 extern NCURSES_EXPORT(char *)    NCURSES_SP_NAME(longname)(SCREEN*);
 #endif