+
+</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
+ These functions were described in X/Open Curses, Issue 4. As of 2015,
+ the current document is X/Open Curses, Issue 7.
+
+
+</PRE><H3><a name="h3-Differences">Differences</a></H3><PRE>
+ X/Open Curses specifies that portable applications must not call
+ <STRONG>initscr</STRONG> more than once:
+
+ <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
+ restore the screen after <STRONG>endwin</STRONG>.
+
+ <STRONG>o</STRONG> This implementation allows using <STRONG>initscr</STRONG> after <STRONG>endwin</STRONG>.
+
+ Old versions of curses, e.g., BSD 4.4, would return a null pointer from
+ <STRONG>initscr</STRONG> when an error is detected, rather than exiting. It is safe but
+ redundant to check the return value of <STRONG>initscr</STRONG> in X/Open Curses.
+
+ Calling <STRONG>endwin</STRONG> does not dispose of the memory allocated in <STRONG>initscr</STRONG> or
+ <STRONG>newterm</STRONG>. Deleting a <EM>SCREEN</EM> provides a way to do this:
+
+ <STRONG>o</STRONG> X/Open Curses does not say what happens to <EM>WINDOW</EM>s when <STRONG>delscreen</STRONG>
+ "frees storage associated with the <EM>SCREEN</EM>" nor does the SVr4
+ documentation help, adding that it should be called after <STRONG>endwin</STRONG> if
+ a <EM>SCREEN</EM> is no longer needed.
+
+ <STRONG>o</STRONG> However, <EM>WINDOW</EM>s are implicitly associated with a <EM>SCREEN</EM>. so that
+ it is reasonable to expect <STRONG>delscreen</STRONG> to deal with these.
+
+ <STRONG>o</STRONG> SVr4 curses deletes the standard <EM>WINDOW</EM> structures <STRONG>stdscr</STRONG> and
+ <STRONG>curscr</STRONG> as well as a work area <STRONG>newscr</STRONG>. SVr4 curses ignores other
+ windows.
+
+ <STRONG>o</STRONG> Since version 4.0 (1996), <EM>ncurses</EM> has maintained a list of all
+ windows for each screen, using that information to delete those
+ windows when <STRONG>delscreen</STRONG> is called.
+
+ <STRONG>o</STRONG> NetBSD copied this feature of <EM>ncurses</EM> in 2001. PDCurses follows
+ the SVr4 model, deleting only the standard <EM>WINDOW</EM> structures.
+
+
+</PRE><H3><a name="h3-High-level-versus-Low-level">High-level versus Low-level</a></H3><PRE>
+ Different implementations may disagree regarding the level of some
+ functions. For example, <EM>SCREEN</EM> (returned by <STRONG>newterm</STRONG>) and <EM>TERMINAL</EM>
+ (returned by <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>) hold file descriptors for the output
+ stream. If an application switches screens using <STRONG>set_term</STRONG>, or switches
+ terminals using <STRONG><A HREF="curs_terminfo.3x.html">set_curterm(3x)</A></STRONG>, applications which use the output file
+ descriptor can have different behavior depending on which structure
+ holds the corresponding descriptor.
+
+ For example
+
+ <STRONG>o</STRONG> NetBSD's <STRONG><A HREF="curs_termattrs.3x.html">baudrate(3x)</A></STRONG> function uses the descriptor in <EM>TERMINAL</EM>.
+ <EM>ncurses</EM> and SVr4 use the descriptor in <EM>SCREEN</EM>.
+
+ <STRONG>o</STRONG> NetBSD and <EM>ncurses</EM> use the descriptor in <EM>TERMINAL</EM> for terminal I/O
+ 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
+ uses the descriptor in <EM>SCREEN</EM>.
+
+ <STRONG>Unset</STRONG> <EM>TERM</EM> <STRONG>Variable</STRONG>
+ If the <EM>TERM</EM> variable is missing or empty, <STRONG>initscr</STRONG> uses the value
+ "unknown", which normally corresponds to a terminal entry with the
+ <EM>generic</EM> (<EM>gn</EM>) capability. Generic entries are detected by <STRONG><A HREF="curs_terminfo.3x.html">setupterm(3x)</A></STRONG>
+ and cannot be used for full-screen operation. Other implementations
+ may handle a missing/empty <EM>TERM</EM> variable differently.
+
+
+</PRE><H3><a name="h3-Signal-Handlers">Signal Handlers</a></H3><PRE>
+ Quoting from X/Open Curses Issue 7, section 3.1.1:
+
+ Curses implementations may provide for special handling of the
+ SIGINT, SIGQUIT, and SIGTSTP signals if their disposition is
+ SIG_DFL at the time <EM>initscr</EM> is called...
+
+ Any special handling for these signals may remain in effect for
+ the life of the process or until the process changes the
+ disposition of the signal.
+
+ None of the Curses functions are required to be safe with respect
+ to signals...
+
+ This implementation establishes signal handlers during initialization,
+ e.g., <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>. Applications which must handle these signals
+ should set up the corresponding handlers <EM>after</EM> initializing the
+ library:
+
+ <STRONG>SIGINT</STRONG>
+ The handler <EM>attempts</EM> to clean up the screen on exit. Although it
+ <EM>usually</EM> works as expected, there are limitations:
+
+ <STRONG>o</STRONG> Walking the <EM>SCREEN</EM> list is unsafe, since all list management
+ is done without any signal blocking.
+
+ <STRONG>o</STRONG> On systems which have <STRONG>REENTRANT</STRONG> turned on, <STRONG>set_term</STRONG> uses
+ functions which could deadlock or misbehave in other ways.
+
+ <STRONG>o</STRONG> <STRONG>endwin</STRONG> calls other functions, many of which use <STRONG>stdio(3)</STRONG> or
+ other library functions which are clearly unsafe.
+
+ <STRONG>SIGTERM</STRONG>
+ This uses the same handler as <STRONG>SIGINT</STRONG>, with the same limitations.
+ It is not mentioned in X/Open Curses, but is more suitable for
+ this purpose than <STRONG>SIGQUIT</STRONG> (which is used in debugging).
+
+ <STRONG>SIGTSTP</STRONG>
+ This handles the <EM>stop</EM> signal, used in job control. When resuming
+ the process, this implementation discards pending input with
+ <STRONG><A HREF="curs_util.3x.html">flushinp(3x)</A></STRONG>, and repaints the screen assuming that it has been
+ completely altered. It also updates the saved terminal modes with
+ <STRONG><A HREF="curs_kernel.3x.html">def_shell_mode(3x)</A></STRONG>.
+
+ <STRONG>SIGWINCH</STRONG>
+ This handles the window-size changes which were ignored in the
+ standardization efforts. The handler sets a (signal-safe)
+ variable that is later tested by <STRONG><A HREF="curs_getch.3x.html">wgetch(3x)</A></STRONG> and <STRONG><A HREF="curs_get_wch.3x.html">wget_wch(3x)</A></STRONG>.
+
+ <STRONG>o</STRONG> <STRONG>wgetch</STRONG> returns the key code <STRONG>KEY_RESIZE</STRONG>.
+
+ <STRONG>o</STRONG> <STRONG>wget_wch</STRONG> returns <STRONG>KEY_CODE_YES</STRONG> and sets its <EM>wch</EM> parameter to
+ <STRONG>KEY_RESIZE</STRONG>.
+
+ At the same time, <EM>ncurses</EM> calls <STRONG>resizeterm</STRONG> to adjust the standard
+ screen <STRONG>stdscr</STRONG>, and update other data such as <STRONG>LINES</STRONG> and <STRONG>COLS</STRONG>.
+
+
+</PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
+ <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>,
+ <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>