2 ****************************************************************************
3 * Copyright 2018-2020,2021 Thomas E. Dickey *
4 * Copyright 1998-2016,2017 Free Software Foundation, Inc. *
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: *
14 * The above copyright notice and this permission notice shall be included *
15 * in all copies or substantial portions of the Software. *
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. *
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 *
29 ****************************************************************************
30 * @Id: curs_terminfo.3x,v 1.75 2021/06/17 21:11:08 tom Exp @
31 * ***************************************************************************
32 * ***************************************************************************
33 * ***************************************************************************
34 * ***************************************************************************
35 * ***************************************************************************
36 * ***************************************************************************
37 * ***************************************************************************
39 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
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">
49 <H1 class="no-header">curs_terminfo 3x</H1>
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>
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
62 </PRE><H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
63 <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
64 <STRONG>#include</STRONG> <STRONG><term.h></STRONG>
66 <STRONG>TERMINAL</STRONG> <STRONG>*cur_term;</STRONG>
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>
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>
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>
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>
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>
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>
98 <STRONG>char</STRONG> <STRONG>*tiparm(const</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>str</EM><STRONG>,</STRONG> <STRONG>...);</STRONG>
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.
107 None of these functions use (or are aware of) multibyte character
108 strings such as UTF-8:
110 <STRONG>o</STRONG> capability names use the POSIX portable character set
112 <STRONG>o</STRONG> capability string values have no associated encoding; they are
113 strings of 8-bit characters.
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>].
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.
126 The <STRONG>terminfo</STRONG> variables <STRONG>lines</STRONG> and <STRONG>columns</STRONG> are initialized by <STRONG>setupterm</STRONG>
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.
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
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>].
144 Programs which use cursor addressing should
146 <STRONG>o</STRONG> output <STRONG>enter_ca_mode</STRONG> upon startup and
148 <STRONG>o</STRONG> output <STRONG>exit_ca_mode</STRONG> before exiting.
150 Programs which execute shell subprocesses should
152 <STRONG>o</STRONG> call <STRONG>reset_shell_mode</STRONG> and output <STRONG>exit_ca_mode</STRONG> before the shell is
155 <STRONG>o</STRONG> output <STRONG>enter_ca_mode</STRONG> and call <STRONG>reset_prog_mode</STRONG> after returning from
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:
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.
166 is the file descriptor used for all output.
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.
175 If <STRONG>ERR</STRONG> is returned, examine <EM>errret</EM>:
177 <STRONG>1</STRONG> means that the terminal is hardcopy, cannot be used for
180 <STRONG>setupterm</STRONG> determines if the entry is a hardcopy type by
181 checking the <STRONG>hc</STRONG> (<STRONG>hardcopy</STRONG>) capability.
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
187 <STRONG>setupterm</STRONG> determines if the entry is a generic type by
188 checking the <STRONG>gn</STRONG> (<STRONG>generic</STRONG>) capability.
190 <STRONG>-1</STRONG> means that the <STRONG>terminfo</STRONG> database could not be found.
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:
195 <STRONG>setupterm((char</STRONG> <STRONG>*)0,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0);</STRONG>,
197 which uses all the defaults and sends the output to <STRONG>stdout</STRONG>.
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
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-
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>.
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.
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.
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-
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.
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.
244 <STRONG>o</STRONG> Padding information is ignored by <STRONG>tparm</STRONG>; it is interpreted by
245 <STRONG>tputs</STRONG>.
247 <STRONG>o</STRONG> The capability string is null-terminated. Use "\200" where an
248 ASCII NUL is needed in the output.
250 <STRONG>tiparm</STRONG> is a newer form of <STRONG>tparm</STRONG> which uses <EM><stdarg.h></EM> rather than a
251 fixed-parameter list. Its numeric parameters are integers (int) rather
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 "$<5>" as 5 mil-
258 liseconds) to the string <EM>str</EM> and outputs it:
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>.
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-
267 <STRONG>o</STRONG> <EM>affcnt</EM> is the number of lines affected, or 1 if not applicable.
269 <STRONG>o</STRONG> <EM>putc</EM> is a <STRONG>putchar</STRONG>-like routine to which the characters are passed,
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>.
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
280 The <STRONG>vidattr</STRONG> routine is like the <STRONG>vidputs</STRONG> routine, except that it outputs
281 through <STRONG>putchar</STRONG>.
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.,
287 <STRONG>o</STRONG> <EM>attrs</EM> of type <STRONG>attr_t</STRONG> for the attributes and
289 <STRONG>o</STRONG> <EM>pair</EM> of type <STRONG>short</STRONG> for the color-pair number.
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.
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.
299 The <STRONG>mvcur</STRONG> routine provides low-level cursor motion. It takes effect
300 immediately (rather than at the next refresh).
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><curses.h></STRONG> because SystemV did
304 this (see <STRONG>HISTORY</STRONG>).
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>.
313 These routines return special values to denote errors.
315 The <STRONG>tigetflag</STRONG> routine returns
317 <STRONG>-1</STRONG> if <EM>capname</EM> is not a boolean capability, or
319 <STRONG>0</STRONG> if it is canceled or absent from the terminal description.
321 The <STRONG>tigetnum</STRONG> routine returns
323 <STRONG>-2</STRONG> if <EM>capname</EM> is not a numeric capability, or
325 <STRONG>-1</STRONG> if it is canceled or absent from the terminal description.
327 The <STRONG>tigetstr</STRONG> routine returns
329 <STRONG>(char</STRONG> <STRONG>*)-1</STRONG>
330 if <EM>capname</EM> is not a string capability, or
332 <STRONG>0</STRONG> if it is canceled or absent from the terminal description.
335 </PRE><H3><a name="h3-Terminal-Capability-Names">Terminal Capability Names</a></H3><PRE>
336 These null-terminated arrays contain
338 <STRONG>o</STRONG> the short terminfo names ("codes"),
340 <STRONG>o</STRONG> the <STRONG>termcap</STRONG> names ("names"), and
342 <STRONG>o</STRONG> the long terminfo names ("fnames")
344 for each of the predefined <STRONG>terminfo</STRONG> variables:
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>
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.
356 Routines that return pointers always return <STRONG>NULL</STRONG> on error.
358 X/Open defines no error conditions. In this implementation
360 <STRONG>del_curterm</STRONG>
361 returns an error if its terminal parameter is null.
363 <STRONG>putp</STRONG> calls <STRONG>tputs</STRONG>, returning the same error-codes.
365 <STRONG>restartterm</STRONG>
366 returns an error if the associated call to <STRONG>setupterm</STRONG> returns an
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.
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>.
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>.
385 In SVr4, those are found in <STRONG><curses.h></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:
390 <STRONG>setupterm(</STRONG><EM>term</EM><STRONG>,</STRONG> <STRONG>1,</STRONG> <STRONG>(int</STRONG> <STRONG>*)0)</STRONG>
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,
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:
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
420 The programming manual also mentioned functions provided for termcap
421 compatibility (commenting that they "may go away at a later date"):
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
433 Early terminfo programs obtained capability values from the <STRONG>TERMINAL</STRONG>
434 structure initialized by <STRONG>setupterm</STRONG>.
436 SVr3 extended terminfo by adding functions to retrieve capability val-
437 ues (like the termcap interface), and reusing tgoto and tputs:
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>
445 SVr3 also replaced several of the SVr2 terminfo functions which had no
446 counterpart in the termcap interface, documenting them as obsolete:
448 <STRONG>Function</STRONG> <STRONG>Replaced</STRONG> <STRONG>by</STRONG>
449 -----------------------------
451 fixterm reset_prog_mode
454 resetterm reset_shell_mode
455 saveterm def_prog_mode
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>).
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.
467 SVr4 added the <STRONG>vid_attr</STRONG> and <STRONG>vid_puts</STRONG> functions.
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.
474 </PRE><H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
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.
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.
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.
487 Other implementions may not declare the capability name arrays. Some
488 provide them without declaring them. X/Open does not specify them.
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.
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.
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.
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.
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.
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.
525 <STRONG>o</STRONG> X/Open Curses prototypes <STRONG>tparm</STRONG> with a fixed number of parameters,
526 rather than a variable argument list.
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
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.
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,
540 <STRONG>o</STRONG> <STRONG>setupterm</STRONG> interprets a missing/empty TERM variable as the special
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
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.
552 In System V Release 4, the third argument of <STRONG>tputs</STRONG> has the type <STRONG>int</STRONG>
553 <STRONG>(*putc)(char)</STRONG>.
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.
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
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.
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>
578 <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3x)</A></STRONG>
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>
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>
594 <li><a href="#h2-RETURN-VALUE">RETURN VALUE</a>
596 <li><a href="#h3-Compatibility-macros">Compatibility macros</a></li>
599 <li><a href="#h2-HISTORY">HISTORY</a></li>
600 <li><a href="#h2-PORTABILITY">PORTABILITY</a>
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>
610 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>