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