]> ncurses.scripts.mit.edu Git - ncurses.git/blob - man/curs_window.3x
ncurses 6.4 - patch 20240420
[ncurses.git] / man / curs_window.3x
1 .\"***************************************************************************
2 .\" Copyright 2020-2023,2024 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.48 2024/04/20 21:20:07 tom Exp $
31 .TH curs_window 3X 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "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 .nf
51 \fB#include <curses.h>
52 .PP
53 \fBWINDOW *newwin(
54       \fBint \fInlines\fB, int \fIncols\fB,\fR
55       \fBint \fIbegin_y\fB, int \fIbegin_x\fB);\fR
56 \fBint delwin(WINDOW *\fIwin\fB);\fR
57 \fBint mvwin(WINDOW *\fIwin\fB, int \fIy\fB, int \fIx\fB);\fR
58 \fBWINDOW *subwin(WINDOW *\fIorig\fB,\fR
59       \fBint \fInlines\fB, int \fIncols\fB,\fR
60       \fBint \fIbegin_y\fB, int \fIbegin_x\fB);\fR
61 \fBWINDOW *derwin(WINDOW *\fIorig\fB,\fR
62       \fBint \fInlines\fB, int \fIncols\fB,\fR
63       \fBint \fIbegin_y\fB, int \fIbegin_x\fB);\fR
64 \fBint mvderwin(WINDOW *\fIwin\fB, int \fIpar_y\fB, int \fIpar_x\fB);\fR
65 \fBWINDOW *dupwin(WINDOW *\fIwin\fB);\fR
66 \fBvoid wsyncup(WINDOW *\fIwin\fB);\fR
67 \fBint syncok(WINDOW *\fIwin\fB, bool \fIbf\fB);\fR
68 \fBvoid wcursyncup(WINDOW *\fIwin\fB);\fR
69 \fBvoid wsyncdown(WINDOW *\fIwin\fB);\fR
70 .fi
71 .SH DESCRIPTION
72 .SS newwin
73 Calling \fBnewwin\fP creates and returns a pointer to a new window with the
74 given number of lines and columns.
75 The upper left-hand corner of the window is
76 at
77 .RS
78 line \fIbegin\fR_\fIy\fP,
79 .br
80 column \fIbegin\fR_\fIx\fP
81 .RE
82 .PP
83 If either
84 \fInlines\fP or \fIncols\fP is zero, they default to
85 .RS
86 \fBLINES \-\fP \fIbegin\fR_\fIy\fP and
87 .br
88 \fBCOLS \-\fP \fIbegin\fR_\fIx\fP.
89 .RE
90 .PP
91 A new full-screen window is created by calling \fBnewwin(0,0,0,0)\fP.
92 .PP
93 Regardless of the function used for creating a new window
94 (e.g., \fBnewwin\fP, \fBsubwin\fP, \fBderwin\fP, \fBnewpad\fP),
95 rather than a duplicate (with \fBdupwin\fP),
96 all of the window modes are initialized to the default values.
97 These functions set window modes after a window is created:
98 .RS
99 .PP
100 \fB\%idcok\fP
101 \fB\%idlok\fP
102 \fB\%immedok\fP
103 \fB\%keypad\fP
104 \fB\%leaveok\fP
105 \fB\%nodelay\fP
106 \fB\%scrollok\fP
107 \fB\%setscrreg\fP
108 \fB\%syncok\fP
109 \fB\%wbkgdset\fP
110 \fB\%wbkgrndset\fP and
111 \fB\%wtimeout\fP.
112 .RE
113 .SS delwin
114 Calling \fBdelwin\fP deletes the named window, freeing all memory
115 associated with it (it does not actually erase the window's screen
116 image).
117 Subwindows must be deleted before the main window can be deleted.
118 .SS mvwin
119 Calling \fBmvwin\fP moves the window so that the upper left-hand
120 corner is at position (\fIx\fP, \fIy\fP).
121 If the move would cause the window to be off the screen,
122 it is an error and the window is not moved.
123 Moving subwindows is allowed, but should be avoided.
124 .SS subwin
125 Calling \fBsubwin\fP creates and returns a pointer to a new window
126 with the given number of lines, \fInlines\fP, and columns, \fIncols\fP.
127 The window is at position (\fIbegin\fR_\fIy\fP,
128 \fIbegin\fR_\fIx\fP) on the screen.
129 The subwindow shares memory with the window \fIorig\fP,
130 its \fIancestor\fP,
131 so that changes made to one window
132 will affect both windows.
133 When using this routine, it is necessary to call
134 \fBtouchwin\fP or \fBtouchline\fP on \fIorig\fP before calling
135 \fBwrefresh\fP on the subwindow.
136 .SS derwin
137 Calling \fBderwin\fP is the same as calling \fBsubwin,\fP except that
138 \fIbegin\fR_\fIy\fP and \fIbegin\fR_\fIx\fP are relative to the origin
139 of the window \fIorig\fP rather than the screen.
140 There is no difference between the subwindows and the derived windows.
141 .SS mvderwin
142 Calling \fBmvderwin\fP moves a derived window (or subwindow)
143 inside its parent window.
144 The screen-relative parameters of the window are not changed.
145 This routine is used to display different
146 parts of the parent window at the same physical position on the
147 screen.
148 .SS dupwin
149 Calling \fBdupwin\fP creates an exact duplicate of the window \fIwin\fP.
150 .SS wsyncup
151 Calling \fBwsyncup\fP touches all locations in ancestors of \fIwin\fP that are
152 changed in \fIwin\fP.
153 If \fBsyncok\fP is called with second argument
154 \fBTRUE\fP then \fBwsyncup\fP is called automatically whenever there is a
155 change in the window.
156 .SS wsyncdown
157 The \fBwsyncdown\fP routine touches each location in \fIwin\fP that has been
158 touched in any of its ancestor windows.
159 This routine is called by
160 \fBwrefresh\fP, so it should almost never be necessary to call it manually.
161 .SS wcursyncup
162 The routine \fBwcursyncup\fP updates the current cursor position of all the
163 ancestors of the window to reflect the current cursor position of the
164 window.
165 .SH RETURN VALUE
166 Routines that return an integer return the integer \fBERR\fP upon failure and
167 \fBOK\fP (SVr4 only specifies "an integer value other than \fBERR\fP") upon
168 successful completion.
169 .PP
170 Routines that return pointers return \fBNULL\fP on error.
171 .PP
172 X/Open defines no error conditions.
173 In this implementation
174 .TP 5
175 \fBdelwin\fP
176 returns an error if the window pointer is null, or
177 if the window is the parent of another window.
178 .TP 5
179 \fBderwin\fP
180 returns an error if the parent window pointer is null, or
181 if any of its ordinates or dimensions is negative, or
182 if the resulting window does not fit inside the parent window.
183 .TP 5
184 \fBdupwin\fP
185 returns an error if the window pointer is null.
186 .IP
187 This implementation also maintains a list of windows,
188 and checks that the pointer passed to \fBdelwin\fP is one that
189 it created, returning an error if it was not..
190 .TP 5
191 \fBmvderwin\fP
192 returns an error
193 if the window pointer is null, or
194 if some part of the window would be placed off-screen.
195 .TP 5
196 \fBmvwin\fP
197 returns an error
198 if the window pointer is null, or
199 if the window is really a pad, or
200 if some part of the window would be placed off-screen.
201 .TP 5
202 \fBnewwin\fP
203 will fail if either of its beginning ordinates is negative, or
204 if either the number of lines or columns is negative.
205 .TP 5
206 \fBsyncok\fP
207 returns an error
208 if the window pointer is null.
209 .TP 5
210 \fBsubwin\fP
211 returns an error if the parent window pointer is null, or
212 if any of its ordinates or dimensions is negative, or
213 if the resulting window does not fit inside the parent window.
214 .PP
215 The functions which return a window pointer
216 may also fail if there is insufficient memory for its data structures.
217 Any of these functions will fail if the screen has not been initialized,
218 i.e., with \fBinitscr\fP or \fBnewterm\fP.
219 .SH NOTES
220 If many small changes are made to the window, the \fBwsyncup\fP option could
221 degrade performance.
222 .PP
223 Note that \fBsyncok\fP may be a macro.
224 .SH PORTABILITY
225 X/Open Curses, Issue 4 describes these functions.
226 .PP
227 X/Open Curses states regarding \fBdelwin\fP:
228 .bP
229 It must delete subwindows before deleting their parent.
230 .bP
231 If \fBdelwin\fP is asked to delete a parent window,
232 it can only succeed if the curses library keeps a list of the subwindows.
233 SVr4 curses kept a count of the number of subwindows rather than a list.
234 It simply returned \fBERR\fP when asked to delete a subwindow.
235 Solaris X/Open curses does not even make that check,
236 and will delete a parent window which still has subwindows.
237 .bP
238 Since release 4.0 (1996),
239 \fI\%ncurses\fP maintains a list of windows for each screen,
240 to ensure that a window has no subwindows before allowing deletion.
241 .bP
242 NetBSD copied this feature of \fI\%ncurses\fP in 2003.
243 .br
244 PDCurses follows the scheme used in Solaris X/Open curses.
245 .SH BUGS
246 The subwindow functions
247 \fB\%subwin\fP,
248 \fB\%derwin\fP,
249 \fB\%mvderwin\fP,
250 \fB\%wsyncup\fP,
251 \fB\%wsyncdown\fP,
252 \fB\%wcursyncup\fP,
253 and
254 \fB\%syncok\fP
255 are flaky,
256 incompletely implemented,
257 and not well tested.
258 .PP
259 System\ V's \fIcurses\fP documentation is unclear about what
260 \fB\%wsyncup\fP and \fB\%wsyncdown\fP actually do.
261 It seems to imply that they are supposed to touch only those lines that
262 are affected by changes to a window's ancestors.
263 The language here,
264 and behavior of \fI\%ncurses\fP,
265 is patterned on the X/Open Curses standard;
266 this approach may result in slower updates.
267 .SH SEE ALSO
268 \fB\%curses\fP(3X),
269 \fB\%curs_initscr\fP(3X),
270 \fB\%curs_refresh\fP(3X),
271 \fB\%curs_touch\fP(3X),
272 \fB\%curs_variables\fP(3X)