3c8da425172f50bff6cdbc383b838b27ff454b4f
[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.72 2021/01/02 23:50:04 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>tiparm</STRONG>  is  a  newer  form of <STRONG>tparm</STRONG> which uses <EM>&lt;stdarg.h&gt;</EM> rather than a
245        fixed-parameter list.  Its numeric parameters are integers (int) rather
246        than longs.
247
248
249 </PRE><H3><a name="h3-Output-Functions">Output Functions</a></H3><PRE>
250        The  <STRONG>tputs</STRONG>  routine  applies  padding information to the string <EM>str</EM> and
251        outputs it:
252
253        <STRONG>o</STRONG>   The <EM>str</EM> parameter must be a terminfo string variable or the  return
254            value from <STRONG>tparm</STRONG>, <STRONG>tiparm</STRONG>, <STRONG>tgetstr</STRONG>, or <STRONG>tgoto</STRONG>.
255
256            The  <STRONG>tgetstr</STRONG> and <STRONG>tgoto</STRONG> functions are part of the <EM>termcap</EM> interface,
257            which happens to share this function name with the <EM>terminfo</EM>  inter-
258            face.
259
260        <STRONG>o</STRONG>   <EM>affcnt</EM> is the number of lines affected, or 1 if not applicable.
261
262        <STRONG>o</STRONG>   <EM>putc</EM>  is a <STRONG>putchar</STRONG>-like routine to which the characters are passed,
263            one at a time.
264
265        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-
266        ways goes to <STRONG>stdout</STRONG>, rather than the <EM>filedes</EM> specified in <STRONG>setupterm</STRONG>.
267
268        The  <STRONG>vidputs</STRONG>  routine  displays the string on the terminal in the video
269        attribute mode <EM>attrs</EM>, which is any combination of the attributes listed
270        in  <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.   The characters are passed to the <STRONG>putchar</STRONG>-like routine
271        <EM>putc</EM>.
272
273        The <STRONG>vidattr</STRONG> routine is like the <STRONG>vidputs</STRONG> routine, except that it outputs
274        through <STRONG>putchar</STRONG>.
275
276        The  <STRONG>vid_attr</STRONG>  and <STRONG>vid_puts</STRONG> routines correspond to vidattr and vidputs,
277        respectively.  They use a set of arguments for representing  the  video
278        attributes plus color, i.e.,
279
280        <STRONG>o</STRONG>   <EM>attrs</EM> of type <STRONG>attr_t</STRONG> for the attributes and
281
282        <STRONG>o</STRONG>   <EM>pair</EM> of type <STRONG>short</STRONG> for the color-pair number.
283
284        The  <STRONG>vid_attr</STRONG>  and  <STRONG>vid_puts</STRONG> routines are designed to use the attribute
285        constants with the <EM>WA</EM><STRONG>_</STRONG> prefix.
286
287        X/Open Curses reserves the <EM>opts</EM> argument for future  use,  saying  that
288        applications  must provide a null pointer for that argument.  As an ex-
289        tension, this implementation allows <EM>opts</EM> to be used  as  a  pointer  to
290        <STRONG>int</STRONG>, which overrides the <EM>pair</EM> (<STRONG>short</STRONG>) argument.
291
292        The  <STRONG>mvcur</STRONG>  routine  provides low-level cursor motion.  It takes effect
293        immediately (rather than at the next refresh).
294
295        While <STRONG>putp</STRONG> and <STRONG>mvcur</STRONG> are low-level functions which do not use the high-
296        level curses state, they are declared in <STRONG>&lt;curses.h&gt;</STRONG> because SystemV did
297        this (see <STRONG>HISTORY</STRONG>).
298
299
300 </PRE><H3><a name="h3-Terminal-Capability-Functions">Terminal Capability Functions</a></H3><PRE>
301        The <STRONG>tigetflag</STRONG>, <STRONG>tigetnum</STRONG> and <STRONG>tigetstr</STRONG> routines return the value  of  the
302        capability  corresponding  to the <STRONG>terminfo</STRONG> <EM>capname</EM> passed to them, such
303        as <STRONG>xenl</STRONG>.  The <EM>capname</EM> for each capability is given in the table  column
304        entitled <EM>capname</EM> code in the capabilities section of <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
305
306        These routines return special values to denote errors.
307
308        The <STRONG>tigetflag</STRONG> routine returns
309
310        <STRONG>-1</STRONG>     if <EM>capname</EM> is not a boolean capability, or
311
312        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
313
314        The <STRONG>tigetnum</STRONG> routine returns
315
316        <STRONG>-2</STRONG>     if <EM>capname</EM> is not a numeric capability, or
317
318        <STRONG>-1</STRONG>     if it is canceled or absent from the terminal description.
319
320        The <STRONG>tigetstr</STRONG> routine returns
321
322        <STRONG>(char</STRONG> <STRONG>*)-1</STRONG>
323               if <EM>capname</EM> is not a string capability, or
324
325        <STRONG>0</STRONG>      if it is canceled or absent from the terminal description.
326
327
328 </PRE><H3><a name="h3-Terminal-Capability-Names">Terminal Capability Names</a></H3><PRE>
329        These null-terminated arrays contain
330
331        <STRONG>o</STRONG>   the short terminfo names ("codes"),
332
333        <STRONG>o</STRONG>   the <STRONG>termcap</STRONG> names ("names"), and
334
335        <STRONG>o</STRONG>   the long terminfo names ("fnames")
336
337        for each of the predefined <STRONG>terminfo</STRONG> variables:
338
339               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*boolnames[]</STRONG>, <STRONG>*boolcodes[]</STRONG>, <STRONG>*boolfnames[]</STRONG>
340               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*numnames[]</STRONG>, <STRONG>*numcodes[]</STRONG>, <STRONG>*numfnames[]</STRONG>
341               <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*strnames[]</STRONG>, <STRONG>*strcodes[]</STRONG>, <STRONG>*strfnames[]</STRONG>
342
343
344 </PRE><H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
345        Routines  that  return  an integer return <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG> (SVr4
346        only specifies "an integer value other than <STRONG>ERR</STRONG>") upon successful  com-
347        pletion, unless otherwise noted in the preceding routine descriptions.
348
349        Routines that return pointers always return <STRONG>NULL</STRONG> on error.
350
351        X/Open defines no error conditions.  In this implementation
352
353           <STRONG>del_curterm</STRONG>
354                returns an error if its terminal parameter is null.
355
356           <STRONG>putp</STRONG> calls <STRONG>tputs</STRONG>, returning the same error-codes.
357
358           <STRONG>restartterm</STRONG>
359                returns an error if the associated call to <STRONG>setupterm</STRONG> returns an
360                error.
361
362           <STRONG>setupterm</STRONG>
363                returns an error if it cannot allocate enough memory, or create
364                the initial windows (stdscr, curscr, newscr).  Other error con-
365                ditions are documented above.
366
367           <STRONG>tputs</STRONG>
368                returns an error if the string parameter is null.  It does  not
369                detect  I/O errors: X/Open states that <STRONG>tputs</STRONG> ignores the return
370                value of the output function <EM>putc</EM>.
371
372
373 </PRE><H3><a name="h3-Compatibility-macros">Compatibility macros</a></H3><PRE>
374        This implementation provides a few macros for compatibility  with  sys-
375        tems  before  SVr4  (see  <STRONG>HISTORY</STRONG>).   Those  include  <STRONG>crmode</STRONG>,  <STRONG>fixterm</STRONG>,
376        <STRONG>gettmode</STRONG>, <STRONG>nocrmode</STRONG>, <STRONG>resetterm</STRONG>, <STRONG>saveterm</STRONG>, and <STRONG>setterm</STRONG>.
377
378        In SVr4, those are found in <STRONG>&lt;curses.h&gt;</STRONG>, but  except  for  <STRONG>setterm</STRONG>,  are
379        likewise macros.  The one function, <STRONG>setterm</STRONG>, is mentioned in the manual
380        page.  The manual page notes that the <STRONG>setterm</STRONG> routine was  replaced  by
381        <STRONG>setupterm</STRONG>, stating that the call:
382
383              <STRONG>setupterm(</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0)</STRONG>
384
385        provides the same functionality as <STRONG>setterm(</STRONG><EM>term</EM><STRONG>)</STRONG>, and is not recommend-
386        ed for new programs.  This implementation provides each of  those  sym-
387        bols as macros for BSD compatibility,
388
389
390 </PRE><H2><a name="h2-HISTORY">HISTORY</a></H2><PRE>
391        SVr2 introduced the terminfo feature.  Its programming manual mentioned
392        these low-level functions:
393
394        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
395        ------------------------------------------------------------
396
397        fixterm     restore tty to "in curses" state
398        gettmode    establish current tty modes
399        mvcur       low level cursor motion
400        putp        utility function that uses <STRONG>tputs</STRONG> to send  char-
401                    acters via <STRONG>putchar</STRONG>.
402        resetterm   set tty modes to "out of curses" state
403        resetty     reset tty flags to stored value
404        saveterm    save current modes as "in curses" state
405        savetty     store current tty flags
406        setterm     establish terminal with given type
407        setupterm   establish terminal with given type
408        tparm       instantiate a string expression with parameters
409        tputs       apply padding information to a string
410        vidattr     like <STRONG>vidputs</STRONG>, but outputs through <STRONG>putchar</STRONG>
411        vidputs     output  a string to put terminal in a specified
412                    video attribute mode
413
414        The programming manual also mentioned functions  provided  for  termcap
415        compatibility (commenting that they "may go away at a later date"):
416
417        <STRONG>Function</STRONG>   <STRONG>Description</STRONG>
418        ------------------------------------------------
419        tgetent    look up termcap entry for given <EM>name</EM>
420        tgetflag   get boolean entry for given <EM>id</EM>
421        tgetnum    get numeric entry for given <EM>id</EM>
422        tgetstr    get string entry for given <EM>id</EM>
423        tgoto      apply parameters to given capability
424        tputs      apply padding to capability, calling
425                   a function to put characters
426
427        Early terminfo programs obtained capability values  from  the  <STRONG>TERMINAL</STRONG>
428        structure initialized by <STRONG>setupterm</STRONG>.
429
430        SVr3  extended terminfo by adding functions to retrieve capability val-
431        ues (like the termcap interface), and reusing tgoto and tputs:
432
433        <STRONG>Function</STRONG>    <STRONG>Description</STRONG>
434        -------------------------------------------
435        tigetflag   get boolean entry for given <EM>id</EM>
436        tigetnum    get numeric entry for given <EM>id</EM>
437        tigetstr    get string entry for given <EM>id</EM>
438
439        SVr3 also replaced several of the SVr2 terminfo functions which had  no
440        counterpart in the termcap interface, documenting them as obsolete:
441
442        <STRONG>Function</STRONG>    <STRONG>Replaced</STRONG> <STRONG>by</STRONG>
443        -----------------------------
444        crmode      cbreak
445        fixterm     reset_prog_mode
446        gettmode    N/A
447        nocrmode    nocbreak
448        resetterm   reset_shell_mode
449        saveterm    def_prog_mode
450        setterm     setupterm
451
452        SVr3  kept  the  <STRONG>mvcur</STRONG>, <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> functions, along with <STRONG>putp</STRONG>,
453        <STRONG>tparm</STRONG> and <STRONG>tputs</STRONG>.  The latter were needed to support padding,  and  han-
454        dling  functions  such as <STRONG>vidattr</STRONG> (which used more than the two parame-
455        ters supported by <STRONG>tgoto</STRONG>).
456
457        SVr3 introduced the functions for switching between  terminal  descrip-
458        tions,  e.g.,  <STRONG>set_curterm</STRONG>.  The various global variables such as <STRONG>bool-</STRONG>
459        <STRONG>names</STRONG> were mentioned in the programming manual at this point.
460
461        SVr4 added the <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> functions.
462
463        There are other low-level functions declared in the curses header files
464        on Unix systems, but none were documented.  The functions marked "obso-
465        lete" remained in use by the Unix <STRONG>vi</STRONG> editor.
466
467
468 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
469
470 </PRE><H3><a name="h3-Legacy-functions">Legacy functions</a></H3><PRE>
471        X/Open notes that <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> may be macros.
472
473        The function <STRONG>setterm</STRONG> is not described by X/Open and must be  considered
474        non-portable.  All other functions are as described by X/Open.
475
476
477 </PRE><H3><a name="h3-Legacy-data">Legacy data</a></H3><PRE>
478        <STRONG>setupterm</STRONG>  copies  the terminal name to the array <STRONG>ttytype</STRONG>.  This is not
479        part of X/Open Curses, but is assumed by some applications.
480
481        Other implementions may not declare the capability name  arrays.   Some
482        provide them without declaring them.  X/Open does not specify them.
483
484        Extended terminal capability names, e.g., as defined by <STRONG>tic</STRONG> <STRONG>-x</STRONG>, are not
485        stored in the arrays described here.
486
487
488 </PRE><H3><a name="h3-Output-buffering">Output buffering</a></H3><PRE>
489        Older versions of <STRONG>ncurses</STRONG> assumed that the file  descriptor  passed  to
490        <STRONG>setupterm</STRONG> from <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG> uses buffered I/O, and would write to
491        the corresponding stream.  In addition to the limitation that the  ter-
492        minal  was  left in block-buffered mode on exit (like System V curses),
493        it was problematic because <STRONG>ncurses</STRONG> did not  allow  a  reliable  way  to
494        cleanup on receiving SIGTSTP.
495
496        The  current version (ncurses6) uses output buffers managed directly by
497        <STRONG>ncurses</STRONG>.  Some of the low-level functions described in this manual page
498        write to the standard output.  They are not signal-safe.  The high-lev-
499        el functions in <STRONG>ncurses</STRONG> use alternate versions of these functions using
500        the more reliable buffering scheme.
501
502
503 </PRE><H3><a name="h3-Function-prototypes">Function prototypes</a></H3><PRE>
504        The X/Open Curses prototypes are based on the SVr4 curses header decla-
505        rations, which were defined at the same time the C language  was  first
506        standardized in the late 1980s.
507
508        <STRONG>o</STRONG>   X/Open  Curses  uses  <STRONG>const</STRONG>  less  effectively  than a later design
509            might, in some cases applying it needlessly to values  are  already
510            constant,  and  in most cases overlooking parameters which normally
511            would use <STRONG>const</STRONG>.  Using constant parameters for functions which  do
512            not use <STRONG>const</STRONG> may prevent the program from compiling.  On the other
513            hand, <EM>writable</EM> <EM>strings</EM> are an obsolescent feature.
514
515            As an extension, this implementation can be  configured  to  change
516            the  function prototypes to use the <STRONG>const</STRONG> keyword.  The ncurses ABI
517            6 enables this feature by default.
518
519        <STRONG>o</STRONG>   X/Open Curses prototypes <STRONG>tparm</STRONG> with a fixed number  of  parameters,
520            rather than a variable argument list.
521
522            This  implementation uses a variable argument list, but can be con-
523            figured to use the  fixed-parameter  list.   Portable  applications
524            should  provide  9 parameters after the format; zeroes are fine for
525            this purpose.
526
527            In response to review comments by Thomas E. Dickey,  X/Open  Curses
528            Issue 7 proposed the <STRONG>tiparm</STRONG> function in mid-2009.
529
530
531 </PRE><H3><a name="h3-Special-TERM-treatment">Special TERM treatment</a></H3><PRE>
532        If configured to use the terminal-driver, e.g., for the MinGW port,
533
534        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG>  interprets  a missing/empty TERM variable as the special
535            value "unknown".
536
537        <STRONG>o</STRONG>   <STRONG>setupterm</STRONG> allows explicit use of the the windows console driver  by
538            checking  if $TERM is set to "#win32con" or an abbreviation of that
539            string.
540
541
542 </PRE><H3><a name="h3-Other-portability-issues">Other portability issues</a></H3><PRE>
543        In System V Release 4, <STRONG>set_curterm</STRONG> has an <STRONG>int</STRONG> return type  and  returns
544        <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>.  We have chosen to implement the X/Open Curses semantics.
545
546        In  System  V  Release  4, the third argument of <STRONG>tputs</STRONG> has the type <STRONG>int</STRONG>
547        <STRONG>(*putc)(char)</STRONG>.
548
549        At least one implementation of X/Open Curses (Solaris) returns a  value
550        other  than  <STRONG>OK</STRONG>/<STRONG>ERR</STRONG> from <STRONG>tputs</STRONG>.  That returns the length of the string,
551        and does no error-checking.
552
553        X/Open notes that after calling <STRONG>mvcur</STRONG>, the curses state may  not  match
554        the actual terminal state, and that an application should touch and re-
555        fresh the window before resuming normal curses calls.  Both <STRONG>ncurses</STRONG> and
556        System  V  Release 4 curses implement <STRONG>mvcur</STRONG> using the SCREEN data allo-
557        cated in either <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.  So though it is  documented  as  a
558        terminfo  function, <STRONG>mvcur</STRONG> is really a curses function which is not well
559        specified.
560
561        X/Open states that the old location must be given for <STRONG>mvcur</STRONG>.  This  im-
562        plementation  allows  the caller to use -1's for the old ordinates.  In
563        that case, the old location is unknown.
564
565
566 </PRE><H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
567        <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>,
568        <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>
569
570
571
572                                                              <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
573 </PRE>
574 <div class="nav">
575 <ul>
576 <li><a href="#h2-NAME">NAME</a></li>
577 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
578 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
579 <ul>
580 <li><a href="#h3-Initialization">Initialization</a></li>
581 <li><a href="#h3-The-Terminal-State">The Terminal State</a></li>
582 <li><a href="#h3-Formatting-Output">Formatting Output</a></li>
583 <li><a href="#h3-Output-Functions">Output Functions</a></li>
584 <li><a href="#h3-Terminal-Capability-Functions">Terminal Capability Functions</a></li>
585 <li><a href="#h3-Terminal-Capability-Names">Terminal Capability Names</a></li>
586 </ul>
587 </li>
588 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a>
589 <ul>
590 <li><a href="#h3-Compatibility-macros">Compatibility macros</a></li>
591 </ul>
592 </li>
593 <li><a href="#h2-HISTORY">HISTORY</a></li>
594 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
595 <ul>
596 <li><a href="#h3-Legacy-functions">Legacy functions</a></li>
597 <li><a href="#h3-Legacy-data">Legacy data</a></li>
598 <li><a href="#h3-Output-buffering">Output buffering</a></li>
599 <li><a href="#h3-Function-prototypes">Function prototypes</a></li>
600 <li><a href="#h3-Special-TERM-treatment">Special TERM treatment</a></li>
601 <li><a href="#h3-Other-portability-issues">Other portability issues</a></li>
602 </ul>
603 </li>
604 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
605 </ul>
606 </div>
607 </BODY>
608 </HTML>