]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - doc/html/man/curs_terminfo.3x.html
ncurses 6.4 - patch 20231230
[ncurses.git] / doc / html / man / curs_terminfo.3x.html
index f0424ea61bcef09afc2274013c0d41ed9d94b8b9..6084b51ee038fc2bd69831b5875042577dbd4337 100644 (file)
@@ -1,7 +1,8 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
-<!-- 
+<!--
+  * t
   ****************************************************************************
-  * Copyright (c) 1999-2005,2006 Free Software Foundation, Inc.              *
+  * Copyright 2018-2022,2023 Thomas E. Dickey                                *
+  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
   *                                                                          *
   * Permission is hereby granted, free of charge, to any person obtaining a  *
   * copy of this software and associated documentation files (the            *
   * sale, use or other dealings in this Software without prior written       *
   * authorization.                                                           *
   ****************************************************************************
-  * @Id: curs_terminfo.3x,v 1.24 2006/11/04 21:50:03 tom Exp @
+  * @Id: curs_terminfo.3x,v 1.125 2023/12/30 23:46:56 tom Exp @
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * ***************************************************************************
+  * X/Open Curses Issue 7, p. 161
+  * ***************************************************************************
 -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <HTML>
 <HEAD>
-<TITLE>curs_terminfo 3x</TITLE>
-<link rev=made href="mailto:bug-ncurses@gnu.org">
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+<meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
+<TITLE>curs_terminfo 3x 2023-12-30 ncurses 6.4 Library calls</TITLE>
+<link rel="author" href="mailto:bug-ncurses@gnu.org">
+
 </HEAD>
 <BODY>
-<H1>curs_terminfo 3x</H1>
-<HR>
+<H1 class="no-header">curs_terminfo 3x 2023-12-30 ncurses 6.4 Library calls</H1>
 <PRE>
-<!-- Manpage converted by man2html 3.0.1 -->
-<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>                                     <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
+<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>                Library calls               <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
 
 
 
 
-</PRE>
-<H2>NAME</H2><PRE>
-       <STRONG>del_curterm</STRONG>, <STRONG>mvcur</STRONG>, <STRONG>putp</STRONG>, <STRONG>restartterm</STRONG>, <STRONG>set_curterm</STRONG>,
-       <STRONG>setterm</STRONG>, <STRONG>setupterm</STRONG>, <STRONG>tigetflag</STRONG>, <STRONG>tigetnum</STRONG>, <STRONG>tigetstr</STRONG>, <STRONG>tparm</STRONG>,
-       <STRONG>tputs</STRONG>, <STRONG>vid_attr</STRONG>, <STRONG>vid_puts</STRONG>, <STRONG>vidattr</STRONG>, <STRONG>vidputs</STRONG> - <STRONG>curses</STRONG>
-       interfaces to terminfo database
+</PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
+       <STRONG>del_curterm</STRONG>,   <STRONG>mvcur</STRONG>,   <STRONG>putp</STRONG>,   <STRONG>restartterm</STRONG>,   <STRONG>set_curterm</STRONG>,  <STRONG>setupterm</STRONG>,
+       <STRONG>tigetflag</STRONG>,  <STRONG>tigetnum</STRONG>,  <STRONG>tigetstr</STRONG>,  <STRONG>tiparm</STRONG>,  <STRONG>tiparm_s</STRONG>,  <STRONG>tiscan_s</STRONG>,  <STRONG>tparm</STRONG>,
+       <STRONG>tputs</STRONG>,  <STRONG>vid_attr</STRONG>,  <STRONG>vid_puts</STRONG>,  <STRONG>vidattr</STRONG>,  <STRONG>vidputs</STRONG>  - <EM>curses</EM> interfaces to
+       <EM>terminfo</EM> database
 
 
-</PRE>
-<H2>SYNOPSIS</H2><PRE>
+</PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
        <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
        <STRONG>#include</STRONG> <STRONG>&lt;term.h&gt;</STRONG>
 
-       <STRONG>int</STRONG> <STRONG>setupterm(char</STRONG> <STRONG>*</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>fildes</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>errret</EM><STRONG>);</STRONG>
-       <STRONG>int</STRONG> <STRONG>setterm(char</STRONG> <STRONG>*</STRONG><EM>term</EM><STRONG>);</STRONG>
+       <STRONG>TERMINAL</STRONG> <STRONG>*cur_term;</STRONG>
+
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolnames[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolcodes[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolfnames[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numnames[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numcodes[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numfnames[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strnames[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strcodes[];</STRONG>
+       <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strfnames[];</STRONG>
+
+       <STRONG>int</STRONG> <STRONG>setupterm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>filedes</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>errret</EM><STRONG>);</STRONG>
        <STRONG>TERMINAL</STRONG> <STRONG>*set_curterm(TERMINAL</STRONG> <STRONG>*</STRONG><EM>nterm</EM><STRONG>);</STRONG>
        <STRONG>int</STRONG> <STRONG>del_curterm(TERMINAL</STRONG> <STRONG>*</STRONG><EM>oterm</EM><STRONG>);</STRONG>
-       <STRONG>int</STRONG> <STRONG>restartterm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>fildes</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>errret</EM><STRONG>);</STRONG>
-       <STRONG>char</STRONG> <STRONG>*tparm(char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
+       <STRONG>int</STRONG> <STRONG>restartterm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>filedes</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>errret</EM><STRONG>);</STRONG>
+
+       <STRONG>char</STRONG> <STRONG>*tparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> ...<STRONG>);</STRONG>
+            <EM>/*</EM> <EM>or</EM> <EM>*/</EM>
+       <STRONG>char</STRONG> <STRONG>*tparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>long</STRONG> <EM>p1</EM> ... <STRONG>long</STRONG> <EM>p9</EM><STRONG>);</STRONG>
+
        <STRONG>int</STRONG> <STRONG>tputs(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>affcnt</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>(*</STRONG><EM>putc</EM><STRONG>)(int));</STRONG>
        <STRONG>int</STRONG> <STRONG>putp(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>);</STRONG>
+
        <STRONG>int</STRONG> <STRONG>vidputs(chtype</STRONG> <EM>attrs</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>(*</STRONG><EM>putc</EM><STRONG>)(int));</STRONG>
        <STRONG>int</STRONG> <STRONG>vidattr(chtype</STRONG> <EM>attrs</EM><STRONG>);</STRONG>
-       <STRONG>int</STRONG> <STRONG>vid_puts(attr_t</STRONG> <EM>attrs</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>pair</EM><STRONG>,</STRONG> <STRONG>void</STRONG> <STRONG>*</STRONG><EM>opts</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>(*</STRONG><EM>putc</EM><STRONG>)(char));</STRONG>
+       <STRONG>int</STRONG> <STRONG>vid_puts(attr_t</STRONG> <EM>attrs</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>pair</EM><STRONG>,</STRONG> <STRONG>void</STRONG> <STRONG>*</STRONG><EM>opts</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>(*</STRONG><EM>putc</EM><STRONG>)(int));</STRONG>
        <STRONG>int</STRONG> <STRONG>vid_attr(attr_t</STRONG> <EM>attrs</EM><STRONG>,</STRONG> <STRONG>short</STRONG> <EM>pair</EM><STRONG>,</STRONG> <STRONG>void</STRONG> <STRONG>*</STRONG><EM>opts</EM><STRONG>);</STRONG>
-       <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>, int <EM>newcol</EM><STRONG>);</STRONG>
-       <STRONG>int</STRONG> <STRONG>tigetflag(char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
-       <STRONG>int</STRONG> <STRONG>tigetnum(char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
-       <STRONG>char</STRONG> <STRONG>*tigetstr(char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
 
+       <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>
 
-</PRE>
-<H2>DESCRIPTION</H2><PRE>
-       These low-level routines must be called by  programs  that
-       have to deal directly with the <STRONG>terminfo</STRONG> database to handle
-       certain terminal capabilities, such as  programming  func-
-       tion  keys.   For all other functionality, <STRONG>curses</STRONG> routines
-       are more suitable and their use is recommended.
-
-       Initially, <STRONG>setupterm</STRONG> should  be  called.   Note  that  <STRONG>se-</STRONG>
-       <STRONG>tupterm</STRONG>  is  automatically  called by <STRONG>initscr</STRONG> and <STRONG>newterm</STRONG>.
-       This  defines  the  set  of  terminal-dependent  variables
-       [listed in <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>].  The <STRONG>terminfo</STRONG> variables <STRONG>lines</STRONG> and
-       <STRONG>columns</STRONG>  are  initialized  by  <STRONG>setupterm</STRONG>  as  follows:  If
-       <STRONG>use_env(FALSE)</STRONG>  has  been  called,  values  for  <STRONG>lines</STRONG> and
-       <STRONG>columns</STRONG> specified in <STRONG>terminfo</STRONG> are used.  Otherwise, if the
-       environment  variables <STRONG>LINES</STRONG> and <STRONG>COLUMNS</STRONG> exist, their val-
-       ues are used.  If these environment variables do not exist
-       and the program is running in a window, the current window
-       size is used.  Otherwise, if the environment variables  do
-       not  exist,  the values for <STRONG>lines</STRONG> and <STRONG>columns</STRONG> specified in
-       the <STRONG>terminfo</STRONG> database are used.
-
-       The header files <STRONG>curses.h</STRONG> and <STRONG>term.h</STRONG>  should  be  included
-       (in  this order) to get the definitions for these strings,
-       numbers,  and  flags.   Parameterized  strings  should  be
-       passed  through  <STRONG>tparm</STRONG>  to instantiate them.  All <STRONG>terminfo</STRONG>
-       strings [including the output of <STRONG>tparm</STRONG>] should be  printed
-       with  <STRONG>tputs</STRONG> or <STRONG>putp</STRONG>.  Call the <STRONG>reset_shell_mode</STRONG> to restore
-       the tty modes before exiting [see <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>].   Pro-
-       grams  which  use  cursor  addressing  should  output  <STRONG>en-</STRONG>
-       <STRONG>ter_ca_mode</STRONG> upon startup and  should  output  <STRONG>exit_ca_mode</STRONG>
-       before  exiting.   Programs  desiring shell escapes should
-       call
-
-       <STRONG>reset_shell_mode</STRONG> and output <STRONG>exit_ca_mode</STRONG> before the  shell
-       is  called  and  should  output <STRONG>enter_ca_mode</STRONG> and call <STRONG>re-</STRONG>
-       <STRONG>set_prog_mode</STRONG> after returning from the shell.
-
-       The <STRONG>setupterm</STRONG> routine reads in the <STRONG>terminfo</STRONG> database, ini-
-       tializing the <STRONG>terminfo</STRONG> structures, but does not set up the
-       output virtualization structures used by <STRONG>curses</STRONG>.  The ter-
-       minal  type is the character string <EM>term</EM>; if <EM>term</EM> is null,
-       the environment variable <STRONG>TERM</STRONG> is used.  All output  is  to
-       file  descriptor  <STRONG>fildes</STRONG>  which is initialized for output.
-       If <EM>errret</EM> is not null, then <STRONG>setupterm</STRONG> returns  <STRONG>OK</STRONG>  or  <STRONG>ERR</STRONG>
-       and stores a status value in the integer pointed to by <EM>er-</EM>
-       <EM>rret</EM>.  A return value of <STRONG>OK</STRONG> combined with status of  <STRONG>1</STRONG>  in
-       <EM>errret</EM> is normal.  If <STRONG>ERR</STRONG> is returned, examine <EM>errret</EM>:
-
-              <STRONG>1</STRONG>    means that the terminal is hardcopy, cannot be
-                   used for curses applications.
-
-              <STRONG>0</STRONG>    means that the terminal could not be found, or
-                   that  it  is a generic type, having too little
-                   information for curses applications to run.
-
-              <STRONG>-1</STRONG>   means that the <STRONG>terminfo</STRONG> database could not  be
-                   found.
-
-       If  <EM>errret</EM> is null, <STRONG>setupterm</STRONG> prints an error message upon
-       finding an error and exits.  Thus, the simplest call is:
-
-             <STRONG>setupterm((char</STRONG> <STRONG>*)0,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0);</STRONG>,
-
-       which uses all the defaults and sends the output  to  <STRONG>std-</STRONG>
-       <STRONG>out</STRONG>.
-
-       The  <STRONG>setterm</STRONG>  routine is being replaced by <STRONG>setupterm</STRONG>.  The
-       call:
-
-             <STRONG>setupterm(</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0)</STRONG>
-
-       provides the same  functionality  as  <STRONG>setterm(</STRONG><EM>term</EM><STRONG>)</STRONG>.   The
-       <STRONG>setterm</STRONG>  routine  is  included here for BSD compatibility,
-       and is not recommended for new programs.
-
-       The <STRONG>set_curterm</STRONG> routine  sets  the  variable  <STRONG>cur_term</STRONG>  to
-       <EM>nterm</EM>, and makes all of the <STRONG>terminfo</STRONG> boolean, numeric, and
-       string variables use the values from  <EM>nterm</EM>.   It  returns
-       the old value of <STRONG>cur_term</STRONG>.
-
-       The  <STRONG>del_curterm</STRONG>  routine  frees  the  space pointed to by
-       <EM>oterm</EM> and makes it available for further use.  If <EM>oterm</EM> is
-       the  same  as  <STRONG>cur_term</STRONG>, references to any of the <STRONG>terminfo</STRONG>
-       boolean, numeric, and string variables thereafter may  re-
-       fer  to  invalid  memory locations until another <STRONG>setupterm</STRONG>
-       has been called.
-
-       The  <STRONG>restartterm</STRONG>  routine  is  similar  to  <STRONG>setupterm</STRONG>  and
-       <STRONG>initscr</STRONG>,  except  that it is called after restoring memory
-       to a previous state (for example, when  reloading  a  game
-       saved  as a core image dump).  It assumes that the windows
-       and the input and output options are the same as when mem-
-       ory  was saved, but the terminal type and baud rate may be
-       different.  Accordingly, it saves various tty state  bits,
-       does a setupterm, and then restores the bits.
-
-       The <STRONG>tparm</STRONG> routine instantiates the string <EM>str</EM> with parame-
-       ters <EM>pi</EM>.  A pointer is returned to the result of <EM>str</EM>  with
-       the parameters applied.
-
-       The  <STRONG>tputs</STRONG>  routine  applies  padding  information  to the
-       string <EM>str</EM> and outputs it.  The <EM>str</EM>  must  be  a  terminfo
-       string  variable  or the return value from <STRONG>tparm</STRONG>, <STRONG>tgetstr</STRONG>,
-       or <STRONG>tgoto</STRONG>.  <EM>affcnt</EM> is the number of lines affected, or 1 if
-       not  applicable.   <EM>putc</EM> is a <STRONG>putchar</STRONG>-like routine to which
-       the characters are passed, one at a time.
-
-       The <STRONG>putp</STRONG> routine calls <STRONG>tputs(</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>1,</STRONG> <STRONG>putchar)</STRONG>.  Note  that
-       the  output  of  <STRONG>putp</STRONG>  always  goes  to <STRONG>stdout</STRONG>, not to the
-       <EM>fildes</EM> specified in <STRONG>setupterm</STRONG>.
-
-       The <STRONG>vidputs</STRONG> routine displays the string on the terminal in
-       the  video  attribute mode <EM>attrs</EM>, which is any combination
-       of the attributes listed in  <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.   The  characters
-       are passed to the <STRONG>putchar</STRONG>-like routine <EM>putc</EM>.
-
-       The  <STRONG>vidattr</STRONG>  routine  is like the <STRONG>vidputs</STRONG> routine, except
-       that it outputs through <STRONG>putchar</STRONG>.
-
-       The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines correspond  to  vidattr
-       and  vidputs,  respectively.   They use a set of arguments
-       for representing the video attributes  plus  color,  i.e.,
-       one of type attr_t for the attributes and one of short for
-       the color_pair number.  The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines
-       are  designed  to use the attribute constants with the <EM>WA</EM><STRONG>_</STRONG>
-       prefix.  The opts argument is  reserved  for  future  use.
-       Currently,  applications  must  provide a null pointer for
-       that argument.
-
-       The <STRONG>mvcur</STRONG> routine provides low-level  cursor  motion.   It
-       takes  effect  immediately  (rather  than  at the next re-
-       fresh).
-
-       The <STRONG>tigetflag</STRONG>, <STRONG>tigetnum</STRONG> and <STRONG>tigetstr</STRONG> routines  return  the
-       value of the capability corresponding to the <STRONG>terminfo</STRONG> <EM>cap-</EM>
-       <EM>name</EM> passed to them, such as <STRONG>xenl</STRONG>.
-
-       The <STRONG>tigetflag</STRONG> routine returns the value <STRONG>-1</STRONG> if  <EM>capname</EM>  is
-       not a boolean capability, or <STRONG>0</STRONG> if it is canceled or absent
-       from the terminal description.
-
-       The <STRONG>tigetnum</STRONG> routine returns the value <STRONG>-2</STRONG>  if  <EM>capname</EM>  is
-       not  a  numeric capability, or <STRONG>-1</STRONG> if it is canceled or ab-
-       sent from the terminal description.
+       <STRONG>int</STRONG> <STRONG>tigetflag(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
+       <STRONG>int</STRONG> <STRONG>tigetnum(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
+       <STRONG>char</STRONG> <STRONG>*tigetstr(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
 
-       The <STRONG>tigetstr</STRONG> routine returns the value <STRONG>(char</STRONG> <STRONG>*)-1</STRONG> if  <EM>cap-</EM>
-       <EM>name</EM> is not a string capability, or <STRONG>0</STRONG> if it is canceled or
-       absent from the terminal description.
+       <STRONG>char</STRONG> <STRONG>*tiparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> ...<STRONG>);</STRONG>
 
-       The <EM>capname</EM> for each capability is given in the table col-
-       umn  entitled  <EM>capname</EM> code in the capabilities section of
-       <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
+       <EM>/*</EM> <EM>extensions</EM> <EM>*/</EM>
+       <STRONG>char</STRONG> <STRONG>*tiparm_s(int</STRONG> <EM>expected</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>mask</EM><STRONG>,</STRONG> <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
+       <STRONG>int</STRONG> <STRONG>tiscan_s(int</STRONG> <STRONG>*</STRONG><EM>expected</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>*</STRONG><EM>mask</EM><STRONG>,</STRONG> <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>);</STRONG>
 
-              <STRONG>char</STRONG> <STRONG>*boolnames[]</STRONG>, <STRONG>*boolcodes[]</STRONG>, <STRONG>*boolfnames[]</STRONG>
+       <EM>/*</EM> <EM>deprecated</EM> <EM>*/</EM>
+       <STRONG>int</STRONG> <STRONG>setterm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>term</EM><STRONG>);</STRONG>
 
-              <STRONG>char</STRONG> <STRONG>*numnames[]</STRONG>, <STRONG>*numcodes[]</STRONG>, <STRONG>*numfnames[]</STRONG>
 
-              <STRONG>char</STRONG> <STRONG>*strnames[]</STRONG>, <STRONG>*strcodes[]</STRONG>, <STRONG>*strfnames[]</STRONG>
+</PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
+       These low-level routines must be called by programs that have  to  deal
+       directly   with  the  <EM>terminfo</EM>  database  to  handle  certain  terminal
+       capabilities,  such  as  programming  function  keys.   For  all  other
+       functionality,  <EM>curses</EM>  routines  are  more  suitable  and their use is
+       recommended.
 
-       These null-terminated arrays  contain  the  <EM>capnames</EM>,  the
-       <STRONG>termcap</STRONG>  codes, and the full C names, for each of the <STRONG>ter-</STRONG>
-       <STRONG>minfo</STRONG> variables.
+       None of these functions use  (or  are  aware  of)  multibyte  character
+       strings such as UTF-8.
 
+       <STRONG>o</STRONG>   Capability names and codes use the POSIX portable character set.
 
-</PRE>
-<H2>RETURN VALUE</H2><PRE>
-       Routines that return an integer return  <STRONG>ERR</STRONG>  upon  failure
-       and  <STRONG>OK</STRONG>  (SVr4 only specifies "an integer value other than
-       <STRONG>ERR</STRONG>") upon successful completion, unless  otherwise  noted
-       in the preceding routine descriptions.
+       <STRONG>o</STRONG>   Capability  string  values  have  no  associated encoding; they are
+           strings of 8-bit characters.
 
-       Routines that return pointers always return <STRONG>NULL</STRONG> on error.
 
-       X/Open defines no error conditions.  In  this  implementa-
-       tion
+</PRE><H3><a name="h3-Initialization">Initialization</a></H3><PRE>
+       Initially, <STRONG>setupterm</STRONG> should be called.  The high-level <EM>curses</EM> functions
+       <STRONG>initscr</STRONG>  and  <STRONG>newterm</STRONG> call <STRONG>setupterm</STRONG> to initialize the low-level set of
+       terminal-dependent variables listed in <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>.
 
-              <STRONG>del_curterm</STRONG>
-                   returns  an error if its terminal parameter is
-                   null.
+       Applications can use the terminal  capabilities  either  directly  (via
+       header  definitions),  or  by  special  functions.   The  header  files
+       <EM>curses.h</EM> and <EM>term.h</EM> should be included  (in  that  order)  to  get  the
+       definitions for these strings, numbers, and flags.
 
-              <STRONG>restartterm</STRONG>
-                   returns an error if the associated call to <STRONG>se-</STRONG>
-                   <STRONG>tupterm</STRONG> returns an error.
+       The  <EM>terminfo</EM>  variables <STRONG>lines</STRONG> and <STRONG>columns</STRONG> are initialized by <STRONG>setupterm</STRONG>
+       as follows:
 
-              <STRONG>setupterm</STRONG>
-                   returns  an error if it cannot allocate enough
-                   memory, or create the initial windows (stdscr,
-                   curscr,  newscr).   Other error conditions are
-                   documented above.
+       <STRONG>o</STRONG>   If <STRONG>use_env(FALSE)</STRONG> has been called, values  for  <STRONG>lines</STRONG>  and  <STRONG>columns</STRONG>
+           specified in <EM>terminfo</EM> are used.
 
+       <STRONG>o</STRONG>   Otherwise,  if  the  environment variables <EM>LINES</EM> and <EM>COLUMNS</EM> exist,
+           their values are used.  If these environment variables do not exist
+           and  the program is running in a window, the current window size is
+           used.  Otherwise, if the environment variables do  not  exist,  the
+           values for <STRONG>lines</STRONG> and <STRONG>columns</STRONG> specified in the <EM>terminfo</EM> database are
+           used.
 
-</PRE>
-<H2>NOTES</H2><PRE>
-       The <STRONG>setupterm</STRONG> routine should be used in place of  <STRONG>setterm</STRONG>.
-       It  may be useful when you want to test for terminal capa-
-       bilities without committing to the allocation  of  storage
-       involved in <STRONG>initscr</STRONG>.
+       Parameterized strings should be passed  through  <STRONG>tparm</STRONG>  to  instantiate
+       them.   All  <EM>terminfo</EM> strings (including the output of <STRONG>tparm</STRONG>) should be
+       printed with <STRONG>tputs</STRONG> or <STRONG>putp</STRONG>.  Call <STRONG>reset_shell_mode</STRONG> to restore  the  tty
+       modes before exiting [see <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>].
 
-       Note that <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> may be macros.
+       Programs which use cursor addressing should
 
+       <STRONG>o</STRONG>   output <STRONG>enter_ca_mode</STRONG> upon startup and
 
-</PRE>
-<H2>PORTABILITY</H2><PRE>
-       The  function  <STRONG>setterm</STRONG>  is not described in the XSI Curses
-       standard and must be considered non-portable.   All  other
-       functions are as described in the XSI curses standard.
-
-       In  System V Release 4, <STRONG>set_curterm</STRONG> has an <STRONG>int</STRONG> return type
-       and returns <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>.  We have chosen  to  implement  the
-       XSI Curses semantics.
-
-       In System V Release 4, the third argument of <STRONG>tputs</STRONG> has the
-       type <STRONG>int</STRONG> <STRONG>(*putc)(char)</STRONG>.
-
-       The XSI Curses standard prototypes <STRONG>tparm</STRONG> with a fixed num-
-       ber  of  parameters, rather than a variable argument list.
-       This  implementation  uses  a  variable   argument   list.
-       Portable  applications  should  provide 9 parameters after
-       the format; zeroes are fine for this purpose.
-
-       XSI notes that after calling <STRONG>mvcur</STRONG>, the curses  state  may
-       not  match the actual terminal state, and that an applica-
-       tion should touch and refresh the window  before  resuming
-       normal  curses calls.  Both ncurses and System V Release 4
-       curses implement <STRONG>mvcur</STRONG> using the SCREEN data allocated  in
-       either  <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  So though it is documented as
-       a terminfo function, <STRONG>mvcur</STRONG> is  really  a  curses  function
-       which is not well specified.
-
-       XSI  states that the old location must be given.  This im-
-       plementation allows the caller to use -1's for the old or-
-       dinates.  In that case, the old location is unknown.
-
-       Extended  terminal  capability  names, e.g., as defined by
-       <STRONG>tic</STRONG> <STRONG>-x</STRONG>, are not stored in the  arrays  described  in  this
-       section.
+       <STRONG>o</STRONG>   output <STRONG>exit_ca_mode</STRONG> before exiting.
 
+       Programs which execute shell subprocesses should
 
-</PRE>
-<H2>SEE ALSO</H2><PRE>
-       <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_kernel.3x.html">curs_kernel(3x)</A></STRONG>, <STRONG>curs_term-</STRONG>
-       <STRONG><A HREF="curs_termcap.3x.html">cap(3x)</A></STRONG>, <STRONG><A HREF="putc.3S.html">putc(3S)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
+       <STRONG>o</STRONG>   call  <STRONG>reset_shell_mode</STRONG>  and output <STRONG>exit_ca_mode</STRONG> before the shell is
+           called and
+
+       <STRONG>o</STRONG>   output <STRONG>enter_ca_mode</STRONG> and call <STRONG>reset_prog_mode</STRONG> after returning  from
+           the shell.
+
+       The  <STRONG>setupterm</STRONG> routine reads in the <EM>terminfo</EM> database, initializing the
+       <EM>terminfo</EM> structures, but does not  set  up  the  output  virtualization
+       structures used by <EM>curses.</EM>  These are its parameters:
+
+          <EM>term</EM> is the terminal type, a character string.  If <EM>term</EM> is null, the
+               environment variable <EM>TERM</EM> is used.
+
+          <EM>filedes</EM>
+               is the file descriptor used for getting  and  setting  terminal
+               I/O modes.
+
+               Higher-level  applications use <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG> for initializing the
+               terminal, passing an output <EM>stream</EM> rather  than  a  <EM>descriptor</EM>.
+               In   curses,  the  two  are  the  same  because  <STRONG>newterm</STRONG>  calls
+               <STRONG>setupterm</STRONG>, passing the file descriptor derived from its  output
+               stream parameter.
+
+          <EM>errret</EM>
+               points  to  an  optional  location where an error status can be
+               returned to the caller.  If <EM>errret</EM> is not null, then  <STRONG>setupterm</STRONG>
+               returns  <STRONG>OK</STRONG>  or  <STRONG>ERR</STRONG>  and  stores a status value in the integer
+               pointed to by <EM>errret</EM>.  A  return  value  of  <STRONG>OK</STRONG>  combined  with
+               status of <STRONG>1</STRONG> in <EM>errret</EM> is normal.
+
+               If <STRONG>ERR</STRONG> is returned, examine <EM>errret</EM>:
+
+               <STRONG>1</STRONG>    means  that  the  terminal is hardcopy, cannot be used for
+                    <EM>curses</EM> applications.
+
+                    <STRONG>setupterm</STRONG> determines if the entry is a  hardcopy  type  by
+                    checking the <STRONG>hc</STRONG> (<STRONG>hardcopy</STRONG>) capability.
+
+               <STRONG>0</STRONG>    means  that the terminal could not be found, or that it is
+                    a generic type, having too little information  for  <EM>curses</EM>
+                    applications to run.
+
+                    <STRONG>setupterm</STRONG>  determines  if  the  entry is a generic type by
+                    checking the <STRONG>gn</STRONG> (<STRONG>generic_type</STRONG>) capability.
+
+               <STRONG>-1</STRONG>   means that the <EM>terminfo</EM> database could not be found.
+
+               If <EM>errret</EM> is null,  <STRONG>setupterm</STRONG>  prints  an  error  message  upon
+               finding an error and exits.  Thus, the simplest call is:
+
+                      <STRONG>setupterm((char</STRONG> <STRONG>*)0,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0);</STRONG>
+
+               which uses all the defaults and sends the output to <STRONG>stdout</STRONG>.
+
+
+</PRE><H3><a name="h3-The-Terminal-State">The Terminal State</a></H3><PRE>
+       The  <STRONG>setupterm</STRONG>  routine  stores its information about the terminal in a
+       <EM>TERMINAL</EM> structure pointed to by the global variable <STRONG>cur_term</STRONG>.   If  it
+       detects  an error, or decides that the terminal is unsuitable (hardcopy
+       or generic), it discards this information, making it not  available  to
+       applications.
+
+       If  <STRONG>setupterm</STRONG>  is called repeatedly for the same terminal type, it will
+       reuse  the  information.   It  maintains  only  one  copy  of  a  given
+       terminal's  capabilities  in  memory.   If  it  is called for different
+       terminal types,  <STRONG>setupterm</STRONG>  allocates  new  storage  for  each  set  of
+       terminal capabilities.
+
+       <STRONG>set_curterm</STRONG>  sets  <STRONG>cur_term</STRONG>  to  <EM>nterm,</EM>  and  makes all of the <EM>terminfo</EM>
+       Boolean, numeric, and string variables use the values from  <EM>nterm.</EM>   It
+       returns the old value of <STRONG>cur_term</STRONG>.
+
+       <STRONG>del_curterm</STRONG>  routine  frees  the space pointed to by <EM>oterm</EM> and makes it
+       available  for  further  use.   If  <EM>oterm</EM>  is  the  same  as  <STRONG>cur_term</STRONG>,
+       references  to  any  of  the  <EM>terminfo</EM>  Boolean,  numeric,  and  string
+       variables thereafter  may  refer  to  invalid  memory  locations  until
+       another <STRONG>setupterm</STRONG> has been called.
+
+       The  <STRONG>restartterm</STRONG>  routine  is  similar to <STRONG>setupterm</STRONG> and <STRONG>initscr</STRONG>, except
+       that it is called after restoring  memory  to  a  previous  state  (for
+       example,   when   reloading  a  game  saved  as  a  core  image  dump).
+       <STRONG>restartterm</STRONG> assumes that the windows and the input and  output  options
+       are  the  same as when memory was saved, but the terminal type and baud
+       rate may be different.   Accordingly,  <STRONG>restartterm</STRONG>  saves  various  tty
+       state bits, calls <STRONG>setupterm</STRONG>, and then restores the bits.
+
+
+</PRE><H3><a name="h3-Formatting-Output">Formatting Output</a></H3><PRE>
+       The  <STRONG>tparm</STRONG>  routine  instantiates the string <EM>str</EM> with parameters <EM>pi</EM>.  A
+       pointer is returned to the result of <EM>str</EM> with the  parameters  applied.
+       Application  developers  should  keep  in  mind  these  quirks  of  the
+       interface:
+
+       <STRONG>o</STRONG>   Although <STRONG>tparm</STRONG>'s actual parameters may be integers or strings,  the
+           prototype expects <STRONG>long</STRONG> (integer) values.
+
+       <STRONG>o</STRONG>   Aside  from  the  <STRONG>set_attributes</STRONG>  (<STRONG>sgr</STRONG>)  capability,  most terminal
+           capabilities require no more than one or two parameters.
+
+       <STRONG>o</STRONG>   Padding information is ignored  by  <STRONG>tparm</STRONG>;  it  is  interpreted  by
+           <STRONG>tputs</STRONG>.
+
+       <STRONG>o</STRONG>   The  capability  string  is  null-terminated.   Use "\200" where an
+           ASCII NUL is needed in the output.
+
+       <STRONG>tiparm</STRONG> is a newer form of <STRONG>tparm</STRONG>  which  uses  <EM>stdarg.h</EM>  rather  than  a
+       fixed-parameter  list.   Its  numeric  parameters  are <EM>int</EM>s rather than
+       <EM>long</EM>s.
+
+       Both <STRONG>tparm</STRONG> and <STRONG>tiparm</STRONG> assume that  the  application  passes  parameters
+       consistent  with the terminal description.  Two extensions are provided
+       as alternatives to deal with untrusted data:
+
+       <STRONG>o</STRONG>   <STRONG>tiparm_s</STRONG> is an extension which is a safer formatting function  than
+           <STRONG>tparm</STRONG> or <STRONG>tiparm</STRONG>, because it allows the developer to tell the curses
+           library how many parameters to expect in the  parameter  list,  and
+           which may be string parameters.
+
+           The  <EM>mask</EM>  parameter has one bit set for each of the parameters (up
+           to 9) which will be passed as char* rather than numbers.
+
+       <STRONG>o</STRONG>   The  extension  <STRONG>tiscan_s</STRONG>  allows  the  application  to  inspect   a
+           formatting capability to see what the curses library would assume.
+
+
+</PRE><H3><a name="h3-Output-Functions">Output Functions</a></H3><PRE>
+       String  capabilities  can  contain  padding  information,  a time delay
+       (accommodating performance limitations of hardware terminals) expressed
+       as <STRONG>$&lt;</STRONG><EM>n</EM><STRONG>&gt;</STRONG>, where <EM>n</EM> is a nonnegative integral count of milliseconds.  If <EM>n</EM>
+       exceeds 30,000 (thirty seconds), it is capped at that value.
+
+       The <STRONG>tputs</STRONG> routine interprets time-delay information in the  string  <EM>str</EM>
+       and outputs it, executing the delays:
+
+       <STRONG>o</STRONG>   The  <EM>str</EM> parameter must be a terminfo string variable or the return
+           value from <STRONG>tparm</STRONG>, <STRONG>tiparm</STRONG>, <STRONG>tgetstr</STRONG>, or <STRONG>tgoto</STRONG>.
+
+           The <STRONG>tgetstr</STRONG> and <STRONG>tgoto</STRONG> functions are part of the <EM>termcap</EM>  interface,
+           which  happens  to  share  this  function  name  with  the <EM>terminfo</EM>
+           interface.
+
+       <STRONG>o</STRONG>   <EM>affcnt</EM> is the number of lines affected, or 1 if not applicable.
+
+       <STRONG>o</STRONG>   <EM>putc</EM> is a <EM>putchar</EM>-like function to which the characters are passed,
+           one at a time.
+
+           If  <STRONG>tputs</STRONG>  processes  a  time-delay,  it  uses the <STRONG><A HREF="curs_util.3x.html">delay_output(3x)</A></STRONG>
+           function, routing any resulting  padding  characters  through  this
+           function.
+
+       The  <STRONG>putp</STRONG>  routine  calls  <STRONG>tputs(</STRONG><EM>str</EM><STRONG>,</STRONG>  <STRONG>1,</STRONG> <STRONG>putchar)</STRONG>.  The output of <STRONG>putp</STRONG>
+       always goes to <STRONG>stdout</STRONG>, rather than the <EM>filedes</EM> specified in <STRONG>setupterm</STRONG>.
+
+       The <STRONG>vidputs</STRONG> routine displays the string on the terminal  in  the  video
+       attribute mode <EM>attrs</EM>, which is any combination of the attributes listed
+       in <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.  The characters are passed to the <EM>putchar</EM>-like  function
+       <EM>putc</EM>.
+
+       The <STRONG>vidattr</STRONG> routine is like the <STRONG>vidputs</STRONG> routine, except that it outputs
+       through <EM>putchar</EM>.
+
+       <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> correspond to <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG>,  respectively.
+       They  use multiple parameters to represent the character attributes and
+       color; namely,
+
+       <STRONG>o</STRONG>   <EM>attrs,</EM> of type <EM>attr</EM><STRONG>_</STRONG><EM>t,</EM> for the attributes and
+
+       <STRONG>o</STRONG>   <EM>pair,</EM> of type <EM>short,</EM> for the color pair number.
+
+       Use the attribute constants  prefixed  with  "<STRONG>WA_</STRONG>"  with  <STRONG>vid_attr</STRONG>  and
+       <STRONG>vid_puts</STRONG>.
+
+       X/Open  Curses  reserves  the <EM>opts</EM> argument for future use, saying that
+       applications must provide a null pointer for  that  argument;  but  see
+       section "EXTENSIONS" below.
+
+       The  <STRONG>mvcur</STRONG>  routine  provides low-level cursor motion.  It takes effect
+       immediately (rather than at the next refresh).  Unlike the  other  low-
+       level  output  functions,  which either write to the standard output or
+       pass an output function parameter, <STRONG>mvcur</STRONG> uses an output file descriptor
+       derived from the output stream parameter of <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG>.
+
+       While <STRONG>putp</STRONG> and <STRONG>mvcur</STRONG> are low-level functions which do not use the high-
+       level curses state, they are declared in <EM>curses.h</EM> because System V  did
+       this (see <EM>HISTORY</EM>).
+
+
+</PRE><H3><a name="h3-Terminal-Capability-Functions">Terminal Capability Functions</a></H3><PRE>
+       The  <STRONG>tigetflag</STRONG>,  <STRONG>tigetnum</STRONG> and <STRONG>tigetstr</STRONG> routines return the value of the
+       capability corresponding to the <EM>terminfo</EM> <EM>capname</EM> passed to  them,  such
+       as  <STRONG>xenl</STRONG>.  The <EM>capname</EM> for each capability is given in the table column
+       entitled <EM>capname</EM> code in the capabilities section of <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
+
+       These routines return special values to denote errors.
+
+       The <STRONG>tigetflag</STRONG> routine returns
+
+       <STRONG>-1</STRONG>     if <EM>capname</EM> is not a Boolean capability, or
+
+       <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
+
+       The <STRONG>tigetnum</STRONG> routine returns
+
+       <STRONG>-2</STRONG>     if <EM>capname</EM> is not a numeric capability, or
+
+       <STRONG>-1</STRONG>     if it is canceled or absent from the terminal description.
+
+       The <STRONG>tigetstr</STRONG> routine returns
+
+       <STRONG>(char</STRONG> <STRONG>*)-1</STRONG>
+              if <EM>capname</EM> is not a string capability, or
+
+       <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
+
+
+</PRE><H3><a name="h3-Terminal-Capability-Names">Terminal Capability Names</a></H3><PRE>
+       These null-terminated arrays contain
+
+       <STRONG>o</STRONG>   the short <EM>terminfo</EM> names ("codes"),
+
+       <STRONG>o</STRONG>   the <EM>termcap</EM> names ("names"), and
+
+       <STRONG>o</STRONG>   the long <EM>terminfo</EM> names ("fnames")
+
+       for each of the predefined <EM>terminfo</EM> variables:
+
+              <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*boolnames[]</STRONG>, <STRONG>*boolcodes[]</STRONG>, <STRONG>*boolfnames[]</STRONG>
+              <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*numnames[]</STRONG>, <STRONG>*numcodes[]</STRONG>, <STRONG>*numfnames[]</STRONG>
+              <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*strnames[]</STRONG>, <STRONG>*strcodes[]</STRONG>, <STRONG>*strfnames[]</STRONG>
+
+
+</PRE><H3><a name="h3-Releasing-Memory">Releasing Memory</a></H3><PRE>
+       Each successful call to <STRONG>setupterm</STRONG> allocates memory to hold the terminal
+       description.   As  a  side-effect,  it  sets  <STRONG>cur_term</STRONG> to point to this
+       memory.  If an application calls
+
+              <STRONG>del_curterm(cur_term);</STRONG>
+
+       the memory will be freed.
+
+       The formatting functions <STRONG>tparm</STRONG> and <STRONG>tiparm</STRONG> extend the storage  allocated
+       by <STRONG>setupterm</STRONG>:
+
+       <STRONG>o</STRONG>   the  "static"  terminfo variables [a-z].  Before <EM>ncurses</EM> 6.3, those
+           were shared by all screens.  With <EM>ncurses</EM> 6.3, those are  allocated
+           per screen.  See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for details.
+
+       <STRONG>o</STRONG>   to  improve performance, <EM>ncurses</EM> 6.3 caches the result of analyzing
+           terminfo strings for their parameter types.  That is  stored  as  a
+           binary tree referenced from the <EM>TERMINAL</EM> structure.
+
+       The higher-level <STRONG>initscr</STRONG> and <STRONG>newterm</STRONG> functions use <STRONG>setupterm</STRONG>.  Normally
+       they do not free this memory, but it is possible to do that  using  the
+       <STRONG><A HREF="curs_initscr.3x.html">delscreen(3x)</A></STRONG> function.
+
+
+</PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
+       X/Open defines no failure conditions.  In <EM>ncurses,</EM>
+
+       <STRONG>del_curterm</STRONG>
+            returns an error if its terminal parameter is null.
+
+       <STRONG>putp</STRONG> calls <STRONG>tputs</STRONG>, returning the same error-codes.
+
+       <STRONG>restartterm</STRONG>
+            returns  an  error  if the associated call to <STRONG>setupterm</STRONG> returns an
+            error.
+
+       <STRONG>setupterm</STRONG>
+            returns an error if it cannot allocate enough  memory,  or  create
+            the  initial  windows  (<STRONG>stdscr</STRONG>,  <STRONG>curscr</STRONG>,  and  <STRONG>newscr</STRONG>) Other error
+            conditions are documented above.
+
+       <STRONG>tparm</STRONG>
+            returns  a  null  if  the  capability  would  require   unexpected
+            parameters,  e.g.,  too many, too few, or incorrect types (strings
+            where integers are expected, or vice versa).
+
+       <STRONG>tputs</STRONG>
+            returns an error if the string parameter is  null.   It  does  not
+            detect  I/O  errors:  X/Open  Curses states that <STRONG>tputs</STRONG> ignores the
+            return value of the output function <EM>putc</EM>.
+
+
+</PRE><H2><a name="h2-NOTES">NOTES</a></H2><PRE>
+       The <STRONG>vid_attr</STRONG> function in <EM>ncurses</EM> is a special case.  It was  originally
+       implemented based on a draft of X/Open Curses, as a macro, before other
+       parts of the <EM>ncurses</EM> wide-character API were developed, and unlike  the
+       other  wide-character  functions,  is  also  provided  in the non-wide-
+       character configuration.
+
+
+</PRE><H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
+       The functions marked as extensions were designed for <EM>ncurses,</EM>  and  are
+       not  found  in SVr4 <EM>curses</EM>, 4.4BSD <EM>curses</EM>, or any other previous curses
+       implementation.
+
+       <EM>ncurses</EM> allows <EM>opts</EM> to be a pointer to <EM>int,</EM> which  overrides  the  <EM>pair</EM>
+       (<EM>short</EM>) argument.
+
+
+</PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
+       <STRONG>setterm</STRONG> is not described by X/Open and must be considered non-portable.
+       All other functions are as described by X/Open.
+
+
+</PRE><H3><a name="h3-Compatibility-Macros">Compatibility Macros</a></H3><PRE>
+       This implementation  provides  a  few  macros  for  compatibility  with
+       systems  before  SVr4  (see  section  "HISTORY"  below).   They include
+       <STRONG>Bcrmode</STRONG>, <STRONG>Bfixterm</STRONG>, <STRONG>Bgettmode</STRONG>,  <STRONG>Bnocrmode</STRONG>,  <STRONG>Bresetterm</STRONG>,  <STRONG>Bsaveterm</STRONG>,  and
+       <STRONG>Bsetterm</STRONG>.
+
+       In  SVr4,  these  are  found  in  <EM>curses.h</EM>, but except for <STRONG>setterm</STRONG>, are
+       likewise macros.  The one function, <STRONG>setterm</STRONG>, is mentioned in the manual
+       page.  It further notes that <STRONG>setterm</STRONG> was replaced by <STRONG>setupterm</STRONG>, stating
+       that the call
+              setupterm(<EM>term</EM>, 1, (int *)0)
+       provides the same  functionality  as  <STRONG>setterm(</STRONG><EM>term</EM><STRONG>)</STRONG>,  discouraging  the
+       latter  for  new programs.  <EM>ncurses</EM> implements each of these symbols as
+       macros for BSD <EM>curses</EM> compatibility.
+
+
+</PRE><H3><a name="h3-Legacy-Data">Legacy Data</a></H3><PRE>
+       <STRONG>setupterm</STRONG> copies the terminal name to the array <STRONG>ttytype</STRONG>.  This  is  not
+       part of X/Open Curses, but is assumed by some applications.
+
+       Other  implementions  may not declare the capability name arrays.  Some
+       provide them without declaring them.  X/Open does not specify them.
+
+       Extended terminal capability names, as defined  by  "<STRONG>tic</STRONG> <STRONG>-x</STRONG>",  are  not
+       stored in the arrays described here.
+
+
+</PRE><H3><a name="h3-Output-Buffering">Output Buffering</a></H3><PRE>
+       Older  versions  of  <EM>ncurses</EM> assumed that the file descriptor passed to
+       <STRONG>setupterm</STRONG> from <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> uses buffered I/O, and would write to
+       the  corresponding  stream.   In  addition  to  the limitation that the
+       terminal was  left  in  block-buffered  mode  on  exit  (like  System V
+       <EM>curses</EM>),  it  was  problematic because <EM>ncurses</EM> did not allow a reliable
+       way to cleanup on receiving <STRONG>SIGTSTP</STRONG>.
+
+       The current version (ncurses6) uses output buffers managed directly  by
+       <EM>ncurses.</EM>  Some of the low-level functions described in this manual page
+       write to the standard output.  They are  not  signal-safe.   The  high-
+       level functions in <EM>ncurses</EM> employ alternate versions of these functions
+       using the more reliable buffering scheme.
+
+
+</PRE><H3><a name="h3-Function-Prototypes">Function Prototypes</a></H3><PRE>
+       The X/Open Curses prototypes  are  based  on  the  SVr4  <EM>curses</EM>  header
+       declarations,  which  were  defined at the same time the C language was
+       first standardized in the late 1980s.
 
+       <STRONG>o</STRONG>   X/Open Curses uses <EM>const</EM>  less  effectively  than  a  later  design
+           might,  in  some cases applying it needlessly to values are already
+           constant, and in most cases overlooking parameters  which  normally
+           would  use <EM>const.</EM>  Using constant parameters for functions which do
+           not use <EM>const</EM> may prevent the program from compiling.  On the other
+           hand, "writable strings" are an obsolescent feature.
 
+           As  an  extension,  this implementation can be configured to change
+           the function prototypes to use the <EM>const</EM> keyword.  The <EM>ncurses</EM>  ABI
+           6 enables this feature by default.
 
-                                                      <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
+       <STRONG>o</STRONG>   X/Open  Curses  prototypes <STRONG>tparm</STRONG> with a fixed number of parameters,
+           rather than a variable argument list.
+
+           This implementation uses a  variable  argument  list,  but  can  be
+           configured  to use the fixed-parameter list.  Portable applications
+           should provide 9 parameters after the format; zeroes are  fine  for
+           this purpose.
+
+           In  response  to review comments by Thomas E. Dickey, X/Open Curses
+           Issue 7 proposed the <STRONG>tiparm</STRONG> function in mid-2009.
+
+           While <STRONG>tiparm</STRONG> is always provided in <EM>ncurses</EM>, the older form is  only
+           available  as  a build-time configuration option.  If not specially
+           configured, <STRONG>tparm</STRONG> is the same as <STRONG>tiparm</STRONG>.
+
+       Both forms of <STRONG>tparm</STRONG> have drawbacks:
+
+       <STRONG>o</STRONG>   Most of the calls to <STRONG>tparm</STRONG> use only one or two parameters.  Passing
+           nine on each call is awkward.
+
+           Using  <EM>long</EM>  for the numeric parameter type is a workaround to make
+           the parameter use the same amount of  stack  as  a  pointer.   That
+           approach  dates  back  to the mid-1980s, before C was standardized.
+           Since then, there is a standard (and pointers are not  required  to
+           fit in a long).
+
+       <STRONG>o</STRONG>   Providing  the  right  number of parameters for a variadic function
+           such  as  <STRONG>tiparm</STRONG>  can  be  a  problem,  in  particular  for  string
+           parameters.   However,  only a few terminfo capabilities use string
+           parameters (e.g., the ones used for programmable function keys).
+
+           The <EM>ncurses</EM> library checks usage of these capabilities, and returns
+           an  error  if  the capability mishandles string parameters.  But it
+           cannot check if a calling program provides  strings  in  the  right
+           places for the <STRONG>tparm</STRONG> calls.
+
+           The  <STRONG><A HREF="tput.1.html">tput(1)</A></STRONG>  program  checks  its use of these capabilities with a
+           table, so that it calls <STRONG>tparm</STRONG> correctly.
+
+   <STRONG>Special</STRONG> <EM>TERM</EM> <STRONG>treatment</STRONG>
+       If configured to use the terminal-driver, e.g., for the MinGW port,
+
+       <STRONG>o</STRONG>   <STRONG>setupterm</STRONG> interprets a missing/empty <EM>TERM</EM> variable as  the  special
+           value "unknown".
+
+           SVr4 curses uses the special value "dumb".
+
+           The  difference  between  the two is that the former uses the <STRONG>gn</STRONG> (-
+           <STRONG>generic_type</STRONG>) terminfo capability, while the latter  does  not.   A
+           generic terminal is unsuitable for full-screen applications.
+
+       <STRONG>o</STRONG>   <STRONG>setupterm</STRONG>  allows explicit use of the the windows console driver by
+           checking if <STRONG>$TERM</STRONG> is set to "#win32con" or an abbreviation of  that
+           string.
+
+
+</PRE><H3><a name="h3-Other-Portability-Issues">Other Portability Issues</a></H3><PRE>
+       In  SVr4,  <STRONG>set_curterm</STRONG>  returns  an  <EM>int,</EM> <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>.  We have chosen to
+       implement the X/Open Curses semantics.
+
+       In SVr4, the third argument of <STRONG>tputs</STRONG> has the type "<STRONG>int</STRONG> <STRONG>(*putc)(char)</STRONG>".
+
+       At least one implementation of X/Open Curses (Solaris) returns a  value
+       other  than <STRONG>OK</STRONG> or <STRONG>ERR</STRONG> from <STRONG>tputs</STRONG>.  It instead returns the length of the
+       string, and does no error checking.
+
+       X/Open Curses notes that after calling <STRONG>mvcur</STRONG>, the <EM>curses</EM> state may  not
+       match  the  actual terminal state, and that an application should touch
+       and refresh the window  before  resuming  normal  <EM>curses</EM>  calls.   Both
+       <EM>ncurses</EM> and SVr4 <EM>curses</EM> implement <STRONG>mvcur</STRONG> using the <EM>SCREEN</EM> data allocated
+       in either <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  So though it is documented as a <EM>terminfo</EM>
+       function, <STRONG>mvcur</STRONG> is really a <EM>curses</EM> function that is not well specified.
+
+       X/Open  notes  that after calling <STRONG>mvcur</STRONG>, the curses state may not match
+       the actual terminal state, and that an  application  should  touch  and
+       refresh  the  window before resuming normal curses calls.  Both <EM>ncurses</EM>
+       and System V Release 4 curses implement <STRONG>mvcur</STRONG>  using  the  <EM>SCREEN</EM>  data
+       allocated  in either <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  So though it is documented as
+       a terminfo function, <STRONG>mvcur</STRONG> is really a curses  function  which  is  not
+       well specified.
+
+       X/Open  Curses  states that the old location must be given for <STRONG>mvcur</STRONG> to
+       accommodate terminals that lack absolute cursor  positioning.   <EM>ncurses</EM>
+       allows the caller to use -1 for either or both old coordinates.  The -1
+       tells <EM>ncurses</EM> that the old location is unknown, and that  it  must  use
+       only  absolute  motion  (such  as <EM>cursor</EM><STRONG>_</STRONG><EM>address</EM>) rather than the least
+       costly combination of absolute and relative motion.
+
+
+</PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
+       SVr2 (1984) introduced the <EM>terminfo</EM> feature.   Its  programming  manual
+       mentioned the following low-level functions.
+
+       <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
+       ------------------------------------------------------------------------
+       <STRONG>fixterm</STRONG>     restore tty to "in curses" state
+       <STRONG>gettmode</STRONG>    establish current tty modes
+       <STRONG>mvcur</STRONG>       low level cursor motion
+       <STRONG>putp</STRONG>        use <STRONG>tputs</STRONG> to send characters via <EM>putchar</EM>
+       <STRONG>resetterm</STRONG>   set tty modes to "out of curses" state
+       <STRONG>resetty</STRONG>     reset tty flags to stored value
+       <STRONG>saveterm</STRONG>    save current modes as "in curses" state
+       <STRONG>savetty</STRONG>     store current tty flags
+       <STRONG>setterm</STRONG>     establish terminal with given type
+       <STRONG>setupterm</STRONG>   establish terminal with given type
+       <STRONG>tparm</STRONG>       interpolate parameters into string capability
+       <STRONG>tputs</STRONG>       apply padding information to a string
+       <STRONG>vidattr</STRONG>     like <STRONG>vidputs</STRONG>, but output through <EM>putchar</EM>
+       <STRONG>vidputs</STRONG>     write string to terminal, applying specified attributes
+
+       The  programming  manual  also mentioned functions provided for <EM>termcap</EM>
+       compatibility (commenting that they "may go away at a later date").
+
+       <STRONG>Function</STRONG>   <STRONG>Description</STRONG>
+       ------------------------------------------------------------------------
+       <STRONG>tgetent</STRONG>    look up <EM>termcap</EM> entry for given <EM>name</EM>
+       <STRONG>tgetflag</STRONG>   get Boolean entry for given <EM>id</EM>
+       <STRONG>tgetnum</STRONG>    get numeric entry for given <EM>id</EM>
+       <STRONG>tgetstr</STRONG>    get string entry for given <EM>id</EM>
+       <STRONG>tgoto</STRONG>      apply parameters to given capability
+       <STRONG>tputs</STRONG>      write characters via a function parameter, applying padding
+
+       Early <EM>terminfo</EM> programs obtained capability values  from  the  <EM>TERMINAL</EM>
+       structure initialized by <STRONG>setupterm</STRONG>.
+
+       SVr3   (1987)   extended  <EM>terminfo</EM>  by  adding  functions  to  retrieve
+       capability values (like the <EM>termcap</EM> interface), and reusing  <STRONG>tgoto</STRONG>  and
+       <STRONG>tputs</STRONG>.
+
+       <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
+       ------------------------------------------------------------------------
+       <STRONG>tigetflag</STRONG>   get Boolean entry for given <EM>id</EM>
+       <STRONG>tigetnum</STRONG>    get numeric entry for given <EM>id</EM>
+       <STRONG>tigetstr</STRONG>    get string entry for given <EM>id</EM>
+
+       SVr3  also  replaced several of the SVr2 <EM>terminfo</EM> functions that had no
+       counterpart in the <EM>termcap</EM> interface, documenting them as obsolete.
+
+       <STRONG>Function</STRONG>    <STRONG>Replaced</STRONG> <STRONG>by</STRONG>
+       ------------------------------------------------------------------------
+       crmode      cbreak
+       fixterm     reset_prog_mode
+       gettmode    <EM>n/a</EM>
+       nocrmode    nocbreak
+       resetterm   reset_shell_mode
+       saveterm    def_prog_mode
+       setterm     setupterm
+
+       SVr3 kept the <STRONG>mvcur</STRONG>, <STRONG>vidattr</STRONG>, and <STRONG>vidputs</STRONG> functions, along  with  <STRONG>putp</STRONG>,
+       <STRONG>tparm</STRONG>,  and  <STRONG>tputs</STRONG>.   The latter were needed to support padding, and to
+       handle capabilities accessed by functions such as <STRONG>vidattr</STRONG>  (which  used
+       more than the two parameters supported by <STRONG>tgoto</STRONG>).
+
+       SVr3   introduced   the   functions   for  switching  between  terminal
+       descriptions;  for  example,  <STRONG>set_curterm</STRONG>.   Some   changes   reflected
+       incremental improvements to the SVr2 library.
+
+       <STRONG>o</STRONG>   The  <EM>TERMINAL</EM>  type  definition  was introduced in SVr3.01, for the
+           <EM>term</EM> structure provided in SVr2.
+
+       <STRONG>o</STRONG>   Various global variables such as <STRONG>boolnames</STRONG> were  mentioned  in  the
+           programming  manual  at  this  point, though the variables had been
+           provided in SVr2.
+
+       SVr4 (1989) added the <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> functions.
+
+       Other low-level functions are declared in the <EM>curses</EM>  header  files  of
+       Unix  systems,  but  none are documented.  Those noted as "obsolete" by
+       SVr3 remained in use by System V's <STRONG>vi(1)</STRONG> editor.
+
+
+</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_initscr.3x.html">curs_initscr(3x)</A></STRONG>,   <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>,   <STRONG><A HREF="curs_memleaks.3x.html">curs_memleaks(3x)</A></STRONG>,
+       <STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3x)</A></STRONG>,   <STRONG><A HREF="curs_variables.3x.html">curs_variables(3x)</A></STRONG>,   <STRONG>putc(3)</STRONG>,  <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>,
+       <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
+
+
+
+ncurses 6.4                       2023-12-30                 <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
 </PRE>
-<HR>
-<ADDRESS>
-Man(1) output converted with
-<a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a>
-</ADDRESS>
+<div class="nav">
+<ul>
+<li><a href="#h2-NAME">NAME</a></li>
+<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
+<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
+<ul>
+<li><a href="#h3-Initialization">Initialization</a></li>
+<li><a href="#h3-The-Terminal-State">The Terminal State</a></li>
+<li><a href="#h3-Formatting-Output">Formatting Output</a></li>
+<li><a href="#h3-Output-Functions">Output Functions</a></li>
+<li><a href="#h3-Terminal-Capability-Functions">Terminal Capability Functions</a></li>
+<li><a href="#h3-Terminal-Capability-Names">Terminal Capability Names</a></li>
+<li><a href="#h3-Releasing-Memory">Releasing Memory</a></li>
+</ul>
+</li>
+<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
+<li><a href="#h2-NOTES">NOTES</a></li>
+<li><a href="#h2-EXTENSIONS">EXTENSIONS</a></li>
+<li><a href="#h2-PORTABILITY">PORTABILITY</a>
+<ul>
+<li><a href="#h3-Compatibility-Macros">Compatibility Macros</a></li>
+<li><a href="#h3-Legacy-Data">Legacy Data</a></li>
+<li><a href="#h3-Output-Buffering">Output Buffering</a></li>
+<li><a href="#h3-Function-Prototypes">Function Prototypes</a></li>
+<li><a href="#h3-Other-Portability-Issues">Other Portability Issues</a></li>
+</ul>
+</li>
+<li><a href="#h2-HISTORY">HISTORY</a></li>
+<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
+</ul>
+</div>
 </BODY>
 </HTML>