]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - doc/html/man/curs_terminfo.3x.html
ncurses 6.4 - patch 20230423
[ncurses.git] / doc / html / man / curs_terminfo.3x.html
index 7b0d1198d2b2e8ac92135d670a9a8b4a9f2e84c6..e39dcfb268f3af11cc221066a674f642a23af6f2 100644 (file)
@@ -27,7 +27,7 @@
   * sale, use or other dealings in this Software without prior written       *
   * authorization.                                                           *
   ****************************************************************************
-  * @Id: curs_terminfo.3x,v 1.84 2023/04/09 08:13:16 tom Exp @
+  * @Id: curs_terminfo.3x,v 1.85 2023/04/23 20:52:38 tom Exp @
   * ***************************************************************************
   * ***************************************************************************
   * ***************************************************************************
@@ -57,8 +57,9 @@
 
 </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>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
+       <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> - <STRONG>curses</STRONG> interfaces to
+       terminfo database
 
 
 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
 
        <STRONG>char</STRONG> <STRONG>*tiparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
 
+       /* extensions */
+       <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>
+
 
 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
-       These  low-level  routines must be called by programs that have to deal
+       These low-level routines must be called by programs that have  to  deal
        directly with the <STRONG>terminfo</STRONG> database to handle certain terminal capabil-
        ities, such as programming function keys.  For all other functionality,
        <STRONG>curses</STRONG> routines are more suitable and their use is recommended.
 
-       None of these functions use  (or  are  aware  of)  multibyte  character
+       None  of  these  functions  use  (or  are aware of) multibyte character
        strings such as UTF-8:
 
        <STRONG>o</STRONG>   capability names use the POSIX portable character set
 
-       <STRONG>o</STRONG>   capability  string  values  have  no  associated encoding; they are
+       <STRONG>o</STRONG>   capability string values have  no  associated  encoding;  they  are
            strings of 8-bit characters.
 
 
 </PRE><H3><a name="h3-Initialization">Initialization</a></H3><PRE>
        Initially, <STRONG>setupterm</STRONG> should be called.  The high-level curses functions
-       <STRONG>initscr</STRONG>  and  <STRONG>newterm</STRONG> call <STRONG>setupterm</STRONG> to initialize the low-level set of
+       <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="terminfo.5.html">terminfo(5)</A></STRONG>].
 
-       Applications can use the terminal  capabilities  either  directly  (via
-       header  definitions),  or by special functions.  The header files <STRONG>curs-</STRONG>
-       <STRONG>es.h</STRONG> and <STRONG>term.h</STRONG> should be included (in this order) to get  the  defini-
+       Applications  can  use  the  terminal capabilities either directly (via
+       header definitions), or by special functions.  The header  files  <STRONG>curs-</STRONG>
+       <STRONG>es.h</STRONG>  and  <STRONG>term.h</STRONG> should be included (in this order) to get the defini-
        tions for these strings, numbers, and flags.
 
-       The  <STRONG>terminfo</STRONG>  variables <STRONG>lines</STRONG> and <STRONG>columns</STRONG> are initialized by <STRONG>setupterm</STRONG>
+       The <STRONG>terminfo</STRONG> variables <STRONG>lines</STRONG> and <STRONG>columns</STRONG> are initialized  by  <STRONG>setupterm</STRONG>
        as follows:
 
-       <STRONG>o</STRONG>   If <STRONG>use_env(FALSE)</STRONG> has been called, values  for  <STRONG>lines</STRONG>  and  <STRONG>columns</STRONG>
+       <STRONG>o</STRONG>   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.
 
-       <STRONG>o</STRONG>   Otherwise,  if  the  environment variables <STRONG>LINES</STRONG> and <STRONG>COLUMNS</STRONG> exist,
+       <STRONG>o</STRONG>   Otherwise, if the environment variables <STRONG>LINES</STRONG>  and  <STRONG>COLUMNS</STRONG>  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
+           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.
 
-       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 <STRONG>reset_shell_mode</STRONG> to restore  the  tty
+       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 <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>].
 
        Programs which use cursor addressing should
 
        Programs which execute shell subprocesses should
 
-       <STRONG>o</STRONG>   call  <STRONG>reset_shell_mode</STRONG>  and output <STRONG>exit_ca_mode</STRONG> before the shell is
+       <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
+       <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 <STRONG>terminfo</STRONG> database, initializing the
-       <STRONG>terminfo</STRONG> structures, but does not  set  up  the  output  virtualization
+       The <STRONG>setupterm</STRONG> routine reads in the <STRONG>terminfo</STRONG> database, initializing  the
+       <STRONG>terminfo</STRONG>  structures,  but  does  not  set up the output virtualization
        structures used by <STRONG>curses</STRONG>.  These are its parameters:
 
           <EM>term</EM> is the terminal type, a character string.  If <EM>term</EM> is null, the
 
           <EM>errret</EM>
                points to an optional location where an error status can be re-
