summaryrefslogtreecommitdiff
path: root/static/freebsd/man5/term.5
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man5/term.5')
-rw-r--r--static/freebsd/man5/term.5581
1 files changed, 581 insertions, 0 deletions
diff --git a/static/freebsd/man5/term.5 b/static/freebsd/man5/term.5
new file mode 100644
index 00000000..fa15453c
--- /dev/null
+++ b/static/freebsd/man5/term.5
@@ -0,0 +1,581 @@
+'\" t
+.\"***************************************************************************
+.\" Copyright 2018-2024,2025 Thomas E. Dickey *
+.\" Copyright 1998-2016,2017 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: term.5,v 1.85 2025/08/16 19:11:47 tom Exp $
+.TH term 5 2025-08-16 "ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@" "File formats"
+.ie \n(.g \{\
+.ds `` \(lq
+.ds '' \(rq
+.ds ' \(aq
+.ds ^ \(ha
+.\}
+.el \{\
+.ie t .ds `` ``
+.el .ds `` ""
+.ie t .ds '' ''
+.el .ds '' ""
+.ds ' '
+.ds ^ ^
+.\}
+.ie n .ds CW R
+.el \{
+.ie \n(.g .ds CW CR
+.el .ds CW CW
+.\}
+.
+.de bP
+.ie n .IP \(bu 4
+.el .IP \(bu 2
+..
+.
+.SH NAME
+term \-
+compiled \fI\%term\%info\fP terminal description
+.\"SH SYNOPSIS
+.SH DESCRIPTION
+\fB\%@TIC@\fP(1) compiles a
+.I \%term\%info
+terminal type description,
+and \fB\%setupterm\fP(3X) reads it.
+A compiled description may be stored in a file or in a database of,
+potentially,
+many such descriptions.
+Further,
+a compiled description may be in one of two formats:
+one similar to that used by System\ V,
+and a newer,
+extensible format employed exclusively by
+.IR \%ncurses .
+.SS "Storage Location"
+Compiled
+.I \%term\%info descriptions are placed
+under the directory
+.IR \%@TERMINFO@ .
+One of two configurations is selected
+when building the
+.I \%ncurses
+libraries.
+.TP 5
+.B directory tree
+A two-level scheme is used to avoid a linear search
+of a huge Unix system directory:
+.IR \%@TERMINFO@/ c / name
+where
+.I name
+is the name of the terminal,
+and
+.I c
+is the first character of
+.IR name .
+Thus,
+the compiled description of terminal type \*(``act4\*(''
+is found in the file
+.IR \%@TERMINFO@/a/act4 .
+Synonyms for the same terminal are implemented by multiple
+links to the same compiled file.
+.TP 5
+.B hashed database
+Using the Berkeley database API,
+two types of records are stored:
+the
+.I \%term\%info
+data in the same format as that stored in a directory tree with
+the terminal's primary type name as a key,
+and records containing only aliases pointing to the primary name.
+.IP
+If built to write hashed databases,
+.I \%ncurses
+can still read
+.I \%term\%info
+databases organized as a
+directory tree,
+but cannot write entries into the directory tree.
+It can write
+(or rewrite)
+entries in the hashed database.
+.IP
+.I \%ncurses
+distinguishes the two cases in the
+.I \%TERMINFO
+and
+.I \%TERMINFO_DIRS
+environment variable by assuming a directory tree for entries that
+correspond to an existing directory,
+and a hashed database otherwise.
+.SS "Legacy Storage Format"
+The format has been chosen so that it will be the same on all hardware.
+A byte of at least eight bits' width is assumed,
+but no assumptions about bit ordering
+or sign extension are made.
+.PP
+The file is divided into six parts:
+.RS 5
+.IP (a) 4
+.IR header ,
+.IP (b)
+.IR "terminal names" ,
+.IP (c)
+.IR "Boolean flags" ,
+.IP (d)
+.IR numbers ,
+.IP (e)
+.IR strings ,
+and
+.IP (f)
+a
+.IR "string table" .
+.RE
+.PP
+The \fIheader\fP section begins the file.
+This section contains six short integers in the format
+described below.
+These integers are
+.RS 5
+.TP 5
+(1) the \fImagic number\fP
+(octal 0432);
+.TP 5
+(2) the size,
+in bytes,
+of the \fIterminal names\fP section;
+.TP 5
+(3) the number of bytes in the \fIBoolean flags\fP section;
+.TP 5
+(4) the number of short integers in the \fInumbers\fP section;
+.TP 5
+(5) the number of offsets
+(short integers)
+in the \fIstrings\fP section;
+.TP 5
+(6) the size,
+in bytes,
+of the \fIstring table\fP.
+.RE
+.PP
+The capabilities in the
+\fIBoolean flags\fP,
+\fInumbers\fP,
+and
+\fIstrings\fP
+sections are in the same order as in the header file
+.IR term.h .
+.PP
+Short integers are signed,
+in the range \-32768 to 32767,
+and stored in little-endian format.
+.PP
+Numbers in a terminal description,
+whether they are entries in the \fInumbers\fP or \fIstrings\fP table,
+are positive integers.
+Boolean flags are treated as positive one-byte integers.
+In each case,
+those positive integers represent a terminal capability.
+The terminal compiler
+.I \%@TIC@
+uses negative integers to handle the cases where a capability is not
+available:
+.bP
+If a capability is absent from this terminal,
+.I \%@TIC@
+stores a \-1 in the corresponding table.
+.IP
+The integer value \-1 is represented by two bytes 0377,
+0377.
+.br
+Absent Boolean values are represented by the byte 0 (false).
+.bP
+If a capability has been canceled from this terminal,
+.I \%@TIC@
+stores a \-2 in the corresponding table.
+.IP
+The integer value \-2 is represented by two bytes 0377,
+0376.
+.br
+The Boolean value \-2 is represented by the byte 0376.
+.br
+.bP
+Other negative values are illegal.
+.PP
+The \fIterminal names\fP section comes after the \fIheader\fP.
+It contains the first line of the
+.I \%term\%info
+description,
+listing the various names for the terminal,
+separated by the \*(``|\*('' character.
+The \fIterminal names\fP section is terminated
+with an \s-1ASCII NUL\s+1 character.
+.PP
+The \fIBoolean flags\fP section has one byte for each flag.
+Boolean capabilities are either 1 or 0
+(true or false)
+according to whether the terminal supports the given capability or not.
+.PP
+Between the \fIBoolean flags\fP section and the \fInumber\fP section,
+a null byte will be inserted,
+if necessary,
+to ensure that the \fInumber\fP section begins on an even byte
+This is a relic of the PDP\-11's word-addressed architecture,
+originally designed to avoid traps induced
+by addressing a word on an odd byte boundary.
+All short integers are aligned on a short word boundary.
+.PP
+The \fInumbers\fP section is similar to the \fIBoolean flags\fP section.
+Each capability takes up two bytes,
+and is stored as a little-endian short integer.
+.PP
+The \fIstrings\fP section is also similar.
+Each capability is stored as a short integer.
+The capability value is an index into the \fIstring table\fP.
+.PP
+The \fIstring table\fP is the last section.
+It contains all of the values of string capabilities referenced in
+the \fIstrings\fP section.
+Each string is null-terminated.
+Special characters in \*^X or \ec notation are stored in their
+interpreted form,
+not the printing representation.
+Padding information
+.BI $< nn >
+and parameter information
+.B %x
+are stored intact in uninterpreted form.
+.SS "Extended Storage Format"
+The previous section describes the conventional
+.I \%term\%info
+binary format.
+With some minor variations of the offsets
+(see PORTABILITY),
+the same binary format is used in all modern Unix systems.
+Each system uses a standard set of Boolean,
+numeric,
+or string capabilities.
+.PP
+The
+.I \%ncurses
+libraries and applications support extended
+.I \%term\%info
+binary format,
+allowing users to define capabilities that are loaded at runtime.
+This extension is made possible by using the fact that the other
+implementations stop reading the
+.I \%term\%info
+data when they reach the end of the size given in the header.
+.I \%ncurses
+checks the size,
+and if it exceeds that specified in the header,
+continues to parse according to its own scheme.
+.PP
+First,
+it reads the extended header
+(5 short integers):
+.RS 5
+.TP 5
+(1)
+count of extended Boolean capabilities
+.TP 5
+(2)
+count of extended numeric capabilities
+.TP 5
+(3)
+count of extended string capabilities
+.TP 5
+(4)
+count of the items in extended string table
+.TP 5
+(5)
+size of the extended string table in bytes
+.RE
+.PP
+The count- and size-values for the extended string table
+include the extended capability \fInames\fP as well as
+extended capability \fIvalues\fP.
+.PP
+Using the counts and sizes,
+.I \%ncurses
+allocates arrays and reads data for the extended capabilities in the
+same order as the header information.
+.PP
+The extended string table contains values for string capabilities.
+After the end of these values,
+it contains the names for each of
+the extended capabilities in order:
+Boolean,
+numeric,
+and string.
+.PP
+By storing terminal descriptions in this way,
+.I \%ncurses
+is able to provide a database useful with legacy applications,
+as well as providing data for applications that require more information
+about a terminal type than was anticipated
+by X/Open Curses.
+See \fB\%user_caps\fP(5) for an overview of the way
+.I \%ncurses
+uses this extended information.
+.PP
+Applications that manipulate terminal data can use the definitions
+described in \fB\%term_variables\fP(3X) associating the long capability
+names with members of a
+.I \%TERMTYPE
+structure.
+.
+.SS "Extended Number Format"
+On occasion,
+16-bit signed integers are not large enough.
+.I \%ncurses
+6.1 introduced a new format
+by making a few changes to the legacy format:
+.bP
+a different magic number
+(octal 01036)
+.bP
+changing the type for the \fInumber\fP array from signed 16-bit integers
+to signed 32-bit integers.
+.PP
+To maintain compatibility,
+the library presents the same data structures
+to direct users of the
+.I \%TERMTYPE
+structure as in previous formats.
+However,
+that cannot provide callers with the extended numbers.
+The library uses a similar but hidden data structure
+.I \%TERMTYPE2
+to provide data for the
+.I \%term\%info
+functions.
+.SH FILES
+.TP
+.I @TERMINFO@
+compiled terminal description database
+.SH PORTABILITY
+.SS setupterm
+Note that it is possible for
+.B setupterm
+to expect a different set of capabilities
+than are actually present in the file.
+Either the database may have been updated since
+.B setupterm
+was recompiled
+(resulting in extra unrecognized entries in the file)
+or the program may have been recompiled more recently
+than the database was updated
+(resulting in missing entries).
+The routine
+.B setupterm
+must be prepared for both possibilities \-
+this is why the numbers and sizes are included.
+Also,
+new capabilities must always be added at the end of the lists
+of Boolean,
+number,
+and string capabilities.
+.SS "Binary Format"
+X/Open Curses does not specify a format for the
+.I \%term\%info
+database.
+System\ V
+.I curses
+used a directory-tree of binary files,
+one per terminal description.
+.PP
+Despite the consistent use of little-endian numbers and the otherwise
+self-describing format,
+it is not wise to count on portability of binary
+.I \%term\%info
+entries between commercial Unix versions.
+The problem is that there are at least three versions of
+.I \%term\%info
+(under HP\-UX,
+AIX,
+and OSF/1)
+each of which diverged from System\ V
+.I \%term\%info
+after SVr1,
+and added extension capabilities to the string table that
+(in the binary format)
+collide with System\ V and X/Open Curses extensions.
+See \fB\%terminfo\fP(5) for detailed
+discussion of
+.I \%term\%info
+source compatibility issues.
+.PP
+This implementation is by default compatible with the binary
+.I \%term\%info
+format used by Solaris
+.IR curses ,
+except in a few less-used details
+where it was found that the latter did not match X/Open Curses.
+The format used by the other Unix versions
+can be matched by building
+.I \%ncurses
+with different configuration options.
+.SS "Magic Codes"
+The magic number in a binary
+.I \%term\%info
+file is the first 16 bits
+(two bytes).
+Besides making it more reliable for the library to check that a file is
+.IR \%term\%info ,
+utilities such as \fIfile\fP(1) also use that to tell what the
+file-format is.
+System\ V defined more than one magic number,
+with 0433,
+0435 as screen-dumps
+(see \fB\%scr_dump\fP(5)).
+This implementation uses 01036 as a continuation of that sequence,
+but with a different high-order byte to avoid confusion.
+.SS "The \fITERMTYPE\fP Structure"
+Direct access to the
+.I \%TERMTYPE
+structure is provided for legacy applications.
+Portable applications should use \fB\%tigetflag\fP(3X) and related
+functions to read terminal capabilities.
+.SS "Mixed-case Terminal Names"
+A small number of terminal descriptions use uppercase characters in
+their names.
+If the underlying file system ignores the difference between
+uppercase and lowercase,
+.I \%ncurses
+represents the \*(``first character\*('' of the terminal name used as
+the intermediate level of a directory tree in (two-character)
+hexadecimal form.
+.SS Limits
+.I \%ncurses
+stores compiled terminal descriptions in three related formats,
+described in the subsections
+.bP
+.BR "Legacy Storage Format" ,
+and
+.bP
+.BR "Extended Storage Format" ,
+and
+.bP
+.BR "Extended Number Format" .
+.PP
+The legacy storage format and the extended number format differ by
+the types of numeric capability that they can store
+(for example,
+16- versus 32-bit integers).
+The extended storage format introduced by
+.I \%ncurses
+5.0 adds data to either of these formats.
+.PP
+Some limitations apply:
+.bP
+total compiled entries cannot exceed 4096 bytes in the legacy format.
+.bP
+total compiled entries cannot exceed 32768 bytes in the extended format.
+.bP
+the name field cannot exceed 128 bytes.
+.PP
+Compiled entries are limited to 32768 bytes because offsets into the
+\fIstrings table\fP use two-byte integers.
+The legacy format could have supported 32768-byte entries,
+but was limited to a virtual memory page's 4096 bytes.
+.SH EXAMPLES
+Here is a
+.I \%term\%info
+description of the Lear-Siegler ADM-3,
+a popular though rather stupid early terminal.
+.PP
+.EX
+.nf
+adm3a|lsi adm3a,
+ am,
+ cols#80, lines#24,
+ bel=\*^G, clear=\e032$<1>, cr=\*^M, cub1=\*^H, cud1=\*^J,
+ cuf1=\*^L, cup=\eE=%p1%{32}%+%c%p2%{32}%+%c, cuu1=\*^K,
+ home=\*^\*^, ind=\*^J,
+.fi
+.EE
+.PP
+A hexadecimal dump of its compiled terminal description
+(in legacy format)
+follows.
+.PP
+.if t .in +4n
+.ft \*(CW
+.TS
+Lp-1.
+0000 1a 01 10 00 02 00 03 00 82 00 31 00 61 64 6d 33 ........ ..1.adm3
+0010 61 7c 6c 73 69 20 61 64 6d 33 61 00 00 01 50 00 a|lsi ad m3a...P.
+0020 ff ff 18 00 ff ff 00 00 02 00 ff ff ff ff 04 00 ........ ........
+0030 ff ff ff ff ff ff ff ff 0a 00 25 00 27 00 ff ff ........ ..%.\*'...
+0040 29 00 ff ff ff ff 2b 00 ff ff 2d 00 ff ff ff ff ).....+. ..\-.....
+0050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+0060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+0070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+00d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+00e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+00f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+0100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+0110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........
+0120 ff ff ff ff ff ff 2f 00 07 00 0d 00 1a 24 3c 31 ....../. .....$<1
+0130 3e 00 1b 3d 25 70 31 25 7b 33 32 7d 25 2b 25 63 >..=%p1% {32}%+%c
+0140 25 70 32 25 7b 33 32 7d 25 2b 25 63 00 0a 00 1e %p2%{32} %+%c....
+0150 00 08 00 0c 00 0b 00 0a 00 ........ .
+.TE
+.ft
+.in
+.SH AUTHORS
+Thomas E. Dickey
+.br
+extended
+.I \%term\%info
+format for
+.I \%ncurses
+5.0
+.br
+hashed database support for
+.I \%ncurses
+5.6
+.br
+extended number support for
+.I \%ncurses
+6.1
+.sp
+Eric S. Raymond
+.br
+documented legacy
+.I \%term\%info
+format
+(that used by
+.IR \%pcurses ).
+.SH SEE ALSO
+\fB\%curses\fP(3X),
+\fB\%curs_terminfo\fP(3X),
+\fB\%terminfo\fP(5),
+\fB\%user_caps\fP(5)