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