1fdd4e1e0SJan Lentfer /**************************************************************************** 2*1d102085SJan Lentfer * Copyright (c) 1998-2005,2008 Free Software Foundation, Inc. * 3fdd4e1e0SJan Lentfer * * 4fdd4e1e0SJan Lentfer * Permission is hereby granted, free of charge, to any person obtaining a * 5fdd4e1e0SJan Lentfer * copy of this software and associated documentation files (the * 6fdd4e1e0SJan Lentfer * "Software"), to deal in the Software without restriction, including * 7fdd4e1e0SJan Lentfer * without limitation the rights to use, copy, modify, merge, publish, * 8fdd4e1e0SJan Lentfer * distribute, distribute with modifications, sublicense, and/or sell * 9fdd4e1e0SJan Lentfer * copies of the Software, and to permit persons to whom the Software is * 10fdd4e1e0SJan Lentfer * furnished to do so, subject to the following conditions: * 11fdd4e1e0SJan Lentfer * * 12fdd4e1e0SJan Lentfer * The above copyright notice and this permission notice shall be included * 13fdd4e1e0SJan Lentfer * in all copies or substantial portions of the Software. * 14fdd4e1e0SJan Lentfer * * 15fdd4e1e0SJan Lentfer * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * 16fdd4e1e0SJan Lentfer * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * 17fdd4e1e0SJan Lentfer * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * 18fdd4e1e0SJan Lentfer * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * 19fdd4e1e0SJan Lentfer * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * 20fdd4e1e0SJan Lentfer * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * 21fdd4e1e0SJan Lentfer * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * 22fdd4e1e0SJan Lentfer * * 23fdd4e1e0SJan Lentfer * Except as contained in this notice, the name(s) of the above copyright * 24fdd4e1e0SJan Lentfer * holders shall not be used in advertising or otherwise to promote the * 25fdd4e1e0SJan Lentfer * sale, use or other dealings in this Software without prior written * 26fdd4e1e0SJan Lentfer * authorization. * 27fdd4e1e0SJan Lentfer ****************************************************************************/ 28fdd4e1e0SJan Lentfer 29fdd4e1e0SJan Lentfer /**************************************************************************** 30fdd4e1e0SJan Lentfer * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 * 31fdd4e1e0SJan Lentfer * and: Eric S. Raymond <esr@snark.thyrsus.com> * 32*1d102085SJan Lentfer * and: Juergen Pfeifer 1997-1999 * 33*1d102085SJan Lentfer * and: Thomas E. Dickey 2000-on * 34fdd4e1e0SJan Lentfer ****************************************************************************/ 35fdd4e1e0SJan Lentfer 36fdd4e1e0SJan Lentfer /* p_new.c 37fdd4e1e0SJan Lentfer * Creation of a new panel 38fdd4e1e0SJan Lentfer */ 39fdd4e1e0SJan Lentfer #include "panel.priv.h" 40fdd4e1e0SJan Lentfer 41*1d102085SJan Lentfer MODULE_ID("$Id: p_new.c,v 1.10 2008/08/04 18:25:48 tom Exp $") 42fdd4e1e0SJan Lentfer 43fdd4e1e0SJan Lentfer #ifdef TRACE 44fdd4e1e0SJan Lentfer static char *stdscr_id; 45fdd4e1e0SJan Lentfer static char *new_id; 46fdd4e1e0SJan Lentfer #endif 47fdd4e1e0SJan Lentfer 48fdd4e1e0SJan Lentfer /*+------------------------------------------------------------------------- 49fdd4e1e0SJan Lentfer Get root (i.e. stdscr's) panel. 50fdd4e1e0SJan Lentfer Establish the pseudo panel for stdscr if necessary. 51fdd4e1e0SJan Lentfer --------------------------------------------------------------------------*/ 52fdd4e1e0SJan Lentfer static PANEL * 53fdd4e1e0SJan Lentfer root_panel(void) 54fdd4e1e0SJan Lentfer { 55fdd4e1e0SJan Lentfer if (_nc_stdscr_pseudo_panel == (PANEL *) 0) 56fdd4e1e0SJan Lentfer { 57fdd4e1e0SJan Lentfer 58fdd4e1e0SJan Lentfer assert(stdscr && !_nc_bottom_panel && !_nc_top_panel); 59*1d102085SJan Lentfer #if NO_LEAKS 60*1d102085SJan Lentfer _nc_panelhook()->destroy = del_panel; 61*1d102085SJan Lentfer #endif 62fdd4e1e0SJan Lentfer _nc_stdscr_pseudo_panel = (PANEL *) malloc(sizeof(PANEL)); 63*1d102085SJan Lentfer if (_nc_stdscr_pseudo_panel != 0) 64*1d102085SJan Lentfer { 65fdd4e1e0SJan Lentfer PANEL *pan = _nc_stdscr_pseudo_panel; 66fdd4e1e0SJan Lentfer WINDOW *win = stdscr; 67*1d102085SJan Lentfer 68fdd4e1e0SJan Lentfer pan->win = win; 69fdd4e1e0SJan Lentfer pan->below = (PANEL *) 0; 70fdd4e1e0SJan Lentfer pan->above = (PANEL *) 0; 71fdd4e1e0SJan Lentfer #ifdef TRACE 72fdd4e1e0SJan Lentfer if (!stdscr_id) 73fdd4e1e0SJan Lentfer stdscr_id = strdup("stdscr"); 74fdd4e1e0SJan Lentfer pan->user = stdscr_id; 75fdd4e1e0SJan Lentfer #else 76fdd4e1e0SJan Lentfer pan->user = (void *)0; 77fdd4e1e0SJan Lentfer #endif 78fdd4e1e0SJan Lentfer _nc_bottom_panel = _nc_top_panel = pan; 79fdd4e1e0SJan Lentfer } 80fdd4e1e0SJan Lentfer } 81fdd4e1e0SJan Lentfer return _nc_stdscr_pseudo_panel; 82fdd4e1e0SJan Lentfer } 83fdd4e1e0SJan Lentfer 84fdd4e1e0SJan Lentfer NCURSES_EXPORT(PANEL *) 85fdd4e1e0SJan Lentfer new_panel(WINDOW *win) 86fdd4e1e0SJan Lentfer { 87fdd4e1e0SJan Lentfer PANEL *pan = (PANEL *) 0; 88fdd4e1e0SJan Lentfer 89*1d102085SJan Lentfer T((T_CALLED("new_panel(%p)"), win)); 90*1d102085SJan Lentfer 91fdd4e1e0SJan Lentfer if (!win) 92*1d102085SJan Lentfer returnPanel(pan); 93fdd4e1e0SJan Lentfer 94fdd4e1e0SJan Lentfer if (!_nc_stdscr_pseudo_panel) 95fdd4e1e0SJan Lentfer (void)root_panel(); 96fdd4e1e0SJan Lentfer assert(_nc_stdscr_pseudo_panel); 97fdd4e1e0SJan Lentfer 98fdd4e1e0SJan Lentfer if (!(win->_flags & _ISPAD) && (pan = (PANEL *) malloc(sizeof(PANEL)))) 99fdd4e1e0SJan Lentfer { 100fdd4e1e0SJan Lentfer pan->win = win; 101fdd4e1e0SJan Lentfer pan->above = (PANEL *) 0; 102fdd4e1e0SJan Lentfer pan->below = (PANEL *) 0; 103fdd4e1e0SJan Lentfer #ifdef TRACE 104fdd4e1e0SJan Lentfer if (!new_id) 105fdd4e1e0SJan Lentfer new_id = strdup("new"); 106fdd4e1e0SJan Lentfer pan->user = new_id; 107fdd4e1e0SJan Lentfer #else 108fdd4e1e0SJan Lentfer pan->user = (char *)0; 109fdd4e1e0SJan Lentfer #endif 110fdd4e1e0SJan Lentfer (void)show_panel(pan); 111fdd4e1e0SJan Lentfer } 112*1d102085SJan Lentfer returnPanel(pan); 113fdd4e1e0SJan Lentfer } 114