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