]> ncurses.scripts.mit.edu Git - ncurses.git/blob - doc/html/man/curs_terminfo.3x.html
ncurses 6.4 - patch 20230923
[ncurses.git] / doc / html / man / curs_terminfo.3x.html
1 <!--
2   * t
3   ****************************************************************************
4   * Copyright 2018-2022,2023 Thomas E. Dickey                                *
5   * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
6   *                                                                          *
7   * Permission is hereby granted, free of charge, to any person obtaining a  *
8   * copy of this software and associated documentation files (the            *
9   * "Software"), to deal in the Software without restriction, including      *
10   * without limitation the rights to use, copy, modify, merge, publish,      *
11   * distribute, distribute with modifications, sublicense, and/or sell       *
12   * copies of the Software, and to permit persons to whom the Software is    *
13   * furnished to do so, subject to the following conditions:                 *
14   *                                                                          *
15   * The above copyright notice and this permission notice shall be included  *
16   * in all copies or substantial portions of the Software.                   *
17   *                                                                          *
18   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
19   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
20   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
21   * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
22   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
23   * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
24   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
25   *                                                                          *
26   * Except as contained in this notice, the name(s) of the above copyright   *
27   * holders shall not be used in advertising or otherwise to promote the     *
28   * sale, use or other dealings in this Software without prior written       *
29   * authorization.                                                           *
30   ****************************************************************************
31   * @Id: curs_terminfo.3x,v 1.108 2023/09/23 23:38:10 tom Exp @
32   * ***************************************************************************
33   * ***************************************************************************
34   * ***************************************************************************
35   * ***************************************************************************
36   * ***************************************************************************
37   * ***************************************************************************
38   * ***************************************************************************
39   * ***************************************************************************
40   * ***************************************************************************
41 -->
42 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
43 <HTML>
44 <HEAD>
45 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
46 <meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
47 <TITLE>curs_terminfo 3x 2023-09-23 ncurses 6.4 Library calls</TITLE>
48 <link rel="author" href="mailto:bug-ncurses@gnu.org">
49
50 </HEAD>
51 <BODY>
52 <H1 class="no-header">curs_terminfo 3x 2023-09-23 ncurses 6.4 Library calls</H1>
53 <PRE>
54 <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>
55
56
57
58
59 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
60        <STRONG>del_curterm</STRONG>,   <STRONG>mvcur</STRONG>,   <STRONG>putp</STRONG>,   <STRONG>restartterm</STRONG>,   <STRONG>set_curterm</STRONG>,  <STRONG>setupterm</STRONG>,
61        <STRONG>tigetflag</STRONG>,  <STRONG>tigetnum</STRONG>,  <STRONG>tigetstr</STRONG>,  <STRONG>tiparm</STRONG>,  <STRONG>tiparm_s</STRONG>,  <STRONG>tiscan_s</STRONG>,  <STRONG>tparm</STRONG>,
62        <STRONG>tputs</STRONG>,  <STRONG>vid_attr</STRONG>,  <STRONG>vid_puts</STRONG>,  <STRONG>vidattr</STRONG>,  <STRONG>vidputs</STRONG>  - <EM>curses</EM> interfaces to
63        <EM>terminfo</EM> database
64
65
66 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
67        <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
68        <STRONG>#include</STRONG> <STRONG>&lt;term.h&gt;</STRONG>
69
70        <STRONG>TERMINAL</STRONG> <STRONG>*cur_term;</STRONG>
71
72        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolnames[];</STRONG>
73        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolcodes[];</STRONG>
74        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolfnames[];</STRONG>
75        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numnames[];</STRONG>
76        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numcodes[];</STRONG>
77        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numfnames[];</STRONG>
78        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strnames[];</STRONG>
79        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strcodes[];</STRONG>
80        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strfnames[];</STRONG>
81
82        <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>
83        <STRONG>TERMINAL</STRONG> <STRONG>*set_curterm(TERMINAL</STRONG> <STRONG>*</STRONG><EM>nterm</EM><STRONG>);</STRONG>
84        <STRONG>int</STRONG> <STRONG>del_curterm(TERMINAL</STRONG> <STRONG>*</STRONG><EM>oterm</EM><STRONG>);</STRONG>
85        <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>
86
87        <STRONG>char</STRONG> <STRONG>*tparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
88             <EM>or</EM>
89        <STRONG>char</STRONG> <STRONG>*tparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>long</STRONG> <EM>p1</EM> <EM>...</EM> <STRONG>long</STRONG> <EM>p9</EM><STRONG>);</STRONG>
90
91        <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>
92        <STRONG>int</STRONG> <STRONG>putp(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>);</STRONG>
93
94        <STRONG>int</STRONG> <STRONG>vidputs(chtype</STRONG> <EM>attrs</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>(*</STRONG><EM>putc</EM><STRONG>)(int));</STRONG>
95        <STRONG>int</STRONG> <STRONG>vidattr(chtype</STRONG> <EM>attrs</EM><STRONG>);</STRONG>
96        <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>
97        <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>
98
99        <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>
100
101        <STRONG>int</STRONG> <STRONG>tigetflag(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
102        <STRONG>int</STRONG> <STRONG>tigetnum(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
103        <STRONG>char</STRONG> <STRONG>*tigetstr(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
104
105        <STRONG>char</STRONG> <STRONG>*tiparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
106
107        <EM>/*</EM> <EM>extensions</EM> <EM>*/</EM>
108        <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>
109        <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>
110
111
112 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
113        These low-level routines must be called by programs that have  to  deal
114        directly   with  the  <EM>terminfo</EM>  database  to  handle  certain  terminal
115        capabilities,  such  as  programming  function  keys.   For  all  other
116        functionality,  <EM>curses</EM>  routines  are  more  suitable  and their use is
117        recommended.
118
119        None of these functions use  (or  are  aware  of)  multibyte  character
120        strings such as UTF-8:
121
122        <STRONG>o</STRONG>   capability names use the POSIX portable character set
123
124        <STRONG>o</STRONG>   capability  string  values  have  no  associated encoding; they are
125            strings of 8-bit characters.
126
127
128 </PRE><H3><a name="h3-Initialization">Initialization</a></H3><PRE>
129        Initially, <STRONG>setupterm</STRONG> should be called.  The high-level curses functions
130        <STRONG>initscr</STRONG>  and  <STRONG>newterm</STRONG> call <STRONG>setupterm</STRONG> to initialize the low-level set of
131        terminal-dependent variables [listed in <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>].
132
133        Applications can use the terminal  capabilities  either  directly  (via
134        header  definitions),  or  by  special  functions.   The  header  files
135        <STRONG>curses.h</STRONG> and <STRONG>term.h</STRONG> should be included  (in  this  order)  to  get  the
136        definitions for these strings, numbers, and flags.
137
138        The  <STRONG>terminfo</STRONG>  variables <STRONG>lines</STRONG> and <STRONG>columns</STRONG> are initialized by <STRONG>setupterm</STRONG>
139        as follows:
140
141        <STRONG>o</STRONG>   If <STRONG>use_env(FALSE)</STRONG> has been called, values  for  <STRONG>lines</STRONG>  and  <STRONG>columns</STRONG>
142            specified in <STRONG>terminfo</STRONG> are used.
143
144        <STRONG>o</STRONG>   Otherwise,  if  the  environment variables <STRONG>LINES</STRONG> and <STRONG>COLUMNS</STRONG> exist,
145            their values are used.  If these environment variables do not exist
146            and  the program is running in a window, the current window size is
147            used.  Otherwise, if the environment variables do  not  exist,  the
148            values for <STRONG>lines</STRONG> and <STRONG>columns</STRONG> specified in the <STRONG>terminfo</STRONG> database are
149            used.
150
151        Parameterized strings should be passed  through  <STRONG>tparm</STRONG>  to  instantiate
152        them.   All  <STRONG>terminfo</STRONG> strings (including the output of <STRONG>tparm</STRONG>) should be
153        printed with <STRONG>tputs</STRONG> or <STRONG>putp</STRONG>.  Call <STRONG>reset_shell_mode</STRONG> to restore  the  tty
154        modes before exiting [see <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>].
155
156        Programs which use cursor addressing should
157
158        <STRONG>o</STRONG>   output <STRONG>enter_ca_mode</STRONG> upon startup and
159
160        <STRONG>o</STRONG>   output <STRONG>exit_ca_mode</STRONG> before exiting.
161
162        Programs which execute shell subprocesses should
163
164        <STRONG>o</STRONG>   call  <STRONG>reset_shell_mode</STRONG>  and output <STRONG>exit_ca_mode</STRONG> before the shell is
165            called and
166
167        <STRONG>o</STRONG>   output <STRONG>enter_ca_mode</STRONG> and call <STRONG>reset_prog_mode</STRONG> after returning  from
168            the shell.
169
170        The  <STRONG>setupterm</STRONG> routine reads in the <STRONG>terminfo</STRONG> database, initializing the
171        <STRONG>terminfo</STRONG> structures, but does not  set  up  the  output  virtualization
172        structures used by <STRONG>curses</STRONG>.  These are its parameters:
173
174           <EM>term</EM> is the terminal type, a character string.  If <EM>term</EM> is null, the
175                environment variable <STRONG>TERM</STRONG> is used.
176
177           <EM>filedes</EM>
178                is the file descriptor used for getting  and  setting  terminal
179                I/O modes.
180
181                Higher-level  applications use <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG> for initializing the
182                terminal, passing an output <EM>stream</EM> rather  than  a  <EM>descriptor</EM>.
183                In   curses,  the  two  are  the  same  because  <STRONG>newterm</STRONG>  calls
184                <STRONG>setupterm</STRONG>, passing the file descriptor derived from its  output
185                stream parameter.
186
187           <EM>errret</EM>
188                points  to  an  optional  location where an error status can be
189                returned to the caller.  If <EM>errret</EM> is not null, then  <STRONG>setupterm</STRONG>
190                returns  <STRONG>OK</STRONG>  or  <STRONG>ERR</STRONG>  and  stores a status value in the integer
191                pointed to by <EM>errret</EM>.  A  return  value  of  <STRONG>OK</STRONG>  combined  with
192                status of <STRONG>1</STRONG> in <EM>errret</EM> is normal.
193
194                If <STRONG>ERR</STRONG> is returned, examine <EM>errret</EM>:
195
196                <STRONG>1</STRONG>    means  that  the  terminal is hardcopy, cannot be used for
197                     <EM>curses</EM> applications.
198
199                     <STRONG>setupterm</STRONG> determines if the entry is a  hardcopy  type  by
200                     checking the <STRONG>hc</STRONG> (<STRONG>hardcopy</STRONG>) capability.
201
202                <STRONG>0</STRONG>    means  that the terminal could not be found, or that it is
203                     a generic type, having too little information  for  <EM>curses</EM>
204                     applications to run.
205
206                     <STRONG>setupterm</STRONG>  determines  if  the  entry is a generic type by
207                     checking the <STRONG>gn</STRONG> (<STRONG>generic_type</STRONG>) capability.
208
209                <STRONG>-1</STRONG>   means that the <EM>terminfo</EM> database could not be found.
210
211                If <EM>errret</EM> is null,  <STRONG>setupterm</STRONG>  prints  an  error  message  upon
212                finding an error and exits.  Thus, the simplest call is:
213
214                <STRONG>setupterm((char</STRONG> <STRONG>*)0,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0);</STRONG>,
215
216           which uses all the defaults and sends the output to <STRONG>stdout</STRONG>.
217
218
219 </PRE><H3><a name="h3-The-Terminal-State">The Terminal State</a></H3><PRE>
220        The  <STRONG>setupterm</STRONG>  routine  stores its information about the terminal in a
221        <STRONG>TERMINAL</STRONG> structure pointed to by the global variable <STRONG>cur_term</STRONG>.   If  it
222        detects  an error, or decides that the terminal is unsuitable (hardcopy
223        or generic), it discards this information, making it not  available  to
224        applications.
225
226        If  <STRONG>setupterm</STRONG>  is called repeatedly for the same terminal type, it will
227        reuse  the  information.   It  maintains  only  one  copy  of  a  given
228        terminal's  capabilities  in  memory.   If  it  is called for different
229        terminal types,  <STRONG>setupterm</STRONG>  allocates  new  storage  for  each  set  of
230        terminal capabilities.
231
232        The  <STRONG>set_curterm</STRONG>  routine  sets <STRONG>cur_term</STRONG> to <EM>nterm</EM>, and makes all of the
233        <STRONG>terminfo</STRONG> boolean, numeric, and string variables  use  the  values  from
234        <EM>nterm</EM>.  It returns the old value of <STRONG>cur_term</STRONG>.
235
236        The  <STRONG>del_curterm</STRONG>  routine frees the space pointed to by <EM>oterm</EM> and makes
237        it available for further use.   If  <EM>oterm</EM>  is  the  same  as  <STRONG>cur_term</STRONG>,
238        references  to  any  of  the  <STRONG>terminfo</STRONG>  boolean,  numeric,  and  string
239        variables thereafter  may  refer  to  invalid  memory  locations  until
240        another <STRONG>setupterm</STRONG> has been called.
241
242        The  <STRONG>restartterm</STRONG>  routine  is  similar to <STRONG>setupterm</STRONG> and <STRONG>initscr</STRONG>, except
243        that it is called after restoring  memory  to  a  previous  state  (for
244        example,   when   reloading  a  game  saved  as  a  core  image  dump).
245        <STRONG>restartterm</STRONG> assumes that the windows and the input and  output  options
246        are  the  same as when memory was saved, but the terminal type and baud
247        rate may be different.   Accordingly,  <STRONG>restartterm</STRONG>  saves  various  tty
248        state bits, calls <STRONG>setupterm</STRONG>, and then restores the bits.
249
250
251 </PRE><H3><a name="h3-Formatting-Output">Formatting Output</a></H3><PRE>
252        The  <STRONG>tparm</STRONG>  routine  instantiates the string <EM>str</EM> with parameters <EM>pi</EM>.  A
253        pointer is returned to the result of <EM>str</EM> with the  parameters  applied.
254        Application  developers  should  keep  in  mind  these  quirks  of  the
255        interface:
256
257        <STRONG>o</STRONG>   Although <STRONG>tparm</STRONG>'s actual parameters may be integers or strings,  the
258            prototype expects <STRONG>long</STRONG> (integer) values.
259
260        <STRONG>o</STRONG>   Aside  from  the  <STRONG>set_attributes</STRONG>  (<STRONG>sgr</STRONG>)  capability,  most terminal
261            capabilities require no more than one or two parameters.
262
263        <STRONG>o</STRONG>   Padding information is ignored  by  <STRONG>tparm</STRONG>;  it  is  interpreted  by
264            <STRONG>tputs</STRONG>.
265
266        <STRONG>o</STRONG>   The  capability  string  is  null-terminated.   Use "\200" where an
267            ASCII NUL is needed in the output.
268
269        <STRONG>tiparm</STRONG> is a newer form of <STRONG>tparm</STRONG> which uses  <EM>&lt;stdarg.h&gt;</EM>  rather  than  a
270        fixed-parameter list.  Its numeric parameters are integers (int) rather
271        than longs.
272
273        Both <STRONG>tparm</STRONG> and <STRONG>tiparm</STRONG> assume that  the  application  passes  parameters
274        consistent  with the terminal description.  Two extensions are provided
275        as alternatives to deal with untrusted data:
276
277        <STRONG>o</STRONG>   <STRONG>tiparm_s</STRONG> is an extension which is a safer formatting function  than
278            <STRONG>tparm</STRONG> or <STRONG>tiparm</STRONG>, because it allows the developer to tell the curses
279            library how many parameters to expect in the  parameter  list,  and
280            which may be string parameters.
281
282            The  <EM>mask</EM>  parameter has one bit set for each of the parameters (up
283            to 9) which will be passed as char* rather than numbers.
284
285        <STRONG>o</STRONG>   The  extension  <STRONG>tiscan_s</STRONG>  allows  the  application  to  inspect   a
286            formatting capability to see what the curses library would assume.
287
288
289 </PRE><H3><a name="h3-Output-Functions">Output Functions</a></H3><PRE>
290        The  <STRONG>tputs</STRONG>  routine  applies padding information (i.e., by interpreting
291        marker embedded  in  the  terminfo  capability  such  as  "$&lt;5&gt;"  as  5
292        milliseconds) to the string <EM>str</EM> and outputs it:
293
294        <STRONG>o</STRONG>   The  <EM>str</EM> parameter must be a terminfo string variable or the return
295            value from <STRONG>tparm</STRONG>, <STRONG>tiparm</STRONG>, <STRONG>tgetstr</STRONG>, or <STRONG>tgoto</STRONG>.
296
297            The <STRONG>tgetstr</STRONG> and <STRONG>tgoto</STRONG> functions are part of the <EM>termcap</EM>  interface,
298            which  happens  to  share  this  function  name  with  the <EM>terminfo</EM>
299            interface.
300
301        <STRONG>o</STRONG>   <EM>affcnt</EM> is the number of lines affected, or 1 if not applicable.
302
303        <STRONG>o</STRONG>   <EM>putc</EM> is a <STRONG>putchar</STRONG>-like routine to which the characters are  passed,
304            one at a time.
305
306        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>
307        always goes to <STRONG>stdout</STRONG>, rather than the <EM>filedes</EM> specified in <STRONG>setupterm</STRONG>.
308
309        The <STRONG>vidputs</STRONG> routine displays the string on the terminal  in  the  video
310        attribute mode <EM>attrs</EM>, which is any combination of the attributes listed
311        in <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.  The characters are passed to the  <STRONG>putchar</STRONG>-like  routine
312        <EM>putc</EM>.
313
314        The <STRONG>vidattr</STRONG> routine is like the <STRONG>vidputs</STRONG> routine, except that it outputs
315        through <STRONG>putchar</STRONG>.
316
317        The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines correspond to vidattr  and  vidputs,
318        respectively.   They  use a set of arguments for representing the video
319        attributes plus color, i.e.,
320
321        <STRONG>o</STRONG>   <EM>attrs</EM> of type <STRONG>attr_t</STRONG> for the attributes and
322
323        <STRONG>o</STRONG>   <EM>pair</EM> of type <STRONG>short</STRONG> for the color-pair number.
324
325        The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines are designed to  use  the  attribute
326        constants with the <STRONG>WA_</STRONG> prefix.
327
328        X/Open  Curses  reserves  the <EM>opts</EM> argument for future use, saying that
329        applications must provide a null pointer  for  that  argument.   As  an
330        extension,  this  implementation allows <EM>opts</EM> to be used as a pointer to
331        <STRONG>int</STRONG>, which overrides the <EM>pair</EM> (<STRONG>short</STRONG>) argument.
332
333        The <STRONG>mvcur</STRONG> routine provides low-level cursor motion.   It  takes  effect
334        immediately  (rather  than at the next refresh).  Unlike the other low-
335        level output functions, which either write to the  standard  output  or
336        pass an output function parameter, <STRONG>mvcur</STRONG> uses an output file descriptor
337        derived from the output stream parameter of <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG>.
338
339        While <STRONG>putp</STRONG> and <STRONG>mvcur</STRONG> are low-level functions which do not use the high-
340        level  curses  state,  they are declared in <STRONG>&lt;curses.h&gt;</STRONG> because System V
341        did this (see <EM>HISTORY</EM>).
342
343
344 </PRE><H3><a name="h3-Terminal-Capability-Functions">Terminal Capability Functions</a></H3><PRE>
345        The <STRONG>tigetflag</STRONG>, <STRONG>tigetnum</STRONG> and <STRONG>tigetstr</STRONG> routines return the value  of  the
346        capability  corresponding  to the <STRONG>terminfo</STRONG> <EM>capname</EM> passed to them, such
347        as <STRONG>xenl</STRONG>.  The <EM>capname</EM> for each capability is given in the table  column
348        entitled <EM>capname</EM> code in the capabilities section of <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
349
350        These routines return special values to denote errors.
351
352        The <STRONG>tigetflag</STRONG> routine returns
353
354        <STRONG>-1</STRONG>     if <EM>capname</EM> is not a boolean capability, or
355
356        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
357
358        The <STRONG>tigetnum</STRONG> routine returns
359
360        <STRONG>-2</STRONG>     if <EM>capname</EM> is not a numeric capability, or
361
362        <STRONG>-1</STRONG>     if it is canceled or absent from the terminal description.
363
364        The <STRONG>tigetstr</STRONG> routine returns
365
366        <STRONG>(char</STRONG> <STRONG>*)-1</STRONG>
367               if <EM>capname</EM> is not a string capability, or
368
369        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
370
371
372 </PRE><H3><a name="h3-Terminal-Capability-Names">Terminal Capability Names</a></H3><PRE>
373        These null-terminated arrays contain
374
375        <STRONG>o</STRONG>   the short <EM>terminfo</EM> names ("codes"),
376
377        <STRONG>o</STRONG>   the <EM>termcap</EM> names ("names"), and
378
379        <STRONG>o</STRONG>   the long <EM>terminfo</EM> names ("fnames")
380
381        for each of the predefined <EM>terminfo</EM> variables:
382
383               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*boolnames[]</STRONG>, <STRONG>*boolcodes[]</STRONG>, <STRONG>*boolfnames[]</STRONG>
384               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*numnames[]</STRONG>, <STRONG>*numcodes[]</STRONG>, <STRONG>*numfnames[]</STRONG>
385               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*strnames[]</STRONG>, <STRONG>*strcodes[]</STRONG>, <STRONG>*strfnames[]</STRONG>
386
387
388 </PRE><H3><a name="h3-Releasing-Memory">Releasing Memory</a></H3><PRE>
389        Each successful call to <STRONG>setupterm</STRONG> allocates memory to hold the terminal
390        description.  As a side-effect, it  sets  <STRONG>cur_term</STRONG>  to  point  to  this
391        memory.  If an application calls
392
393               <STRONG>del_curterm(cur_term);</STRONG>
394
395        the memory will be freed.
396
397        The  formatting functions <STRONG>tparm</STRONG> and <STRONG>tiparm</STRONG> extend the storage allocated
398        by <STRONG>setupterm</STRONG>:
399
400        <STRONG>o</STRONG>   the "static" terminfo variables [a-z].  Before ncurses  6.3,  those
401            were  shared by all screens.  With ncurses 6.3, those are allocated
402            per screen.  See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for details.
403
404        <STRONG>o</STRONG>   to improve performance, ncurses 6.3 caches the result of  analyzing
405            terminfo  strings  for  their parameter types.  That is stored as a
406            binary tree referenced from the <STRONG>TERMINAL</STRONG> structure.
407
408        The higher-level <STRONG>initscr</STRONG> and <STRONG>newterm</STRONG> functions use <STRONG>setupterm</STRONG>.  Normally
409        they  do  not free this memory, but it is possible to do that using the
410        <STRONG><A HREF="curs_initscr.3x.html">delscreen(3x)</A></STRONG> function.
411
412
413 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
414        Routines that return an integer return <STRONG>ERR</STRONG> upon failure  and  <STRONG>OK</STRONG>  (SVr4
415        only  specifies  "an  integer  value  other  than <STRONG>ERR</STRONG>") upon successful
416        completion,  unless  otherwise   noted   in   the   preceding   routine
417        descriptions.
418
419        Routines that return pointers always return <STRONG>NULL</STRONG> on error.
420
421        X/Open defines no error conditions.  In this implementation
422
423           <STRONG>del_curterm</STRONG>
424                returns an error if its terminal parameter is null.
425
426           <STRONG>putp</STRONG> calls <STRONG>tputs</STRONG>, returning the same error-codes.
427
428           <STRONG>restartterm</STRONG>
429                returns an error if the associated call to <STRONG>setupterm</STRONG> returns an
430                error.
431
432           <STRONG>setupterm</STRONG>
433                returns an error if it cannot allocate enough memory, or create
434                the  initial  windows  (stdscr,  curscr,  newscr).  Other error
435                conditions are documented above.
436
437           <STRONG>tparm</STRONG>
438                returns a null  if  the  capability  would  require  unexpected
439                parameters,  e.g.,  too  many,  too  few,  or  incorrect  types
440                (strings where integers are expected, or vice versa).
441
442           <STRONG>tputs</STRONG>
443                returns an error if the string parameter is null.  It does  not
444                detect  I/O errors: X/Open states that <STRONG>tputs</STRONG> ignores the return
445                value of the output function <EM>putc</EM>.
446
447
448 </PRE><H3><a name="h3-Compatibility-macros">Compatibility macros</a></H3><PRE>
449        This implementation  provides  a  few  macros  for  compatibility  with
450        systems  before  SVr4  (see  <EM>HISTORY</EM>).   Those include <STRONG>crmode</STRONG>, <STRONG>fixterm</STRONG>,
451        <STRONG>gettmode</STRONG>, <STRONG>nocrmode</STRONG>, <STRONG>resetterm</STRONG>, <STRONG>saveterm</STRONG>, and <STRONG>setterm</STRONG>.
452
453        In SVr4, those are found in <STRONG>&lt;curses.h&gt;</STRONG>, but  except  for  <STRONG>setterm</STRONG>,  are
454        likewise macros.  The one function, <STRONG>setterm</STRONG>, is mentioned in the manual
455        page.  The manual page notes that the <STRONG>setterm</STRONG> routine was  replaced  by
456        <STRONG>setupterm</STRONG>, stating that the call
457
458               <STRONG>setupterm(</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0)</STRONG>
459
460        provides   the   same   functionality  as  <STRONG>setterm(</STRONG><EM>term</EM><STRONG>)</STRONG>,  and  is  not
461        recommended for new programs.  This  implementation  provides  each  of
462        those symbols as macros for BSD compatibility,
463
464
465 </PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
466        SVr2 introduced the terminfo feature.  Its programming manual mentioned
467        the following low-level functions.
468
469        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
470        ------------------------------------------------------------------------
471        <STRONG>fixterm</STRONG>     restore tty to "in curses" state
472
473        <STRONG>gettmode</STRONG>    establish current tty modes
474        <STRONG>mvcur</STRONG>       low level cursor motion
475        <STRONG>putp</STRONG>        utility function that uses <STRONG>tputs</STRONG>  to  send  characters  via
476                    <STRONG>putchar</STRONG>.
477        <STRONG>resetterm</STRONG>   set tty modes to "out of curses" state
478        <STRONG>resetty</STRONG>     reset tty flags to stored value
479        <STRONG>saveterm</STRONG>    save current modes as "in curses" state
480        <STRONG>savetty</STRONG>     store current tty flags
481        <STRONG>setterm</STRONG>     establish terminal with given type
482        <STRONG>setupterm</STRONG>   establish terminal with given type
483        <STRONG>tparm</STRONG>       instantiate a string expression with parameters
484        <STRONG>tputs</STRONG>       apply padding information to a string
485        <STRONG>vidattr</STRONG>     like <STRONG>vidputs</STRONG>, but outputs through <STRONG>putchar</STRONG>
486        <STRONG>vidputs</STRONG>     output  a  string  to  put  terminal  in  a specified video
487                    attribute mode
488
489        The programming manual also mentioned functions  provided  for  <EM>termcap</EM>
490        compatibility (commenting that they "may go away at a later date").
491
492        <STRONG>Function</STRONG>   <STRONG>Description</STRONG>
493        ------------------------------------------------------------------------
494        <STRONG>tgetent</STRONG>    look up <EM>termcap</EM> entry for given <EM>name</EM>
495        <STRONG>tgetflag</STRONG>   get boolean entry for given <EM>id</EM>
496        <STRONG>tgetnum</STRONG>    get numeric entry for given <EM>id</EM>
497        <STRONG>tgetstr</STRONG>    get string entry for given <EM>id</EM>
498        <STRONG>tgoto</STRONG>      apply parameters to given capability
499        <STRONG>tputs</STRONG>      apply  padding  to  capability,  calling  a  function to put
500                   characters
501
502        Early terminfo programs obtained capability values  from  the  <STRONG>TERMINAL</STRONG>
503        structure initialized by <STRONG>setupterm</STRONG>.
504
505        SVr3  extended  terminfo  by  adding  functions  to retrieve capability
506        values (like the termcap interface), and reusing <STRONG>tgoto</STRONG> and <STRONG>tputs</STRONG>:
507
508        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
509        ------------------------------------------------------------------------
510        <STRONG>tigetflag</STRONG>   get boolean entry for given <EM>id</EM>
511        <STRONG>tigetnum</STRONG>    get numeric entry for given <EM>id</EM>
512        <STRONG>tigetstr</STRONG>    get string entry for given <EM>id</EM>
513
514        SVr3 also replaced several of the SVr2 <EM>terminfo</EM> functions which had  no
515        counterpart in the <EM>termcap</EM> interface, documenting them as obsolete.
516
517        <STRONG>Function</STRONG>    <STRONG>Replaced</STRONG> <STRONG>by</STRONG>
518        ------------------------------------------------------------------------
519        crmode      cbreak
520        fixterm     reset_prog_mode
521        gettmode    <EM>n/a</EM>
522        nocrmode    nocbreak
523        resetterm   reset_shell_mode
524        saveterm    def_prog_mode
525        setterm     setupterm
526
527        SVr3  kept  the  <STRONG>mvcur</STRONG>, <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> functions, along with <STRONG>putp</STRONG>,
528        <STRONG>tparm</STRONG> and <STRONG>tputs</STRONG>.  The  latter  were  needed  to  support  padding,  and
529        handling  functions  such  as  <STRONG>vidattr</STRONG>  (which  used  more than the two
530        parameters supported by <STRONG>tgoto</STRONG>).
531
532        SVr3  introduced  the  functions   for   switching   between   terminal
533        descriptions,   e.g.,   <STRONG>set_curterm</STRONG>.   Some  of  that  was  incremental
534        improvements to the SVr2 library:
535
536        <STRONG>o</STRONG>   The <STRONG>TERMINAL</STRONG> type definition was introduced  in  SVr3.01,  for  the
537            <STRONG>term</STRONG> structure provided in SVr2.
538
539        <STRONG>o</STRONG>   The  various  global  variables such as <STRONG>boolnames</STRONG> were mentioned in
540            the programming manual at this point,  though  the  variables  were
541            provided in SVr2.
542
543        SVr4 added the <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> functions.
544
545        There are other low-level functions declared in the <EM>curses</EM> header files
546        on Unix systems,  but  none  were  documented.   The  functions  marked
547        "obsolete" remained in use by the Unix <STRONG>vi(1)</STRONG> editor.
548
549
550 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
551
552 </PRE><H3><a name="h3-Extensions">Extensions</a></H3><PRE>
553        The  functions  marked as extensions were designed for <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>, and
554        are not found in SVr4 curses, 4.4BSD  curses,  or  any  other  previous
555        version of curses.
556
557
558 </PRE><H3><a name="h3-Legacy-functions">Legacy functions</a></H3><PRE>
559        X/Open notes that <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> may be macros.
560
561        The  function <STRONG>setterm</STRONG> is not described by X/Open and must be considered
562        non-portable.  All other functions are as described by X/Open.
563
564
565 </PRE><H3><a name="h3-Legacy-data">Legacy data</a></H3><PRE>
566        <STRONG>setupterm</STRONG> copies the terminal name to the array <STRONG>ttytype</STRONG>.  This  is  not
567        part of X/Open Curses, but is assumed by some applications.
568
569        Other  implementions  may not declare the capability name arrays.  Some
570        provide them without declaring them.  X/Open does not specify them.
571
572        Extended terminal capability names, e.g., as defined by <STRONG>tic</STRONG> <STRONG>-x</STRONG>, are not
573        stored in the arrays described here.
574
575
576 </PRE><H3><a name="h3-Output-buffering">Output buffering</a></H3><PRE>
577        Older  versions  of  <STRONG>ncurses</STRONG> assumed that the file descriptor passed to
578        <STRONG>setupterm</STRONG> from <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> uses buffered I/O, and would write to
579        the  corresponding  stream.   In  addition  to  the limitation that the
580        terminal was left  in  block-buffered  mode  on  exit  (like  System  V
581        curses),  it  was  problematic because <STRONG>ncurses</STRONG> did not allow a reliable
582        way to cleanup on receiving SIGTSTP.
583
584        The current version (ncurses6) uses output buffers managed directly  by
585        <STRONG>ncurses</STRONG>.  Some of the low-level functions described in this manual page
586        write to the standard output.  They are  not  signal-safe.   The  high-
587        level  functions  in  <STRONG>ncurses</STRONG> use alternate versions of these functions
588        using the more reliable buffering scheme.
589
590
591 </PRE><H3><a name="h3-Function-prototypes">Function prototypes</a></H3><PRE>
592        The X/Open Curses prototypes  are  based  on  the  SVr4  curses  header
593        declarations,  which  were  defined at the same time the C language was
594        first standardized in the late 1980s.
595
596        <STRONG>o</STRONG>   X/Open Curses uses <STRONG>const</STRONG>  less  effectively  than  a  later  design
597            might,  in  some cases applying it needlessly to values are already
598            constant, and in most cases overlooking parameters  which  normally
599            would  use <STRONG>const</STRONG>.  Using constant parameters for functions which do
600            not use <STRONG>const</STRONG> may prevent the program from compiling.  On the other
601            hand, <EM>writable</EM> <EM>strings</EM> are an obsolescent feature.
602
603            As  an  extension,  this implementation can be configured to change
604            the function prototypes to use the <STRONG>const</STRONG> keyword.  The <EM>ncurses</EM>  ABI
605            6 enables this feature by default.
606
607        <STRONG>o</STRONG>   X/Open  Curses  prototypes <STRONG>tparm</STRONG> with a fixed number of parameters,
608            rather than a variable argument list.
609
610            This implementation uses a  variable  argument  list,  but  can  be
611            configured  to use the fixed-parameter list.  Portable applications
612            should provide 9 parameters after the format; zeroes are  fine  for
613            this purpose.
614
615            In  response  to review comments by Thomas E. Dickey, X/Open Curses
616            Issue 7 proposed the <STRONG>tiparm</STRONG> function in mid-2009.
617
618            While <STRONG>tiparm</STRONG> is always provided in ncurses, the older form is  only
619            available  as  a build-time configuration option.  If not specially
620            configured, <STRONG>tparm</STRONG> is the same as <STRONG>tiparm</STRONG>.
621
622        Both forms of <STRONG>tparm</STRONG> have drawbacks:
623
624        <STRONG>o</STRONG>   Most of the calls to <STRONG>tparm</STRONG> use only one or two parameters.  Passing
625            nine on each call is awkward.
626
627            Using  <STRONG>long</STRONG>  for the numeric parameter type is a workaround to make
628            the parameter use the same amount of  stack  as  a  pointer.   That
629            approach  dates  back  to the mid-1980s, before C was standardized.
630            Since then, there is a standard (and pointers are not  required  to
631            fit in a long).
632
633        <STRONG>o</STRONG>   Providing  the  right  number of parameters for a variadic function
634            such  as  <STRONG>tiparm</STRONG>  can  be  a  problem,  in  particular  for  string
635            parameters.   However,  only a few terminfo capabilities use string
636            parameters (e.g., the ones used for programmable function keys).
637
638            The ncurses library checks usage of these capabilities, and returns
639            an  error  if  the capability mishandles string parameters.  But it
640            cannot check if a calling program provides  strings  in  the  right
641            places for the <STRONG>tparm</STRONG> calls.
642
643            The  <STRONG><A HREF="tput.1.html">tput(1)</A></STRONG>  program  checks  its use of these capabilities with a
644            table, so that it calls <STRONG>tparm</STRONG> correctly.
645
646
647 </PRE><H3><a name="h3-Special-TERM-treatment">Special TERM treatment</a></H3><PRE>
648        If configured to use the terminal-driver, e.g., for the MinGW port,
649
650        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG> interprets a missing/empty TERM variable as  the  special
651            value "unknown".
652
653            SVr4 curses uses the special value "dumb".
654
655            The  difference  between  the  two  is  that the former uses the <STRONG>gn</STRONG>
656            (<STRONG>generic_type</STRONG>) terminfo capability, while the latter does  not.   A
657            generic terminal is unsuitable for full-screen applications.
658
659        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG>  allows explicit use of the the windows console driver by
660            checking if $TERM is set to "#win32con" or an abbreviation of  that
661            string.
662
663
664 </PRE><H3><a name="h3-Other-portability-issues">Other portability issues</a></H3><PRE>
665        In  System  V Release 4, <STRONG>set_curterm</STRONG> has an <STRONG>int</STRONG> return type and returns
666        <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>.  We have chosen to implement the X/Open Curses semantics.
667
668        In System V Release 4, the third argument of <STRONG>tputs</STRONG>  has  the  type  <STRONG>int</STRONG>
669        <STRONG>(*putc)(char)</STRONG>.
670
671        At  least one implementation of X/Open Curses (Solaris) returns a value
672        other than <STRONG>OK</STRONG>/<STRONG>ERR</STRONG> from <STRONG>tputs</STRONG>.  That returns the length of  the  string,
673        and does no error-checking.
674
675        X/Open  notes  that after calling <STRONG>mvcur</STRONG>, the curses state may not match
676        the actual terminal state, and that an  application  should  touch  and
677        refresh  the  window before resuming normal curses calls.  Both <STRONG>ncurses</STRONG>
678        and System V Release 4 curses implement <STRONG>mvcur</STRONG>  using  the  SCREEN  data
679        allocated  in either <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  So though it is documented as
680        a terminfo function, <STRONG>mvcur</STRONG> is really a curses  function  which  is  not
681        well specified.
682
683        X/Open  states  that  the  old  location must be given for <STRONG>mvcur</STRONG>.  This
684        implementation allows the caller to use -1's for the old ordinates.  In
685        that case, the old location is unknown.
686
687
688 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
689        <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>,
690        <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><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>,   <STRONG>putc(3)</STRONG>,
691        <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
692
693
694
695 ncurses 6.4                       2023-09-23                 <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
696 </PRE>
697 <div class="nav">
698 <ul>
699 <li><a href="#h2-NAME">NAME</a></li>
700 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
701 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
702 <ul>
703 <li><a href="#h3-Initialization">Initialization</a></li>
704 <li><a href="#h3-The-Terminal-State">The Terminal State</a></li>
705 <li><a href="#h3-Formatting-Output">Formatting Output</a></li>
706 <li><a href="#h3-Output-Functions">Output Functions</a></li>
707 <li><a href="#h3-Terminal-Capability-Functions">Terminal Capability Functions</a></li>
708 <li><a href="#h3-Terminal-Capability-Names">Terminal Capability Names</a></li>
709 <li><a href="#h3-Releasing-Memory">Releasing Memory</a></li>
710 </ul>
711 </li>
712 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a>
713 <ul>
714 <li><a href="#h3-Compatibility-macros">Compatibility macros</a></li>
715 </ul>
716 </li>
717 <li><a href="#h2-HISTORY">HISTORY</a></li>
718 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
719 <ul>
720 <li><a href="#h3-Extensions">Extensions</a></li>
721 <li><a href="#h3-Legacy-functions">Legacy functions</a></li>
722 <li><a href="#h3-Legacy-data">Legacy data</a></li>
723 <li><a href="#h3-Output-buffering">Output buffering</a></li>
724 <li><a href="#h3-Function-prototypes">Function prototypes</a></li>
725 <li><a href="#h3-Special-TERM-treatment">Special TERM treatment</a></li>
726 <li><a href="#h3-Other-portability-issues">Other portability issues</a></li>
727 </ul>
728 </li>
729 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
730 </ul>
731 </div>
732 </BODY>
733 </HTML>