-               turned  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 sta-
+               turned 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  sta-
                tus 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
+               <STRONG>1</STRONG>    means  that  the  terminal is hardcopy, cannot be used for
                     curses applications.
 
-                    <STRONG>setupterm</STRONG>  determines  if  the entry is a hardcopy type by
+                    <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 curses
+               <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>setupterm</STRONG> determines if the entry is  a  generic  type  by
+                    <STRONG>setupterm</STRONG>  determines  if  the  entry is a generic type by
                     checking the <STRONG>gn</STRONG> (<STRONG>generic</STRONG>) capability.
 
                <STRONG>-1</STRONG>   means that the <STRONG>terminfo</STRONG> database could not be found.
 
 
 </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
-       <STRONG>TERMINAL</STRONG>  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
+       The  <STRONG>setupterm</STRONG>  routine  stores its information about the terminal in a
+       <STRONG>TERMINAL</STRONG> 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 termi-
-       nal's capabilities in memory.  If it is called for  different  terminal
-       types,  <STRONG>setupterm</STRONG>  allocates new storage for each set of terminal capa-
+       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  termi-
+       nal's  capabilities  in memory.  If it is called for different terminal
+       types, <STRONG>setupterm</STRONG> allocates new storage for each set of  terminal  capa-
        bilities.
 
-       The <STRONG>set_curterm</STRONG> routine sets <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
+       The  <STRONG>set_curterm</STRONG>  routine  sets <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
+       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>, refer-
-       ences to any of the <STRONG>terminfo</STRONG> boolean,  numeric,  and  string  variables
-       thereafter  may  refer  to  invalid  memory locations until another <STRONG>se-</STRONG>
+       ences  to  any  of  the <STRONG>terminfo</STRONG> boolean, numeric, and string variables
+       thereafter may refer to invalid  memory  locations  until  another  <STRONG>se-</STRONG>
        <STRONG>tupterm</STRONG> has been called.
 
-       The <STRONG>restartterm</STRONG> routine is similar to  <STRONG>setupterm</STRONG>  and  <STRONG>initscr</STRONG>,  except
+       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 exam-
-       ple, 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,
+       ple,  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  inter-
+       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 inter-
        face:
 
-       <STRONG>o</STRONG>   Although  <STRONG>tparm</STRONG>'s actual parameters may be integers or strings, the
+       <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 capa-
            bilities require no more than one or two parameters.
 
-       <STRONG>o</STRONG>   Padding  information  is  ignored  by  <STRONG>tparm</STRONG>;  it is interpreted by
+       <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
+       <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>&lt;stdarg.h&gt;</EM> rather than a
+       <STRONG>tiparm</STRONG> is a newer form of <STRONG>tparm</STRONG> which uses  <EM>&lt;stdarg.h&gt;</EM>  rather  than  a
        fixed-parameter list.  Its numeric parameters are integers (int) rather
        than longs.
 
+       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  format-
+           ting capability to see what the curses library would assume.
+
 
 </PRE><H3><a name="h3-Output-Functions">Output Functions</a></H3><PRE>
        The  <STRONG>tputs</STRONG>  routine  applies padding information (i.e., by interpreting
        mvcur       low level cursor motion
        putp        utility function that uses <STRONG>tputs</STRONG> to send  char-
                    acters via <STRONG>putchar</STRONG>.
+
        resetterm   set tty modes to "out of curses" state
        resetty     reset tty flags to stored value
        saveterm    save current modes as "in curses" state
 
 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
 
+</PRE><H3><a name="h3-Extensions">Extensions</a></H3><PRE>
+       The  functions  marked as extensions were designed for <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>, and
+       are not found in SVr4 curses, 4.4BSD curses, or any other previous ver-
+       sion of curses.
+
+
 </PRE><H3><a name="h3-Legacy-functions">Legacy functions</a></H3><PRE>
        X/Open notes that <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> may be macros.
 
 <li><a href="#h2-HISTORY">HISTORY</a></li>
 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
 <ul>
+<li><a href="#h3-Extensions">Extensions</a></li>
 <li><a href="#h3-Legacy-functions">Legacy functions</a></li>
 <li><a href="#h3-Legacy-data">Legacy data</a></li>
 <li><a href="#h3-Output-buffering">Output buffering</a></li>