NetBSD/lib/libterm/termcap.3

406 lines
10 KiB
Groff
Raw Normal View History

.\" $NetBSD: termcap.3,v 1.13 1999/08/15 10:59:01 blymn Exp $
.\"
.\" Copyright (c) 1980, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
1993-03-21 12:45:37 +03:00
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)termcap.3 8.2 (Berkeley) 12/11/93
1993-03-21 12:45:37 +03:00
.\"
.Dd December 11, 1993
1993-03-21 12:45:37 +03:00
.Dt TERMCAP 3
.Os
1993-03-21 12:45:37 +03:00
.Sh NAME
.Nm tgetent ,
.Nm tgetnum ,
.Nm tgetflag ,
.Nm tgetstr ,
.Nm tgoto ,
.Nm tputs
.Nd terminal independent operation routines
1998-02-05 21:45:17 +03:00
.Sh LIBRARY
.Lb libtermcap
1993-03-21 12:45:37 +03:00
.Sh SYNOPSIS
.Fd #include <termcap.h>
1993-03-21 12:45:37 +03:00
.Vt char PC;
.Vt char *BC;
.Vt char *UP;
.Vt short ospeed;
.Vt struct tinfo *info;
.Ft int
1993-03-21 12:45:37 +03:00
.Fn tgetent "char *bp" "char *name"
.Ft int
1993-03-21 12:45:37 +03:00
.Fn tgetnum "char *id"
.Ft int
1993-03-21 12:45:37 +03:00
.Fn tgetflag "char *id"
.Ft char *
.Fn tgetstr "char *id" "char **area"
1993-03-21 12:45:37 +03:00
.Ft char *
.Fn tgoto "char *cm" "int destcol" "int destline"
1995-06-05 23:45:48 +04:00
.Ft void
.Fn tputs "char *cp" "int affcnt" "void (*outc)(int)"
.Ft int
.Fn t_getent "struct tinfo **info" "char *name"
.Ft int
.Fn t_getnum "struct tinfo *info" "char *id"
.Ft int
.Fn t_getflag "struct tinfo *info" "char *id"
.Ft char *
.Fn t_getstr "struct tinfo *info" "char *id" "char **area" "int *limit"
.Ft int
.Fn t_goto "struct tinfo *info" "char *id" "int destcol" "int destline" "char *buffer" "int limit"
.Ft int
.Fn t_puts "struct tinfo *info" "char *cp" "int affcnt" "void (*outc)(char, void *)" "void *args"
.Ft void
.Fn t_freent "char *info"
1993-03-21 12:45:37 +03:00
.Sh DESCRIPTION
These functions extract and use capabilities from a terminal capability data
base, usually
.Pa /usr/share/misc/termcap ,
the format of which is described in
.Xr termcap 5 .
These are low level routines;
see
.Xr curses 3
for a higher level package.
.Pp
The
.Fn tgetent
function
extracts the entry for terminal
.Fa name
into the buffer at
.Fa bp .
The
.Fa bp
argument
should be a character buffer of size
1024 and must be retained through all subsequent calls to
.Fn tgetnum ,
.Fn tgetflag ,
and
.Fn tgetstr .
The
.Fn tgetent
function
returns \-1 if none of the
.Nm termcap
data base files could be opened,
0 if the terminal name given does not have an entry,
and 1 if all goes well.
It will look in the environment for a
.Ev TERMCAP
variable.
If found, and the value does not begin with a slash,
and the terminal type
.Fa name
is the same as the environment string
.Ev TERM ,
the
.Ev TERMCAP
string is used instead of reading a
.Nm termcap
file.
If it does begin with a slash, the string is used as a path name
of the
.Nm termcap
file to search.
If
.Ev TERMCAP
does not begin with a slash and
.Fa name
is different from
.Ev TERM ,
.Fn tgetent
searches the files
.Pa $HOME/.termcap
and
.Pa /usr/share/misc/termcap ,
in that order, unless the environment variable
.Ev TERMPATH
exists,
in which case it specifies a list of file pathnames
(separated by spaces or colons) to be searched instead.
Whenever multiple files are searched and a
.Sy tc
field occurs in the requested entry, the entry it names must be found
in the same file or one of the succeeding files.
This can speed up entry into programs that call
.Fn tgetent ,
as well as help debug new terminal descriptions
or make one for your terminal if you can't write the file
.Pa /usr/share/misc/termcap .
.Pp
The
.Fn tgetnum
function
gets the numeric value of capability
.Fa id ,
returning \-1 if it is not given for the terminal.
1993-03-21 12:45:37 +03:00
The
.Fn tgetflag
function
returns 1 if the specified capability is present in
the terminal's entry, 0 if it is not.
The
.Fn tgetstr
function
returns the string value of the capability
.Fa id ,
places it in the buffer at
.Fa area ,
and advances the
.Fa area
pointer.
It decodes the abbreviations for this field described in
.Xr termcap 5 ,
except for cursor addressing and padding information.
The
.Fn tgetstr
function
returns
.Dv NULL
if the capability was not found.
.Pp
The
.Fn tgoto
function
returns a cursor addressing string decoded from
.Fa cm
to go to column
.Fa destcol
in line
.Fa destline .
It uses the external variables
.Va UP
(from the
.Sy up
capability)
and
.Va BC
(if
.Sy bc
is given rather than
.Sy bs )
if necessary to avoid placing
.Sy \en ,
.Sy ^D
or
.Sy ^@
in
the returned string.
(Programs which call
.Fn tgoto
should be sure to turn off the
.Dv XTABS
bit(s),
since
.Fn tgoto
may now output a tab.
Note that programs using termcap should in general turn off
.Dv XTABS
anyway since some terminals use control-I for other functions,
such as nondestructive space.)
If a
.Sy %
sequence is given which is not understood, then
.Fn tgoto
returns
.Pq Dv OOPS .
.Pp
The
.Fn tputs
function
decodes the leading padding information of the string
.Fa cp ;
.Fa affcnt
gives the number of lines affected by the operation, or 1 if this is
not applicable,
.Fa outc
is a routine which is called with each character in turn.
The external variable
.Va ospeed
should contain the output speed of the terminal as encoded by
.Xr stty 3 .
The external variable
.Va PC
should contain a pad character to be used (from the
.Sy pc
1993-03-21 12:45:37 +03:00
capability)
if a null
.Pq Sy ^@
is inappropriate.
.Pp
The
.Fn t_getent
function operates in a similar manner to the
.Fn tgetent
function excepting that the
.Fa info
argument is a pointer to a pointer of the opaque type
.Va tinfo .
If the call to
.Fn t_getent
succeeds then the argument
.Fa info
will be updated with the address of an object that contains the termcap
entry. This pointer can then be passed to calls of
.Fn t_getnum ,
.Fn t_getflag
and
.Fn t_getstr .
When the information pointed to by
.Fa info
is no longer required any storage associated with the object can be
released by calling
.Fn t_freent .
The functions
.Fn t_getnum
and
.Fn t_getflag
operate in the same manner as
.Fn tgetnum
and
.Fn tgetflag
with the exception that the pointer to the termcap object is passed along
with the id of the capability required. The function
.Fn t_getstr
performs the same function as
.Fn tgetstr
but has a
.Fa limit
parameter that gives the number of characters that can be inserted in to
the array pointed to by
.Fa area .
The
.Fa limit
argument is updated by the
.Fn t_getstr
call to give the number of characters that remain available in
.Fa area .
If the t_getstr call fails then
.Sy NULL
will be returned and errno set to indicate the failure, ENOENT indicates
there was no termcap entry for the given
.Fa id ,
E2BIG indicates the retrieved entry would have overflowed
.Fa area .
.Pp
The
.Fn t_goto
function is the same as the
.Fn tgoto
function excepting that the capabilities for
.Sy up
and
.Sy bc
are extracted from the
.Fa info
object and that the string formed by
.Fn t_goto
is placed in the
.Fa buffer
argument, the number of characters allowed to be placed in
.Fa buffer
is controlled by
.Fa limit .
If the expansion performed by
.Fn t_goto
would exceed the space in
.Fa buffer
then
.Fn t_goto
will return -1 and set errno to
.Sy E2BIG .
The function
.Fn t_puts
is similar to the
.Fn tputs
function excepting that
.Fa info
holds a pointer to the termcap object that was returned by a previous
.Fn t_getent
call, this object will be used to retrieve the
.Sy pc
attribute for the terminal. The
.Fa outc
function is a pointer to a function that will be called by
.Fn t_puts
to output each character in the
.Fa cp
string. The
.Fa outc
function will be called with two parameters. The first is the character
to be printed and the second is an optional argument that was passed to
.Fn t_puts
in the
.Fa args
argument. The interpretation of the contents of
.Fa args
is dependent soley on the implementation of
.Fa outc.
.Pp
NOTE: If the termcap entry would exceed the 1024 buffer passed to
.Fa tgetent
then a special capability of
.Fa ZZ
is added to the end of the termcap. The number that follows this entry
is the address of the buffer allocated to hold the full termcap entry. The
caller may retrieve the pointer to the extended buffer by performing a
.Fn tgetstr
to retrieve the
.Fa ZZ
capability, the string is the output of a
.Fn printf
%p and may be converted back to a pointer using
.Fn sscanf
or similar. The ZZ capability is only necessary if the caller wishes to
directly manipulate the termcap entry, all the termcap function calls
automatically use the extended buffer to retrieve terminal capabilities.
1993-03-21 12:45:37 +03:00
.Sh FILES
.Bl -tag -width /usr/share/misc/termcap -compact
.It Pa /usr/lib/libtermcap.a
.Fl l Ar termcap
1993-03-21 12:45:37 +03:00
library (also known as
.Fl l Ar termlib )
1993-03-21 12:45:37 +03:00
.It Pa /usr/share/misc/termcap
standard terminal capability data base
.It Pa $HOME/.termcap
user's terminal capability data base
.El
.Sh SEE ALSO
.Xr ex 1 ,
.Xr curses 3 ,
.Xr termcap 5
.Sh HISTORY
The
.Nm termcap
1999-07-02 19:46:05 +04:00
functions appeared in
1993-03-21 12:45:37 +03:00
.Bx 4.0 .