summaryrefslogtreecommitdiff
path: root/man/curs_termcap.3x
diff options
context:
space:
mode:
Diffstat (limited to 'man/curs_termcap.3x')
-rw-r--r--man/curs_termcap.3x446
1 files changed, 307 insertions, 139 deletions
diff --git a/man/curs_termcap.3x b/man/curs_termcap.3x
index 6bd2a66a0b55..2617c8ebc32d 100644
--- a/man/curs_termcap.3x
+++ b/man/curs_termcap.3x
@@ -1,5 +1,5 @@
.\"***************************************************************************
-.\" Copyright 2018-2023,2024 Thomas E. Dickey *
+.\" 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 *
@@ -27,8 +27,8 @@
.\" authorization. *
.\"***************************************************************************
.\"
-.\" $Id: curs_termcap.3x,v 1.85 2024/04/20 19:13:12 tom Exp $
-.TH curs_termcap 3X 2024-04-20 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "Library calls"
+.\" $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
@@ -40,11 +40,59 @@
.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,
@@ -67,12 +115,12 @@
\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 **\fIarea\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));
+\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
@@ -90,10 +138,10 @@ This must be done before calling any of the other functions.
It returns
.RS 3
.TP 5 \" "-1" + 2n + adjust for PDF
-1
+.B 1
on success,
.TP
-0
+.B 0
if there is no such entry
(or if the matching entry describes a generic terminal,
having too little information for
@@ -101,20 +149,21 @@ having too little information for
applications to run),
and
.TP
-\-1
-if the \fI\%term\%info\fP database could not be found.
+.B \-1
+if the
+.I \%term\%info
+database could not be found.
.RE
.PP
This implementation differs from those of historical \fItermcap\fP
libraries.
-.RS 3
.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 area referenced by this pointer.
+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
@@ -127,7 +176,6 @@ capability,
nor whether the terminal type description supports an addressable
cursor,
a property essential for any \fIcurses\fP implementation to operate.
-.RE
.SS "Retrieving Capability Values"
\fB\%tgetflag\fP reports the Boolean entry for \fIid\fP,
or zero if it is not available.
@@ -137,38 +185,40 @@ or \-1 if it is not available.
.PP
\fB\%tgetstr\fP returns the string entry for \fIid\fP,
or
-.B NULL
+.I NULL
if it is not available.
Use \fB\%tputs\fP to output the string returned.
The
-.I area
+.I sbuf
parameter is used as follows.
-.RS 3
.bP
It is assumed to be the address of a pointer to a buffer managed by the
calling application.
.bP
However,
-\fI\%ncurses\fP checks to ensure that
-.I area
+.I \%ncurses
+checks to ensure that
+.I sbuf
is not
-.BR NULL ,
-and also that the resulting buffer pointer is not
-.BR NULL .
+.IR NULL ","
+and that the pointer obtained by dereferencing
+.I sbuf
+is also not
+.IR NULL "."
If either check fails,
-.I area
-is ignored.
+.I \%ncurses
+ignores
+.IR sbuf .
.bP
If the checks succeed,
\fI\%ncurses\fP also copies the return value to the buffer pointed to by
-\fIarea\fP,
+\fIsbuf\fP,
and the library updates
-.I area
+.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.
-.RE
.SS "Applying String Capabilities"
String capabilities can be parameterized;
see subsection \*(``Parameterized Strings\*('' in \fB\%terminfo\fP(5).
@@ -216,24 +266,48 @@ availability.
It can retrieve capabilities by either \fItermcap\fP or
\fI\%term\%info\fP code.
.SS "Global Variables"
-The variables
-\fBPC\fP,
-\fBUP\fP and
-\fBBC\fP
-are set by \fB\%tgetent\fP to the \fI\%term\%info\fP entry's data for
-\fB\%pad_char\fP,
-\fB\%cursor_up\fP and
-\fB\%backspace_if_not_bs\fP,
+.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.
-\fBUP\fP is not used by \fI\%ncurses\fP.
-\fBPC\fP is used by \fB\%delay_output\fP(3X).
-\fBBC\fP is used by \fB\%tgoto\fP emulation.
-The variable \fB\%ospeed\fP is set by \fI\%ncurses\fP using a
-system-specific encoding to indicate the terminal's data rate.
+.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 buffer
-areas provided by the caller via \fB\%tgetent\fP and \fB\%tgetstr\fP.
+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,
@@ -254,7 +328,7 @@ 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
+not the higher-level
.I \%curses
API,
could release the memory using \fB\%del_curterm\fP(3X),
@@ -270,12 +344,12 @@ and
are documented above.
.PP
\fB\%tgoto\fP returns
-.B NULL
+.I NULL
on error.
Error conditions include:
.bP
uninitialized state
-(\fB\%tgetent\fP was not called successfully),
+\%(\fBtgetent\fP was not called successfully),
.bP
.I cap
being a null pointer,
@@ -302,110 +376,149 @@ and
.SH PORTABILITY
These functions are no longer standardized
(and the variables never were);
-\fI\%ncurses\fP provides them to support legacy applications.
-They should not be used in new programs.
-.SS Standards
-.bP
-X/Open Curses, Issue 4, Version 2 (1996),
-describes these functions,
-marking them as
-\*(``TO BE WITHDRAWN\*(''.
-.bP
-X/Open Curses, Issue 7 (2009) marks the \fItermcap\fP interface
-(along with \fB\%vwprintw\fP and \fB\%vwscanw\fP) as withdrawn.
+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 \fB\%tgetent\fP correctly,
+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 \fB\%tgetent\fP returns \fBOK\fP or \fBERR\fP.
+to mean that
+.I \%tgetent
+returns
+.I OK
+or
+.IR ERR "."
Because the purpose of these functions is to provide compatibility with
-the \fItermcap\fP library,
-that is a defect in X/Open Curses, Issue 4, Version 2
-rather than in \fI\%ncurses\fP.
+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"
-Externally visible variables are provided for support of certain
-\fItermcap\fP applications.
+.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 \fB\%ospeed\fP.
+some applications are reported to declare and/or modify
+.IR \%ospeed "."
.PP
-The constraint that only the first two characters of the \fIid\fP
-parameter are used escapes many application developers.
-The BSD \fItermcap\fP library did not require a trailing null character
-on the capability identifier passed to \fB\%tgetstr\fP,
-\fB\%tgetnum\fP,
+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
-\fB\%tgetflag\fP.
+.IR \%tgetflag "."
.\" See <https://minnie.tuhs.org/cgi-bin/utree.pl?file=2BSD/src/\
.\" termlib/termcap.c>.
-Some applications thus assume that the \fItermcap\fP interface does not
-require the trailing null character for the capability identifier.
-.bP
+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 \fItermcap\fP interface against extended
-capability names that are longer than two characters;
+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 \fItermcap\fP function \fB\%tgetent\fP returns the text of a
-\fItermcap\fP entry in the buffer passed as an argument.
-This library,
-like other \fI\%term\%info\fP implementations,
+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"
-This library includes a \fI\%termcap.h\fP header for compatibility with
-other implementations,
-but the header is rarely used because the other implementations are not
-strictly compatible.
+.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 \fItermcap\fP called
-\*(``ttycap\*('',
+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 \fItermcap\fP,
+It used many of the same function names as the later
+.IR termcap ","
such as
-\fB\%tgetent\fP,
-\fB\%tgetflag\fP,
-\fB\%tgetnum\fP,
+.IR \%tgetent ","
+.IR \%tgetflag ","
+.IR \%tgetnum ","
and
-\fB\%tgetstr\fP.
+.IR \%tgetstr "."
.PP
A clear descendant,
-the \fItermlib\fP library,
+the
+.I termlib
+library,
.\" https://minnie.tuhs.org/cgi-bin/utree.pl?file=2BSD/src/termlib/
followed in 2BSD
(May 1979),
-adding \fB\%tgoto\fP and \fB\%tputs\fP.
+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 \fI\%termlib\fP man page,
+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 \fItermlib\fP to \fItermcap\fP
+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 though 4.3BSD
+The library remained much the same through 4.3BSD
(June 1986).
4.4BSD-Lite
(June 1994)
@@ -418,10 +531,11 @@ 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 \fI\%termcap.h\fP header files
-over time.
+the BSD sources included two different
+.I \%termcap.h
+header files over time.
.bP
-One was used internally by \fBjove\fP(1) from 4.3BSD onward.
+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.
@@ -435,55 +549,108 @@ One was used internally by \fBjove\fP(1) from 4.3BSD onward.
.\" 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 \fItermcap\fP variables that it used.
+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 \fIlibedit\fP
-(also known as the \fI\%edit\%line\fP library).
+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 \fIlibedit\fP header file was used internally as a convenience for
-compiling the \fI\%edit\%line\fP library.
+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.
-This header file was added to NetBSD's \fItermcap\fP library in
-mid-1994.
+NetBSD's
+.I termcap
+library added this header file in mid-1994.
.PP
Meanwhile,
-GNU \fItermcap\fP began development in 1990.
-Its first release (1.0) in 1991 included a \fI\%termcap.h\fP header.
-Its second (1.1) in September 1992 modified the header to use
-\fIconst\fP for the function prototypes in the header where one would
-expect the parameters to be read-only.
-BSD \fItermcap\fP did not.
-The prototype for \fB\%tputs\fP also differed,
+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 \fIlibedit\fP that differed from BSD \fItermcap\fP.
+it was
+.I libedit
+that differed from BSD
+.IR termcap "."
.PP
-GNU \fItermcap\fP 1.3 was bundled with \fIbash\fP(1) in mid-1993 to
-support the \fI\%readline\fP(3) library.
+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
-\fI\%ncurses\fP 1.8.1
+.I \%ncurses
+1.8.1
(November 1993)
-provided a \fI\%termcap.h\fP file.
-It reflected influence from GNU \fItermcap\fP and \fBemacs\fP(1)
-(rather than \fBjove\fP(1)),
+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 \fIemacs\fP,
+global symbols used by
+.IR \%emacs ","
.bP
-\fIconst\fP-qualified function prototypes,
+.IR const -qualified
+function prototypes,
and
.bP
-a prototype for \fBtparam\fP,
-a GNU \fItermcap\fP feature.
+a prototype for
+.IR tparam ","
+a GNU
+.I termcap
+feature.
.PP
Later
(in mid-1996)
-the \fB\%tparam\fP function was removed from \fI\%ncurses\fP.
+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 \fItermcap\fP library
-interfaces must account for that fact.
+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
@@ -510,15 +677,14 @@ 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 \(bu 4
+.IP
However,
if \fI\%ncurses\fP is configured to support \fItermcap\fP,
it may also have been configured to support BSD-style padding.
-.IP
In that case,
\fB\%tputs\fP inspects strings passed to it,
looking for digits at the beginning of the string.
-.IP
+.IP \(bu 4
\fB\%tputs("50")\fP in a \fItermcap\fP system may busy-wait for 50
milliseconds rather than transmitting \*(``50\*(''.
.PP
@@ -533,15 +699,17 @@ One consequence is that \fItermcap\fP applications assume that
.RB ( sgr0 )
capability)
does not reset the alternate character set.
-\fI\%ncurses\fP checks for,
-and modifies the data shared with,
-the \fItermcap\fP interface to accommodate the latter's limitation in
-this respect.
+\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)
-.PP
-https://invisible\-island.net/ncurses/tctest.html