]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - panel/panel.priv.h
ncurses 6.0 - patch 20170415
[ncurses.git] / panel / panel.priv.h
index 7097d8423cf5717776ef31062a4b7564c7d0de50..7934018ff6b267272c11ba03e0de529beae860f7 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
 /****************************************************************************
- * Copyright (c) 2000 Free Software Foundation, Inc.                        *
+ * Copyright (c) 1998-2014,2017 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            *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * authorization.                                                           *
  ****************************************************************************/
 
  * authorization.                                                           *
  ****************************************************************************/
 
-/* $Id: panel.priv.h,v 1.19 2001/06/02 23:31:05 tom Exp $ */
+/* $Id: panel.priv.h,v 1.27 2017/02/11 16:50:43 tom Exp $ */
 
 #ifndef NCURSES_PANEL_PRIV_H
 #define NCURSES_PANEL_PRIV_H 1
 
 #ifndef NCURSES_PANEL_PRIV_H
 #define NCURSES_PANEL_PRIV_H 1
+/* *INDENT-OFF* */
 
 #if HAVE_CONFIG_H
 #  include <ncurses_cfg.h>
 
 #if HAVE_CONFIG_H
 #  include <ncurses_cfg.h>
 #include <string.h>
 #include <assert.h>
 
 #include <string.h>
 #include <assert.h>
 
-#if HAVE_LIBDMALLOC
-#  include <dmalloc.h>    /* Gray Watson's library */
-#endif
-
-#if HAVE_LIBDBMALLOC
-#  include <dbmalloc.h>   /* Conor Cahill's library */
-#endif
-
-#include "curses.priv.h"
-#include "panel.h"
-#include <nc_panel.h>
+struct screen;              /* forward declaration */
 
 
-#if ( CC_HAS_INLINE_FUNCS && !defined(TRACE) )
-#  define INLINE inline
-#else
-#  define INLINE
-#endif
+#include "curses.priv.h"    /* includes nc_panel.h */
 
 
-#if USE_RCS_IDS
-#  define MODULE_ID(id) static const char Ident[] = id;
-#else
-#  define MODULE_ID(id) /*nothing*/
-#endif
+#define NCURSES_OPAQUE_PANEL 0
 
 
+#include "panel.h"
 
 #ifdef TRACE
    extern NCURSES_EXPORT(const char *) _nc_my_visbuf (const void *);
 
 #ifdef TRACE
    extern NCURSES_EXPORT(const char *) _nc_my_visbuf (const void *);
@@ -72,6 +56,9 @@
 #    define USER_PTR(ptr) _nc_my_visbuf((const char *)ptr)
 #  endif
 
 #    define USER_PTR(ptr) _nc_my_visbuf((const char *)ptr)
 #  endif
 
+#  define returnPanel(code)    TRACE_RETURN1(code,panel)
+
+   extern NCURSES_EXPORT(PANEL *) _nc_retrace_panel (PANEL *);
    extern NCURSES_EXPORT(void) _nc_dPanel (const char*, const PANEL*);
    extern NCURSES_EXPORT(void) _nc_dStack (const char*, int, const PANEL*);
    extern NCURSES_EXPORT(void) _nc_Wnoutrefresh (const PANEL*);
    extern NCURSES_EXPORT(void) _nc_dPanel (const char*, const PANEL*);
    extern NCURSES_EXPORT(void) _nc_dStack (const char*, int, const PANEL*);
    extern NCURSES_EXPORT(void) _nc_Wnoutrefresh (const PANEL*);
@@ -85,6 +72,7 @@
 #  define Touchpan(pan) _nc_Touchpan(pan)
 #  define Touchline(pan,start,count) _nc_Touchline(pan,start,count)
 #else /* !TRACE */
 #  define Touchpan(pan) _nc_Touchpan(pan)
 #  define Touchline(pan,start,count) _nc_Touchline(pan,start,count)
 #else /* !TRACE */
+#  define returnPanel(code)    return code
 #  define dBug(x)
 #  define dPanel(text,pan)
 #  define dStack(fmt,num,pan)
 #  define dBug(x)
 #  define dPanel(text,pan)
 #  define dStack(fmt,num,pan)
 #  define Touchline(pan,start,count) touchline((pan)->win,start,count)
 #endif
 
 #  define Touchline(pan,start,count) touchline((pan)->win,start,count)
 #endif
 
+#if NCURSES_SP_FUNCS
+#define GetScreenHook(sp) \
+                       struct panelhook* ph = NCURSES_SP_NAME(_nc_panelhook)(sp)
+#define GetPanelHook(pan) \
+                       GetScreenHook(pan ? _nc_screen_of((pan)->win) : 0)
+#define GetWindowHook(win) \
+                       SCREEN* sp = _nc_screen_of(win); \
+                       GetScreenHook(sp)
+#define GetHook(pan)   SCREEN* sp = _nc_screen_of(pan->win); \
+                       GetScreenHook(sp)
+
+#define _nc_stdscr_pseudo_panel ((ph)->stdscr_pseudo_panel)
+#define _nc_top_panel           ((ph)->top_panel)
+#define _nc_bottom_panel        ((ph)->bottom_panel)
+
+#else  /* !NCURSES_SP_FUNCS */
+
+#define GetScreenHook(sp) /* nothing */
+#define GetPanelHook(pan) /* nothing */
+#define GetWindowHook(win) /* nothing */
+#define GetHook(pan) /* nothing */
+
 #define _nc_stdscr_pseudo_panel _nc_panelhook()->stdscr_pseudo_panel
 #define _nc_stdscr_pseudo_panel _nc_panelhook()->stdscr_pseudo_panel
