]> ncurses.scripts.mit.edu Git - ncurses.git/blob - doc/html/man/curs_initscr.3x.html
5f741d30dc479d1c5b921d086085d13f75797522
[ncurses.git] / doc / html / man / curs_initscr.3x.html
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.64 2024/03/16 15:35:01 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-03-16 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 2024-03-16 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  <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 the XSI Curses standard, Issue 4.  As
177        of 2015, 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  specifies that portable applications must not call <STRONG>initscr</STRONG> more
182        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 XSI 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
302 ncurses 6.4                       2024-03-16                  <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>