ncurses 6.2 - patch 20210626
[ncurses.git] / doc / html / man / curs_terminfo.3x.html
1 <!--
2   ****************************************************************************
3   * Copyright 2018-2020,2021 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.75 2021/06/17 21:11:08 tom Exp @
31   * ***************************************************************************
32   * ***************************************************************************
33   * ***************************************************************************
34   * ***************************************************************************
35   * ***************************************************************************
36   * ***************************************************************************
37   * ***************************************************************************
38 -->
39 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
40 <HTML>
41 <HEAD>
42 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
43 <meta name="generator" content="Manpage converted by man2html - see https://invisible-island.net/scripts/readme.html#others_scripts">
44 <TITLE>curs_terminfo 3x</TITLE>
45 <link rel="author" href="mailto:bug-ncurses@gnu.org">
46 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
47 </HEAD>
48 <BODY>
49 <H1 class="no-header">curs_terminfo 3x</H1>
50 <PRE>
51 <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>                                            <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
52
53
54
55
56 </PRE><H2><a name="h2-NAME">NAME</a></H2><PRE>
57        <STRONG>del_curterm</STRONG>, <STRONG>mvcur</STRONG>, <STRONG>putp</STRONG>, <STRONG>restartterm</STRONG>, <STRONG>set_curterm</STRONG>, <STRONG>setupterm</STRONG>,
58        <STRONG>tigetflag</STRONG>, <STRONG>tigetnum</STRONG>, <STRONG>tigetstr</STRONG>, <STRONG>tiparm</STRONG>, <STRONG>tparm</STRONG>, <STRONG>tputs</STRONG>, <STRONG>vid_attr</STRONG>,
59        <STRONG>vid_puts</STRONG>, <STRONG>vidattr</STRONG>, <STRONG>vidputs</STRONG> - <STRONG>curses</STRONG> interfaces to terminfo database
60
61
62 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
63        <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>
64        <STRONG>#include</STRONG> <STRONG>&lt;term.h&gt;</STRONG>
65
66        <STRONG>TERMINAL</STRONG> <STRONG>*cur_term;</STRONG>
67
68        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolnames[];</STRONG>
69        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolcodes[];</STRONG>
70        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>boolfnames[];</STRONG>
71        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numnames[];</STRONG>
72        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numcodes[];</STRONG>
73        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>numfnames[];</STRONG>
74        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strnames[];</STRONG>
75        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strcodes[];</STRONG>
76        <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG> <STRONG>const</STRONG> <STRONG>strfnames[];</STRONG>
77
78        <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>
79        <STRONG>TERMINAL</STRONG> <STRONG>*set_curterm(TERMINAL</STRONG> <STRONG>*</STRONG><EM>nterm</EM><STRONG>);</STRONG>
80        <STRONG>int</STRONG> <STRONG>del_curterm(TERMINAL</STRONG> <STRONG>*</STRONG><EM>oterm</EM><STRONG>);</STRONG>
81        <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>
82
83        <STRONG>char</STRONG> <STRONG>*tparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
84        <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>
85        <STRONG>int</STRONG> <STRONG>putp(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>);</STRONG>
86
87        <STRONG>int</STRONG> <STRONG>vidputs(chtype</STRONG> <EM>attrs</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <STRONG>(*</STRONG><EM>putc</EM><STRONG>)(int));</STRONG>
88        <STRONG>int</STRONG> <STRONG>vidattr(chtype</STRONG> <EM>attrs</EM><STRONG>);</STRONG>
89        <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>
90        <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>
91
92        <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>
93
94        <STRONG>int</STRONG> <STRONG>tigetflag(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
95        <STRONG>int</STRONG> <STRONG>tigetnum(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
96        <STRONG>char</STRONG> <STRONG>*tigetstr(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>capname</EM><STRONG>);</STRONG>
97
98        <STRONG>char</STRONG> <STRONG>*tiparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
99
100
101 </PRE><H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
102        These  low-level  routines must be called by programs that have to deal
103        directly with the <STRONG>terminfo</STRONG> database to handle certain terminal capabil-
104        ities, such as programming function keys.  For all other functionality,
105        <STRONG>curses</STRONG> routines are more suitable and their use is recommended.
106
107        None of these functions use  (or  are  aware  of)  multibyte  character
108        strings such as UTF-8:
109
110        <STRONG>o</STRONG>   capability names use the POSIX portable character set
111
112        <STRONG>o</STRONG>   capability  string  values  have  no  associated encoding; they are
113            strings of 8-bit characters.
114
115
116 </PRE><H3><a name="h3-Initialization">Initialization</a></H3><PRE>
117        Initially, <STRONG>setupterm</STRONG> should be called.  The high-level curses functions
118        <STRONG>initscr</STRONG>  and  <STRONG>newterm</STRONG> call <STRONG>setupterm</STRONG> to initialize the low-level set of
119        terminal-dependent variables [listed in <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>].
120
121        Applications can use the terminal  capabilities  either  directly  (via
122        header  definitions),  or by special functions.  The header files <STRONG>curs-</STRONG>
123        <STRONG>es.h</STRONG> and <STRONG>term.h</STRONG> should be included (in this order) to get  the  defini-
124        tions for these strings, numbers, and flags.
125
126        The  <STRONG>terminfo</STRONG>  variables <STRONG>lines</STRONG> and <STRONG>columns</STRONG> are initialized by <STRONG>setupterm</STRONG>
127        as follows:
128
129        <STRONG>o</STRONG>   If <STRONG>use_env(FALSE)</STRONG> has been called, values  for  <STRONG>lines</STRONG>  and  <STRONG>columns</STRONG>
130            specified in <STRONG>terminfo</STRONG> are used.
131
132        <STRONG>o</STRONG>   Otherwise,  if  the  environment variables <STRONG>LINES</STRONG> and <STRONG>COLUMNS</STRONG> exist,
133            their values are used.  If these environment variables do not exist
134            and  the program is running in a window, the current window size is
135            used.  Otherwise, if the environment variables do  not  exist,  the
136            values for <STRONG>lines</STRONG> and <STRONG>columns</STRONG> specified in the <STRONG>terminfo</STRONG> database are
137            used.
138
139        Parameterized strings should be passed  through  <STRONG>tparm</STRONG>  to  instantiate
140        them.   All  <STRONG>terminfo</STRONG> strings (including the output of <STRONG>tparm</STRONG>) should be
141        printed with <STRONG>tputs</STRONG> or <STRONG>putp</STRONG>.  Call <STRONG>reset_shell_mode</STRONG> to restore  the  tty
142        modes before exiting [see <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3x)</A></STRONG>].
143
144        Programs which use cursor addressing should
145
146        <STRONG>o</STRONG>   output <STRONG>enter_ca_mode</STRONG> upon startup and
147
148        <STRONG>o</STRONG>   output <STRONG>exit_ca_mode</STRONG> before exiting.
149
150        Programs which execute shell subprocesses should
151
152        <STRONG>o</STRONG>   call  <STRONG>reset_shell_mode</STRONG>  and output <STRONG>exit_ca_mode</STRONG> before the shell is
153            called and
154
155        <STRONG>o</STRONG>   output <STRONG>enter_ca_mode</STRONG> and call <STRONG>reset_prog_mode</STRONG> after returning  from
156            the shell.
157
158        The  <STRONG>setupterm</STRONG> routine reads in the <STRONG>terminfo</STRONG> database, initializing the
159        <STRONG>terminfo</STRONG> structures, but does not  set  up  the  output  virtualization
160        structures used by <STRONG>curses</STRONG>.  These are its parameters:
161
162           <EM>term</EM> is the terminal type, a character string.  If <EM>term</EM> is null, the
163                environment variable <STRONG>TERM</STRONG> is used.
164
165           <EM>filedes</EM>
166                is the file descriptor used for all output.
167
168           <EM>errret</EM>
169                points to an optional location where an error status can be re-
170                turned  to  the  caller.  If <EM>errret</EM> is not null, then <STRONG>setupterm</STRONG>
171                returns <STRONG>OK</STRONG> or <STRONG>ERR</STRONG> and stores a  status  value  in  the  integer
172                pointed  to by <EM>errret</EM>.  A return value of <STRONG>OK</STRONG> combined with sta-
173                tus of <STRONG>1</STRONG> in <EM>errret</EM> is normal.
174
175                If <STRONG>ERR</STRONG> is returned, examine <EM>errret</EM>:
176
177                <STRONG>1</STRONG>    means that the terminal is hardcopy, cannot  be  used  for
178                     curses applications.
179
180                     <STRONG>setupterm</STRONG>  determines  if  the entry is a hardcopy type by
181                     checking the <STRONG>hc</STRONG> (<STRONG>hardcopy</STRONG>) capability.
182
183                <STRONG>0</STRONG>    means that the terminal could not be found, or that it  is
184                     a  generic  type, having too little information for curses
185                     applications to run.
186
187                     <STRONG>setupterm</STRONG> determines if the entry is  a  generic  type  by
188                     checking the <STRONG>gn</STRONG> (<STRONG>generic</STRONG>) capability.
189
190                <STRONG>-1</STRONG>   means that the <STRONG>terminfo</STRONG> database could not be found.
191
192                If <EM>errret</EM> is null, <STRONG>setupterm</STRONG> prints an error message upon find-
193                ing an error and exits.  Thus, the simplest call is:
194
195                      <STRONG>setupterm((char</STRONG> <STRONG>*)0,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0);</STRONG>,
196
197                which uses all the defaults and sends the output to <STRONG>stdout</STRONG>.
198
199
200 </PRE><H3><a name="h3-The-Terminal-State">The Terminal State</a></H3><PRE>
201        The <STRONG>setupterm</STRONG> routine stores its information about the  terminal  in  a
202        <STRONG>TERMINAL</STRONG>  structure  pointed to by the global variable <STRONG>cur_term</STRONG>.  If it
203        detects an error, or decides that the terminal is unsuitable  (hardcopy
204        or  generic),  it discards this information, making it not available to
205        applications.
206
207        If <STRONG>setupterm</STRONG> is called repeatedly for the same terminal type,  it  will
208        reuse  the  information.   It maintains only one copy of a given termi-
209        nal's capabilities in memory.  If it is called for  different  terminal
210        types,  <STRONG>setupterm</STRONG>  allocates new storage for each set of terminal capa-
211        bilities.
212
213        The <STRONG>set_curterm</STRONG> routine sets <STRONG>cur_term</STRONG> to <EM>nterm</EM>, and makes  all  of  the
214        <STRONG>terminfo</STRONG>  boolean,  numeric,  and  string variables use the values from
215        <EM>nterm</EM>.  It returns the old value of <STRONG>cur_term</STRONG>.
216
217        The <STRONG>del_curterm</STRONG> routine frees the space pointed to by <EM>oterm</EM>  and  makes
218        it available for further use.  If <EM>oterm</EM> is the same as <STRONG>cur_term</STRONG>, refer-
219        ences to any of the <STRONG>terminfo</STRONG> boolean,  numeric,  and  string  variables
220        thereafter  may  refer  to  invalid  memory locations until another <STRONG>se-</STRONG>
221        <STRONG>tupterm</STRONG> has been called.
222
223        The <STRONG>restartterm</STRONG> routine is similar to  <STRONG>setupterm</STRONG>  and  <STRONG>initscr</STRONG>,  except
224        that it is called after restoring memory to a previous state (for exam-
225        ple, when reloading a game saved as a core  image  dump).   <STRONG>restartterm</STRONG>
226        assumes  that the windows and the input and output options are the same
227        as when memory was saved, but the terminal type and baud  rate  may  be
228        different.   Accordingly,  <STRONG>restartterm</STRONG>  saves  various  tty state bits,
229        calls <STRONG>setupterm</STRONG>, and then restores the bits.
230
231
232 </PRE><H3><a name="h3-Formatting-Output">Formatting Output</a></H3><PRE>
233        The <STRONG>tparm</STRONG> routine instantiates the string <EM>str</EM> with  parameters  <EM>pi</EM>.   A
234        pointer  is  returned to the result of <EM>str</EM> with the parameters applied.
235        Application developers should keep in mind these quirks of  the  inter-
236        face:
237
238        <STRONG>o</STRONG>   Although  <STRONG>tparm</STRONG>'s actual parameters may be integers or strings, the
239            prototype expects <STRONG>long</STRONG> (integer) values.
240
241        <STRONG>o</STRONG>   Aside from the <STRONG>set_attributes</STRONG> (<STRONG>sgr</STRONG>) capability, most terminal capa-
242            bilities require no more than one or two parameters.
243
244        <STRONG>o</STRONG>   Padding  information  is  ignored  by  <STRONG>tparm</STRONG>;  it is interpreted by
245            <STRONG>tputs</STRONG>.
246
247        <STRONG>o</STRONG>   The capability string is  null-terminated.   Use  "\200"  where  an
248            ASCII NUL is needed in the output.
249
250        <STRONG>tiparm</STRONG>  is  a  newer  form of <STRONG>tparm</STRONG> which uses <EM>&lt;stdarg.h&gt;</EM> rather than a
251        fixed-parameter list.  Its numeric parameters are integers (int) rather
252        than longs.
253
254
255 </PRE><H3><a name="h3-Output-Functions">Output Functions</a></H3><PRE>
256        The  <STRONG>tputs</STRONG>  routine  applies padding information (i.e., by interpreting
257        marker embedded in the terminfo capability such as  "$&lt;5&gt;"  as  5  mil-
258        liseconds) to the string <EM>str</EM> and outputs it:
259
260        <STRONG>o</STRONG>   The  <EM>str</EM> parameter must be a terminfo string variable or the return
261            value from <STRONG>tparm</STRONG>, <STRONG>tiparm</STRONG>, <STRONG>tgetstr</STRONG>, or <STRONG>tgoto</STRONG>.
262
263            The <STRONG>tgetstr</STRONG> and <STRONG>tgoto</STRONG> functions are part of the <EM>termcap</EM>  interface,
264            which  happens to share this function name with the <EM>terminfo</EM> inter-
265            face.
266
267        <STRONG>o</STRONG>   <EM>affcnt</EM> is the number of lines affected, or 1 if not applicable.
268
269        <STRONG>o</STRONG>   <EM>putc</EM> is a <STRONG>putchar</STRONG>-like routine to which the characters are  passed,
270            one at a time.
271
272        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-
273        ways goes to <STRONG>stdout</STRONG>, rather than the <EM>filedes</EM> specified in <STRONG>setupterm</STRONG>.
274
275        The <STRONG>vidputs</STRONG> routine displays the string on the terminal  in  the  video
276        attribute mode <EM>attrs</EM>, which is any combination of the attributes listed
277        in <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.  The characters are passed to the  <STRONG>putchar</STRONG>-like  routine
278        <EM>putc</EM>.
279
280        The <STRONG>vidattr</STRONG> routine is like the <STRONG>vidputs</STRONG> routine, except that it outputs
281        through <STRONG>putchar</STRONG>.
282
283        The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines correspond to vidattr  and  vidputs,
284        respectively.   They  use a set of arguments for representing the video
285        attributes plus color, i.e.,
286
287        <STRONG>o</STRONG>   <EM>attrs</EM> of type <STRONG>attr_t</STRONG> for the attributes and
288
289        <STRONG>o</STRONG>   <EM>pair</EM> of type <STRONG>short</STRONG> for the color-pair number.
290
291        The <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> routines are designed to  use  the  attribute
292        constants with the <EM>WA</EM><STRONG>_</STRONG> prefix.
293
294        X/Open  Curses  reserves  the <EM>opts</EM> argument for future use, saying that
295        applications must provide a null pointer for that argument.  As an  ex-
296        tension,  this  implementation  allows  <EM>opts</EM> to be used as a pointer to
297        <STRONG>int</STRONG>, which overrides the <EM>pair</EM> (<STRONG>short</STRONG>) argument.
298
299        The <STRONG>mvcur</STRONG> routine provides low-level cursor motion.   It  takes  effect
300        immediately (rather than at the next refresh).
301
302        While <STRONG>putp</STRONG> and <STRONG>mvcur</STRONG> are low-level functions which do not use the high-
303        level curses state, they are declared in <STRONG>&lt;curses.h&gt;</STRONG> because SystemV did
304        this (see <STRONG>HISTORY</STRONG>).
305
306
307 </PRE><H3><a name="h3-Terminal-Capability-Functions">Terminal Capability Functions</a></H3><PRE>
308        The  <STRONG>tigetflag</STRONG>,  <STRONG>tigetnum</STRONG> and <STRONG>tigetstr</STRONG> routines return the value of the
309        capability corresponding to the <STRONG>terminfo</STRONG> <EM>capname</EM> passed to  them,  such
310        as  <STRONG>xenl</STRONG>.  The <EM>capname</EM> for each capability is given in the table column
311        entitled <EM>capname</EM> code in the capabilities section of <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
312
313        These routines return special values to denote errors.
314
315        The <STRONG>tigetflag</STRONG> routine returns
316
317        <STRONG>-1</STRONG>     if <EM>capname</EM> is not a boolean capability, or
318
319        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
320
321        The <STRONG>tigetnum</STRONG> routine returns
322
323        <STRONG>-2</STRONG>     if <EM>capname</EM> is not a numeric capability, or
324
325        <STRONG>-1</STRONG>     if it is canceled or absent from the terminal description.
326
327        The <STRONG>tigetstr</STRONG> routine returns
328
329        <STRONG>(char</STRONG> <STRONG>*)-1</STRONG>
330               if <EM>capname</EM> is not a string capability, or
331
332        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
333
334
335 </PRE><H3><a name="h3-Terminal-Capability-Names">Terminal Capability Names</a></H3><PRE>
336        These null-terminated arrays contain
337
338        <STRONG>o</STRONG>   the short terminfo names ("codes"),
339
340        <STRONG>o</STRONG>   the <STRONG>termcap</STRONG> names ("names"), and
341
342        <STRONG>o</STRONG>   the long terminfo names ("fnames")
343
344        for each of the predefined <STRONG>terminfo</STRONG> variables:
345
346               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*boolnames[]</STRONG>, <STRONG>*boolcodes[]</STRONG>, <STRONG>*boolfnames[]</STRONG>
347               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*numnames[]</STRONG>, <STRONG>*numcodes[]</STRONG>, <STRONG>*numfnames[]</STRONG>
348               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*strnames[]</STRONG>, <STRONG>*strcodes[]</STRONG>, <STRONG>*strfnames[]</STRONG>
349
350
351 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
352        Routines that return an integer return <STRONG>ERR</STRONG> upon failure  and  <STRONG>OK</STRONG>  (SVr4
353        only  specifies "an integer value other than <STRONG>ERR</STRONG>") upon successful com-
354        pletion, unless otherwise noted in the preceding routine descriptions.
355
356        Routines that return pointers always return <STRONG>NULL</STRONG> on error.
357
358        X/Open defines no error conditions.  In this implementation
359
360           <STRONG>del_curterm</STRONG>
361                returns an error if its terminal parameter is null.
362
363           <STRONG>putp</STRONG> calls <STRONG>tputs</STRONG>, returning the same error-codes.
364
365           <STRONG>restartterm</STRONG>
366                returns an error if the associated call to <STRONG>setupterm</STRONG> returns an
367                error.
368
369           <STRONG>setupterm</STRONG>
370                returns an error if it cannot allocate enough memory, or create
371                the initial windows (stdscr, curscr, newscr).  Other error con-
372                ditions are documented above.
373
374           <STRONG>tputs</STRONG>
375                returns  an error if the string parameter is null.  It does not
376                detect I/O errors: X/Open states that <STRONG>tputs</STRONG> ignores the  return
377                value of the output function <EM>putc</EM>.
378
379
380 </PRE><H3><a name="h3-Compatibility-macros">Compatibility macros</a></H3><PRE>
381        This  implementation  provides a few macros for compatibility with sys-
382        tems  before  SVr4  (see  <STRONG>HISTORY</STRONG>).   Those  include  <STRONG>crmode</STRONG>,  <STRONG>fixterm</STRONG>,
383        <STRONG>gettmode</STRONG>, <STRONG>nocrmode</STRONG>, <STRONG>resetterm</STRONG>, <STRONG>saveterm</STRONG>, and <STRONG>setterm</STRONG>.
384
385        In  SVr4,  those  are  found in <STRONG>&lt;curses.h&gt;</STRONG>, but except for <STRONG>setterm</STRONG>, are
386        likewise macros.  The one function, <STRONG>setterm</STRONG>, is mentioned in the manual
387        page.   The  manual page notes that the <STRONG>setterm</STRONG> routine was replaced by
388        <STRONG>setupterm</STRONG>, stating that the call:
389
390              <STRONG>setupterm(</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0)</STRONG>
391
392        provides the same functionality as <STRONG>setterm(</STRONG><EM>term</EM><STRONG>)</STRONG>, and is not recommend-
393        ed  for  new programs.  This implementation provides each of those sym-
394        bols as macros for BSD compatibility,
395
396
397 </PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
398        SVr2 introduced the terminfo feature.  Its programming manual mentioned
399        these low-level functions:
400
401        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
402        ------------------------------------------------------------
403        fixterm     restore tty to "in curses" state
404        gettmode    establish current tty modes
405        mvcur       low level cursor motion
406        putp        utility  function that uses <STRONG>tputs</STRONG> to send char-
407                    acters via <STRONG>putchar</STRONG>.
408        resetterm   set tty modes to "out of curses" state
409        resetty     reset tty flags to stored value
410        saveterm    save current modes as "in curses" state
411        savetty     store current tty flags
412        setterm     establish terminal with given type
413        setupterm   establish terminal with given type
414        tparm       instantiate a string expression with parameters
415        tputs       apply padding information to a string
416        vidattr     like <STRONG>vidputs</STRONG>, but outputs through <STRONG>putchar</STRONG>
417        vidputs     output a string to put terminal in a  specified
418                    video attribute mode
419
420        The  programming  manual  also mentioned functions provided for termcap
421        compatibility (commenting that they "may go away at a later date"):
422
423        <STRONG>Function</STRONG>   <STRONG>Description</STRONG>
424        ------------------------------------------------
425        tgetent    look up termcap entry for given <EM>name</EM>
426        tgetflag   get boolean entry for given <EM>id</EM>
427        tgetnum    get numeric entry for given <EM>id</EM>
428        tgetstr    get string entry for given <EM>id</EM>
429        tgoto      apply parameters to given capability
430        tputs      apply padding to capability, calling
431                   a function to put characters
432
433        Early  terminfo  programs  obtained capability values from the <STRONG>TERMINAL</STRONG>
434        structure initialized by <STRONG>setupterm</STRONG>.
435
436        SVr3 extended terminfo by adding functions to retrieve capability  val-
437        ues (like the termcap interface), and reusing tgoto and tputs:
438
439        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
440        -------------------------------------------
441        tigetflag   get boolean entry for given <EM>id</EM>
442        tigetnum    get numeric entry for given <EM>id</EM>
443        tigetstr    get string entry for given <EM>id</EM>
444
445        SVr3  also replaced several of the SVr2 terminfo functions which had no
446        counterpart in the termcap interface, documenting them as obsolete:
447
448        <STRONG>Function</STRONG>    <STRONG>Replaced</STRONG> <STRONG>by</STRONG>
449        -----------------------------
450        crmode      cbreak
451        fixterm     reset_prog_mode
452        gettmode    N/A
453        nocrmode    nocbreak
454        resetterm   reset_shell_mode
455        saveterm    def_prog_mode
456        setterm     setupterm
457
458        SVr3 kept the <STRONG>mvcur</STRONG>, <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> functions,  along  with  <STRONG>putp</STRONG>,
459        <STRONG>tparm</STRONG>  and  <STRONG>tputs</STRONG>.  The latter were needed to support padding, and han-
460        dling functions such as <STRONG>vidattr</STRONG> (which used more than the  two  parame-
461        ters supported by <STRONG>tgoto</STRONG>).
462
463        SVr3  introduced  the functions for switching between terminal descrip-
464        tions, e.g., <STRONG>set_curterm</STRONG>.  The various global variables such  as  <STRONG>bool-</STRONG>
465        <STRONG>names</STRONG> were mentioned in the programming manual at this point.
466
467        SVr4 added the <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> functions.
468
469        There are other low-level functions declared in the curses header files
470        on Unix systems, but none were documented.  The functions marked "obso-
471        lete" remained in use by the Unix <STRONG>vi</STRONG> editor.
472
473
474 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
475
476 </PRE><H3><a name="h3-Legacy-functions">Legacy functions</a></H3><PRE>
477        X/Open notes that <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> may be macros.
478
479        The  function <STRONG>setterm</STRONG> is not described by X/Open and must be considered
480        non-portable.  All other functions are as described by X/Open.
481
482
483 </PRE><H3><a name="h3-Legacy-data">Legacy data</a></H3><PRE>
484        <STRONG>setupterm</STRONG> copies the terminal name to the array <STRONG>ttytype</STRONG>.  This  is  not
485        part of X/Open Curses, but is assumed by some applications.
486
487        Other  implementions  may not declare the capability name arrays.  Some
488        provide them without declaring them.  X/Open does not specify them.
489
490        Extended terminal capability names, e.g., as defined by <STRONG>tic</STRONG> <STRONG>-x</STRONG>, are not
491        stored in the arrays described here.
492
493
494 </PRE><H3><a name="h3-Output-buffering">Output buffering</a></H3><PRE>
495        Older  versions  of  <STRONG>ncurses</STRONG> assumed that the file descriptor passed to
496        <STRONG>setupterm</STRONG> from <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> uses buffered I/O, and would write to
497        the  corresponding stream.  In addition to the limitation that the ter-
498        minal was left in block-buffered mode on exit (like System  V  curses),
499        it  was  problematic  because  <STRONG>ncurses</STRONG>  did not allow a reliable way to
500        cleanup on receiving SIGTSTP.
501
502        The current version (ncurses6) uses output buffers managed directly  by
503        <STRONG>ncurses</STRONG>.  Some of the low-level functions described in this manual page
504        write to the standard output.  They are not signal-safe.  The high-lev-
505        el functions in <STRONG>ncurses</STRONG> use alternate versions of these functions using
506        the more reliable buffering scheme.
507
508
509 </PRE><H3><a name="h3-Function-prototypes">Function prototypes</a></H3><PRE>
510        The X/Open Curses prototypes are based on the SVr4 curses header decla-
511        rations,  which  were defined at the same time the C language was first
512        standardized in the late 1980s.
513
514        <STRONG>o</STRONG>   X/Open Curses uses <STRONG>const</STRONG>  less  effectively  than  a  later  design
515            might,  in  some cases applying it needlessly to values are already
516            constant, and in most cases overlooking parameters  which  normally
517            would  use <STRONG>const</STRONG>.  Using constant parameters for functions which do
518            not use <STRONG>const</STRONG> may prevent the program from compiling.  On the other
519            hand, <EM>writable</EM> <EM>strings</EM> are an obsolescent feature.
520
521            As  an  extension,  this implementation can be configured to change
522            the function prototypes to use the <STRONG>const</STRONG> keyword.  The ncurses  ABI
523            6 enables this feature by default.
524
525        <STRONG>o</STRONG>   X/Open  Curses  prototypes <STRONG>tparm</STRONG> with a fixed number of parameters,
526            rather than a variable argument list.
527
528            This implementation uses a variable argument list, but can be  con-
529            figured  to  use  the  fixed-parameter list.  Portable applications
530            should provide 9 parameters after the format; zeroes are  fine  for
531            this purpose.
532
533            In  response  to review comments by Thomas E. Dickey, X/Open Curses
534            Issue 7 proposed the <STRONG>tiparm</STRONG> function in mid-2009.
535
536
537 </PRE><H3><a name="h3-Special-TERM-treatment">Special TERM treatment</a></H3><PRE>
538        If configured to use the terminal-driver, e.g., for the MinGW port,
539
540        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG> interprets a missing/empty TERM variable as  the  special
541            value "unknown".
542
543        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG>  allows explicit use of the the windows console driver by
544            checking if $TERM is set to "#win32con" or an abbreviation of  that
545            string.
546
547
548 </PRE><H3><a name="h3-Other-portability-issues">Other portability issues</a></H3><PRE>
549        In  System  V Release 4, <STRONG>set_curterm</STRONG> has an <STRONG>int</STRONG> return type and returns
550        <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>.  We have chosen to implement the X/Open Curses semantics.
551
552        In System V Release 4, the third argument of <STRONG>tputs</STRONG>  has  the  type  <STRONG>int</STRONG>
553        <STRONG>(*putc)(char)</STRONG>.
554
555        At  least one implementation of X/Open Curses (Solaris) returns a value
556        other than <STRONG>OK</STRONG>/<STRONG>ERR</STRONG> from <STRONG>tputs</STRONG>.  That returns the length of  the  string,
557        and does no error-checking.
558
559        X/Open  notes  that after calling <STRONG>mvcur</STRONG>, the curses state may not match
560        the actual terminal state, and that an application should touch and re-
561        fresh the window before resuming normal curses calls.  Both <STRONG>ncurses</STRONG> and
562        System V Release 4 curses implement <STRONG>mvcur</STRONG> using the SCREEN  data  allo-
563        cated  in  either  <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  So though it is documented as a
564        terminfo function, <STRONG>mvcur</STRONG> is really a curses function which is not  well
565        specified.
566
567        X/Open  states that the old location must be given for <STRONG>mvcur</STRONG>.  This im-
568        plementation allows the caller to use -1's for the old  ordinates.   In
569        that case, the old location is unknown.
570
571
572 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
573        <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_termcap.3x.html">curs_termcap(3x)</A></STRONG>,
574        <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><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
575
576
577
578                                                              <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
579 </PRE>
580 <div class="nav">
581 <ul>
582 <li><a href="#h2-NAME">NAME</a></li>
583 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
584 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
585 <ul>
586 <li><a href="#h3-Initialization">Initialization</a></li>
587 <li><a href="#h3-The-Terminal-State">The Terminal State</a></li>
588 <li><a href="#h3-Formatting-Output">Formatting Output</a></li>
589 <li><a href="#h3-Output-Functions">Output Functions</a></li>
590 <li><a href="#h3-Terminal-Capability-Functions">Terminal Capability Functions</a></li>
591 <li><a href="#h3-Terminal-Capability-Names">Terminal Capability Names</a></li>
592 </ul>
593 </li>
594 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a>
595 <ul>
596 <li><a href="#h3-Compatibility-macros">Compatibility macros</a></li>
597 </ul>
598 </li>
599 <li><a href="#h2-HISTORY">HISTORY</a></li>
600 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
601 <ul>
602 <li><a href="#h3-Legacy-functions">Legacy functions</a></li>
603 <li><a href="#h3-Legacy-data">Legacy data</a></li>
604 <li><a href="#h3-Output-buffering">Output buffering</a></li>
605 <li><a href="#h3-Function-prototypes">Function prototypes</a></li>
606 <li><a href="#h3-Special-TERM-treatment">Special TERM treatment</a></li>
607 <li><a href="#h3-Other-portability-issues">Other portability issues</a></li>
608 </ul>
609 </li>
610 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
611 </ul>
612 </div>
613 </BODY>
614 </HTML>