| .\"*************************************************************************** |
| .\" Copyright 2018,2020 Thomas E. Dickey * |
| .\" Copyright 1998-2015,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: curs_pad.3x,v 1.26 2020/02/02 23:34:34 tom Exp $ |
| .de bP |
| .ie n .IP \(bu 4 |
| .el .IP \(bu 2 |
| .. |
| .TH curs_pad 3X "" |
| .na |
| .hy 0 |
| .SH NAME |
| \fBnewpad\fR, |
| \fBsubpad\fR, |
| \fBprefresh\fR, |
| \fBpnoutrefresh\fR, |
| \fBpechochar\fR, |
| \fBpecho_wchar\fR \- create and display \fBcurses\fR pads |
| .ad |
| .hy |
| .SH SYNOPSIS |
| \fB#include <curses.h>\fR |
| .sp |
| \fBWINDOW *newpad(int \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB);\fR |
| .br |
| \fBWINDOW *subpad(WINDOW *\fP\fIorig\fP\fB, int \fP\fInlines\fP\fB, int \fP\fIncols\fP\fB,\fR |
| \fBint \fP\fIbegin_y\fP\fB, int \fP\fIbegin_x\fP\fB);\fR |
| .br |
| \fBint prefresh(WINDOW *\fP\fIpad\fP\fB, int \fP\fIpminrow\fP\fB, int \fP\fIpmincol\fP\fB,\fR |
| \fBint \fP\fIsminrow\fP\fB, int \fP\fIsmincol\fP\fB, int \fP\fIsmaxrow\fP\fB, int \fP\fIsmaxcol\fP\fB);\fR |
| .br |
| \fBint pnoutrefresh(WINDOW *\fP\fIpad\fP\fB, int \fP\fIpminrow\fP\fB, int \fP\fIpmincol\fP\fB,\fR |
| \fBint \fP\fIsminrow\fP\fB, int \fP\fIsmincol\fP\fB, int \fP\fIsmaxrow\fP\fB, int \fP\fIsmaxcol\fP\fB);\fR |
| .br |
| \fBint pechochar(WINDOW *\fP\fIpad\fP\fB, chtype \fP\fIch\fP\fB);\fR |
| .br |
| \fBint pecho_wchar(WINDOW *\fP\fIpad\fP\fB, const cchar_t *\fP\fIwch\fP\fB);\fR |
| .SH DESCRIPTION |
| .SS newpad |
| The \fBnewpad\fR routine creates and returns a pointer to a new pad data |
| structure with the given number of lines, \fInlines\fR, and columns, |
| \fIncols\fR. |
| A pad is like a window, except that it is not restricted by the |
| screen size, and is not necessarily associated with a particular part of the |
| screen. |
| Pads can be used when a large window is needed, and only a part of the |
| window will be on the screen at one time. |
| Automatic refreshes of pads |
| (e.g., from scrolling or echoing of input) do not occur. |
| .PP |
| It is not |
| legal to call \fBwrefresh\fR with a \fIpad\fR as an argument; the routines |
| \fBprefresh\fR or \fBpnoutrefresh\fR should be called instead. |
| Note that these |
| routines require additional parameters to specify the part of the pad to be |
| displayed and the location on the screen to be used for the display. |
| .SS subpad |
| .PP |
| The \fBsubpad\fR routine creates and returns a pointer to a subwindow within a |
| pad with the given number of lines, \fInlines\fR, and columns, \fIncols\fR. |
| Unlike \fBsubwin\fR, which uses screen coordinates, the window is at position |
| (\fIbegin\fR_\fIx\fR\fB,\fR \fIbegin\fR_\fIy\fR) on the pad. |
| The window is |
| made in the middle of the window \fIorig\fR, so that changes made to one window |
| affect both windows. |
| During the use of this routine, it will often be |
| necessary to call \fBtouchwin\fR or \fBtouchline\fR on \fIorig\fR before |
| calling \fBprefresh\fR. |
| .SS prefresh, pnoutrefresh |
| .PP |
| The \fBprefresh\fR and \fBpnoutrefresh\fR routines are analogous to |
| \fBwrefresh\fR and \fBwnoutrefresh\fR except that they relate to pads instead |
| of windows. |
| The additional parameters are needed to indicate what part of the |
| pad and screen are involved. |
| .bP |
| The \fIpminrow\fR and \fIpmincol\fR parameters specify the upper |
| left-hand corner of the rectangle to be displayed in the pad. |
| .bP |
| The \fIsminrow\fR, |
| \fIsmincol\fR, \fIsmaxrow\fR, and \fIsmaxcol\fR |
| parameters specify the edges of the |
| rectangle to be displayed on the screen. |
| .PP |
| The lower right-hand corner of the |
| rectangle to be displayed in the pad is calculated from the screen coordinates, |
| since the rectangles must be the same size. |
| Both rectangles must be entirely |
| contained within their respective structures. |
| Negative values of |
| \fIpminrow\fR, \fIpmincol\fR, \fIsminrow\fR, or \fIsmincol\fR are treated as if |
| they were zero. |
| .SS pechochar |
| .PP |
| The \fBpechochar\fR routine is functionally equivalent to a call to \fBaddch\fR |
| followed by a call to \fBrefresh\fR(3X), |
| a call to \fBwaddch\fR followed by a call |
| to \fBwrefresh\fR, or a call to \fBwaddch\fR followed by a call to |
| \fBprefresh\fR. |
| The knowledge that only a single character is being output is |
| taken into consideration and, for non-control characters, a considerable |
| performance gain might be seen by using these routines instead of their |
| equivalents. |
| In the case of \fBpechochar\fR, the last location of the pad on |
| the screen is reused for the arguments to \fBprefresh\fR. |
| .SS pecho_wchar |
| .PP |
| The \fBpecho_wchar\fR function is the analogous wide-character |
| form of \fBpechochar\fR. |
| It outputs one character to a pad and immediately refreshes the pad. |
| It does this by a call to \fBwadd_wch\fR followed by a call to \fBprefresh\fR. |
| .SH RETURN VALUE |
| Routines that return an integer return \fBERR\fR upon failure and \fBOK\fR |
| (SVr4 only specifies "an integer value other than \fBERR\fR") upon successful |
| completion. |
| .PP |
| Routines that return pointers return \fBNULL\fR on error, and set \fBerrno\fR |
| to \fBENOMEM\fR. |
| .PP |
| X/Open does not define any error conditions. |
| In this implementation |
| .RS 3 |
| .TP 5 |
| \fBprefresh\fP and \fBpnoutrefresh\fP |
| return an error |
| if the window pointer is null, or |
| if the window is not really a pad or |
| if the area to refresh extends off-screen or |
| if the minimum coordinates are greater than the maximum. |
| .TP 5 |
| \fBpechochar\fP |
| returns an error |
| if the window is not really a pad, and the associated call |
| to \fBwechochar\fP returns an error. |
| .TP 5 |
| \fBpecho_wchar\fP |
| returns an error |
| if the window is not really a pad, and the associated call |
| to \fBwecho_wchar\fP returns an error. |
| .RE |
| .SH NOTES |
| Note that \fBpechochar\fR may be a macro. |
| .SH PORTABILITY |
| BSD curses has no \fIpad\fP feature. |
| .PP |
| SVr2 curses (1986) provided the \fBnewpad\fP and related functions, |
| documenting them in a single line each. |
| SVr3 (1987) provided more extensive documentation. |
| .PP |
| The documentation does not explain the term \fIpad\fP. |
| However, the Apollo \fIAegis\fP workstation operating system |
| supported a graphical \fIpad\fP feature: |
| .bP |
| These graphical pads could be much larger than the computer's display. |
| .bP |
| The read-only output from a command could be scrolled back to inspect, |
| and select text from the pad. |
| .PP |
| The two uses may be related. |
| .PP |
| The XSI Curses standard, Issue 4 describes these functions, |
| without significant change from the SVr3 documentation. |
| It describes no error conditions. |
| The behavior of \fBsubpad\fP if the parent window is not |
| a pad is undocumented, |
| and is not checked by the vendor Unix implementations: |
| .bP |
| SVr4 curses sets a flag in the \fBWINDOW\fP structure in \fBnewpad\fP |
| which tells if the window is a \fIpad\fP. |
| .IP |
| However, it uses this information only in |
| \fBwaddch\fP (to decide if it should call \fBwrefresh\fP) and |
| \fBwscrl\fP (to avoid scrolling a pad), |
| and does not check in \fBwrefresh\fP to ensure that the pad |
| is refreshed properly. |
| .bP |
| Solaris X/Open Curses checks if a window is a pad in \fBwnoutrefresh\fP, |
| returning \fBERR\fP in that case. |
| .IP |
| However, it only sets the flag for subwindows if the parent window is a pad. |
| Its \fBnewpad\fP function does not set this information. |
| Consequently, the check will never fail. |
| .IP |
| It makes no comparable check in \fBpnoutrefresh\fP, |
| though interestingly enough, a comment in the source code |
| states that the lack of a check was an MKS extension. |
| .bP |
| NetBSD 7 curses |
| sets a flag in the \fBWINDOW\fP structure for \fBnewpad\fP and \fBsubpad\fP, |
| using this to help with the distinction between \fBwnoutrefresh\fP |
| and \fBpnoutrefresh\fP. |
| .IP |
| It does not check for the case where a subwindow is created in |
| a pad using \fBsubwin\fP or \fBderwin\fP. |
| .IP |
| The \fBdupwin\fP function returns a regular window when duplicating a pad. |
| Likewise, \fBgetwin\fP always returns a window, even if the saved |
| data was from a pad. |
| .PP |
| This implementation |
| .bP |
| sets a flag in the \fBWINDOW\fP structure for \fBnewpad\fP and \fBsubpad\fP, |
| .bP |
| allows a \fBsubwin\fP or \fBderwin\fP call to succeed having a pad parent by |
| forcing the subwindow to be a pad, |
| .bP |
| checks in both \fBwnoutrefresh\fP and \fBpnoutrefresh\fP to ensure |
| that pads and windows are handled distinctly, and |
| .bP |
| ensures that \fBdupwin\fP and \fBgetwin\fP treat |
| pads versus windows consistently. |
| .SH SEE ALSO |
| \fBcurses\fR(3X), |
| \fBcurs_refresh\fR(3X), |
| \fBcurs_touch\fR(3X), |
| \fBcurs_addch\fR(3X). |