]> ncurses.scripts.mit.edu Git - ncurses.git/blob - man/curs_window.3x
ncurses 6.4 - patch 20230917
[ncurses.git] / man / curs_window.3x
1 .\"***************************************************************************
2 .\" Copyright 2020-2022,2023 Thomas E. Dickey                                *
3 .\" Copyright 1998-2015,2016 Free Software Foundation, Inc.                  *
4 .\"                                                                          *
5 .\" Permission is hereby granted, free of charge, to any person obtaining a  *
6 .\" copy of this software and associated documentation files (the            *
7 .\" "Software"), to deal in the Software without restriction, including      *
8 .\" without limitation the rights to use, copy, modify, merge, publish,      *
9 .\" distribute, distribute with modifications, sublicense, and/or sell       *
10 .\" copies of the Software, and to permit persons to whom the Software is    *
11 .\" furnished to do so, subject to the following conditions:                 *
12 .\"                                                                          *
13 .\" The above copyright notice and this permission notice shall be included  *
14 .\" in all copies or substantial portions of the Software.                   *
15 .\"                                                                          *
16 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
17 .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
18 .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
19 .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
20 .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
21 .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
22 .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
23 .\"                                                                          *
24 .\" Except as contained in this notice, the name(s) of the above copyright   *
25 .\" holders shall not be used in advertising or otherwise to promote the     *
26 .\" sale, use or other dealings in this Software without prior written       *
27 .\" authorization.                                                           *
28 .\"***************************************************************************
29 .\"
30 .\" $Id: curs_window.3x,v 1.36 2023/09/16 23:37:03 tom Exp $
31 .TH curs_window 3X 2023-09-16 "ncurses 6.4" "Library calls"
32 .de bP
33 .ie n  .IP \(bu 4
34 .el    .IP \(bu 2
35 ..
36 .SH NAME
37 \fB\%newwin\fP,
38 \fB\%delwin\fP,
39 \fB\%mvwin\fP,
40 \fB\%subwin\fP,
41 \fB\%derwin\fP,
42 \fB\%mvderwin\fP,
43 \fB\%dupwin\fP,
44 \fB\%wsyncup\fP,
45 \fB\%syncok\fP,
46 \fB\%wcursyncup\fP,
47 \fB\%wsyncdown\fP \-
48 create and manipulate \fIcurses\fR windows
49 .SH SYNOPSIS
50 \fB#include <curses.h>\fP
51 .sp
52 \fBWINDOW *newwin(\fP
53       \fBint \fInlines\fB, int \fIncols\fB,\fR
54       \fBint \fIbegin_y\fB, int \fIbegin_x\fB);\fR
55 .br
56 \fBint delwin(WINDOW *\fIwin\fB);\fR
57 .br
58 \fBint mvwin(WINDOW *\fIwin\fB, int \fIy\fB, int \fIx\fB);\fR
59 .br
60 \fBWINDOW *subwin(WINDOW *\fIorig\fB,\fR
61       \fBint \fInlines\fB, int \fIncols\fB,\fR
62       \fBint \fIbegin_y\fB, int \fIbegin_x\fB);\fR
63 .br
64 \fBWINDOW *derwin(WINDOW *\fIorig\fB,\fR
65       \fBint \fInlines\fB, int \fIncols\fB,\fR
66       \fBint \fIbegin_y\fB, int \fIbegin_x\fB);\fR
67 .br
68 \fBint mvderwin(WINDOW *\fIwin\fB, int \fIpar_y\fB, int \fIpar_x\fB);\fR
69 .br
70 \fBWINDOW *dupwin(WINDOW *\fIwin\fB);\fR
71 .br
72 \fBvoid wsyncup(WINDOW *\fIwin\fB);\fR
73 .br
74 \fBint syncok(WINDOW *\fIwin\fB, bool \fIbf\fB);\fR
75 .br
76 \fBvoid wcursyncup(WINDOW *\fIwin\fB);\fR
77 .br
78 \fBvoid wsyncdown(WINDOW *\fIwin\fB);\fR
79 .SH DESCRIPTION
80 .SS newwin
81 Calling \fBnewwin\fP creates and returns a pointer to a new window with the
82 given number of lines and columns.
83 The upper left-hand corner of the window is
84 at
85 .RS
86 line \fIbegin\fR_\fIy\fP,
87 .br
88 column \fIbegin\fR_\fIx\fP
89 .RE
90 .PP
91 If either
92 \fInlines\fP or \fIncols\fP is zero, they default to
93 .RS
94 \fBLINES \-\fP \fIbegin\fR_\fIy\fP and
95 .br
96 \fBCOLS \-\fP \fIbegin\fR_\fIx\fP.
97 .RE
98 .PP
99 A new full-screen window is created by calling \fBnewwin(0,0,0,0)\fP.
100 .PP
101 Regardless of the function used for creating a new window
102 (e.g., \fBnewwin\fP, \fBsubwin\fP, \fBderwin\fP, \fBnewpad\fP),
103 rather than a duplicate (with \fBdupwin\fP),
104 all of the window modes are initialized to the default values.
105 These functions set window modes after a window is created:
106 .RS
107 .na
108 .PP
109 idcok,
110 idlok,
111 immedok,
112 keypad,
113 leaveok,
114 nodelay,
115 scrollok,
116 setscrreg,
117 syncok,
118 wbkgdset,
119 wbkgrndset, and
120 wtimeout
121 .RE
122 .ad
123 .SS delwin
124 Calling \fBdelwin\fP deletes the named window, freeing all memory
125 associated with it (it does not actually erase the window's screen
126 image).
127 Subwindows must be deleted before the main window can be deleted.
128 .SS mvwin
129 Calling \fBmvwin\fP moves the window so that the upper left-hand
130 corner is at position (\fIx\fP, \fIy\fP).
131 If the move would cause the window to be off the screen,
132 it is an error and the window is not moved.
133 Moving subwindows is allowed, but should be avoided.
134 .SS subwin
135 Calling \fBsubwin\fP creates and returns a pointer to a new window
136 with the given number of lines, \fInlines\fP, and columns, \fIncols\fP.
137 The window is at position (\fIbegin\fR_\fIy\fP,
138 \fIbegin\fR_\fIx\fP) on the screen.
139 The subwindow shares memory with the window \fIorig\fP,
140 so that changes made to one window
141 will affect both windows.
142 When using this routine, it is necessary to call
143 \fBtouchwin\fP or \fBtouchline\fP on \fIorig\fP before calling
144 \fBwrefresh\fP on the subwindow.
145 .SS derwin
146 Calling \fBderwin\fP is the same as calling \fBsubwin,\fP except that
147 \fIbegin\fR_\fIy\fP and \fIbegin\fR_\fIx\fP are relative to the origin
148 of the window \fIorig\fP rather than the screen.
149 There is no difference between the subwindows and the derived windows.
150 .PP
151 Calling \fBmvderwin\fP moves a derived window (or subwindow)
152 inside its parent window.
153 The screen-relative parameters of the window are not changed.
154 This routine is used to display different
155 parts of the parent window at the same physical position on the
156 screen.
157 .SS dupwin
158 Calling \fBdupwin\fP creates an exact duplicate of the window \fIwin\fP.
159 .SS wsyncup
160 Calling \fBwsyncup\fP touches all locations in ancestors of \fIwin\fP that are
161 changed in \fIwin\fP.
162 If \fBsyncok\fP is called with second argument
163 \fBTRUE\fP then \fBwsyncup\fP is called automatically whenever there is a
164 change in the window.
165 .SS wsyncdown
166 The \fBwsyncdown\fP routine touches each location in \fIwin\fP that has been
167 touched in any of its ancestor windows.
168 This routine is called by
169 \fBwrefresh\fP, so it should almost never be necessary to call it manually.
170 .SS wcursyncup
171 The routine \fBwcursyncup\fP updates the current cursor position of all the
172 ancestors of the window to reflect the current cursor position of the
173 window.
174 .SH RETURN VALUE
175 Routines that return an integer return the integer \fBERR\fP upon failure and
176 \fBOK\fP (SVr4 only specifies "an integer value other than \fBERR\fP") upon
177 successful completion.
178 .PP
179 Routines that return pointers return \fBNULL\fP on error.
180 .PP
181 X/Open defines no error conditions.
182 In this implementation
183 .TP 5
184 \fBdelwin\fP
185 returns an error if the window pointer is null, or
186 if the window is the parent of another window.
187 .TP 5
188 \fBderwin\fP
189 returns an error if the parent window pointer is null, or
190 if any of its ordinates or dimensions is negative, or
191 if the resulting window does not fit inside the parent window.
192 .TP 5
193 \fBdupwin\fP
194 returns an error if the window pointer is null.
195 .IP
196 This implementation also maintains a list of windows,
197 and checks that the pointer passed to \fBdelwin\fP is one that
198 it created, returning an error if it was not..
199 .TP 5
200 \fBmvderwin\fP
201 returns an error
202 if the window pointer is null, or
203 if some part of the window would be placed off-screen.
204 .TP 5
205 \fBmvwin\fP
206 returns an error
207 if the window pointer is null, or
208 if the window is really a pad, or
209 if some part of the window would be placed off-screen.
210 .TP 5
211 \fBnewwin\fP
212 will fail if either of its beginning ordinates is negative, or
213 if either the number of lines or columns is negative.
214 .TP 5
215 \fBsyncok\fP
216 returns an error
217 if the window pointer is null.
218 .TP 5
219 \fBsubwin\fP
220 returns an error if the parent window pointer is null, or
221 if any of its ordinates or dimensions is negative, or
222 if the resulting window does not fit inside the parent window.
223 .PP
224 The functions which return a window pointer
225 may also fail if there is insufficient memory for its data structures.
226 Any of these functions will fail if the screen has not been initialized,
227 i.e., with \fBinitscr\fP or \fBnewterm\fP.
228 .SH NOTES
229 If many small changes are made to the window, the \fBwsyncup\fP option could
230 degrade performance.
231 .PP
232 Note that \fBsyncok\fP may be a macro.
233 .SH BUGS
234 The subwindow functions (\fBsubwin\fP, \fBderwin\fP, \fBmvderwin\fP,
235 \fBwsyncup\fP, \fBwsyncdown\fP, \fBwcursyncup\fP, \fBsyncok\fP) are flaky,
236 incompletely implemented, and not well tested.
237 .PP
238 The System V curses documentation is very unclear about what \fBwsyncup\fP
239 and \fBwsyncdown\fP actually do.
240 It seems to imply that they are only
241 supposed to touch exactly those lines that are affected by ancestor changes.
242 The language here, and the behavior of the \fBcurses\fP implementation,
243 is patterned on the XPG4 curses standard.
244 The weaker XPG4 spec may result in slower updates.
245 .SH PORTABILITY
246 The XSI Curses standard, Issue 4 describes these functions.
247 .PP
248 X/Open Curses states regarding \fBdelwin\fP:
249 .bP
250 It must delete subwindows before deleting their parent.
251 .bP
252 If \fBdelwin\fP is asked to delete a parent window,
253 it can only succeed if the curses library keeps a list of the subwindows.
254 SVr4 curses kept a count of the number of subwindows rather than a list.
255 It simply returned \fBERR\fP when asked to delete a subwindow.
256 Solaris X/Open curses does not even make that check,
257 and will delete a parent window which still has subwindows.
258 .bP
259 Since release 4.0 (1996), ncurses maintains a list of windows for each screen,
260 to ensure that a window has no subwindows before allowing deletion.
261 .bP
262 NetBSD copied this feature of ncurses in 2003.
263 .br
264 PDCurses follows the scheme used in Solaris X/Open curses.
265 .SH SEE ALSO
266 \fBcurses\fP(3X),
267 \fBcurs_initscr\fP(3X),
268 \fBcurs_refresh\fP(3X),
269 \fBcurs_touch\fP(3X),
270 \fBcurs_variables\fP(3X)