mirror of
https://github.com/ThomasDickey/ncurses-snapshots.git
synced 2026-01-26 11:04:35 +00:00
716 lines
20 KiB
Plaintext
716 lines
20 KiB
Plaintext
.\"***************************************************************************
|
|
.\" Copyright 2018-2024,2025 Thomas E. Dickey *
|
|
.\" Copyright 1998-2017,2018 Free Software Foundation, Inc. *
|
|
.\" *
|
|
.\" Permission is hereby granted, free of charge, to any person obtaining a *
|
|
.\" copy of this software and associated documentation files (the *
|
|
.\" "Software"), to deal in the Software without restriction, including *
|
|
.\" without limitation the rights to use, copy, modify, merge, publish, *
|
|
.\" distribute, distribute with modifications, sublicense, and/or sell *
|
|
.\" copies of the Software, and to permit persons to whom the Software is *
|
|
.\" furnished to do so, subject to the following conditions: *
|
|
.\" *
|
|
.\" The above copyright notice and this permission notice shall be included *
|
|
.\" in all copies or substantial portions of the Software. *
|
|
.\" *
|
|
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
|
|
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
|
|
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
|
|
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
|
|
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
|
|
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
|
|
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
|
|
.\" *
|
|
.\" Except as contained in this notice, the name(s) of the above copyright *
|
|
.\" holders shall not be used in advertising or otherwise to promote the *
|
|
.\" sale, use or other dealings in this Software without prior written *
|
|
.\" authorization. *
|
|
.\"***************************************************************************
|
|
.\"
|
|
.\" $Id: curs_termcap.3x,v 1.107 2025/08/16 19:09:12 tom Exp $
|
|
.TH curs_termcap 3X 2025-08-16 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
|
|
.ie \n(.g \{\
|
|
.ds `` \(lq
|
|
.ds '' \(rq
|
|
.\}
|
|
.el \{\
|
|
.ie t .ds `` ``
|
|
.el .ds `` ""
|
|
.ie t .ds '' ''
|
|
.el .ds '' ""
|
|
.\}
|
|
.
|
|
.ie \n(.g .ds : \:
|
|
.el .ds : \" empty
|
|
.
|
|
.de bP
|
|
.ie n .IP \(bu 4
|
|
.el .IP \(bu 2
|
|
..
|
|
.
|
|
.\" URL hyperlink support macros from groff's "an-ext.tmac"
|
|
.
|
|
.\" Save the automatic hyphenation mode.
|
|
.\"
|
|
.\" In AT&T troff, there was no register exposing the hyphenation mode,
|
|
.\" and no way to save and restore it. Set `mH` to a reasonable value
|
|
.\" for your implementation and preference.
|
|
.de mY
|
|
. ie !\\n(.g \
|
|
. nr mH 14
|
|
. el \
|
|
. do nr mH \\n[.hy] \" groff extension register
|
|
..
|
|
.
|
|
.\" Prepare link text for mail/web hyperlinks. `MT` and `UR` call this.
|
|
.de mV
|
|
. ds mU \\$1\"
|
|
..
|
|
.
|
|
.\" Emit hyperlink. The optional argument supplies trailing punctuation
|
|
.\" after link text. `ME` and `UE` call this.
|
|
.de mQ
|
|
. mY
|
|
. nh
|
|
<\\*(mU>\\$1
|
|
. hy \\n(mH
|
|
. rm mU
|
|
..
|
|
.
|
|
.\" Start URL.
|
|
.\" .UR url
|
|
.if !\n(.g \{\
|
|
.de UR
|
|
. mV \\$1
|
|
..
|
|
.\}
|
|
.
|
|
.\" End URL.
|
|
.\" .UE [punctuation]
|
|
.if !\n(.g \{\
|
|
.de UE
|
|
. mQ \\$1
|
|
..
|
|
.\}
|
|
.
|
|
.SH NAME
|
|
\fB\%PC\fP,
|
|
\fB\%UP\fP,
|
|
\fB\%BC\fP,
|
|
\fB\%ospeed\fP,
|
|
\fB\%tgetent\fP,
|
|
\fB\%tgetflag\fP,
|
|
\fB\%tgetnum\fP,
|
|
\fB\%tgetstr\fP,
|
|
\fB\%tgoto\fP,
|
|
\fB\%tputs\fP \-
|
|
\fIcurses\fR emulation of \fItermcap\fR
|
|
.SH SYNOPSIS
|
|
.nf
|
|
\fB#include <curses.h>
|
|
\fB#include <term.h>
|
|
.PP
|
|
\fBchar PC;
|
|
\fBchar * UP;
|
|
\fBchar * BC;
|
|
\fB@NCURSES_OSPEED@ ospeed;
|
|
.PP
|
|
\fBint tgetent(char * \fIbp\fP, const char * \fIname\fP);
|
|
\fBint tgetflag(const char * \fIid\fP);
|
|
\fBint tgetnum(const char * \fIid\fP);
|
|
\fBchar * tgetstr(const char * \fIid\fP, char ** \fIsbuf\fP);
|
|
\fBchar * tgoto(const char * \fIcap\fP, int \fIcol\fP, int \fIrow\fP);
|
|
\fBint tputs(const char * \fIstr\fP, int \fIaffcnt\fP, int (* \fIputc\fP)(int));
|
|
.fi
|
|
.SH DESCRIPTION
|
|
.I \%ncurses
|
|
provides the foregoing variables and functions as a compatibility layer
|
|
for programs that use the \fItermcap\fP library.
|
|
The API is the same,
|
|
but behavior is emulated using the \fI\%term\%info\fP database.
|
|
Thus,
|
|
it can be used only to query the capabilities of terminal database
|
|
entries for which a \fI\%term\%info\fP entry has been compiled.
|
|
.SS Initialization
|
|
\fB\%tgetent\fP loads the terminal database entry for \fIname\fP;
|
|
see \fBterm\fP(7).
|
|
This must be done before calling any of the other functions.
|
|
It returns
|
|
.RS 3
|
|
.TP 5 \" "-1" + 2n + adjust for PDF
|
|
.B 1
|
|
on success,
|
|
.TP
|
|
.B 0
|
|
if there is no such entry
|
|
(or if the matching entry describes a generic terminal,
|
|
having too little information for
|
|
.I curses
|
|
applications to run),
|
|
and
|
|
.TP
|
|
.B \-1
|
|
if the
|
|
.I \%term\%info
|
|
database could not be found.
|
|
.RE
|
|
.PP
|
|
This implementation differs from those of historical \fItermcap\fP
|
|
libraries.
|
|
.bP
|
|
.I \%ncurses
|
|
ignores the buffer pointer \fIbp\fP,
|
|
as do other \fItermcap\fP implementations conforming to portions of
|
|
X/Open Curses now withdrawn.
|
|
The BSD \fItermcap\fP library would store a copy of the terminal type
|
|
description in the buffer referenced by this pointer.
|
|
\fI\%term\%info\fP stores terminal type descriptions in compiled form,
|
|
which is not the same thing.
|
|
.bP
|
|
The meanings of the return values differ.
|
|
The BSD \fItermcap\fP library does not check whether the terminal type
|
|
description includes the
|
|
.B \%generic
|
|
.RB ( gn )
|
|
capability,
|
|
nor whether the terminal type description supports an addressable
|
|
cursor,
|
|
a property essential for any \fIcurses\fP implementation to operate.
|
|
.SS "Retrieving Capability Values"
|
|
\fB\%tgetflag\fP reports the Boolean entry for \fIid\fP,
|
|
or zero if it is not available.
|
|
.PP
|
|
\fB\%tgetnum\fP obtains the numeric entry for \fIid\fP,
|
|
or \-1 if it is not available.
|
|
.PP
|
|
\fB\%tgetstr\fP returns the string entry for \fIid\fP,
|
|
or
|
|
.I NULL
|
|
if it is not available.
|
|
Use \fB\%tputs\fP to output the string returned.
|
|
The
|
|
.I sbuf
|
|
parameter is used as follows.
|
|
.bP
|
|
It is assumed to be the address of a pointer to a buffer managed by the
|
|
calling application.
|
|
.bP
|
|
However,
|
|
.I \%ncurses
|
|
checks to ensure that
|
|
.I sbuf
|
|
is not
|
|
.IR NULL ","
|
|
and that the pointer obtained by dereferencing
|
|
.I sbuf
|
|
is also not
|
|
.IR NULL "."
|
|
If either check fails,
|
|
.I \%ncurses
|
|
ignores
|
|
.IR sbuf .
|
|
.bP
|
|
If the checks succeed,
|
|
\fI\%ncurses\fP also copies the return value to the buffer pointed to by
|
|
\fIsbuf\fP,
|
|
and the library updates
|
|
.I sbuf
|
|
to point past the null character terminating this value.
|
|
.bP
|
|
The return value itself is an address in the terminal type description
|
|
loaded into memory.
|
|
.SS "Applying String Capabilities"
|
|
String capabilities can be parameterized;
|
|
see subsection \*(``Parameterized Strings\*('' in \fB\%terminfo\fP(5).
|
|
\fB\%tgoto\fP applies its second and third arguments to the parametric
|
|
placeholders in the capability stored in the first argument.
|
|
.bP
|
|
The capability may contain padding specifications;
|
|
see subsection \*(``Delays and Padding\*('' of \fB\%terminfo\fP(5).
|
|
The output of \fB\%tgoto\fP should thus be passed to \fB\%tputs\fP
|
|
rather than some other output function such as \fI\%printf\fP(3).
|
|
.bP
|
|
While \fB\%tgoto\fP is assumed to be used for the two-parameter
|
|
cursor positioning capability,
|
|
\fItermcap\fP applications also use it for single-parameter
|
|
capabilities.
|
|
.IP
|
|
Doing so reveals a quirk in \fB\%tgoto\fP:
|
|
most hardware terminals use cursor addressing with \fIrow\fP first,
|
|
but the original developers of the \fItermcap\fP interface chose to
|
|
put the \fIcol\fP (column) parameter first.
|
|
The \fB\%tgoto\fP function swaps the order of its parameters.
|
|
It does this even for calls requiring only a single parameter.
|
|
In that case,
|
|
the first parameter is merely a placeholder.
|
|
.bP
|
|
Normally the \fI\%ncurses\fP library is compiled without
|
|
full \fI\%termcap\fP support.
|
|
In that case,
|
|
\fB\%tgoto\fP uses an internal version of \fB\%tparm\fP(3X)
|
|
(a more capable function).
|
|
.IP
|
|
Because it uses \fB\%tparm\fP internally,
|
|
\fB\%tgoto\fP is able to use some \fI\%term\%info\fP features,
|
|
but not all.
|
|
In particular,
|
|
it allows only numeric parameters;
|
|
\fB\%tparm\fP supports string parameters.
|
|
.IP
|
|
However,
|
|
\fB\%tparm\fP is not a \fItermcap\fP feature,
|
|
and portable \fItermcap\fP applications should not rely upon its
|
|
availability.
|
|
.PP
|
|
\fB\%tputs\fP is described in \fB\%curs_terminfo\fP(3X).
|
|
It can retrieve capabilities by either \fItermcap\fP or
|
|
\fI\%term\%info\fP code.
|
|
.SS "Global Variables"
|
|
.B \%tgetent
|
|
sets the variables
|
|
.BR PC ","
|
|
.BR UP ","
|
|
and
|
|
.B BC
|
|
to the
|
|
.I \%term\%info
|
|
entry's data for
|
|
.B \%pad_char
|
|
.RB ( pad ),
|
|
.B \%cursor_up
|
|
.RB ( cuu1 ),
|
|
and
|
|
.B \%backspace_if_not_bs
|
|
.RB ( OTbs ),
|
|
respectively.
|
|
.I \%ncurses
|
|
does not employ
|
|
.B cuu1
|
|
internally.
|
|
\fB\%delay_output\fP(3X)
|
|
uses
|
|
.BR pad ","
|
|
while
|
|
.B \%tgoto
|
|
emulation uses the obsolete
|
|
.I termcap
|
|
capability
|
|
.BR bs ","
|
|
represented in
|
|
.I \%ncurses
|
|
.I \%term\%info
|
|
as \*(``OTbs\*(''.
|
|
.I \%ncurses
|
|
assigns the variable
|
|
.B \%ospeed
|
|
a system-specific value to encode the terminal's data rate.
|
|
.SS "Releasing Memory"
|
|
The \fItermcap\fP functions provide no means of freeing memory,
|
|
because legacy \fItermcap\fP implementations used only the storage
|
|
provided by the caller via \fB\%tgetent\fP and \fB\%tgetstr\fP.
|
|
Those buffers are unused in \fI\%term\%info\fP.
|
|
.PP
|
|
By contrast,
|
|
\fI\%term\%info\fP allocates memory.
|
|
It uses \fB\%setupterm\fP(3X) to obtain the data used by \fB\%tgetent\fP
|
|
and the functions that retrieve capability values.
|
|
One could use
|
|
.RS
|
|
.EX
|
|
del_curterm(cur_term);
|
|
.EE
|
|
.RE
|
|
to free this memory,
|
|
but there is an additional complication with \fI\%ncurses\fP.
|
|
It uses a fixed-size pool of storage locations,
|
|
one per value of the terminal name parameter given to \fB\%tgetent\fP.
|
|
The \fIscreen\fP(1) program relies upon this arrangement to improve its
|
|
performance.
|
|
.PP
|
|
An application that uses only the \fItermcap\fP functions,
|
|
not the higher-level
|
|
.I \%curses
|
|
API,
|
|
could release the memory using \fB\%del_curterm\fP(3X),
|
|
because the pool is freed using other functions;
|
|
see \fB\%curs_memleaks\fP(3X).
|
|
.SH "RETURN VALUE"
|
|
The return values of
|
|
\fB\%tgetent\fP,
|
|
\fB\%tgetflag\fP,
|
|
\fB\%tgetname\fP,
|
|
and
|
|
\fB\%tgetstr\fP
|
|
are documented above.
|
|
.PP
|
|
\fB\%tgoto\fP returns
|
|
.I NULL
|
|
on error.
|
|
Error conditions include:
|
|
.bP
|
|
uninitialized state
|
|
\%(\fBtgetent\fP was not called successfully),
|
|
.bP
|
|
.I cap
|
|
being a null pointer,
|
|
.bP
|
|
.I cap
|
|
referring to a canceled capability,
|
|
.bP
|
|
.I cap
|
|
being a capability with string-valued parameters
|
|
(a \fI\%term\%info\fP-only feature),
|
|
and
|
|
.bP
|
|
.I cap
|
|
being a capability with more than two parameters.
|
|
.PP
|
|
See \fB\%curs_terminfo\fP(3X) regarding \fB\%tputs\fP.
|
|
.SH NOTES
|
|
\fI\%ncurses\fP compares only the first two characters of the \fIid\fP
|
|
parameter of
|
|
\fB\%tgetflag\fP,
|
|
\fB\%tgetnum\fP,
|
|
and
|
|
\fB\%tgetstr\fP to the capability names in the database.
|
|
.SH PORTABILITY
|
|
These functions are no longer standardized
|
|
(and the variables never were);
|
|
see section \*(``HISTORY\*('' below.
|
|
.I \%ncurses
|
|
provides them to support legacy applications;
|
|
they should not be used in new programs.
|
|
.PP
|
|
SVr4 describes a successful return value only as
|
|
\*(``an integer value other than
|
|
.IR ERR \*(''. \" Courier roman in source; SVID 4, vol. 3, p. 536
|
|
.PP
|
|
Neither X/Open Curses nor the SVr4 man pages documented the return
|
|
values of
|
|
.I \%tgetent
|
|
correctly,
|
|
though all three shown here were in fact returned ever since SVr1.
|
|
In particular,
|
|
an omission in the X/Open Curses specification has been misinterpreted
|
|
to mean that
|
|
.I \%tgetent
|
|
returns
|
|
.I OK
|
|
or
|
|
.IR ERR "."
|
|
Because the purpose of these functions is to provide compatibility with
|
|
the
|
|
.I termcap
|
|
library,
|
|
that is a defect in X/Open Curses Issue\ 4 Version\ 2
|
|
rather than in
|
|
.IR \%ncurses "."
|
|
.SS "Compatibility with BSD \fItermcap\fP"
|
|
.I \%ncurses
|
|
provides externally visible variables to support certain
|
|
.I termcap
|
|
applications.
|
|
However,
|
|
their correct usage is poorly documented;
|
|
for example,
|
|
it is unclear when reading and writing them is meaningful.
|
|
In particular,
|
|
some applications are reported to declare and/or modify
|
|
.IR \%ospeed "."
|
|
.PP
|
|
The constraint that only the first two characters of the
|
|
.I id
|
|
parameter are looked up in the terminal database
|
|
escapes many application developers.
|
|
The BSD
|
|
.I termcap
|
|
library did not require a trailing null character
|
|
after the capability identifier passed to
|
|
.IR \%tgetstr ","
|
|
.IR \%tgetnum ","
|
|
and
|
|
.IR \%tgetflag "."
|
|
.\" See <https://minnie.tuhs.org/cgi-bin/utree.pl?file=2BSD/src/\
|
|
.\" termlib/termcap.c>.
|
|
Some applications thus assume that the
|
|
.I termcap
|
|
interface does not require the trailing null character
|
|
for the capability identifier.
|
|
.I \%ncurses
|
|
disallows matches by the
|
|
.I termcap
|
|
interface against extended capability names
|
|
that are longer than two characters;
|
|
see \fB\%user_caps\fP(5).
|
|
.PP
|
|
The BSD
|
|
.I termcap
|
|
function
|
|
.I \%tgetent
|
|
returns the text of a
|
|
.I termcap
|
|
entry in the buffer passed as an argument.
|
|
.IR \%ncurses ","
|
|
like other
|
|
.I \%term\%info
|
|
implementations,
|
|
does not store terminal type descriptions as text.
|
|
It sets the buffer contents to a null-terminated string.
|
|
.SS "Header File"
|
|
.I \%ncurses
|
|
includes a
|
|
.I \%termcap.h
|
|
header file for compatibility with other implementations,
|
|
but it is rarely used because the other implementations
|
|
are not mutually compatible;
|
|
see below.
|
|
.SH HISTORY
|
|
.\" See https://www.oreilly.com/openbook/opensources/book/kirkmck.html
|
|
.\" for much BSD release history.
|
|
Bill Joy originated a forerunner of
|
|
.I termcap
|
|
called \*(``ttycap\*('',
|
|
dated September 1977,
|
|
and released in 1BSD
|
|
(March 1978).
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=1BSD/s7/ttycap.c
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=1BSD/man7/ttycap.7
|
|
It used many of the same function names as the later
|
|
.IR termcap ","
|
|
such as
|
|
.IR \%tgetent ","
|
|
.IR \%tgetflag ","
|
|
.IR \%tgetnum ","
|
|
and
|
|
.IR \%tgetstr "."
|
|
.PP
|
|
A clear descendant,
|
|
the
|
|
.I termlib
|
|
library,
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=2BSD/src/termlib/
|
|
followed in 2BSD
|
|
(May 1979),
|
|
adding
|
|
.I \%tgoto
|
|
and
|
|
.IR \%tputs "."
|
|
The former applied at that time only to cursor positioning capabilities,
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=2BSD/bin/etc/termcap
|
|
thus the overly specific name.
|
|
Little changed in 3BSD
|
|
(late 1979)
|
|
except the addition of test programs and a
|
|
.I termlib
|
|
man page,
|
|
which documented the API shown in section \*(``SYNOPSIS\*('' above.
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=3BSD/usr/src/lib/\
|
|
.\" libtermlib/
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=3BSD/usr/man/man3/\
|
|
.\" termlib.3
|
|
.PP
|
|
4BSD (November 1980)
|
|
renamed
|
|
.I termlib
|
|
to
|
|
.I termcap
|
|
.\" ...except in the source tree...
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=4BSD/usr/src/lib/\
|
|
.\" libtermlib/makefile
|
|
and added another test program.
|
|
The library remained much the same through 4.3BSD
|
|
(June 1986).
|
|
4.4BSD-Lite
|
|
(June 1994)
|
|
refactored it,
|
|
.\" Observe the `tncktc()`, `tnamatch()`, `tskip()`, and `tdecode()`
|
|
.\" entry points disappearing from termcap.c.
|
|
leaving the API unchanged.
|
|
.PP
|
|
Function prototypes were a feature of ANSI C (1989).
|
|
The library long antedated the standard and thus provided no header file
|
|
declaring them.
|
|
Nevertheless,
|
|
the BSD sources included two different
|
|
.I \%termcap.h
|
|
header files over time.
|
|
.bP
|
|
One was used internally by \fIjove\fP(1) from 4.3BSD onward.
|
|
.\" 2BSD became a branch retaining support for non-virtual memory
|
|
.\" systems (such as the PDP-11) whereas most BSD development focused on
|
|
.\" the VAX and other VM-enabled systems starting with 3BSD.
|
|
.\"
|
|
.\" This man page previously located a termcap.h in 2BSD, but that may
|
|
.\" be confusion arising from its backport to 2.9BSD (and still present
|
|
.\" in surviving sources for 2.11BSD, the "end of the line" for that
|
|
.\" branch's development).
|
|
.\"
|
|
.\" Observe the copyright notice in
|
|
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD/usr/contrib/\
|
|
.\" jove/Makefile
|
|
.\" --much too late for 2BSD (1979).
|
|
It declared global symbols for the
|
|
.I termcap
|
|
variables that it used.
|
|
.bP
|
|
The other appeared in 4.4BSD-Lite Release 2
|
|
(June 1995)
|
|
as part of
|
|
.I libedit
|
|
(also known as the
|
|
.I \%edit\%line
|
|
library).
|
|
CSRG source history shows that this was added in mid-1992.
|
|
The
|
|
.I libedit
|
|
header file was used internally as a convenience
|
|
for compiling the
|
|
.I \%edit\%line
|
|
library.
|
|
It declared function prototypes,
|
|
but no global variables.
|
|
NetBSD's
|
|
.I termcap
|
|
library added this header file in mid-1994.
|
|
.PP
|
|
Meanwhile,
|
|
GNU
|
|
.I termcap
|
|
began development in 1990.
|
|
Its first release (1.0) in 1991 included a
|
|
.I \%termcap.h
|
|
header file.
|
|
Its second (1.1) release in September 1992 modified the file to use
|
|
.I const
|
|
for the function prototypes in the header where one would
|
|
expect parameters to be read-only.
|
|
BSD
|
|
.I termcap
|
|
did not.
|
|
The prototype for
|
|
.I \%tputs
|
|
also differed,
|
|
but in that instance,
|
|
it was
|
|
.I libedit
|
|
that differed from BSD
|
|
.IR termcap "."
|
|
.PP
|
|
GNU \fIbash\fP(1) has bundled GNU
|
|
.I termcap
|
|
1.3 since mid-1993 to support its \fI\%readline\fP(3) library,
|
|
and continues to use it if configured to do so.
|
|
.PP
|
|
.I \%ncurses
|
|
1.8.1
|
|
(November 1993)
|
|
provided a
|
|
.I \%termcap.h
|
|
file.
|
|
It reflected influence from GNU
|
|
.I termcap
|
|
and \fI\%emacs\fP(1)
|
|
(rather than \fIjove\fP(1)),
|
|
providing the following interface:
|
|
.bP
|
|
global symbols used by
|
|
.IR \%emacs ","
|
|
.bP
|
|
.IR const -qualified
|
|
function prototypes,
|
|
and
|
|
.bP
|
|
a prototype for
|
|
.IR tparam ","
|
|
a GNU
|
|
.I termcap
|
|
feature.
|
|
.PP
|
|
Later
|
|
(in mid-1996)
|
|
the
|
|
.I tparam
|
|
function was removed from
|
|
.IR \%ncurses "."
|
|
Any two of the four implementations thus differ,
|
|
and programs that intend to work with all
|
|
.I termcap
|
|
library interfaces must account for that fact.
|
|
.PP
|
|
X/Open Curses Issue\ 4,
|
|
Version\ 2 (1996),
|
|
describes these functions,
|
|
marking them as
|
|
\*(``TO BE WITHDRAWN\*(''.
|
|
.PP
|
|
X/Open Curses Issue\ 7 (2009) withdrew the
|
|
.I termcap
|
|
interface
|
|
(along with the
|
|
.I \%vwprintw
|
|
and
|
|
.I \%vwscanw
|
|
functions).
|
|
.SH BUGS
|
|
If you call \fB\%tgetstr\fP to fetch
|
|
.B \%column_address
|
|
.RB ( ch )
|
|
or any other parameterized string capability,
|
|
be aware that it is returned in \fI\%term\%info\fP notation,
|
|
not the older and not-quite-compatible \fItermcap\fP notation.
|
|
This does not cause problems if all you do with it is call \fB\%tgoto\fP
|
|
or \fB\%tparm\fP,
|
|
which both parametrically expand \fI\%term\%info\fP-style string
|
|
capabilities as \fI\%term\%info\fP does.
|
|
(If
|
|
.I \%ncurses
|
|
is configured to support \fItermcap,\fP
|
|
\fB\%tgoto\fP checks whether the string is \fI\%term\%info\fP-style by
|
|
looking for \*(``\fB%p\fP\*('' parameters or
|
|
\*(``\fB<\fP.\|.\|.\fB>\fP\*('' delays,
|
|
and invokes a \fItermcap\fP-style parser if the string appears not to
|
|
use \fI\%term\%info\fP syntax.)
|
|
.PP
|
|
Because \fI\%term\%info\fP's syntax for padding in string capabilities
|
|
differs from \fItermcap\fP's,
|
|
users can be surprised.
|
|
.IP \(bu 4
|
|
\fB\%tputs("50")\fP in a \fI\%term\%info\fP system transmits
|
|
\*(``50\*('' rather than busy-waiting for 50 milliseconds.
|
|
.IP
|
|
However,
|
|
if \fI\%ncurses\fP is configured to support \fItermcap\fP,
|
|
it may also have been configured to support BSD-style padding.
|
|
In that case,
|
|
\fB\%tputs\fP inspects strings passed to it,
|
|
looking for digits at the beginning of the string.
|
|
.IP \(bu 4
|
|
\fB\%tputs("50")\fP in a \fItermcap\fP system may busy-wait for 50
|
|
milliseconds rather than transmitting \*(``50\*(''.
|
|
.PP
|
|
\fItermcap\fP has nothing analogous to \fI\%term\%info\fP's
|
|
.B \%set_attributes
|
|
.RB ( sgr )
|
|
capability.
|
|
One consequence is that \fItermcap\fP applications assume that
|
|
.RB \*(`` me \*(''
|
|
(equivalent to \fI\%term\%info\fP's
|
|
.B \%exit_attribute_mode
|
|
.RB ( sgr0 )
|
|
capability)
|
|
does not reset the alternate character set.
|
|
\fI\%ncurses\fP inspects the data shared with the
|
|
.I termcap
|
|
interface and modifies it as necessary
|
|
to accommodate the latter's limitation in this respect.
|
|
.SH "SEE ALSO"
|
|
.UR https://\*:invisible\-\*:island\*:.net/\*:ncurses/\*:tctest\*:.html
|
|
.I "TCTEST \(em A Termcap Test Utility"
|
|
.UE
|
|
.PP
|
|
\fB\%curses\fP(3X),
|
|
\fB\%curs_terminfo\fP(3X),
|
|
\fB\%putc\fP(3),
|
|
\fB\%term_variables\fP(3X),
|
|
\fB\%terminfo\fP(5)
|