2 ****************************************************************************
3 * Copyright 2018-2023,2024 Thomas E. Dickey *
4 * Copyright 1998-2016,2017 Free Software Foundation, Inc. *
6 * Permission is hereby granted, free of charge, to any person obtaining a *
7 * copy of this software and associated documentation files (the *
8 * "Software"), to deal in the Software without restriction, including *
9 * without limitation the rights to use, copy, modify, merge, publish, *
10 * distribute, distribute with modifications, sublicense, and/or sell *
11 * copies of the Software, and to permit persons to whom the Software is *
12 * furnished to do so, subject to the following conditions: *
14 * The above copyright notice and this permission notice shall be included *
15 * in all copies or substantial portions of the Software. *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
20 * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
22 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
23 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
25 * Except as contained in this notice, the name(s) of the above copyright *
26 * holders shall not be used in advertising or otherwise to promote the *
27 * sale, use or other dealings in this Software without prior written *
29 ****************************************************************************
30 * @Id: curs_kernel.3x,v 1.63 2024/05/25 21:13:56 tom Exp @
32 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
35 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
36 <meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
37 <TITLE>curs_kernel 3x 2024-05-25 ncurses 6.5 Library calls</TITLE>
38 <link rel="author" href="mailto:bug-ncurses@gnu.org">
42 <H1 class="no-header">curs_kernel 3x 2024-05-25 ncurses 6.5 Library calls</H1>
44 <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG> Library calls <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>
49 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
50 <STRONG>def_prog_mode</STRONG>, <STRONG>def_shell_mode</STRONG>, <STRONG>reset_prog_mode</STRONG>, <STRONG>reset_shell_mode</STRONG>,
51 <STRONG>resetty</STRONG>, <STRONG>savetty</STRONG>, <STRONG>getsyx</STRONG>, <STRONG>setsyx</STRONG>, <STRONG>curs_set</STRONG>, <STRONG>mvcur</STRONG>, <STRONG>napms</STRONG>, <STRONG>ripoffline</STRONG> -
52 low-level <EM>curses</EM> routines
55 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
56 <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
58 <STRONG>int</STRONG> <STRONG>def_prog_mode(void);</STRONG>
59 <STRONG>int</STRONG> <STRONG>def_shell_mode(void);</STRONG>
61 <STRONG>int</STRONG> <STRONG>reset_prog_mode(void);</STRONG>
62 <STRONG>int</STRONG> <STRONG>reset_shell_mode(void);</STRONG>
64 <STRONG>int</STRONG> <STRONG>resetty(void);</STRONG>
65 <STRONG>int</STRONG> <STRONG>savetty(void);</STRONG>
67 <STRONG>void</STRONG> <STRONG>getsyx(int</STRONG> <EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>x</EM><STRONG>);</STRONG>
68 <STRONG>void</STRONG> <STRONG>setsyx(int</STRONG> <EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>x</EM><STRONG>);</STRONG>
70 <STRONG>int</STRONG> <STRONG>curs_set(int</STRONG> <EM>visibility</EM><STRONG>);</STRONG>
71 <STRONG>int</STRONG> <STRONG>mvcur(int</STRONG> <EM>oldrow</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>oldcol</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>newrow</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>newcol</EM><STRONG>);</STRONG>
72 <STRONG>int</STRONG> <STRONG>napms(int</STRONG> <EM>ms</EM><STRONG>);</STRONG>
73 <STRONG>int</STRONG> <STRONG>ripoffline(int</STRONG> <EM>line</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>(*</STRONG><EM>init</EM><STRONG>)(WINDOW</STRONG> <STRONG>*,</STRONG> <STRONG>int));</STRONG>
76 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
77 The following routines give low-level access to various <STRONG>curses</STRONG>
78 capabilities. These routines typically are used inside library
82 </PRE><H3><a name="h3-def_prog_mode_def_shell_mode">def_prog_mode, def_shell_mode</a></H3><PRE>
83 The <STRONG>def_prog_mode</STRONG> and <STRONG>def_shell_mode</STRONG> routines save the current terminal
84 modes as the "program" (in <STRONG>curses</STRONG>) or "shell" (not in <STRONG>curses</STRONG>) state for
85 use by the <STRONG>reset_prog_mode</STRONG> and <STRONG>reset_shell_mode</STRONG> routines. This is done
86 automatically by <STRONG>initscr</STRONG>. There is one such save area for each screen
87 context allocated by <STRONG>newterm</STRONG>.
90 </PRE><H3><a name="h3-reset_prog_mode_reset_shell_mode">reset_prog_mode, reset_shell_mode</a></H3><PRE>
91 The <STRONG>reset_prog_mode</STRONG> and <STRONG>reset_shell_mode</STRONG> routines restore the terminal
92 to "program" (in <STRONG>curses</STRONG>) or "shell" (out of <STRONG>curses</STRONG>) state. These are
93 done automatically by <STRONG><A HREF="curs_initscr.3x.html">endwin(3x)</A></STRONG> and, after an <STRONG>endwin</STRONG>, by <STRONG>doupdate</STRONG>, so
94 they normally are not called.
97 </PRE><H3><a name="h3-resetty_savetty">resetty, savetty</a></H3><PRE>
98 The <STRONG>resetty</STRONG> and <STRONG>savetty</STRONG> routines save and restore the state of the
99 terminal modes. <STRONG>savetty</STRONG> saves the current state in a buffer and
100 <STRONG>resetty</STRONG> restores the state to what it was at the last call to <STRONG>savetty</STRONG>.
103 </PRE><H3><a name="h3-getsyx">getsyx</a></H3><PRE>
104 The <STRONG>getsyx</STRONG> routine returns the current coordinates of the <EM>virtual</EM>
105 <EM>screen</EM> cursor in <EM>y</EM> and <EM>x</EM>. If <STRONG>leaveok</STRONG> is currently <STRONG>TRUE</STRONG>, then <STRONG>-1</STRONG>,<STRONG>-1</STRONG> is
106 returned. If lines have been removed from the top of the screen, using
107 <STRONG>ripoffline</STRONG>, <EM>y</EM> and <EM>x</EM> include these lines; therefore, <EM>y</EM> and <EM>x</EM> should be
108 used only as arguments for <STRONG>setsyx</STRONG>.
110 Few applications will use this feature, most use <STRONG>getyx</STRONG> instead.
113 </PRE><H3><a name="h3-setsyx">setsyx</a></H3><PRE>
114 The <STRONG>setsyx</STRONG> routine sets the <EM>virtual</EM> <EM>screen</EM> cursor to <EM>y</EM>, <EM>x</EM>. If <EM>y</EM> and <EM>x</EM>
115 are both <STRONG>-1</STRONG>, then <STRONG>leaveok</STRONG> is set. The two routines <STRONG>getsyx</STRONG> and <STRONG>setsyx</STRONG>
116 are designed to be used by a library routine, which manipulates <STRONG>curses</STRONG>
117 windows but does not want to change the current position of the
118 program's cursor. The library routine would call <STRONG>getsyx</STRONG> at the
119 beginning, do its manipulation of its own windows, do a <STRONG>wnoutrefresh</STRONG> on
120 its windows, call <STRONG>setsyx</STRONG>, and then call <STRONG>doupdate</STRONG>.
122 Few applications will use this feature, most use <STRONG>wmove</STRONG> instead.
125 </PRE><H3><a name="h3-curs_set">curs_set</a></H3><PRE>
126 The <STRONG>curs_set</STRONG> routine sets the cursor state to invisible, normal, or
127 very visible for <STRONG>visibility</STRONG> equal to <STRONG>0</STRONG>, <STRONG>1</STRONG>, or <STRONG>2</STRONG> respectively. If the
128 terminal supports the <EM>visibility</EM> requested, the previous <EM>cursor</EM> state
129 is returned; otherwise, <STRONG>ERR</STRONG> is returned.
132 </PRE><H3><a name="h3-mvcur">mvcur</a></H3><PRE>
133 <STRONG>mvcur</STRONG> provides low-level cursor motion. It takes effect immediately,
134 rather than at the next refresh. Unlike the other low-level output
135 functions, which either write to the standard output stream or are
136 passed a function pointer to perform output, <STRONG>mvcur</STRONG> uses a file
137 descriptor derived from the output stream parameter of <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG>.
139 One application of <STRONG>mvcur</STRONG> accompanies the temporary use of another
140 program to write to the terminal screen. For example, first call
141 <STRONG><A HREF="curs_refresh.3x.html">refresh(3x)</A></STRONG> to ensure that the screen and the library's model of it is
142 up to date; then call <STRONG>reset_shell_mode</STRONG>; write to the screen with the
143 external application; call <STRONG>reset_prog_mode</STRONG>; and finally call <STRONG>mvcur</STRONG> to
144 set the cursor's location to where <EM>curses</EM> thinks it is, since the
145 library has no knowledge of how the external application moved it.
148 </PRE><H3><a name="h3-napms">napms</a></H3><PRE>
149 <STRONG>napms</STRONG> sleeps for <EM>ms</EM> milliseconds. If <EM>ms</EM> exceeds 30,000 (thirty
150 seconds), it is capped at that value.
153 </PRE><H3><a name="h3-ripoffline">ripoffline</a></H3><PRE>
154 <STRONG>ripoffline</STRONG> provides access to the same facility that <STRONG><A HREF="curs_slk.3x.html">slk_init(3x)</A></STRONG> uses
155 to reduce the size of the screen. <STRONG>ripoffline</STRONG> must be called before
156 <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> is called, to prepare these initial actions:
158 <STRONG>o</STRONG> If <EM>line</EM> is positive, a line is removed from the top of <STRONG>stdscr</STRONG>.
160 <STRONG>o</STRONG> if <EM>line</EM> is negative, a line is removed from the bottom.
162 When the resulting initialization is done inside <STRONG>initscr</STRONG>, the routine
163 <STRONG>init</STRONG> (supplied by the user) is called with two arguments:
165 <STRONG>o</STRONG> a window pointer to the one-line window that has been allocated and
167 <STRONG>o</STRONG> an integer with the number of columns in the window.
169 Inside this initialization routine, the integer variables <STRONG>LINES</STRONG> and
170 <STRONG>COLS</STRONG> (defined in <STRONG><curses.h></STRONG>) are not guaranteed to be accurate and
171 <STRONG>wrefresh</STRONG> or <STRONG>doupdate</STRONG> must not be called. It is allowable to call
172 <STRONG>wnoutrefresh</STRONG> during the initialization routine.
174 <STRONG>ripoffline</STRONG> can be called up to five times before calling <STRONG>initscr</STRONG> or
175 <STRONG>newterm</STRONG>.
178 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
179 Except for <STRONG>curs_set</STRONG>, these routines always return <STRONG>OK</STRONG>.
181 <STRONG>curs_set</STRONG> returns the previous cursor state, or <STRONG>ERR</STRONG> if the requested
182 <EM>visibility</EM> is not supported.
184 X/Open defines no error conditions. In this implementation
186 <STRONG>def_prog_mode</STRONG>, <STRONG>def_shell_mode</STRONG>, <STRONG>reset_prog_mode</STRONG>, <STRONG>reset_shell_mode</STRONG>
187 return <STRONG>ERR</STRONG> if the terminal was not initialized, or if the I/O call
188 to obtain the terminal settings fails.
190 <STRONG>ripoffline</STRONG>
191 returns <STRONG>ERR</STRONG> if the maximum number of ripped-off lines exceeds the
195 </PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
196 Note that <STRONG>getsyx</STRONG> is a macro, so <STRONG>&</STRONG> is not necessary before the variables
197 <EM>y</EM> and <EM>x</EM>.
199 Older SVr4 man pages warn that the return value of <STRONG>curs_set</STRONG> "is
200 currently incorrect". This implementation gets it right, but it may be
201 unwise to count on the correctness of the return value anywhere else.
203 Both <EM>ncurses</EM> and SVr4 will call <STRONG>curs_set</STRONG> in <STRONG>endwin</STRONG> if <STRONG>curs_set</STRONG> has been
204 called to make the cursor other than normal, i.e., either invisible or
205 very visible. There is no way for <EM>ncurses</EM> to determine the initial
206 cursor state to restore that.
209 </PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
210 In <EM>ncurses</EM>, <STRONG>mvcur</STRONG> accepts <STRONG>-1</STRONG> for either or both old coordinates. This
211 value tells <EM>ncurses</EM> that the old location is unknown, and that it must
212 use only absolute motion, as with the <STRONG>cursor_address</STRONG> (<STRONG>cup</STRONG>) capability,
213 rather than the least costly combination of absolute and relative
217 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
218 The <EM>virtual</EM> <EM>screen</EM> functions <STRONG>setsyx</STRONG> and <STRONG>getsyx</STRONG> are not described in
219 X/Open Curses, Issue 4. All other functions are as described in X/Open
222 The SVr4 documentation describes <STRONG>setsyx</STRONG> and <STRONG>getsyx</STRONG> as having return
223 type int. This is misleading, as they are macros with no documented
224 semantics for the return value.
228 "After use of <EM>mvcur</EM>(), the model Curses maintains of the state
229 of the terminal might not match the actual state of the
230 terminal. An application should touch and refresh the window
231 before resuming conventional use of Curses."
233 Both <EM>ncurses</EM> and SVr4 <EM>curses</EM> implement <STRONG>mvcur</STRONG> using the <EM>SCREEN</EM> data
234 allocated in either <STRONG><A HREF="curs_initscr.3x.html">initscr(3x)</A></STRONG> or <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG>. X/Open Curses states
235 that the old location must be given for <STRONG>mvcur</STRONG> to accommodate terminals
236 that lack absolute cursor positioning.
238 If interrupted, <EM>ncurses</EM> restarts <STRONG>napms</STRONG>. That, and the limitation to 30
239 seconds, are different from other implementations.
242 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
243 <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>, <STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3x)</A></STRONG>, <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3x)</A></STRONG>,
244 <STRONG><A HREF="curs_scr_dump.3x.html">curs_scr_dump(3x)</A></STRONG>, <STRONG><A HREF="curs_slk.3x.html">curs_slk(3x)</A></STRONG>, <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>
248 ncurses 6.5 2024-05-25 <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>
252 <li><a href="#h2-NAME">NAME</a></li>
253 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
254 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
256 <li><a href="#h3-def_prog_mode_def_shell_mode">def_prog_mode, def_shell_mode</a></li>
257 <li><a href="#h3-reset_prog_mode_reset_shell_mode">reset_prog_mode, reset_shell_mode</a></li>
258 <li><a href="#h3-resetty_savetty">resetty, savetty</a></li>
259 <li><a href="#h3-getsyx">getsyx</a></li>
260 <li><a href="#h3-setsyx">setsyx</a></li>
261 <li><a href="#h3-curs_set">curs_set</a></li>
262 <li><a href="#h3-mvcur">mvcur</a></li>
263 <li><a href="#h3-napms">napms</a></li>
264 <li><a href="#h3-ripoffline">ripoffline</a></li>
267 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
268 <li><a href="#h2-NOTES">NOTES</a></li>
269 <li><a href="#h2-EXTENSIONS">EXTENSIONS</a></li>
270 <li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
271 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>