-#define _nc_top_panel _nc_panelhook()->top_panel
-#define _nc_bottom_panel _nc_panelhook()->bottom_panel
+#define _nc_top_panel           _nc_panelhook()->top_panel
+#define _nc_bottom_panel        _nc_panelhook()->bottom_panel
+
+#endif /* NCURSES_SP_FUNCS */
 
 
-#define EMPTY_STACK() (_nc_top_panel==_nc_bottom_panel)
-#define Is_Bottom(p)  (((p)!=(PANEL*)0) && !EMPTY_STACK() && (_nc_bottom_panel->above==(p))) 
-#define Is_Top(p) (((p)!=(PANEL*)0) && !EMPTY_STACK() && (_nc_top_panel==(p)))
-#define Is_Pseudo(p) ((p) && ((p)==_nc_bottom_panel))
+#define EMPTY_STACK() (_nc_top_panel == _nc_bottom_panel)
+#define Is_Bottom(p)  (((p) != (PANEL*)0) && !EMPTY_STACK() && (_nc_bottom_panel->above == (p)))
+#define Is_Top(p)     (((p) != (PANEL*)0) && !EMPTY_STACK() && (_nc_top_panel == (p)))
+#define Is_Pseudo(p)  (((p) != (PANEL*)0) && ((p) == _nc_bottom_panel))
 
 /*+-------------------------------------------------------------------------
        IS_LINKED(pan) - check to see if panel is in the stack
 
 /*+-------------------------------------------------------------------------
        IS_LINKED(pan) - check to see if panel is in the stack
    ix2 = (PENDX(pan1)   < PENDX(pan2))   ? PENDX(pan1)   : PENDX(pan2);\
    iy1 = (PSTARTY(pan1) < PSTARTY(pan2)) ? PSTARTY(pan2) : PSTARTY(pan1);\
    iy2 = (PENDY(pan1)   < PENDY(pan2))   ? PENDY(pan1)   : PENDY(pan2);\
    ix2 = (PENDX(pan1)   < PENDX(pan2))   ? PENDX(pan1)   : PENDX(pan2);\
    iy1 = (PSTARTY(pan1) < PSTARTY(pan2)) ? PSTARTY(pan2) : PSTARTY(pan1);\
    iy2 = (PENDY(pan1)   < PENDY(pan2))   ? PENDY(pan1)   : PENDY(pan2);\
-   assert((ix1<=ix2) && (iy1<=iy2));\
+   assert((ix1<=ix2) && (iy1<=iy2))
 
 
 /*+-------------------------------------------------------------------------
        Walk through the panel stack starting at the given location and
         check for intersections; overlapping panels are "touched", so they
 
 
 /*+-------------------------------------------------------------------------
        Walk through the panel stack starting at the given location and
         check for intersections; overlapping panels are "touched", so they
-        are incrementally overwriting cells that should be hidden. 
+        are incrementally overwriting cells that should be hidden.
         If the "touch" flag is set, the panel gets touched before it is
         If the "touch" flag is set, the panel gets touched before it is
-        updated. 
+        updated.
 ---------------------------------------------------------------------------*/
 #define PANEL_UPDATE(pan,panstart)\
 {  PANEL* pan2 = ((panstart) ? (panstart) : _nc_bottom_panel);\
 ---------------------------------------------------------------------------*/
 #define PANEL_UPDATE(pan,panstart)\
 {  PANEL* pan2 = ((panstart) ? (panstart) : _nc_bottom_panel);\
-   while(pan2) {\
+   while(pan2 && pan2->win) {\
       if ((pan2 != pan) && PANELS_OVERLAPPED(pan,pan2)) {\
       if ((pan2 != pan) && PANELS_OVERLAPPED(pan,pan2)) {\
-        int y,ix1,ix2,iy1,iy2;\
-        COMPUTE_INTERSECTION(pan,pan2,ix1,ix2,iy1,iy2);\
+        int y, ix1, ix2, iy1, iy2;\
+        COMPUTE_INTERSECTION(pan, pan2, ix1, ix2, iy1, iy2);\
        for(y = iy1; y <= iy2; y++) {\
          if (is_linetouched(pan->win,y - PSTARTY(pan))) {\
             struct ldat* line = &(pan2->win->_line[y - PSTARTY(pan2)]);\
        for(y = iy1; y <= iy2; y++) {\
          if (is_linetouched(pan->win,y - PSTARTY(pan))) {\
             struct ldat* line = &(pan2->win->_line[y - PSTARTY(pan2)]);\
-            CHANGED_RANGE(line,ix1-PSTARTX(pan2),ix2-PSTARTX(pan2));\
+            CHANGED_RANGE(line, ix1 - PSTARTX(pan2), ix2 - PSTARTX(pan2));\
           }\
        }\
       }\
           }\
        }\
       }\
       err = err_if_unlinked;\
   }
 
       err = err_if_unlinked;\
   }
 
+#if NCURSES_SP_FUNCS
+/* These may become later renamed and part of panel.h and the public API */
+extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_update_panels)(SCREEN*);
+#endif
+/* *INDENT-ON* */
+
 #endif /* NCURSES_PANEL_PRIV_H */
 #endif /* NCURSES_PANEL_PRIV_H */