xref: /openbsd-src/lib/libpanel/p_new.c (revision 15fe46be62030538188bc7d3f4504150f885eef1)
1*15fe46beSmillert /*	$OpenBSD: p_new.c,v 1.1 1997/12/03 05:17:54 millert Exp $	*/
2*15fe46beSmillert 
3*15fe46beSmillert /***************************************************************************
4*15fe46beSmillert *                            COPYRIGHT NOTICE                              *
5*15fe46beSmillert ****************************************************************************
6*15fe46beSmillert *                     panels is copyright (C) 1995                         *
7*15fe46beSmillert *                          Zeyd M. Ben-Halim                               *
8*15fe46beSmillert *                          zmbenhal@netcom.com                             *
9*15fe46beSmillert *                          Eric S. Raymond                                 *
10*15fe46beSmillert *                          esr@snark.thyrsus.com                           *
11*15fe46beSmillert *                                                                          *
12*15fe46beSmillert *	      All praise to the original author, Warren Tucker.            *
13*15fe46beSmillert *                                                                          *
14*15fe46beSmillert *        Permission is hereby granted to reproduce and distribute panels   *
15*15fe46beSmillert *        by any means and for any fee, whether alone or as part of a       *
16*15fe46beSmillert *        larger distribution, in source or in binary form, PROVIDED        *
17*15fe46beSmillert *        this notice is included with any such distribution, and is not    *
18*15fe46beSmillert *        removed from any of its header files. Mention of panels in any    *
19*15fe46beSmillert *        applications linked with it is highly appreciated.                *
20*15fe46beSmillert *                                                                          *
21*15fe46beSmillert *        panels comes AS IS with no warranty, implied or expressed.        *
22*15fe46beSmillert *                                                                          *
23*15fe46beSmillert ***************************************************************************/
24*15fe46beSmillert 
25*15fe46beSmillert /* p_new.c
26*15fe46beSmillert  * Creation of a new panel
27*15fe46beSmillert  */
28*15fe46beSmillert #include "panel.priv.h"
29*15fe46beSmillert 
30*15fe46beSmillert MODULE_ID("Id: p_new.c,v 1.1 1997/10/12 13:16:22 juergen Exp $")
31*15fe46beSmillert 
32*15fe46beSmillert /*+-------------------------------------------------------------------------
33*15fe46beSmillert   Get root (i.e. stdscr's) panel.
34*15fe46beSmillert   Establish the pseudo panel for stdscr if necessary.
35*15fe46beSmillert --------------------------------------------------------------------------*/
36*15fe46beSmillert static PANEL*
37*15fe46beSmillert root_panel(void)
38*15fe46beSmillert {
39*15fe46beSmillert   if(_nc_stdscr_pseudo_panel == (PANEL*)0)
40*15fe46beSmillert     {
41*15fe46beSmillert 
42*15fe46beSmillert       assert(stdscr && !_nc_bottom_panel && !_nc_top_panel);
43*15fe46beSmillert       _nc_stdscr_pseudo_panel = (PANEL*)malloc(sizeof(PANEL));
44*15fe46beSmillert       if (_nc_stdscr_pseudo_panel != 0) {
45*15fe46beSmillert 	PANEL* pan  = _nc_stdscr_pseudo_panel;
46*15fe46beSmillert 	WINDOW* win = stdscr;
47*15fe46beSmillert 	pan->win = win;
48*15fe46beSmillert 	getbegyx(win, pan->wstarty, pan->wstartx);
49*15fe46beSmillert 	pan->wendy   = pan->wstarty + getmaxy(win);
50*15fe46beSmillert 	pan->wendx   = pan->wstartx + getmaxx(win);
51*15fe46beSmillert 	pan->below   = (PANEL*)0;
52*15fe46beSmillert 	pan->above   = (PANEL*)0;
53*15fe46beSmillert         pan->obscure = (PANELCONS*)0;
54*15fe46beSmillert #ifdef TRACE
55*15fe46beSmillert 	pan->user = "stdscr";
56*15fe46beSmillert #else
57*15fe46beSmillert 	pan->user = (void*)0;
58*15fe46beSmillert #endif
59*15fe46beSmillert 	_nc_panel_link_bottom(pan);
60*15fe46beSmillert       }
61*15fe46beSmillert     }
62*15fe46beSmillert   return _nc_stdscr_pseudo_panel;
63*15fe46beSmillert }
64*15fe46beSmillert 
65*15fe46beSmillert PANEL *
66*15fe46beSmillert new_panel(WINDOW *win)
67*15fe46beSmillert {
68*15fe46beSmillert   PANEL *pan = (PANEL*)0;
69*15fe46beSmillert 
70*15fe46beSmillert   (void)root_panel();
71*15fe46beSmillert   assert(_nc_stdscr_pseudo_panel);
72*15fe46beSmillert 
73*15fe46beSmillert   if (!(win->_flags & _ISPAD) && (pan = (PANEL*)malloc(sizeof(PANEL))))
74*15fe46beSmillert     {
75*15fe46beSmillert       pan->win = win;
76*15fe46beSmillert       pan->above = (PANEL *)0;
77*15fe46beSmillert       pan->below = (PANEL *)0;
78*15fe46beSmillert       getbegyx(win, pan->wstarty, pan->wstartx);
79*15fe46beSmillert       pan->wendy = pan->wstarty + getmaxy(win);
80*15fe46beSmillert       pan->wendx = pan->wstartx + getmaxx(win);
81*15fe46beSmillert #ifdef TRACE
82*15fe46beSmillert       pan->user = "new";
83*15fe46beSmillert #else
84*15fe46beSmillert       pan->user = (char *)0;
85*15fe46beSmillert #endif
86*15fe46beSmillert       pan->obscure = (PANELCONS *)0;
87*15fe46beSmillert       (void)show_panel(pan);
88*15fe46beSmillert     }
89*15fe46beSmillert   return(pan);
90*15fe46beSmillert }
91