[BACK]Return to panel_impl.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libpanel

Annotation of src/lib/libpanel/panel_impl.h, Revision 1.1

1.1     ! uwe         1: /*     $NetBSD$ */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 2015 Valery Ushakov
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms, with or without
        !             8:  * modification, are permitted provided that the following conditions
        !             9:  * are met:
        !            10:  * 1. Redistributions of source code must retain the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer.
        !            12:  * 2. Redistributions in binary form must reproduce the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer in the
        !            14:  *    documentation and/or other materials provided with the distribution.
        !            15:  *
        !            16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            17:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            18:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            19:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            20:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            21:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            22:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            23:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            24:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            25:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            26:  */
        !            27:
        !            28: #ifndef _PANEL_IMPL_H_
        !            29: #define _PANEL_IMPL_H_
        !            30:
        !            31: #include "panel.h"
        !            32:
        !            33: #include <sys/queue.h>
        !            34:
        !            35: #define DECK_HEAD(head)                TAILQ_HEAD(head, __panel)
        !            36: #define DECK_ENTRY             TAILQ_ENTRY(__panel)
        !            37:
        !            38:
        !            39: /*
        !            40:  * Panels are just curses windows with Z-order added.
        !            41:  * See update_panels() for details.
        !            42:  */
        !            43: struct __panel {
        !            44:        WINDOW *win;
        !            45:        void *user;
        !            46:        DECK_ENTRY zorder;
        !            47: };
        !            48:
        !            49:
        !            50: /* Deck of panels in Z-order from bottom to top. */
        !            51: DECK_HEAD(deck);
        !            52: extern struct deck _deck __dso_hidden;
        !            53:
        !            54: /* Fake stdscr panel at the bottom, not user visible */
        !            55: extern PANEL _stdscr_panel __dso_hidden;
        !            56:
        !            57:
        !            58: /*
        !            59:  * Hidden panels are not in the deck.  <sys/queue.h> macros don't have
        !            60:  * a concept of an entry not on the list, so provide a kludge that
        !            61:  * digs into internals.
        !            62:  */
        !            63: #define TAILQ_REMOVE_NP(head, elm, field) do { \
        !            64:        TAILQ_REMOVE((head), (elm), field);     \
        !            65:        (elm)->field.tqe_next = NULL;           \
        !            66:        (elm)->field.tqe_prev = NULL;           \
        !            67: } while (/*CONSTCOND*/ 0)
        !            68:
        !            69: #define TAILQ_LINKED_NP(elm, field) \
        !            70:        (((elm)->field.tqe_prev) != NULL)
        !            71:
        !            72:
        !            73: #define DECK_INSERT_TOP(p) do {                                        \
        !            74:        TAILQ_INSERT_TAIL(&_deck, (p), zorder);                 \
        !            75: } while (/*CONSTCOND*/ 0)
        !            76:
        !            77: #define DECK_INSERT_BOTTOM(p) do {                             \
        !            78:        TAILQ_INSERT_AFTER(&_deck, &_stdscr_panel, (p), zorder); \
        !            79: } while (/*CONSTCOND*/ 0)
        !            80:
        !            81: #define DECK_REMOVE(p) do {                                    \
        !            82:        TAILQ_REMOVE_NP(&_deck, (p), zorder);                   \
        !            83: } while (/*CONSTCOND*/ 0)
        !            84:
        !            85:
        !            86: #define PANEL_ABOVE(p)         (TAILQ_NEXT((p), zorder))
        !            87: #define PANEL_BELOW(p)         (TAILQ_PREV((p), deck, zorder))
        !            88: #define PANEL_HIDDEN(p)                (!TAILQ_LINKED_NP((p), zorder))
        !            89:
        !            90: #define FOREACH_PANEL(var)     TAILQ_FOREACH(var, &_deck, zorder)
        !            91:
        !            92: #endif /* _PANEL_IMPL_H_ */

CVSweb <webmaster@jp.NetBSD.org>