krytarowski created this revision. krytarowski added reviewers: clayborg, emaste. krytarowski added subscribers: lldb-commits, brucem. krytarowski set the repository for this revision to rL LLVM.
The libpanel(3) library was developed after the NetBSD-7.0 release. This curses' extension lib is used within lldb. There were few ways to address this lack of functionality in the base: a. require ncurses in 7.0 (ncurses it's not a part of base in NetBSD) b. provide external package library with libpanel in pkgsrc c. mix native curses with ncurses' panel d. embed libpanel in lldb I was trying to go for a) and b), but it was trouble some increasing complexity of Makefiles and sources and it required additional paths from command line, as pkgsrc with ncurses may be installed in freely given prefix. b) and c) resulted in conflicts. Go for d) as it's the simplest solution: - it doesn't require pkgsrc neither any externally specified libpanel, - this approach is already in use for getopt_long_only(3), - no need to ifdefing paths for libraries and headers of curses(3), ncurses headers are prefixed with a directory 'ncurses/' and source code will need to be fixed for it, - paradoxically it doesn't require changes in the common code like the other solutions, - it doesn't need manually specified paths from command line, - it's self-containing. The libpanel library is relatively tiny and built only for the NetBSD target. With this diff I can built LLDB on NetBSD using CMake. Repository: rL LLVM http://reviews.llvm.org/D14689 Files: cmake/modules/LLDBConfig.cmake include/lldb/Host/HostLibPanel.h include/lldb/Host/netbsd/libpanel/panel.h source/Core/IOHandler.cpp source/Host/CMakeLists.txt source/Host/netbsd/libpanel/_deck.cpp source/Host/netbsd/libpanel/above.cpp source/Host/netbsd/libpanel/below.cpp source/Host/netbsd/libpanel/bottom.cpp source/Host/netbsd/libpanel/del.cpp source/Host/netbsd/libpanel/getuser.cpp source/Host/netbsd/libpanel/hidden.cpp source/Host/netbsd/libpanel/hide.cpp source/Host/netbsd/libpanel/move.cpp source/Host/netbsd/libpanel/new.cpp source/Host/netbsd/libpanel/panel_impl.h source/Host/netbsd/libpanel/replace.cpp source/Host/netbsd/libpanel/setuser.cpp source/Host/netbsd/libpanel/show.cpp source/Host/netbsd/libpanel/top.cpp source/Host/netbsd/libpanel/update.cpp source/Host/netbsd/libpanel/window.cpp
Index: source/Host/netbsd/libpanel/window.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/window.cpp @@ -0,0 +1,41 @@ +/* $NetBSD: window.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: window.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +WINDOW * +panel_window(PANEL *p) +{ + if (p == NULL) + return NULL; + + return p->win; +} Index: source/Host/netbsd/libpanel/update.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/update.cpp @@ -0,0 +1,62 @@ +/* $NetBSD: update.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: update.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +void +update_panels(void) +{ + PANEL *p; + + /* + * For each panel tell panels above it they need to refresh + * regions that overlap (are above) this panel. This ensures + * that even if a panel below was touched, it's still + * overwritten by a panel above. + * + * Note that we also need to do this during "destructive" + * operations (hide, move, replace window - which see). + */ + FOREACH_PANEL (p) { + PANEL *above = p; + while ((above = PANEL_ABOVE(above)) != NULL) { + touchoverlap(p->win, above->win); + } + } + + /* + * This is what effects Z-order: the window updated later + * overwrites contents of the windows below (before) it. + */ + FOREACH_PANEL (p) { + wnoutrefresh(p->win); + } +} Index: source/Host/netbsd/libpanel/top.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/top.cpp @@ -0,0 +1,48 @@ +/* $NetBSD: top.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: top.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +top_panel(PANEL *p) +{ + if (__predict_false(p == NULL)) + return ERR; + + /* unlike show_panel() */ + if (__predict_false(PANEL_HIDDEN(p))) + return ERR; + + /* XXX: use common internal functions instead */ + (void) hide_panel(p); + (void) show_panel(p); + return OK; +} Index: source/Host/netbsd/libpanel/show.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/show.cpp @@ -0,0 +1,46 @@ +/* $NetBSD: show.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: show.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +show_panel(PANEL *p) +{ + if (__predict_false(p == NULL)) + return ERR; + + /* unlike top_panel() */ + if (__predict_false(!PANEL_HIDDEN(p))) + return ERR; + + DECK_INSERT_TOP(p); + return OK; +} Index: source/Host/netbsd/libpanel/setuser.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/setuser.cpp @@ -0,0 +1,42 @@ +/* $NetBSD: setuser.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: setuser.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +set_panel_userptr(PANEL *p, char *u) +{ + if (p == NULL) + return ERR; + + p->user = u; + return OK; +} Index: source/Host/netbsd/libpanel/replace.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/replace.cpp @@ -0,0 +1,52 @@ +/* $NetBSD: replace.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: replace.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +replace_panel(PANEL *p, WINDOW *w) +{ + if (__predict_false(p == NULL || w == NULL)) + return ERR; + + if (!PANEL_HIDDEN(p)) { + PANEL *other; + + /* touch exposed areas at the old location now */ + FOREACH_PANEL (other) { + if (other != p) + touchoverlap(p->win, other->win); + } + } + + p->win = w; + return OK; +} Index: source/Host/netbsd/libpanel/panel_impl.h =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/panel_impl.h @@ -0,0 +1,89 @@ +/* $NetBSD: panel_impl.h,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include <lldb/Host/netbsd/libpanel/panel.h> + +#include <sys/queue.h> + +#define DECK_HEAD(head) TAILQ_HEAD(head, __panel) +#define DECK_ENTRY TAILQ_ENTRY(__panel) + + +/* + * Panels are just curses windows with Z-order added. + * See update_panels() for details. + */ +struct __panel { + WINDOW *win; + char *user; + DECK_ENTRY zorder; +}; + + +/* Deck of panels in Z-order from bottom to top. */ +DECK_HEAD(deck); +extern struct deck _deck __dso_hidden; + +/* Fake stdscr panel at the bottom, not user visible */ +extern PANEL _stdscr_panel __dso_hidden; + + +/* + * Hidden panels are not in the deck. <sys/queue.h> macros don't have + * a concept of an entry not on the list, so provide a kludge that + * digs into internals. + */ +#define TAILQ_REMOVE_NP(head, elm, field) do { \ + TAILQ_REMOVE((head), (elm), field); \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = NULL; \ +} while (/*CONSTCOND*/ 0) + +#define TAILQ_LINKED_NP(elm, field) \ + (((elm)->field.tqe_prev) != NULL) + + +#define DECK_INSERT_TOP(p) do { \ + TAILQ_INSERT_TAIL(&_deck, (p), zorder); \ +} while (/*CONSTCOND*/ 0) + +#define DECK_INSERT_BOTTOM(p) do { \ + TAILQ_INSERT_AFTER(&_deck, &_stdscr_panel, (p), zorder); \ +} while (/*CONSTCOND*/ 0) + +#define DECK_REMOVE(p) do { \ + TAILQ_REMOVE_NP(&_deck, (p), zorder); \ +} while (/*CONSTCOND*/ 0) + + +#define PANEL_ABOVE(p) (TAILQ_NEXT((p), zorder)) +#define PANEL_BELOW(p) (TAILQ_PREV((p), deck, zorder)) +#define PANEL_HIDDEN(p) (!TAILQ_LINKED_NP((p), zorder)) + +#define FOREACH_PANEL(var) TAILQ_FOREACH(var, &_deck, zorder) Index: source/Host/netbsd/libpanel/new.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/new.cpp @@ -0,0 +1,75 @@ +/* $NetBSD: new.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: new.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + +#include <assert.h> +#include <stdlib.h> + + +static PANEL * +_new_panel(WINDOW *w) +{ + PANEL *p; + + p = (PANEL *)malloc(sizeof(PANEL)); + if (__predict_false(p == NULL)) + return NULL; + + p->win = w; + p->user = NULL; + + DECK_INSERT_TOP(p); + return p; +} + + +PANEL * +new_panel(WINDOW *w) +{ + if (__predict_false(w == NULL)) + return NULL; + + if (__predict_false(w == stdscr)) + return NULL; + + /* + * Ensure there's phantom panel for stdscr at (below) the + * bottom. We explicitly re-assign stdscr in case it changed. + */ + if (TAILQ_EMPTY(&_deck)) { + assert(PANEL_HIDDEN(&_stdscr_panel)); + + _stdscr_panel.win = stdscr; + DECK_INSERT_TOP(&_stdscr_panel); + } + + return _new_panel(w); +} Index: source/Host/netbsd/libpanel/move.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/move.cpp @@ -0,0 +1,58 @@ +/* $NetBSD: move.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: move.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +move_panel(PANEL *p, int y, int x) +{ + int oldy, oldx; + + if (__predict_false(p == NULL)) + return ERR; + + getbegyx(p->win, oldy, oldx); + if (__predict_false(y == oldy && x == oldx)) + return OK; + + if (!PANEL_HIDDEN(p)) { + PANEL *other; + + /* touch exposed areas at the old location now */ + FOREACH_PANEL (other) { + if (other != p) { + touchoverlap(p->win, other->win); + } + } + } + + return mvwin(p->win, y, x); +} Index: source/Host/netbsd/libpanel/hide.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/hide.cpp @@ -0,0 +1,56 @@ +/* $NetBSD: hide.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: hide.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +hide_panel(PANEL *p) +{ + PANEL *other; + + if (__predict_false(p == NULL)) + return ERR; + + if (__predict_false(PANEL_HIDDEN(p))) + return OK; + + DECK_REMOVE(p); + + /* + * The panel is no longer in the deck, so update_panels() will + * not handle it. Touch exposed areas now. + */ + FOREACH_PANEL (other) { + touchoverlap(p->win, other->win); + } + + return OK; +} Index: source/Host/netbsd/libpanel/hidden.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/hidden.cpp @@ -0,0 +1,44 @@ +/* $NetBSD: hidden.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: hidden.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +panel_hidden(PANEL *p) +{ + if (p == NULL) + return ERR; + + if (PANEL_HIDDEN(p)) + return TRUE; + else + return FALSE; +} Index: source/Host/netbsd/libpanel/getuser.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/getuser.cpp @@ -0,0 +1,41 @@ +/* $NetBSD: getuser.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: getuser.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +char * +panel_userptr(PANEL *p) +{ + if (p == NULL) + return NULL; + + return p->user; +} Index: source/Host/netbsd/libpanel/del.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/del.cpp @@ -0,0 +1,62 @@ +/* $NetBSD: del.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: del.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + +#include <assert.h> +#include <stdlib.h> + + +int +del_panel(PANEL *p) +{ + if (__predict_false(p == NULL)) + return ERR; + + (void) hide_panel(p); + free(p); + + /* + * If the last panel is removed, remove the phantom stdscr + * panel as well. + * + * A program that wants to switch to a different screen with + * set_term(3), or ends and recreates curses session with + * endwin(3)/initscr(3), must delete all panels first, since + * their windows will become invalid. When it will create its + * first new panel afterwards, it will pick up new stdscr. + */ + if (TAILQ_LAST(&_deck, deck) == &_stdscr_panel) { + (void) hide_panel(&_stdscr_panel); + assert(TAILQ_EMPTY(&_deck)); + } + + return OK; +} Index: source/Host/netbsd/libpanel/bottom.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/bottom.cpp @@ -0,0 +1,47 @@ +/* $NetBSD: bottom.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: bottom.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + + +int +bottom_panel(PANEL *p) +{ + if (__predict_false(p == NULL)) + return ERR; + + if (__predict_false(PANEL_HIDDEN(p))) + return ERR; + + (void) hide_panel(p); + + DECK_INSERT_BOTTOM(p); + return OK; +} Index: source/Host/netbsd/libpanel/below.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/below.cpp @@ -0,0 +1,50 @@ +/* $NetBSD: below.c,v 1.2 2015/11/01 01:40:23 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: below.c,v 1.2 2015/11/01 01:40:23 uwe Exp $"); + +#include "panel_impl.h" + + +PANEL * +panel_below(PANEL *p) +{ + PANEL *below; + + if (p == NULL) + below = TAILQ_LAST(&_deck, deck); + else if (__predict_true(!PANEL_HIDDEN(p))) + below = PANEL_BELOW(p); + else + return NULL; + + if (below == &_stdscr_panel) + return NULL; + else + return below; +} Index: source/Host/netbsd/libpanel/above.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/above.cpp @@ -0,0 +1,48 @@ +/* $NetBSD: above.c,v 1.2 2015/11/01 01:40:23 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: above.c,v 1.2 2015/11/01 01:40:23 uwe Exp $"); + +#include "panel_impl.h" + + +PANEL * +panel_above(PANEL *p) +{ + if (p == NULL) { + if (TAILQ_EMPTY(&_deck)) + return NULL; + + return PANEL_ABOVE(&_stdscr_panel); + } + + if (__predict_false(PANEL_HIDDEN(p))) + return NULL; + + return PANEL_ABOVE(p); +} Index: source/Host/netbsd/libpanel/_deck.cpp =================================================================== --- /dev/null +++ source/Host/netbsd/libpanel/_deck.cpp @@ -0,0 +1,34 @@ +/* $NetBSD: _deck.c,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: _deck.c,v 1.1 2015/10/26 23:09:49 uwe Exp $"); + +#include "panel_impl.h" + +struct deck _deck __dso_hidden = TAILQ_HEAD_INITIALIZER(_deck); +PANEL _stdscr_panel __dso_hidden; Index: source/Host/CMakeLists.txt =================================================================== --- source/Host/CMakeLists.txt +++ source/Host/CMakeLists.txt @@ -154,6 +154,26 @@ netbsd/HostThreadNetBSD.cpp netbsd/ThisThread.cpp ) + if (NOT LLDB_NETBSD_HAS_LIBPANEL) + add_host_subdirectory(netbsd + netbsd/libpanel/_deck.cpp + netbsd/libpanel/above.cpp + netbsd/libpanel/below.cpp + netbsd/libpanel/bottom.cpp + netbsd/libpanel/del.cpp + netbsd/libpanel/getuser.cpp + netbsd/libpanel/hidden.cpp + netbsd/libpanel/hide.cpp + netbsd/libpanel/move.cpp + netbsd/libpanel/new.cpp + netbsd/libpanel/replace.cpp + netbsd/libpanel/setuser.cpp + netbsd/libpanel/show.cpp + netbsd/libpanel/top.cpp + netbsd/libpanel/update.cpp + netbsd/libpanel/window.cpp + ) + endif() endif() endif() Index: source/Core/IOHandler.cpp =================================================================== --- source/Core/IOHandler.cpp +++ source/Core/IOHandler.cpp @@ -10,7 +10,7 @@ // C Includes #ifndef LLDB_DISABLE_CURSES #include <curses.h> -#include <panel.h> +#include <lldb/Host/HostLibPanel.h> #endif // C++ Includes Index: include/lldb/Host/netbsd/libpanel/panel.h =================================================================== --- /dev/null +++ include/lldb/Host/netbsd/libpanel/panel.h @@ -0,0 +1,66 @@ +/* $NetBSD: panel.h,v 1.1 2015/10/26 23:09:49 uwe Exp $ */ + +/* + * Copyright (c) 2015 Valery Ushakov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#if defined(NETBSD_HAS_LIBPANEL) + +#include <panel.h> + +#else + +#include <sys/cdefs.h> +#include <curses.h> + +typedef struct __panel PANEL; + +__BEGIN_DECLS +PANEL *new_panel(WINDOW *); +int del_panel(PANEL *); + +int replace_panel(PANEL *, WINDOW *); +WINDOW *panel_window(PANEL *); + +int set_panel_userptr(PANEL *, char *); +char *panel_userptr(PANEL *); + +int hide_panel(PANEL *); +int show_panel(PANEL *); +int panel_hidden(PANEL *); + +int top_panel(PANEL *); +int bottom_panel(PANEL *); + +PANEL *panel_above(PANEL *); +PANEL *panel_below(PANEL *); + +int move_panel(PANEL *, int, int); + +void update_panels(void); +__END_DECLS + +#endif Index: include/lldb/Host/HostLibPanel.h =================================================================== --- /dev/null +++ include/lldb/Host/HostLibPanel.h @@ -0,0 +1,19 @@ +//===-- LibPanel.h ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#pragma once + +#ifndef LLDB_DISABLE_CURSES + +#if !defined(__NetBSD__) +#include <panel.h> +#else +#include <lldb/Host/netbsd/libpanel/panel.h> +#endif + +#endif Index: cmake/modules/LLDBConfig.cmake =================================================================== --- cmake/modules/LLDBConfig.cmake +++ cmake/modules/LLDBConfig.cmake @@ -399,14 +399,27 @@ if (NOT LLDB_DISABLE_CURSES) find_package(Curses REQUIRED) - find_library(CURSES_PANEL_LIBRARY NAMES panel DOC "The curses panel library") - if (NOT CURSES_PANEL_LIBRARY) - message(FATAL_ERROR "A required curses' panel library not found.") + # LLDB ships with libpanel for NetBSD-7.0 + if (CMAKE_SYSTEM_NAME MATCHES "NetBSD") + if (EXISTS "/usr/include/panel.h") + add_definitions(-DNETBSD_HAS_LIBPANEL) + set(LLDB_NETBSD_HAS_LIBPANEL 1) + else () + set(LLDB_NETBSD_HAS_LIBPANEL 0) + endif () endif () - # Add panels to the library path - set (CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_PANEL_LIBRARY}) + if (NOT CMAKE_SYSTEM_NAME MATCHES "NetBSD" OR LLDB_NETBSD_HAS_LIBPANEL) + find_library(CURSES_PANEL_LIBRARY NAMES panel DOC "The curses panel library") + if (NOT CURSES_PANEL_LIBRARY) + message(FATAL_ERROR "A required curses' panel library not found.") + endif () + + # Add panels to the library path + set (CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_PANEL_LIBRARY}) + + list(APPEND system_libs ${CURSES_LIBRARIES}) + endif () - list(APPEND system_libs ${CURSES_LIBRARIES}) include_directories(${CURSES_INCLUDE_DIR}) endif ()
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits