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