]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - man/panel.3x
ncurses 6.4 - patch 20231014
[ncurses.git] / man / panel.3x
index b82162b202ed361ea5ab14d133c466d18f8f8882..57a577461bd5b6659d8d5d4c565c9ffb623c54c6 100644 (file)
-.\" $Id: panel.3x,v 1.8 1997/12/14 01:49:25 tom Exp $
-.TH panel 3X ""
-.ds n 5
-.ds d @DATADIR@/terminfo
+.\"***************************************************************************
+.\" Copyright 2018-2022,2023 Thomas E. Dickey                                *
+.\" Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
+.\"                                                                          *
+.\" Permission is hereby granted, free of charge, to any person obtaining a  *
+.\" copy of this software and associated documentation files (the            *
+.\" "Software"), to deal in the Software without restriction, including      *
+.\" without limitation the rights to use, copy, modify, merge, publish,      *
+.\" distribute, distribute with modifications, sublicense, and/or sell       *
+.\" copies of the Software, and to permit persons to whom the Software is    *
+.\" furnished to do so, subject to the following conditions:                 *
+.\"                                                                          *
+.\" The above copyright notice and this permission notice shall be included  *
+.\" in all copies or substantial portions of the Software.                   *
+.\"                                                                          *
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
+.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
+.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
+.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
+.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
+.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
+.\"                                                                          *
+.\" Except as contained in this notice, the name(s) of the above copyright   *
+.\" holders shall not be used in advertising or otherwise to promote the     *
+.\" sale, use or other dealings in this Software without prior written       *
+.\" authorization.                                                           *
+.\"***************************************************************************
+.\"
+.\" $Id: panel.3x,v 1.57 2023/10/14 19:20:40 tom Exp $
+.TH panel 3X 2023-10-14 "ncurses 6.4" "Library calls"
+.ie \n(.g \{\
+.ds `` \(lq
+.ds '' \(rq
+.\}
+.el \{\
+.ie t .ds `` ``
+.el   .ds `` ""
+.ie t .ds '' ''
+.el   .ds '' ""
+.\}
+.
+.de bP
+.ie n  .IP \(bu 4
+.el    .IP \(bu 2
+..
 .SH NAME
-panel - panel stack extension for curses
+panel \-
+panel stack extension for curses
 .SH SYNOPSIS
-\fB#include <panel.h>\fR
-.P
-\fBcc [flags] sourcefiles -lpanel -lncurses\fR
-.P
-\fBPANEL *new_panel(WINDOW *win)\fR
-.br
-\fBint bottom_panel(PANEL *pan)\fR
-.br
-\fBint top_panel(PANEL *pan)\fR
-.br
-\fBint show_panel(PANEL *pan)\fR
-.br
-\fBvoid update_panels();\fR
-.br
-\fBint hide_panel(PANEL *pan)\fR
-.br
-\fBWINDOW *panel_window(const PANEL *pan)\fR
-.br
-\fBint replace_panel(PANEL *pan, WINDOW *window)\fR
-.br
-\fBint move_panel(PANEL *pan, int starty, int startx)\fR
-.br
-\fBint panel_hidden(const PANEL *pan)\fR
-.br
-\fBPANEL *panel_above(const PANEL *pan)\fR
-.br
-\fBPANEL *panel_below(const PANEL *pan)\fR
-.br
-\fBint set_panel_userptr(PANEL *pan, const void *ptr)\fR
-.br
-\fBconst void *panel_userptr(const PANEL *pan)\fR
-.br
-\fBint del_panel(PANEL *pan)\fR
-.br
+.nf
+\fB#include <panel.h>
+.PP
+\fBPANEL *new_panel(WINDOW *\fIwin\fP);
+.PP
+\fBint bottom_panel(PANEL *\fIpan\fP);
+\fBint top_panel(PANEL *\fIpan\fP);
+\fBint show_panel(PANEL *\fIpan\fP);
+\fBvoid update_panels(void);
+\fBint hide_panel(PANEL *\fIpan\fP);
+.PP
+\fBWINDOW *panel_window(const PANEL *\fIpan\fP);
+\fBint replace_panel(PANEL *\fIpan\fP, WINDOW *\fIwindow\fP);
+\fBint move_panel(PANEL *\fIpan\fP, int \fIstarty\fP, int \fIstartx\fP);
+\fBint panel_hidden(const PANEL *\fIpan\fP);
+.PP
+\fBPANEL *panel_above(const PANEL *\fIpan\fP);
+\fBPANEL *panel_below(const PANEL *\fIpan\fP);
+.PP
+\fBint set_panel_userptr(PANEL *\fIpan\fP, const void *\fIptr\fP);
+\fBconst void *panel_userptr(const PANEL *\fIpan\fP);
+.PP
+\fBint del_panel(PANEL *\fIpan\fP);
+.PP
+\fI/* ncurses extensions */\fP
+\fBPANEL *ground_panel(SCREEN *\fIsp\fP);
+\fBPANEL *ceiling_panel(SCREEN *\fIsp\fP);
+.fi
 .SH DESCRIPTION
-Panels are \fBcurses\fR(3X) windows with the added feature of
-depth.  Panel functions allow the use of stacked windows and ensure
-the proper portions of each window and the curses \fBstdscr\fR window are
+Panels are \fBcurses\fP(3X) windows with the added feature of
+depth.
+Panel functions allow the use of stacked windows and ensure
+the proper portions of each window and the curses \fBstdscr\fP window are
 hidden or displayed when panels are added, moved, modified or removed.
-The set of currently visible panels is the stack of panels.  The
-\fBstdscr\fR window is beneath all panels, and is not considered part
+The set of currently visible panels is the stack of panels.
+The
+\fBstdscr\fP window is beneath all panels, and is not considered part
 of the stack.
 .P
-A window is associated with every panel. The panel routines enable
-you to create, move, hides, and show panels, as well as position a
+A window is associated with every panel.
+The panel routines enable
+you to create, move, hide, and show panels, as well as position a
 panel at any desired location in the stack.
 .P
-Panel routines are a functional layer added to \fBcurses\fR(3X), make only
+Panel routines are a functional layer added to \fBcurses\fP(3X), make only
 high-level curses calls, and work anywhere terminfo curses does.
 .SH FUNCTIONS
-.TP
-\fBnew_panel(win)\fR
-allocates  a  \fBPANEL\fR structure, associates it with
-\fBwin\fR, places the panel on the top of the stack  (causes  it
-to  be  displayed above any other panel) and returns a
+.\" ---------
+.SS bottom_panel
+\fBbottom_panel(\fIpan\fB)\fR
+puts panel \fIpan\fP at the bottom of all panels.
+.\" ---------
+.SS ceiling_panel
+\fBceiling_panel(\fIsp\fB)\fR
+acts like \fBpanel_below(NULL)\fP, for the given \fBSCREEN\fP \fIsp\fP.
+.\" ---------
+.SS del_panel
+\fBdel_panel(\fIpan\fB)\fR
+removes the given panel \fIpan\fP from the  stack and deallocates the
+\fBPANEL\fP structure (but not its associated window).
+.\" ---------
+.SS ground_panel
+\fBground_panel(\fIsp\fB)\fR
+acts like \fBpanel_above(NULL)\fP, for the given \fBSCREEN\fP \fIsp\fP.
+.\" ---------
+.SS hide_panel
+\fBhide_panel(\fIpan\fB)\fR
+removes the given panel \fIpan\fP from the panel stack
+and thus hides it from view.
+The \fBPANEL\fP structure is not lost, merely removed from the stack.
+.\" ---------
+.SS move_panel
+\fBmove_panel(\fIpan\fB,\fIstarty\fB,\fIstartx\fB)\fR
+moves the given panel \fIpan\fP's window so that its upper-left corner is at
+\fIstarty\fP, \fIstartx\fP.
+It does not change the position of the panel in the stack.
+Be sure to use this function, not \fBmvwin\fP(3X), to move a panel window.
+.\" ---------
+.SS new_panel
+\fBnew_panel(\fIwin\fB)\fR allocates a \fBPANEL\fR structure,
+associates it with \fIwin\fP, places the panel on the top of the stack
+(causes  it to  be  displayed above any other panel) and returns a
 pointer to the new panel.
-.TP
-\fBvoid update_panels()\fR
-refreshes the virtual screen to reflect the relations between the
-panels in the stack, but does not call doupdate() to refresh the
-physical screen.  Use this function and not wrefresh or wnoutrefresh.
-update_panels() may be called more than once before a call to
-doupdate(), but doupdate() is the function responsible for updating
-the physical screen.
-.TP
-\fBdel_panel(pan)\fR
-removes the given panel from the  stack and deallocates the
-\fBPANEL\fR structure (but not its associated window).
-.TP
-\fBhide_panel(pan)\fR
-removes the given panel from the panel stack and thus hides it from
-view. The \fBPANEL\fR structure is not lost, merely removed from the stack.
-.TP
-\fBshow_panel(pan)\fR
-makes a hidden panel visible by placing it on top of the panels in the
-panel stack. See COMPATIBILITY below.
-.TP
-\fBtop_panel(pan)\fR
-puts the given visible panel on top of all panels in the stack.  See
-COMPATIBILITY below.
-.TP
-\fBbottom_panel(pan)\fR
-puts panel at the bottom of all panels.
-.TP
-\fBmove_panel(pan,starty,startx)\fR
-moves the given panel window so that its upper-left corner is at
-\fBstarty\fR, \fBstartx\fR.  It does not change the position of the
-panel in the stack.  Be sure to use this function, not \fBmvwin()\fR,
-to move a panel window.
-.TP
-\fBreplace_panel(pan,window)\fR
-replaces the current window of panel with \fBwindow\fR (useful, for
-example if you want to resize a panel; if you're using \fBncurses\fR,
-you can call \fBreplace_panel\fR on the output of \fBwresize\fR(3X)).
+.\" ---------
+.SS panel_above
+\fBpanel_above(\fIpan\fB)\fR
+returns a pointer to the panel above \fIpan\fP.
+If the panel argument is
+\fB(PANEL *)0\fP, it returns a pointer to the bottom panel in the stack.
+.\" ---------
+.SS panel_below
+\fBpanel_below(\fIpan\fB)\fR
+returns a pointer to the panel just below \fIpan\fP.
+If the panel argument
+is \fB(PANEL *)0\fP, it returns a pointer to the top panel in the stack.
+.\" ---------
+.SS panel_hidden
+\fBpanel_hidden(\fIpan\fB)\fR
+returns \fBFALSE\fP if the panel \fIpan\fP is in the panel stack,
+\fBTRUE\fP if it is not.
+If the panel is a null pointer, return \fBERR\fP.
+.\" ---------
+.SS panel_userptr
+\fBpanel_userptr(\fIpan\fB)\fR
+returns the user pointer for a given panel \fIpan\fP.
+.\" ---------
+.SS panel_window
+\fBpanel_window(\fIpan\fB)\fR
+returns a pointer to the window of the given panel \fIpan\fP.
+.\" ---------
+.SS replace_panel
+\fBreplace_panel(\fIpan\fB,\fIwindow\fB)\fR
+replaces the current window of panel \fIpan\fP with \fIwindow\fP
+This is useful, for example if you want to resize a panel.
+In \fBncurses\fP, you can call \fBreplace_panel\fP
+to resize a panel using a window resized with \fBwresize\fP(3X).
 It does not change the position of the panel in the stack.
-.TP
-\fBpanel_above(pan)\fR
-returns a pointer to the panel above pan.  If the panel argument is
-\fB(PANEL *)0\fR, it returns a pointer to the bottom panel in the stack.
-.TP
-\fBpanel_below(pan)\fR
-returns a pointer to the panel just below pan.  If the panel argument
-is \fB(PANEL *)0\fR, it returns a pointer to the top panel in the stack.
-.TP
-\fBset_panel_userptr(pan,ptr)\fR
+.\" ---------
+.SS set_panel_userptr
+\fBset_panel_userptr(\fIpan\fB,\fIptr\fB)\fR
 sets the panel's user pointer.
-.TP
-\fBpanel_userptr(pan)\fR
-returns the user pointer for a given panel.
-.TP
-\fBpanel_window(pan)\fR
-returns a pointer to the window of the given panel.
+.\" ---------
+.SS show_panel
+\fBshow_panel(\fIpan\fB)\fR
+makes a hidden panel visible by placing it on top of the panels in the
+panel stack.
+See \fBCOMPATIBILITY\fP below.
+.\" ---------
+.SS top_panel
+\fBtop_panel(\fIpan\fB)\fR
+puts the given visible panel \fIpan\fP on top of all panels in the stack.
+See \fBCOMPATIBILITY\fP below.
+.\" ---------
+.SS update_panels
+\fBupdate_panels()\fR
+refreshes the \fIvirtual screen\fP to reflect the relations between the
+panels in the stack, but does not call \fBdoupdate\fP(3X) to refresh the
+\fIphysical screen\fP.
+Use this function and not \fBwrefresh\fP(3X) or \fBwnoutrefresh\fP(3X).
+.PP
+\fBupdate_panels\fP may be called more than once before a call to
+\fBdoupdate\fP, but \fBdoupdate\fP is the function responsible for updating
+the \fIphysical screen\fP.
 .SH DIAGNOSTICS
-Each routine that returns a pointer returns \fBNULL\fR if an error
-occurs. Each routine that returns an int value returns \fBOK\fR if it
-executes successfully and \fBERR\fR if not.
+Each routine that returns a pointer returns \fBNULL\fP if an error
+occurs.
+Each routine that returns an int value returns \fBOK\fP if it
+executes successfully and \fBERR\fP if not.
+.PP
+Except as noted, the \fIpan\fP and \fIwindow\fP parameters must be non-null.
+If those are null, an error is returned.
+.PP
+The \fBmove_panel\fP function uses \fBmvwin\fP(3X),
+and will return an error if \fBmvwin\fP returns an error.
 .SH COMPATIBILITY
 Reasonable care has been taken to  ensure  compatibility
-with  the  native  panel facility introduced in SVr3.2 (inspection of
+with  the  native  panel facility introduced in System V (inspection of
 the SVr4 manual pages suggests the programming interface is unchanged).
-The \fBPANEL\fR data structures are merely  similar. The  programmer
-is cautioned not to directly use \fBPANEL\fR fields.
+The \fBPANEL\fP data structures are merely  similar.
+The  programmer
+is cautioned not to directly use \fBPANEL\fP fields.
 .P
-The functions \fBshow_panel()\fR and \fBtop_panel()\fR are identical
+The functions \fBshow_panel\fP and \fBtop_panel\fP are identical
 in this implementation, and work equally well with displayed or hidden
-panels.  In the native System V implementation, \fBshow_panel()\fR is
+panels.
+In the native System V implementation, \fBshow_panel\fP is
 intended for making a hidden panel visible (at the top of the stack)
-and \fBtop_panel()\fR is intended for making an already-visible panel
-move to the top of the stack. You are cautioned to use the correct
+and \fBtop_panel\fP is intended for making an already-visible panel
+move to the top of the stack.
+You are cautioned to use the correct
 function to ensure compatibility with native panel libraries.
 .SH NOTE
 In your library list, libpanel.a should be before libncurses.a; that is,
-you want to say `-lpanel -lncurses', not the other way around (which would
-give you a link error using GNU \fBld\fR(1) and some other linkers).
-.SH FILES
-.P
-panel.h
-interface for the panels library
-.P
-libpanel.a
-the panels library itself
-.SH SEE ALSO
-\fBcurses\fR(3X)
+you should say \*(``\-lpanel \-lncurses\*('', not the other way around
+(which would give a link-error with static libraries).
+.SH PORTABILITY
+The panel facility was documented in SVr4.2 in
+\fICharacter User Interface Programming (UNIX SVR4.2)\fP.
+.PP
+It is not part of X/Open Curses.
+.PP
+A few implementations exist:
+.bP
+Systems based on SVr4 source code,
+e.g., Solaris, provide this library.
+.bP
+\fBncurses\fP (since version 0.6 in 1993)
+and \fBPDCurses\fP (since version 2.2 in 1995)
+provide a panel library whose common ancestor
+was a public domain implementation by Warren Tucker
+published in \fIu386mon\fP 2.20 (1990).
+.IP
+According to Tucker, the System\ V panel library
+was first released in SVr3.2 (1988),
+and his implementation helped with a port to SVr3.1 (1987).
+.IP
+Several developers have improved each of these;
+they are no longer the same as Tucker's implementation.
+.bP
+NetBSD 8 (2018)
+has a panel library begun by Valery Ushakov in 2015.
+This is based on the AT&T documentation.
 .SH AUTHOR
 Originally written by Warren Tucker <wht@n4hgf.mt-park.ga.us>,
-primarily to assist in porting u386mon to systems without a native
-panels library.  Repackaged for ncurses by Zeyd ben-Halim.
+primarily to assist in porting \fIu386mon\fP to systems without a native
+panels library.
+.PP
+Repackaged for ncurses by Zeyd ben-Halim.
+.PP
+Juergen Pfeifer and Thomas E. Dickey revised/improved the library.
+.SH SEE ALSO
+\fB\%curses\fP(3X),
+\fB\%curs_variables\fP(3X)