]> ncurses.scripts.mit.edu Git - ncurses.git/blob - doc/html/man/curs_terminfo.3x.html
ncurses 6.4 - patch 20231111
[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.117 2023/11/11 11:48:04 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-11-11 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-11-11 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><STRONG>,</STRONG> <STRONG>int</STRONG> <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        String  capabilities  can  contain  padding  information,  a time delay
291        (accommodating performance limitations of hardware terminals) expressed
292        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>
293        exceeds 30,000 (thirty seconds), it is capped at that value.
294
295        The <STRONG>tputs</STRONG> routine interprets time-delay information in the  string  <EM>str</EM>
296        and outputs it, executing the delays:
297
298        <STRONG>o</STRONG>   The  <EM>str</EM> parameter must be a terminfo string variable or the return
299            value from <STRONG>tparm</STRONG>, <STRONG>tiparm</STRONG>, <STRONG>tgetstr</STRONG>, or <STRONG>tgoto</STRONG>.
300
301            The <STRONG>tgetstr</STRONG> and <STRONG>tgoto</STRONG> functions are part of the <EM>termcap</EM>  interface,
302            which  happens  to  share  this  function  name  with  the <EM>terminfo</EM>
303            interface.
304
305        <STRONG>o</STRONG>   <EM>affcnt</EM> is the number of lines affected, or 1 if not applicable.
306
307        <STRONG>o</STRONG>   <EM>putc</EM> is a <STRONG>putchar</STRONG>-like routine to which the characters are  passed,
308            one at a time.
309
310            If  <STRONG>tputs</STRONG>  processes  a  time-delay,  it  uses the <STRONG><A HREF="curs_util.3x.html">delay_output(3x)</A></STRONG>
311            function, routing any resulting  padding  characters  through  this
312            function.
313
314        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>
315        always goes to <STRONG>stdout</STRONG>, rather than the <EM>filedes</EM> specified in <STRONG>setupterm</STRONG>.
316
317        The <STRONG>vidputs</STRONG> routine displays the string on the terminal  in  the  video
318        attribute mode <EM>attrs</EM>, which is any combination of the attributes listed
319        in <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.  The characters are passed to the  <STRONG>putchar</STRONG>-like  routine
320        <EM>putc</EM>.
321
322        The <STRONG>vidattr</STRONG> routine is like the <STRONG>vidputs</STRONG> routine, except that it outputs
323        through <STRONG>putchar</STRONG>.
324
325        The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines correspond to vidattr  and  vidputs,
326        respectively.   They  use a set of arguments for representing the video
327        attributes plus color, i.e.,
328
329        <STRONG>o</STRONG>   <EM>attrs</EM> of type <STRONG>attr_t</STRONG> for the attributes and
330
331        <STRONG>o</STRONG>   <EM>pair</EM> of type <STRONG>short</STRONG> for the color-pair number.
332
333        The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines are designed to  use  the  attribute
334        constants with the <STRONG>WA_</STRONG> prefix.
335
336        X/Open  Curses  reserves  the <EM>opts</EM> argument for future use, saying that
337        applications must provide a null pointer  for  that  argument.   As  an
338        extension,  this  implementation allows <EM>opts</EM> to be used as a pointer to
339        <STRONG>int</STRONG>, which overrides the <EM>pair</EM> (<STRONG>short</STRONG>) argument.
340
341        The <STRONG>mvcur</STRONG> routine provides low-level cursor motion.   It  takes  effect
342        immediately  (rather  than at the next refresh).  Unlike the other low-
343        level output functions, which either write to the  standard  output  or
344        pass an output function parameter, <STRONG>mvcur</STRONG> uses an output file descriptor
345        derived from the output stream parameter of <STRONG><A HREF="curs_initscr.3x.html">newterm(3x)</A></STRONG>.
346
347        While <STRONG>putp</STRONG> and <STRONG>mvcur</STRONG> are low-level functions which do not use the high-
348        level  curses  state,  they are declared in <STRONG>&lt;curses.h&gt;</STRONG> because System V
349        did this (see <EM>HISTORY</EM>).
350
351
352 </PRE><H3><a name="h3-Terminal-Capability-Functions">Terminal Capability Functions</a></H3><PRE>
353        The <STRONG>tigetflag</STRONG>, <STRONG>tigetnum</STRONG> and <STRONG>tigetstr</STRONG> routines return the value  of  the
354        capability  corresponding  to the <STRONG>terminfo</STRONG> <EM>capname</EM> passed to them, such
355        as <STRONG>xenl</STRONG>.  The <EM>capname</EM> for each capability is given in the table  column
356        entitled <EM>capname</EM> code in the capabilities section of <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
357
358        These routines return special values to denote errors.
359
360        The <STRONG>tigetflag</STRONG> routine returns
361
362        <STRONG>-1</STRONG>     if <EM>capname</EM> is not a boolean capability, or
363
364        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
365
366        The <STRONG>tigetnum</STRONG> routine returns
367
368        <STRONG>-2</STRONG>     if <EM>capname</EM> is not a numeric capability, or
369
370        <STRONG>-1</STRONG>     if it is canceled or absent from the terminal description.
371
372        The <STRONG>tigetstr</STRONG> routine returns
373
374        <STRONG>(char</STRONG> <STRONG>*)-1</STRONG>
375               if <EM>capname</EM> is not a string capability, or
376
377        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
378
379
380 </PRE><H3><a name="h3-Terminal-Capability-Names">Terminal Capability Names</a></H3><PRE>
381        These null-terminated arrays contain
382
383        <STRONG>o</STRONG>   the short <EM>terminfo</EM> names ("codes"),
384
385        <STRONG>o</STRONG>   the <EM>termcap</EM> names ("names"), and
386
387        <STRONG>o</STRONG>   the long <EM>terminfo</EM> names ("fnames")
388
389        for each of the predefined <EM>terminfo</EM> variables:
390
391               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*boolnames[]</STRONG>, <STRONG>*boolcodes[]</STRONG>, <STRONG>*boolfnames[]</STRONG>
392               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*numnames[]</STRONG>, <STRONG>*numcodes[]</STRONG>, <STRONG>*numfnames[]</STRONG>
393               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*strnames[]</STRONG>, <STRONG>*strcodes[]</STRONG>, <STRONG>*strfnames[]</STRONG>
394
395
396 </PRE><H3><a name="h3-Releasing-Memory">Releasing Memory</a></H3><PRE>
397        Each successful call to <STRONG>setupterm</STRONG> allocates memory to hold the terminal
398        description.  As a side-effect, it  sets  <STRONG>cur_term</STRONG>  to  point  to  this
399        memory.  If an application calls
400
401               <STRONG>del_curterm(cur_term);</STRONG>
402
403        the memory will be freed.
404
405        The  formatting functions <STRONG>tparm</STRONG> and <STRONG>tiparm</STRONG> extend the storage allocated
406        by <STRONG>setupterm</STRONG>:
407
408        <STRONG>o</STRONG>   the "static" terminfo variables [a-z].  Before ncurses  6.3,  those
409            were  shared by all screens.  With ncurses 6.3, those are allocated
410            per screen.  See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for details.
411
412        <STRONG>o</STRONG>   to improve performance, ncurses 6.3 caches the result of  analyzing
413            terminfo  strings  for  their parameter types.  That is stored as a
414            binary tree referenced from the <STRONG>TERMINAL</STRONG> structure.
415
416        The higher-level <STRONG>initscr</STRONG> and <STRONG>newterm</STRONG> functions use <STRONG>setupterm</STRONG>.  Normally
417        they  do  not free this memory, but it is possible to do that using the
418        <STRONG><A HREF="curs_initscr.3x.html">delscreen(3x)</A></STRONG> function.
419
420
421 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
422        Routines that return an integer return <STRONG>ERR</STRONG> upon failure  and  <STRONG>OK</STRONG>  (SVr4
423        only  specifies  "an  integer  value  other  than <STRONG>ERR</STRONG>") upon successful
424        completion,  unless  otherwise   noted   in   the   preceding   routine
425        descriptions.
426
427        Routines that return pointers always return <STRONG>NULL</STRONG> on error.
428
429        X/Open defines no error conditions.  In this implementation
430
431           <STRONG>del_curterm</STRONG>
432                returns an error if its terminal parameter is null.
433
434           <STRONG>putp</STRONG> calls <STRONG>tputs</STRONG>, returning the same error-codes.
435
436           <STRONG>restartterm</STRONG>
437                returns an error if the associated call to <STRONG>setupterm</STRONG> returns an
438                error.
439
440           <STRONG>setupterm</STRONG>
441                returns an error if it cannot allocate enough memory, or create
442                the  initial  windows  (stdscr,  curscr,  newscr).  Other error
443                conditions are documented above.
444
445           <STRONG>tparm</STRONG>
446                returns a null  if  the  capability  would  require  unexpected
447                parameters,  e.g.,  too  many,  too  few,  or  incorrect  types
448                (strings where integers are expected, or vice versa).
449
450           <STRONG>tputs</STRONG>
451                returns an error if the string parameter is null.  It does  not
452                detect  I/O errors: X/Open states that <STRONG>tputs</STRONG> ignores the return
453                value of the output function <EM>putc</EM>.
454
455
456 </PRE><H3><a name="h3-Compatibility-macros">Compatibility macros</a></H3><PRE>
457        This implementation  provides  a  few  macros  for  compatibility  with
458        systems  before  SVr4  (see  <EM>HISTORY</EM>).   Those include <STRONG>crmode</STRONG>, <STRONG>fixterm</STRONG>,
459        <STRONG>gettmode</STRONG>, <STRONG>nocrmode</STRONG>, <STRONG>resetterm</STRONG>, <STRONG>saveterm</STRONG>, and <STRONG>setterm</STRONG>.
460
461        In SVr4, those are found in <STRONG>&lt;curses.h&gt;</STRONG>, but  except  for  <STRONG>setterm</STRONG>,  are
462        likewise macros.  The one function, <STRONG>setterm</STRONG>, is mentioned in the manual
463        page.  The manual page notes that the <STRONG>setterm</STRONG> routine was  replaced  by
464        <STRONG>setupterm</STRONG>, stating that the call
465
466               <STRONG>setupterm(</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0)</STRONG>
467
468        provides   the   same   functionality  as  <STRONG>setterm(</STRONG><EM>term</EM><STRONG>)</STRONG>,  and  is  not
469        recommended for new programs.  This  implementation  provides  each  of
470        those symbols as macros for BSD compatibility,
471
472
473 </PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
474        SVr2 introduced the terminfo feature.  Its programming manual mentioned
475        the following low-level functions.
476
477        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
478        ------------------------------------------------------------------------
479        <STRONG>fixterm</STRONG>     restore tty to "in curses" state
480        <STRONG>gettmode</STRONG>    establish current tty modes
481        <STRONG>mvcur</STRONG>       low level cursor motion
482        <STRONG>putp</STRONG>        utility function that uses <STRONG>tputs</STRONG>  to  send  characters  via
483                    <STRONG>putchar</STRONG>.
484        <STRONG>resetterm</STRONG>   set tty modes to "out of curses" state
485        <STRONG>resetty</STRONG>     reset tty flags to stored value
486        <STRONG>saveterm</STRONG>    save current modes as "in curses" state
487        <STRONG>savetty</STRONG>     store current tty flags
488        <STRONG>setterm</STRONG>     establish terminal with given type
489        <STRONG>setupterm</STRONG>   establish terminal with given type
490        <STRONG>tparm</STRONG>       instantiate a string expression with parameters
491        <STRONG>tputs</STRONG>       apply padding information to a string
492        <STRONG>vidattr</STRONG>     like <STRONG>vidputs</STRONG>, but outputs through <STRONG>putchar</STRONG>
493        <STRONG>vidputs</STRONG>     output  a  string  to  put  terminal  in  a specified video
494                    attribute mode
495
496        The programming manual also mentioned functions  provided  for  <EM>termcap</EM>
497        compatibility (commenting that they "may go away at a later date").
498
499        <STRONG>Function</STRONG>   <STRONG>Description</STRONG>
500        ------------------------------------------------------------------------
501        <STRONG>tgetent</STRONG>    look up <EM>termcap</EM> entry for given <EM>name</EM>
502        <STRONG>tgetflag</STRONG>   get boolean entry for given <EM>id</EM>
503        <STRONG>tgetnum</STRONG>    get numeric entry for given <EM>id</EM>
504        <STRONG>tgetstr</STRONG>    get string entry for given <EM>id</EM>
505        <STRONG>tgoto</STRONG>      apply parameters to given capability
506        <STRONG>tputs</STRONG>      apply  padding  to  capability,  calling  a  function to put
507                   characters
508
509        Early terminfo programs obtained capability values  from  the  <STRONG>TERMINAL</STRONG>
510        structure initialized by <STRONG>setupterm</STRONG>.
511
512        SVr3  extended  terminfo  by  adding  functions  to retrieve capability
513        values (like the termcap interface), and reusing <STRONG>tgoto</STRONG> and <STRONG>tputs</STRONG>:
514
515        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
516        ------------------------------------------------------------------------
517        <STRONG>tigetflag</STRONG>   get boolean entry for given <EM>id</EM>
518        <STRONG>tigetnum</STRONG>    get numeric entry for given <EM>id</EM>
519        <STRONG>tigetstr</STRONG>    get string entry for given <EM>id</EM>
520
521        SVr3 also replaced several of the SVr2 <EM>terminfo</EM> functions which had  no
522        counterpart in the <EM>termcap</EM> interface, documenting them as obsolete.
523
524        <STRONG>Function</STRONG>    <STRONG>Replaced</STRONG> <STRONG>by</STRONG>
525        ------------------------------------------------------------------------
526        crmode      cbreak
527        fixterm     reset_prog_mode
528        gettmode    <EM>n/a</EM>
529        nocrmode    nocbreak
530        resetterm   reset_shell_mode
531        saveterm    def_prog_mode
532        setterm     setupterm
533
534        SVr3  kept  the  <STRONG>mvcur</STRONG>, <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> functions, along with <STRONG>putp</STRONG>,
535        <STRONG>tparm</STRONG> and <STRONG>tputs</STRONG>.  The  latter  were  needed  to  support  padding,  and
536        handling  functions  such  as  <STRONG>vidattr</STRONG>  (which  used  more than the two
537        parameters supported by <STRONG>tgoto</STRONG>).
538
539        SVr3  introduced  the  functions   for   switching   between   terminal
540        descriptions,   e.g.,   <STRONG>set_curterm</STRONG>.   Some  of  that  was  incremental
541        improvements to the SVr2 library:
542
543        <STRONG>o</STRONG>   The <STRONG>TERMINAL</STRONG> type definition was introduced  in  SVr3.01,  for  the
544            <STRONG>term</STRONG> structure provided in SVr2.
545
546        <STRONG>o</STRONG>   The  various  global  variables such as <STRONG>boolnames</STRONG> were mentioned in
547            the programming manual at this point,  though  the  variables  were
548            provided in SVr2.
549
550        SVr4 added the <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> functions.
551
552        There are other low-level functions declared in the <EM>curses</EM> header files
553        on Unix systems,  but  none  were  documented.   The  functions  marked
554        "obsolete" remained in use by the Unix <STRONG>vi(1)</STRONG> editor.
555
556
557 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
558
559 </PRE><H3><a name="h3-Extensions">Extensions</a></H3><PRE>
560        The  functions  marked as extensions were designed for <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>, and
561        are not found in SVr4 curses, 4.4BSD  curses,  or  any  other  previous
562        version of curses.
563
564
565 </PRE><H3><a name="h3-Legacy-functions">Legacy functions</a></H3><PRE>
566        X/Open notes that <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> may be macros.
567
568        The  function <STRONG>setterm</STRONG> is not described by X/Open and must be considered
569        non-portable.  All other functions are as described by X/Open.
570
571
572 </PRE><H3><a name="h3-Legacy-data">Legacy data</a></H3><PRE>
573        <STRONG>setupterm</STRONG> copies the terminal name to the array <STRONG>ttytype</STRONG>.  This  is  not
574        part of X/Open Curses, but is assumed by some applications.
575
576        Other  implementions  may not declare the capability name arrays.  Some
577        provide them without declaring them.  X/Open does not specify them.
578
579        Extended terminal capability names, e.g., as defined by <STRONG>tic</STRONG> <STRONG>-x</STRONG>, are not
580        stored in the arrays described here.
581
582
583 </PRE><H3><a name="h3-Output-buffering">Output buffering</a></H3><PRE>
584        Older  versions  of  <STRONG>ncurses</STRONG> assumed that the file descriptor passed to
585        <STRONG>setupterm</STRONG> from <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> uses buffered I/O, and would write to
586        the  corresponding  stream.   In  addition  to  the limitation that the
587        terminal was left  in  block-buffered  mode  on  exit  (like  System  V
588        curses),  it  was  problematic because <STRONG>ncurses</STRONG> did not allow a reliable
589        way to cleanup on receiving SIGTSTP.
590
591        The current version (ncurses6) uses output buffers managed directly  by
592        <STRONG>ncurses</STRONG>.  Some of the low-level functions described in this manual page
593        write to the standard output.  They are  not  signal-safe.   The  high-
594        level  functions  in  <STRONG>ncurses</STRONG> use alternate versions of these functions
595        using the more reliable buffering scheme.
596
597
598 </PRE><H3><a name="h3-Function-prototypes">Function prototypes</a></H3><PRE>
599        The X/Open Curses prototypes  are  based  on  the  SVr4  curses  header
600        declarations,  which  were  defined at the same time the C language was
601        first standardized in the late 1980s.
602
603        <STRONG>o</STRONG>   X/Open Curses uses <STRONG>const</STRONG>  less  effectively  than  a  later  design
604            might,  in  some cases applying it needlessly to values are already
605            constant, and in most cases overlooking parameters  which  normally
606            would  use <STRONG>const</STRONG>.  Using constant parameters for functions which do
607            not use <STRONG>const</STRONG> may prevent the program from compiling.  On the other
608            hand, <EM>writable</EM> <EM>strings</EM> are an obsolescent feature.
609
610            As  an  extension,  this implementation can be configured to change
611            the function prototypes to use the <STRONG>const</STRONG> keyword.  The <EM>ncurses</EM>  ABI
612            6 enables this feature by default.
613
614        <STRONG>o</STRONG>   X/Open  Curses  prototypes <STRONG>tparm</STRONG> with a fixed number of parameters,
615            rather than a variable argument list.
616
617            This implementation uses a  variable  argument  list,  but  can  be
618            configured  to use the fixed-parameter list.  Portable applications
619            should provide 9 parameters after the format; zeroes are  fine  for
620            this purpose.
621
622            In  response  to review comments by Thomas E. Dickey, X/Open Curses
623            Issue 7 proposed the <STRONG>tiparm</STRONG> function in mid-2009.
624
625            While <STRONG>tiparm</STRONG> is always provided in ncurses, the older form is  only
626            available  as  a build-time configuration option.  If not specially
627            configured, <STRONG>tparm</STRONG> is the same as <STRONG>tiparm</STRONG>.
628
629        Both forms of <STRONG>tparm</STRONG> have drawbacks:
630
631        <STRONG>o</STRONG>   Most of the calls to <STRONG>tparm</STRONG> use only one or two parameters.  Passing
632            nine on each call is awkward.
633
634            Using  <STRONG>long</STRONG>  for the numeric parameter type is a workaround to make
635            the parameter use the same amount of  stack  as  a  pointer.   That
636            approach  dates  back  to the mid-1980s, before C was standardized.
637            Since then, there is a standard (and pointers are not  required  to
638            fit in a long).
639
640        <STRONG>o</STRONG>   Providing  the  right  number of parameters for a variadic function
641            such  as  <STRONG>tiparm</STRONG>  can  be  a  problem,  in  particular  for  string
642            parameters.   However,  only a few terminfo capabilities use string
643            parameters (e.g., the ones used for programmable function keys).
644
645            The ncurses library checks usage of these capabilities, and returns
646            an  error  if  the capability mishandles string parameters.  But it
647            cannot check if a calling program provides  strings  in  the  right
648            places for the <STRONG>tparm</STRONG> calls.
649
650            The  <STRONG><A HREF="tput.1.html">tput(1)</A></STRONG>  program  checks  its use of these capabilities with a
651            table, so that it calls <STRONG>tparm</STRONG> correctly.
652
653
654 </PRE><H3><a name="h3-Special-TERM-treatment">Special TERM treatment</a></H3><PRE>
655        If configured to use the terminal-driver, e.g., for the MinGW port,
656
657        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG> interprets a missing/empty TERM variable as  the  special
658            value "unknown".
659
660            SVr4 curses uses the special value "dumb".
661
662            The  difference  between  the  two  is  that the former uses the <STRONG>gn</STRONG>
663            (<STRONG>generic_type</STRONG>) terminfo capability, while the latter does  not.   A
664            generic terminal is unsuitable for full-screen applications.
665
666        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG>  allows explicit use of the the windows console driver by
667            checking if $TERM is set to "#win32con" or an abbreviation of  that
668            string.
669
670
671 </PRE><H3><a name="h3-Other-portability-issues">Other portability issues</a></H3><PRE>
672        In  System  V Release 4, <STRONG>set_curterm</STRONG> has an <STRONG>int</STRONG> return type and returns
673        <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>.  We have chosen to implement the X/Open Curses semantics.
674
675        In System V Release 4, the third argument of <STRONG>tputs</STRONG>  has  the  type  <STRONG>int</STRONG>
676        <STRONG>(*putc)(char)</STRONG>.
677
678        At  least one implementation of X/Open Curses (Solaris) returns a value
679        other than <STRONG>OK</STRONG>/<STRONG>ERR</STRONG> from <STRONG>tputs</STRONG>.  That returns the length of  the  string,
680        and does no error-checking.
681
682        X/Open  notes  that after calling <STRONG>mvcur</STRONG>, the curses state may not match
683        the actual terminal state, and that an  application  should  touch  and
684        refresh  the  window before resuming normal curses calls.  Both <STRONG>ncurses</STRONG>
685        and System V Release 4 curses implement <STRONG>mvcur</STRONG>  using  the  SCREEN  data
686        allocated  in either <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  So though it is documented as
687        a terminfo function, <STRONG>mvcur</STRONG> is really a curses  function  which  is  not
688        well specified.
689
690        X/Open  states  that  the  old  location must be given for <STRONG>mvcur</STRONG>.  This
691        implementation allows the caller to use -1's for the old ordinates.  In
692        that case, the old location is unknown.
693
694
695 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
696        <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>,
697        <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>,
698        <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
699
700
701
702 ncurses 6.4                       2023-11-11                 <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
703 </PRE>
704 <div class="nav">
705 <ul>
706 <li><a href="#h2-NAME">NAME</a></li>
707 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
708 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
709 <ul>
710 <li><a href="#h3-Initialization">Initialization</a></li>
711 <li><a href="#h3-The-Terminal-State">The Terminal State</a></li>
712 <li><a href="#h3-Formatting-Output">Formatting Output</a></li>
713 <li><a href="#h3-Output-Functions">Output Functions</a></li>
714 <li><a href="#h3-Terminal-Capability-Functions">Terminal Capability Functions</a></li>
715 <li><a href="#h3-Terminal-Capability-Names">Terminal Capability Names</a></li>
716 <li><a href="#h3-Releasing-Memory">Releasing Memory</a></li>
717 </ul>
718 </li>
719 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a>
720 <ul>
721 <li><a href="#h3-Compatibility-macros">Compatibility macros</a></li>
722 </ul>
723 </li>
724 <li><a href="#h2-HISTORY">HISTORY</a></li>
725 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
726 <ul>
727 <li><a href="#h3-Extensions">Extensions</a></li>
728 <li><a href="#h3-Legacy-functions">Legacy functions</a></li>
729 <li><a href="#h3-Legacy-data">Legacy data</a></li>
730 <li><a href="#h3-Output-buffering">Output buffering</a></li>
731 <li><a href="#h3-Function-prototypes">Function prototypes</a></li>
732 <li><a href="#h3-Special-TERM-treatment">Special TERM treatment</a></li>
733 <li><a href="#h3-Other-portability-issues">Other portability issues</a></li>
734 </ul>
735 </li>
736 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
737 </ul>
738 </div>
739 </BODY>
740 </HTML>