]> ncurses.scripts.mit.edu Git - ncurses.git/blob - doc/html/man/curs_initscr.3x.html
ncurses 6.4 - patch 20231001
[ncurses.git] / doc / html / man / curs_initscr.3x.html
1 <!--
2   ****************************************************************************
3   * Copyright 2018-2022,2023 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.52 2023/09/30 21:38:11 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 2023-09-30 ncurses 6.4 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 2023-09-30 ncurses 6.4 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  <STRONG>SCREEN</STRONG>  <STRONG>*</STRONG>  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  <STRONG>TERMINAL</STRONG>  structure.   <STRONG>newterm</STRONG>'s  return
103        value holds a pointer to the <STRONG>TERMINAL</STRONG> 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 <STRONG>SCREEN</STRONG> 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 <STRONG>SCREEN</STRONG> 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 <STRONG>SCREEN</STRONG> 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 the terminal was not initialized.
161
162        <STRONG>o</STRONG>   <STRONG>newterm</STRONG> returns an error if it cannot allocate the data  structures
163            for  the  screen,  or  for the top-level windows within the screen,
164            i.e., <STRONG>curscr</STRONG>, <STRONG>newscr</STRONG>, or <STRONG>stdscr</STRONG>.
165
166        <STRONG>o</STRONG>   <STRONG>set_term</STRONG> returns no error.
167
168
169 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
170        These functions were described in the XSI Curses standard, Issue 4.  As
171        of 2015, the current document is X/Open Curses, Issue 7.
172
173
174 </PRE><H3><a name="h3-Differences">Differences</a></H3><PRE>
175        X/Open  specifies that portable applications must not call <STRONG>initscr</STRONG> more
176        than once:
177
178        <STRONG>o</STRONG>   The portable way to use <STRONG>initscr</STRONG> is once only,  using  <STRONG>refresh</STRONG>  (see
179            <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3x)</A></STRONG>) to restore the screen after <STRONG>endwin</STRONG>.
180
181        <STRONG>o</STRONG>   This implementation allows using <STRONG>initscr</STRONG> after <STRONG>endwin</STRONG>.
182
183        Old versions of curses, e.g., BSD 4.4, would return a null pointer from
184        <STRONG>initscr</STRONG> when an error is detected, rather than exiting.  It is safe but
185        redundant to check the return value of <STRONG>initscr</STRONG> in XSI Curses.
186
187        Calling  <STRONG>endwin</STRONG>  does not dispose of the memory allocated in <STRONG>initscr</STRONG> or
188        <STRONG>newterm</STRONG>.  Deleting a <STRONG>SCREEN</STRONG> provides a way to do this:
189
190        <STRONG>o</STRONG>   X/Open Curses does not say what happens to <STRONG>WINDOW</STRONG>s  when  <STRONG>delscreen</STRONG>
191            "frees  storage  associated  with  the  <STRONG>SCREEN</STRONG>"  nor  does the SVr4
192            documentation help, adding that it should be called after <STRONG>endwin</STRONG> if
193            a <STRONG>SCREEN</STRONG> is no longer needed.
194
195        <STRONG>o</STRONG>   However,  <STRONG>WINDOW</STRONG>s are implicitly associated with a <STRONG>SCREEN</STRONG>.  so that
196            it is reasonable to expect <STRONG>delscreen</STRONG> to deal with these.
197
198        <STRONG>o</STRONG>   SVr4 curses deletes  the  standard  <STRONG>WINDOW</STRONG>  structures  <STRONG>stdscr</STRONG>  and
199            <STRONG>curscr</STRONG>  as  well  as a work area <STRONG>newscr</STRONG>.  SVr4 curses ignores other
200            windows.
201
202        <STRONG>o</STRONG>   Since version 4.0 (1996), ncurses has  maintained  a  list  of  all
203            windows  for  each  screen,  using that information to delete those
204            windows when <STRONG>delscreen</STRONG> is called.
205
206        <STRONG>o</STRONG>   NetBSD copied this feature of ncurses in  2001.   PDCurses  follows
207            the SVr4 model, deleting only the standard <STRONG>WINDOW</STRONG> structures.
208
209
210 </PRE><H3><a name="h3-High-level-versus-low-level">High-level versus low-level</a></H3><PRE>
211        Different  implementations  may  disagree  regarding  the level of some
212        functions.  For example, <STRONG>SCREEN</STRONG>  (returned  by  <STRONG>newterm</STRONG>)  and  <STRONG>TERMINAL</STRONG>
213        (returned  by  <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>)  hold  file  descriptors  for  the output
214        stream.  If an application switches screens using <STRONG>set_term</STRONG>, or switches
215        terminals using <STRONG><A HREF="curs_terminfo.3x.html">set_curterm(3x)</A></STRONG>, applications which use the output file
216        descriptor can have different behavior  depending  on  which  structure
217        holds the corresponding descriptor.
218
219        For example
220
221        <STRONG>o</STRONG>   NetBSD's  <STRONG><A HREF="curs_termattrs.3x.html">baudrate(3x)</A></STRONG>  function  uses  the descriptor in <STRONG>TERMINAL</STRONG>.
222            <STRONG>ncurses</STRONG> and SVr4 use the descriptor in <STRONG>SCREEN</STRONG>.
223
224        <STRONG>o</STRONG>   NetBSD and <STRONG>ncurses</STRONG> use the descriptor in <STRONG>TERMINAL</STRONG> for terminal  I/O
225            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
226            uses the descriptor in <STRONG>SCREEN</STRONG>.
227
228
229 </PRE><H3><a name="h3-Unset-TERM-Variable">Unset TERM Variable</a></H3><PRE>
230        If the TERM variable is  missing  or  empty,  <STRONG>initscr</STRONG>  uses  the  value
231        "unknown",  which  normally  corresponds  to  a terminal entry with the
232        <EM>generic</EM> (<EM>gn</EM>) capability.  Generic entries are detected by <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>
233        and  cannot  be  used for full-screen operation.  Other implementations
234        may handle a missing/empty TERM variable differently.
235
236
237 </PRE><H3><a name="h3-Signal-Handlers">Signal Handlers</a></H3><PRE>
238        Quoting from X/Open Curses Issue 7, section 3.1.1:
239
240             Curses implementations may provide for  special  handling  of  the
241             SIGINT,  SIGQUIT,  and  SIGTSTP  signals  if  their disposition is
242             SIG_DFL at the time <EM>initscr</EM> is called...
243
244             Any special handling for these signals may remain  in  effect  for
245             the  life  of  the  process  or  until  the  process  changes  the
246             disposition of the signal.
247
248             None of the Curses functions are required to be safe with  respect
249             to signals...
250
251        This  implementation establishes signal handlers during initialization,
252        e.g., <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  Applications which must handle these signals
253        should  set  up  the  corresponding  handlers  <EM>after</EM>  initializing  the
254        library:
255
256        <STRONG>SIGINT</STRONG>
257             The handler <EM>attempts</EM> to cleanup the screen on exit.   Although  it
258             <EM>usually</EM> works as expected, there are limitations:
259
260             <STRONG>o</STRONG>   Walking  the  <STRONG>SCREEN</STRONG> list is unsafe, since all list management
261                 is done without any signal blocking.
262
263             <STRONG>o</STRONG>   On systems which  have  <STRONG>REENTRANT</STRONG>  turned  on,  <STRONG>set_term</STRONG>  uses
264                 functions which could deadlock or misbehave in other ways.
265
266             <STRONG>o</STRONG>   <STRONG>endwin</STRONG> calls other functions, many of which use stdio or other
267                 library functions which are clearly unsafe.
268
269        <STRONG>SIGTERM</STRONG>
270             This uses the same handler as <STRONG>SIGINT</STRONG>, with the  same  limitations.
271             It  is  not  mentioned  in X/Open Curses, but is more suitable for
272             this purpose than <STRONG>SIGQUIT</STRONG> (which is used in debugging).
273
274        <STRONG>SIGTSTP</STRONG>
275             This handles the <EM>stop</EM> signal, used in job control.  When  resuming
276             the  process,  this  implementation  discards  pending  input with
277             <STRONG>flushinput</STRONG> (see <STRONG><A HREF="curs_util.3x.html">curs_util(3x)</A></STRONG>), and repaints the  screen  assuming
278             that  it  has  been completely altered.  It also updates the saved
279             terminal modes with <STRONG>def_shell_mode</STRONG> (see <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>).
280
281        <STRONG>SIGWINCH</STRONG>
282             This handles the window-size changes which  were  ignored  in  the
283             standardization   efforts.    The  handler  sets  a  (signal-safe)
284             variable which is later tested in <STRONG>wgetch</STRONG> (see <STRONG><A HREF="curs_getch.3x.html">curs_getch(3x)</A></STRONG>).  If
285             <STRONG>keypad</STRONG>  has  been  enabled  for  the  corresponding window, <STRONG>wgetch</STRONG>
286             returns the key symbol <STRONG>KEY_RESIZE</STRONG>.  At the same time, <STRONG>wgetch</STRONG> calls
287             <STRONG>resizeterm</STRONG>  to adjust the standard screen <STRONG>stdscr</STRONG>, and update other
288             data such as <STRONG>LINES</STRONG> and <STRONG>COLS</STRONG>.
289
290
291 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
292        <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>,
293        <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>
294
295
296
297 ncurses 6.4                       2023-09-30                  <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3x)</A></STRONG>
298 </PRE>
299 <div class="nav">
300 <ul>
301 <li><a href="#h2-NAME">NAME</a></li>
302 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
303 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
304 <ul>
305 <li><a href="#h3-initscr">initscr</a></li>
306 <li><a href="#h3-newterm">newterm</a></li>
307 <li><a href="#h3-endwin">endwin</a></li>
308 <li><a href="#h3-isendwin">isendwin</a></li>
309 <li><a href="#h3-set_term">set_term</a></li>
310 <li><a href="#h3-delscreen">delscreen</a></li>
311 </ul>
312 </li>
313 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
314 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
315 <ul>
316 <li><a href="#h3-Differences">Differences</a></li>
317 <li><a href="#h3-High-level-versus-low-level">High-level versus low-level</a></li>
318 <li><a href="#h3-Unset-TERM-Variable">Unset TERM Variable</a></li>
319 <li><a href="#h3-Signal-Handlers">Signal Handlers</a></li>
320 </ul>
321 </li>
322 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
323 </ul>
324 </div>
325 </BODY>
326 </HTML>