• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!--
2  ****************************************************************************
3  * Copyright 2018-2023,2024 Thomas E. Dickey                                *
4  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
5  *                                                                          *
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:                 *
13  *                                                                          *
14  * The above copyright notice and this permission notice shall be included  *
15  * in all copies or substantial portions of the Software.                   *
16  *                                                                          *
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.                               *
24  *                                                                          *
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       *
28  * authorization.                                                           *
29  ****************************************************************************
30  * @Id: curs_initscr.3x,v 1.69 2024/04/20 21:24:19 tom Exp @
31-->
32<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
33<HTML>
34<HEAD>
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_initscr 3x 2024-04-20 ncurses 6.5 Library calls</TITLE>
38<link rel="author" href="mailto:bug-ncurses@gnu.org">
39
40</HEAD>
41<BODY>
42<H1 class="no-header">curs_initscr 3x 2024-04-20 ncurses 6.5 Library calls</H1>
43<PRE>
44<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>                 Library calls                <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>
45
46
47
48
49</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
50       <STRONG>initscr</STRONG>,  <STRONG>newterm</STRONG>,  <STRONG>endwin</STRONG>, <STRONG>isendwin</STRONG>, <STRONG>set_term</STRONG>, <STRONG>delscreen</STRONG> - initialize,
51       manipulate, or tear down <EM>curses</EM> terminal interface
52
53
54</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
55       <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
56
57       <STRONG>WINDOW</STRONG> <STRONG>*initscr(void);</STRONG>
58       <STRONG>int</STRONG> <STRONG>endwin(void);</STRONG>
59
60       <STRONG>bool</STRONG> <STRONG>isendwin(void);</STRONG>
61
62       <STRONG>SCREEN</STRONG> <STRONG>*newterm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>type</EM><STRONG>,</STRONG> <STRONG>FILE</STRONG> <STRONG>*</STRONG><EM>outf</EM><STRONG>,</STRONG> <STRONG>FILE</STRONG> <STRONG>*</STRONG><EM>inf</EM><STRONG>);</STRONG>
63       <STRONG>SCREEN</STRONG> <STRONG>*set_term(SCREEN</STRONG> <STRONG>*</STRONG><EM>new</EM><STRONG>);</STRONG>
64       <STRONG>void</STRONG> <STRONG>delscreen(SCREEN*</STRONG> <EM>sp</EM><STRONG>);</STRONG>
65
66
67</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
68
69</PRE><H3><a name="h3-initscr">initscr</a></H3><PRE>
70       <STRONG>initscr</STRONG> is normally the first <STRONG>curses</STRONG> routine to call when  initializing
71       a  program.   A few special routines sometimes need to be called before
72       it; these are <STRONG><A HREF="curs_slk.3x.html">slk_init(3x)</A></STRONG>, <STRONG>filter</STRONG>, <STRONG>ripoffline</STRONG>, <STRONG>use_env</STRONG>.  For multiple-
73       terminal applications, <STRONG>newterm</STRONG> may be called before <STRONG>initscr</STRONG>.
74
75       The  initscr  code  determines  the  terminal  type and initializes all
76       <STRONG>curses</STRONG>  data  structures.   <STRONG>initscr</STRONG>  also  causes  the  first  call  to
77       <STRONG><A HREF="curs_refresh.3x.html">refresh(3x)</A></STRONG>  to  clear  the screen.  If errors occur, <STRONG>initscr</STRONG> writes an
78       appropriate error message to standard error  and  exits;  otherwise,  a
79       pointer is returned to <STRONG>stdscr</STRONG>.
80
81
82</PRE><H3><a name="h3-newterm">newterm</a></H3><PRE>
83       A program that outputs to more than one terminal should use the <STRONG>newterm</STRONG>
84       routine for each terminal instead of <STRONG>initscr</STRONG>.  A program that needs  to
85       inspect capabilities, so it can continue to run in a line-oriented mode
86       if the terminal cannot support a screen-oriented  program,  would  also
87       use <STRONG>newterm</STRONG>.
88
89       The  routine  <STRONG>newterm</STRONG>  should  be  called  once  for each terminal.  It
90       returns a variable of  type  <EM>SCREEN</EM>  <EM>*</EM>  which  should  be  saved  as  a
91       reference to that terminal.  <STRONG>newterm</STRONG>'s arguments are
92
93       <STRONG>o</STRONG>   the <EM>type</EM> of the terminal to be used in place of <STRONG>$TERM</STRONG>,
94
95       <STRONG>o</STRONG>   an output stream connected to the terminal, and
96
97       <STRONG>o</STRONG>   an input stream connected to the terminal
98
99       If the <EM>type</EM> parameter is <STRONG>NULL</STRONG>, <STRONG>$TERM</STRONG> will be used.
100
101       The  file  descriptor  of the output stream is passed to <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>,
102       which returns a pointer to  a  <EM>TERMINAL</EM>  structure.   <STRONG>newterm</STRONG>'s  return
103       value holds a pointer to the <EM>TERMINAL</EM> structure.
104
105
106</PRE><H3><a name="h3-endwin">endwin</a></H3><PRE>
107       The  program  must also call <STRONG>endwin</STRONG> for each terminal being used before
108       exiting from <STRONG>curses</STRONG>.  If <STRONG>newterm</STRONG> is called more than once for the  same
109       terminal, the first terminal referred to must be the last one for which
110       <STRONG>endwin</STRONG> is called.
111
112       A program should always call <STRONG>endwin</STRONG> before  exiting  or  escaping  from
113       <STRONG>curses</STRONG> mode temporarily.  This routine
114
115       <STRONG>o</STRONG>   resets colors to correspond with the default color pair 0,
116
117       <STRONG>o</STRONG>   moves the cursor to the lower left-hand corner of the screen,
118
119       <STRONG>o</STRONG>   clears  the  remainder  of  the  line  so  that it uses the default
120           colors,
121
122       <STRONG>o</STRONG>   sets the cursor to normal visibility (see <STRONG><A HREF="curs_kernel.3x.html">curs_set(3x)</A></STRONG>),
123
124       <STRONG>o</STRONG>   stops  cursor-addressing  mode  using  the  <EM>exit</EM><STRONG>_</STRONG><EM>ca</EM><STRONG>_</STRONG><EM>mode</EM>   terminal
125           capability,
126
127       <STRONG>o</STRONG>   restores tty modes (see <STRONG><A HREF="curs_kernel.3x.html">reset_shell_mode(3x)</A></STRONG>).
128
129       Calling <STRONG><A HREF="curs_refresh.3x.html">refresh(3x)</A></STRONG> or <STRONG><A HREF="curs_refresh.3x.html">doupdate(3x)</A></STRONG> after a temporary escape causes the
130       program to resume visual mode.
131
132
133</PRE><H3><a name="h3-isendwin">isendwin</a></H3><PRE>
134       The <STRONG>isendwin</STRONG> routine returns <STRONG>TRUE</STRONG> if <STRONG>endwin</STRONG> has been called without any
135       subsequent calls to <STRONG>wrefresh</STRONG>, and <STRONG>FALSE</STRONG> otherwise.
136
137
138</PRE><H3><a name="h3-set_term">set_term</a></H3><PRE>
139       The  <STRONG>set_term</STRONG>  routine  is  used to switch between different terminals.
140       The screen  reference  <EM>new</EM>  becomes  the  new  current  terminal.   The
141       previous terminal is returned by the routine.  This is the only routine
142       which manipulates <EM>SCREEN</EM> pointers; all other routines affect  only  the
143       current terminal.
144
145
146</PRE><H3><a name="h3-delscreen">delscreen</a></H3><PRE>
147       The  <STRONG>delscreen</STRONG>  routine  frees  storage associated with the <EM>SCREEN</EM> data
148       structure.  The <STRONG>endwin</STRONG> routine does not do this, so <STRONG>delscreen</STRONG> should be
149       called after <STRONG>endwin</STRONG> if a particular <EM>SCREEN</EM> is no longer needed.
150
151
152</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
153       <STRONG>endwin</STRONG>  returns  the  integer  <STRONG>ERR</STRONG>  upon failure and <STRONG>OK</STRONG> upon successful
154       completion.
155
156       Routines that return pointers always return <STRONG>NULL</STRONG> on error.
157
158       X/Open defines no error conditions.  In this implementation
159
160       <STRONG>o</STRONG>   <STRONG>endwin</STRONG> returns an error if
161
162           <STRONG>o</STRONG>   the terminal was not initialized, or
163
164           <STRONG>o</STRONG>   <STRONG>endwin</STRONG> is called more than once without updating the screen, or
165
166           <STRONG>o</STRONG>   <STRONG><A HREF="curs_kernel.3x.html">reset_shell_mode(3x)</A></STRONG> returns an error.
167
168       <STRONG>o</STRONG>   <STRONG>newterm</STRONG> returns an error if it cannot allocate the data  structures
169           for  the  screen,  or  for the top-level windows within the screen,
170           i.e., <STRONG>curscr</STRONG>, <STRONG>newscr</STRONG>, or <STRONG>stdscr</STRONG>.
171
172       <STRONG>o</STRONG>   <STRONG>set_term</STRONG> returns no error.
173
174
175</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
176       These functions were described in X/Open Curses, Issue 4.  As of  2015,
177       the current document is X/Open Curses, Issue 7.
178
179
180</PRE><H3><a name="h3-Differences">Differences</a></H3><PRE>
181       X/Open  Curses  specifies  that  portable  applications  must  not call
182       <STRONG>initscr</STRONG> more than once:
183
184       <STRONG>o</STRONG>   The portable way to use <STRONG>initscr</STRONG> is once only, using <STRONG><A HREF="curs_refresh.3x.html">refresh(3x)</A></STRONG>  to
185           restore the screen after <STRONG>endwin</STRONG>.
186
187       <STRONG>o</STRONG>   This implementation allows using <STRONG>initscr</STRONG> after <STRONG>endwin</STRONG>.
188
189       Old versions of curses, e.g., BSD 4.4, would return a null pointer from
190       <STRONG>initscr</STRONG> when an error is detected, rather than exiting.  It is safe but
191       redundant to check the return value of <STRONG>initscr</STRONG> in X/Open Curses.
192
193       Calling  <STRONG>endwin</STRONG>  does not dispose of the memory allocated in <STRONG>initscr</STRONG> or
194       <STRONG>newterm</STRONG>.  Deleting a <EM>SCREEN</EM> provides a way to do this:
195
196       <STRONG>o</STRONG>   X/Open Curses does not say what happens to <EM>WINDOW</EM>s  when  <STRONG>delscreen</STRONG>
197           "frees  storage  associated  with  the  <EM>SCREEN</EM>"  nor  does the SVr4
198           documentation help, adding that it should be called after <STRONG>endwin</STRONG> if
199           a <EM>SCREEN</EM> is no longer needed.
200
201       <STRONG>o</STRONG>   However,  <EM>WINDOW</EM>s are implicitly associated with a <EM>SCREEN</EM>.  so that
202           it is reasonable to expect <STRONG>delscreen</STRONG> to deal with these.
203
204       <STRONG>o</STRONG>   SVr4 curses deletes  the  standard  <EM>WINDOW</EM>  structures  <STRONG>stdscr</STRONG>  and
205           <STRONG>curscr</STRONG>  as  well  as a work area <STRONG>newscr</STRONG>.  SVr4 curses ignores other
206           windows.
207
208       <STRONG>o</STRONG>   Since version 4.0 (1996), <EM>ncurses</EM> has  maintained  a  list  of  all
209           windows  for  each  screen,  using that information to delete those
210           windows when <STRONG>delscreen</STRONG> is called.
211
212       <STRONG>o</STRONG>   NetBSD copied this feature of <EM>ncurses</EM> in  2001.   PDCurses  follows
213           the SVr4 model, deleting only the standard <EM>WINDOW</EM> structures.
214
215
216</PRE><H3><a name="h3-High-level-versus-Low-level">High-level versus Low-level</a></H3><PRE>
217       Different  implementations  may  disagree  regarding  the level of some
218       functions.  For example, <EM>SCREEN</EM>  (returned  by  <STRONG>newterm</STRONG>)  and  <EM>TERMINAL</EM>
219       (returned  by  <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>)  hold  file  descriptors  for  the output
220       stream.  If an application switches screens using <STRONG>set_term</STRONG>, or switches
221       terminals using <STRONG><A HREF="curs_terminfo.3x.html">set_curterm(3x)</A></STRONG>, applications which use the output file
222       descriptor can have different behavior  depending  on  which  structure
223       holds the corresponding descriptor.
224
225       For example
226
227       <STRONG>o</STRONG>   NetBSD's  <STRONG><A HREF="curs_termattrs.3x.html">baudrate(3x)</A></STRONG>  function  uses  the descriptor in <EM>TERMINAL</EM>.
228           <EM>ncurses</EM> and SVr4 use the descriptor in <EM>SCREEN</EM>.
229
230       <STRONG>o</STRONG>   NetBSD and <EM>ncurses</EM> use the descriptor in <EM>TERMINAL</EM> for terminal  I/O
231           modes,  e.g.,  <STRONG><A HREF="curs_kernel.3x.html">def_shell_mode(3x)</A></STRONG>,  <STRONG><A HREF="curs_kernel.3x.html">def_prog_mode(3x)</A></STRONG>.  SVr4 curses
232           uses the descriptor in <EM>SCREEN</EM>.
233
234   <STRONG>Unset</STRONG> <EM>TERM</EM> <STRONG>Variable</STRONG>
235       If the <EM>TERM</EM> variable is  missing  or  empty,  <STRONG>initscr</STRONG>  uses  the  value
236       "unknown",  which  normally  corresponds  to  a terminal entry with the
237       <EM>generic</EM> (<EM>gn</EM>) capability.  Generic entries are detected by <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>
238       and  cannot  be  used for full-screen operation.  Other implementations
239       may handle a missing/empty <EM>TERM</EM> variable differently.
240
241
242</PRE><H3><a name="h3-Signal-Handlers">Signal Handlers</a></H3><PRE>
243       Quoting from X/Open Curses Issue 7, section 3.1.1:
244
245            Curses implementations may provide for  special  handling  of  the
246            SIGINT,  SIGQUIT,  and  SIGTSTP  signals  if  their disposition is
247            SIG_DFL at the time <EM>initscr</EM> is called...
248
249            Any special handling for these signals may remain  in  effect  for
250            the  life  of  the  process  or  until  the  process  changes  the
251            disposition of the signal.
252
253            None of the Curses functions are required to be safe with  respect
254            to signals...
255
256       This  implementation establishes signal handlers during initialization,
257       e.g., <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  Applications which must handle these signals
258       should  set  up  the  corresponding  handlers  <EM>after</EM>  initializing  the
259       library:
260
261       <STRONG>SIGINT</STRONG>
262            The handler <EM>attempts</EM> to clean up the screen on exit.  Although  it
263            <EM>usually</EM> works as expected, there are limitations:
264
265            <STRONG>o</STRONG>   Walking  the  <EM>SCREEN</EM> list is unsafe, since all list management
266                is done without any signal blocking.
267
268            <STRONG>o</STRONG>   On systems which  have  <STRONG>REENTRANT</STRONG>  turned  on,  <STRONG>set_term</STRONG>  uses
269                functions which could deadlock or misbehave in other ways.
270
271            <STRONG>o</STRONG>   <STRONG>endwin</STRONG>  calls  other  functions, many of which use <STRONG>stdio(3)</STRONG> or
272                other library functions which are clearly unsafe.
273
274       <STRONG>SIGTERM</STRONG>
275            This uses the same handler as <STRONG>SIGINT</STRONG>, with the  same  limitations.
276            It  is  not  mentioned  in X/Open Curses, but is more suitable for
277            this purpose than <STRONG>SIGQUIT</STRONG> (which is used in debugging).
278
279       <STRONG>SIGTSTP</STRONG>
280            This handles the <EM>stop</EM> signal, used in job control.  When  resuming
281            the  process,  this  implementation  discards  pending  input with
282            <STRONG><A HREF="curs_util.3x.html">flushinp(3x)</A></STRONG>, and repaints the screen assuming that  it  has  been
283            completely altered.  It also updates the saved terminal modes with
284            <STRONG><A HREF="curs_kernel.3x.html">def_shell_mode(3x)</A></STRONG>.
285
286       <STRONG>SIGWINCH</STRONG>
287            This handles the window-size changes which  were  ignored  in  the
288            standardization   efforts.    The  handler  sets  a  (signal-safe)
289            variable which is later tested in <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG>.  If <STRONG>keypad</STRONG> has  been
290            enabled  for  the  corresponding  window,  <STRONG>wgetch</STRONG>  returns the key
291            symbol <STRONG>KEY_RESIZE</STRONG>.  At the same time, <STRONG>wgetch</STRONG> calls  <STRONG>resizeterm</STRONG>  to
292            adjust  the  standard screen <STRONG>stdscr</STRONG>, and update other data such as
293            <STRONG>LINES</STRONG> and <STRONG>COLS</STRONG>.
294
295
296</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
297       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>,    <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>,     <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3x)</A></STRONG>,     <STRONG><A HREF="curs_slk.3x.html">curs_slk(3x)</A></STRONG>,
298       <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>, <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>, <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>
299
300
301
302ncurses 6.5                       2024-04-20                  <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>
303</PRE>
304<div class="nav">
305<ul>
306<li><a href="#h2-NAME">NAME</a></li>
307<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
308<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
309<ul>
310<li><a href="#h3-initscr">initscr</a></li>
311<li><a href="#h3-newterm">newterm</a></li>
312<li><a href="#h3-endwin">endwin</a></li>
313<li><a href="#h3-isendwin">isendwin</a></li>
314<li><a href="#h3-set_term">set_term</a></li>
315<li><a href="#h3-delscreen">delscreen</a></li>
316</ul>
317</li>
318<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
319<li><a href="#h2-PORTABILITY">PORTABILITY</a>
320<ul>
321<li><a href="#h3-Differences">Differences</a></li>
322<li><a href="#h3-High-level-versus-Low-level">High-level versus Low-level</a></li>
323<li><a href="#h3-Signal-Handlers">Signal Handlers</a></li>
324</ul>
325</li>
326<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
327</ul>
328</div>
329</BODY>
330</HTML>
331