diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1998-07-23 21:20:13 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1998-07-23 21:20:13 +0000 |
commit | a8d3a59992970b350c84b6330592df657f919080 (patch) | |
tree | ecdb217d8210502c80484fb89fdaa25775a54fb1 /lib/libcurses/terminfo.5tbl | |
parent | 65d74b2bc105ada6c49c16682e6ee5bb92b84b03 (diff) |
ncurses-4.2-980718
Diffstat (limited to 'lib/libcurses/terminfo.5tbl')
-rw-r--r-- | lib/libcurses/terminfo.5tbl | 3027 |
1 files changed, 3027 insertions, 0 deletions
diff --git a/lib/libcurses/terminfo.5tbl b/lib/libcurses/terminfo.5tbl new file mode 100644 index 00000000000..ccddc4c2e3d --- /dev/null +++ b/lib/libcurses/terminfo.5tbl @@ -0,0 +1,3027 @@ +'\" t +.\" DO NOT EDIT THIS FILE BY HAND! +.\" It is generated from terminfo.head, Caps, and terminfo.tail. +.\" +.\" Note: this must be run through tbl before nroff. +.\" The magic cookie on the first line triggers this under some man programs. +.\"*************************************************************************** +.\" Copyright (c) 1998 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. * +.\"*************************************************************************** +.\" +.\" $From: terminfo.head,v 1.8 1998/03/11 21:12:53 juergen Exp $ +.\" $OpenBSD: terminfo.5tbl,v 1.1 1998/07/23 21:20:05 millert Exp $ +.TH TERMINFO 5 "" "" "File Formats" +.ds n 5 +.ds d /usr/share/terminfo +.SH NAME +terminfo \- terminal capability data base +.SH SYNOPSIS +\*d.db +.br +\*d/*/* +.SH DESCRIPTION +.I Terminfo +is a data base describing terminals, used by screen-oriented programs such as +\fBvi\fR(1), +\fBrogue\fR(1) +and libraries such as +\fBcurses\fR(3). +.I Terminfo +describes terminals by giving a set of capabilities which they +have, by specifying how to perform screen operations, and by +specifying padding requirements and initialization sequences. +.PP +Entries in +.I terminfo +consist of a sequence of `,' separated fields (embedded commas may be +escaped with a backslash or notated as \e072). +White space after the `,' separator is ignored. +The first entry for each terminal gives the names which are known for the +terminal, separated by `|' characters. +The first name given is the most common abbreviation for the terminal, +the last name given should be a long name fully identifying the terminal, +and all others are understood as synonyms for the terminal name. +All names but the last should be in lower case and contain no blanks; +the last name may well contain upper case and blanks for readability. +.PP +Terminal names (except for the last, verbose entry) should +be chosen using the following conventions. +The particular piece of hardware making up the terminal should +have a root name, thus ``hp2621''. +This name should not contain hyphens. +Modes that the hardware can be in, or user preferences, should +be indicated by appending a hyphen and a mode suffix. +Thus, a vt100 in 132 column mode would be vt100-w. +The following suffixes should be used where possible: +.PP +.TS +center ; +l c l +l l l. +\fBSuffix Meaning Example\fP +-\fInn\fP Number of lines on the screen aaa-60 +-\fIn\fPp Number of pages of memory c100-4p +-am With automargins (usually the default) vt100-am +-m Mono mode; suppress color ansi-m +-mc Magic cookie; spaces when highlighting wy30-mc +-na No arrow keys (leave them in local) c100-na +-nam Without automatic margins vt100-nam +-nl No status line att4415-nl +-ns No status line hp2626-ns +-rv Reverse video c100-rv +-s Enable status line vt100-s +-vb Use visible bell instead of beep wy370-vb +-w Wide mode (> 80 columns, usually 132) vt100-w +.TE +.PP +For more on terminal naming conventions, see the \fBterm(7)\fR manual page. +.SS Capabilities +.\" Head of terminfo man page ends here +.ps -1 +The following is a complete table of the capabilities included in a +terminfo description block and available to terminfo-using code. In each +line of the table, + +The \fBvariable\fR is the name by which the programmer (at the terminfo level) +accesses the capability. + +The \fBcapname\fR is the short name used in the text of the database, +and is used by a person updating the database. +Whenever possible, capnames are chosen to be the same as or similar to +the ANSI X3.64-1979 standard (now superseded by ECMA-48, which uses +identical or very similar names). Semantics are also intended to match +those of the specification. + +The termcap code is the old +.B termcap +capability name (some capabilities are new, and have names which termcap +did not originate). +.P +Capability names have no hard length limit, but an informal limit of 5 +characters has been adopted to keep them short and to allow the tabs in +the source file +.B Caps +to line up nicely. + +Finally, the description field attempts to convey the semantics of the +capability. You may find some codes in the description field: +.TP +(P) +indicates that padding may be specified +.TP +#[1-9] +in the description field indicates that the string is passed through tparm with +parms as given (#\fIi\fP). +.TP +(P*) +indicates that padding may vary in proportion to the number of +lines affected +.TP +(#\d\fIi\fP\u) +indicates the \fIi\fP\uth\d parameter. + +.PP + These are the boolean capabilities: + +.na +.TS H +center expand; +c l l c +c l l c +lw25 lw6 lw2 lw20. +\fBVariable Cap- TCap Description\fR +\fBBooleans name Code\fR +auto_left_margin bw bw T{ +cub1 wraps from column 0 to last column +T} +auto_right_margin am am T{ +terminal has automatic margins +T} +no_esc_ctlc xsb xb T{ +beehive (f1=escape, f2=ctrl C) +T} +ceol_standout_glitch xhp xs T{ +standout not erased by overwriting (hp) +T} +eat_newline_glitch xenl xn T{ +newline ignored after 80 cols (concept) +T} +erase_overstrike eo eo T{ +can erase overstrikes with a blank +T} +generic_type gn gn T{ +generic line type +T} +hard_copy hc hc T{ +hardcopy terminal +T} +has_meta_key km km T{ +Has a meta key, sets msb high +T} +has_status_line hs hs T{ +has extra status line +T} +insert_null_glitch in in T{ +insert mode distinguishes nulls +T} +memory_above da da T{ +display may be retained above the screen +T} +memory_below db db T{ +display may be retained below the screen +T} +move_insert_mode mir mi T{ +safe to move while in insert mode +T} +move_standout_mode msgr ms T{ +safe to move while in standout mode +T} +over_strike os os T{ +terminal can overstrike +T} +status_line_esc_ok eslok es T{ +escape can be used on the status line +T} +dest_tabs_magic_smso xt xt T{ +tabs destructive, magic so char (t1061) +T} +tilde_glitch hz hz T{ +can't print ~'s (hazeltine) +T} +transparent_underline ul ul T{ +underline character overstrikes +T} +xon_xoff xon xo T{ +terminal uses xon/xoff handshaking +T} +needs_xon_xoff nxon nx T{ +padding won't work, xon/xoff required +T} +prtr_silent mc5i 5i T{ +printer won't echo on screen +T} +hard_cursor chts HC T{ +cursor is hard to see +T} +non_rev_rmcup nrrmc NR T{ +smcup does not reverse rmcup +T} +no_pad_char npc NP T{ +pad character does not exist +T} +non_dest_scroll_region ndscr ND T{ +scrolling region is non-destructive +T} +can_change ccc cc T{ +terminal can re-define existing colors +T} +back_color_erase bce ut T{ +screen erased with background color +T} +hue_lightness_saturation hls hl T{ +terminal uses only HLS color notation (tektronix) +T} +col_addr_glitch xhpa YA T{ +only positive motion for hpa/mhpa caps +T} +cr_cancels_micro_mode crxm YB T{ +using cr turns off micro mode +T} +has_print_wheel daisy YC T{ +printer needs operator to change character set +T} +row_addr_glitch xvpa YD T{ +only positive motion for vpa/mvpa caps +T} +semi_auto_right_margin sam YE T{ +printing in last column causes cr +T} +cpi_changes_res cpix YF T{ +changing character pitch changes resolution +T} +lpi_changes_res lpix YG T{ +changing line pitch changes resolution +T} +.TE +.ad + +These are the numeric capabilities: + +.na +.TS H +center expand; +c l l c +c l l c +lw25 lw6 lw2 lw20. +\fBVariable Cap- TCap Description\fR +\fBNumeric name Code\fR +columns cols co T{ +number of columns in a line +T} +init_tabs it it T{ +tabs initially every # spaces +T} +lines lines li T{ +number of lines on screen or page +T} +lines_of_memory lm lm T{ +lines of memory if > line. 0 => varies +T} +magic_cookie_glitch xmc sg T{ +number of blank characters left by smso or rmso +T} +padding_baud_rate pb pb T{ +lowest baud rate where padding needed +T} +virtual_terminal vt vt T{ +virtual terminal number (CB/unix) +T} +width_status_line wsl ws T{ +columns in status line +T} +num_labels nlab Nl T{ +number of labels on screen +T} +label_height lh lh T{ +rows in each label +T} +label_width lw lw T{ +columns in each label +T} +max_attributes ma ma T{ +maximum combined attributes terminal can handle +T} +maximum_windows wnum MW T{ +maximum number of defineable windows +T} +max_colors colors Co T{ +maximum number of colors on screen +T} +max_pairs pairs pa T{ +maximum number of color-pairs on the screen +T} +no_color_video ncv NC T{ +video attributes that can't be used with colors +T} +.TE +.ad + +The following numeric capabilities are present in the SVr4.0 term structure, +but are not yet documented in the man page. They came in with SVr4's +printer support. + +.na +.TS H +center expand; +c l l c +c l l c +lw25 lw6 lw2 lw20. +\fBVariable Cap- TCap Description\fR +\fBNumeric name Code\fR +buffer_capacity bufsz Ya T{ +numbers of bytes buffered before printing +T} +dot_vert_spacing spinv Yb T{ +spacing of pins vertically in pins per inch +T} +dot_horz_spacing spinh Yc T{ +spacing of dots horizontally in dots per inch +T} +max_micro_address maddr Yd T{ +maximum value in micro_..._address +T} +max_micro_jump mjump Ye T{ +maximum value in parm_..._micro +T} +micro_char_size mcs Yf T{ +character size when in micro mode +T} +micro_line_size mls Yg T{ +line size when in micro mode +T} +number_of_pins npins Yh T{ +numbers of pins in print-head +T} +output_res_char orc Yi T{ +horizontal resolution in units per line +T} +output_res_line orl Yj T{ +vertical resolution in units per line +T} +output_res_horz_inch orhi Yk T{ +horizontal resolution in units per inch +T} +output_res_vert_inch orvi Yl T{ +vertical resolution in units per inch +T} +print_rate cps Ym T{ +print rate in characters per second +T} +wide_char_size widcs Yn T{ +character step size when in double wide mode +T} +buttons btns BT T{ +number of buttons on mouse +T} +bit_image_entwining bitwin Yo T{ +number of passes for each bit-image row +T} +bit_image_type bitype Yp T{ +type of bit-image device +T} +.TE +.ad + +These are the string capabilities: + +.na +.TS H +center expand; +c l l c +c l l c +lw25 lw6 lw2 lw20. +\fBVariable Cap- TCap Description\fR +\fBString name Code\fR +back_tab cbt bt T{ +back tab (P) +T} +bell bel bl T{ +audible signal (bell) (P) +T} +carriage_return cr cr T{ +carriage return (P*) (P*) +T} +change_scroll_region csr cs T{ +change region to line #1 to line #2 (P) +T} +clear_all_tabs tbc ct T{ +clear all tab stops (P) +T} +clear_screen clear cl T{ +clear screen and home cursor (P*) +T} +clr_eol el ce T{ +clear to end of line (P) +T} +clr_eos ed cd T{ +clear to end of screen (P*) +T} +column_address hpa ch T{ +horizontal position #1, absolute (P) +T} +command_character cmdch CC T{ +terminal settable cmd character in prototype !? +T} +cursor_address cup cm T{ +move to row #1 columns #2 +T} +cursor_down cud1 do T{ +down one line +T} +cursor_home home ho T{ +home cursor (if no cup) +T} +cursor_invisible civis vi T{ +make cursor invisible +T} +cursor_left cub1 le T{ +move left one space +T} +cursor_mem_address mrcup CM T{ +memory relative cursor addressing +T} +cursor_normal cnorm ve T{ +make cursor appear normal (undo civis/cvvis) +T} +cursor_right cuf1 nd T{ +move right one space +T} +cursor_to_ll ll ll T{ +last line, first column (if no cup) +T} +cursor_up cuu1 up T{ +up one line +T} +cursor_visible cvvis vs T{ +make cursor very visible +T} +delete_character dch1 dc T{ +delete character (P*) +T} +delete_line dl1 dl T{ +delete line (P*) +T} +dis_status_line dsl ds T{ +disable status line +T} +down_half_line hd hd T{ +half a line down +T} +enter_alt_charset_mode smacs as T{ +start alternate character set (P) +T} +enter_blink_mode blink mb T{ +turn on blinking +T} +enter_bold_mode bold md T{ +turn on bold (extra bright) mode +T} +enter_ca_mode smcup ti T{ +string to start programs using cup +T} +enter_delete_mode smdc dm T{ +enter delete mode +T} +enter_dim_mode dim mh T{ +turn on half-bright mode +T} +enter_insert_mode smir im T{ +enter insert mode +T} +enter_secure_mode invis mk T{ +turn on blank mode (characters invisible) +T} +enter_protected_mode prot mp T{ +turn on protected mode +T} +enter_reverse_mode rev mr T{ +turn on reverse video mode +T} +enter_standout_mode smso so T{ +begin standout mode +T} +enter_underline_mode smul us T{ +begin underline mode +T} +erase_chars ech ec T{ +erase #1 characters (P) +T} +exit_alt_charset_mode rmacs ae T{ +end alternate character set (P) +T} +exit_attribute_mode sgr0 me T{ +turn off all attributes +T} +exit_ca_mode rmcup te T{ +strings to end programs using cup +T} +exit_delete_mode rmdc ed T{ +end delete mode +T} +exit_insert_mode rmir ei T{ +exit insert mode +T} +exit_standout_mode rmso se T{ +exit standout mode +T} +exit_underline_mode rmul ue T{ +exit underline mode +T} +flash_screen flash vb T{ +visible bell (may not move cursor) +T} +form_feed ff ff T{ +hardcopy terminal page eject (P*) +T} +from_status_line fsl fs T{ +return from status line +T} +init_1string is1 i1 T{ +initialization string +T} +init_2string is2 is T{ +initialization string +T} +init_3string is3 i3 T{ +initialization string +T} +init_file if if T{ +name of initialization file +T} +insert_character ich1 ic T{ +insert character (P) +T} +insert_line il1 al T{ +insert line (P*) +T} +insert_padding ip ip T{ +insert padding after inserted character +T} +key_backspace kbs kb T{ +backspace key +T} +key_catab ktbc ka T{ +clear-all-tabs key +T} +key_clear kclr kC T{ +clear-screen or erase key +T} +key_ctab kctab kt T{ +clear-tab key +T} +key_dc kdch1 kD T{ +delete-character key +T} +key_dl kdl1 kL T{ +delete-line key +T} +key_down kcud1 kd T{ +down-arrow key +T} +key_eic krmir kM T{ +sent by rmir or smir in insert mode +T} +key_eol kel kE T{ +clear-to-end-of-line key +T} +key_eos ked kS T{ +clear-to-end-of-screen key +T} +key_f0 kf0 k0 T{ +F0 function key +T} +key_f1 kf1 k1 T{ +F1 function key +T} +key_f10 kf10 k; T{ +F10 function key +T} +key_f2 kf2 k2 T{ +F2 function key +T} +key_f3 kf3 k3 T{ +F3 function key +T} +key_f4 kf4 k4 T{ +F4 function key +T} +key_f5 kf5 k5 T{ +F5 function key +T} +key_f6 kf6 k6 T{ +F6 function key +T} +key_f7 kf7 k7 T{ +F7 function key +T} +key_f8 kf8 k8 T{ +F8 function key +T} +key_f9 kf9 k9 T{ +F9 function key +T} +key_home khome kh T{ +home key +T} +key_ic kich1 kI T{ +insert-character key +T} +key_il kil1 kA T{ +insert-line key +T} +key_left kcub1 kl T{ +left-arrow key +T} +key_ll kll kH T{ +lower-left key (home down) +T} +key_npage knp kN T{ +next-page key +T} +key_ppage kpp kP T{ +previous-page key +T} +key_right kcuf1 kr T{ +right-arrow key +T} +key_sf kind kF T{ +scroll-forward key +T} +key_sr kri kR T{ +scroll-backward key +T} +key_stab khts kT T{ +set-tab key +T} +key_up kcuu1 ku T{ +up-arrow key +T} +keypad_local rmkx ke T{ +leave 'keyboard_transmit' mode +T} +keypad_xmit smkx ks T{ +enter 'keyboard_transmit' mode +T} +lab_f0 lf0 l0 T{ +label on function key f0 if not f0 +T} +lab_f1 lf1 l1 T{ +label on function key f1 if not f1 +T} +lab_f10 lf10 la T{ +label on function key f10 if not f10 +T} +lab_f2 lf2 l2 T{ +label on function key f2 if not f2 +T} +lab_f3 lf3 l3 T{ +label on function key f3 if not f3 +T} +lab_f4 lf4 l4 T{ +label on function key f4 if not f4 +T} +lab_f5 lf5 l5 T{ +label on function key f5 if not f5 +T} +lab_f6 lf6 l6 T{ +label on function key f6 if not f6 +T} +lab_f7 lf7 l7 T{ +label on function key f7 if not f7 +T} +lab_f8 lf8 l8 T{ +label on function key f8 if not f8 +T} +lab_f9 lf9 l9 T{ +label on function key f9 if not f9 +T} +meta_off rmm mo T{ +turn off meta mode +T} +meta_on smm mm T{ +turn on meta mode (8th-bit on) +T} +newline nel nw T{ +newline (behave like cr followed by lf) +T} +pad_char pad pc T{ +padding char (instead of null) +T} +parm_dch dch DC T{ +delete #1 characters (P*) +T} +parm_delete_line dl DL T{ +delete #1 lines (P*) +T} +parm_down_cursor cud DO T{ +down #1 lines (P*) +T} +parm_ich ich IC T{ +insert #1 characters (P*) +T} +parm_index indn SF T{ +scroll forward #1 lines (P) +T} +parm_insert_line il AL T{ +insert #1 lines (P*) +T} +parm_left_cursor cub LE T{ +move #1 characters to the left (P) +T} +parm_right_cursor cuf RI T{ +move #1 characters to the right (P*) +T} +parm_rindex rin SR T{ +scroll back #1 lines (P) +T} +parm_up_cursor cuu UP T{ +up #1 lines (P*) +T} +pkey_key pfkey pk T{ +program function key #1 to type string #2 +T} +pkey_local pfloc pl T{ +program function key #1 to execute string #2 +T} +pkey_xmit pfx px T{ +program function key #1 to transmit string #2 +T} +print_screen mc0 ps T{ +print contents of screen +T} +prtr_off mc4 pf T{ +turn off printer +T} +prtr_on mc5 po T{ +turn on printer +T} +repeat_char rep rp T{ +repeat char #1 #2 times (P*) +T} +reset_1string rs1 r1 T{ +reset string +T} +reset_2string rs2 r2 T{ +reset string +T} +reset_3string rs3 r3 T{ +reset string +T} +reset_file rf rf T{ +name of reset file +T} +restore_cursor rc rc T{ +restore cursor to position of last save_cursor +T} +row_address vpa cv T{ +vertical position #1 absolute (P) +T} +save_cursor sc sc T{ +save current cursor position (P) +T} +scroll_forward ind sf T{ +scroll text up (P) +T} +scroll_reverse ri sr T{ +scroll text down (P) +T} +set_attributes sgr sa T{ +define video attributes #1-#9 (PG9) +T} +set_tab hts st T{ +set a tab in every row, current columns +T} +set_window wind wi T{ +current window is lines #1-#2 cols #3-#4 +T} +tab ht ta T{ +tab to next 8-space hardware tab stop +T} +to_status_line tsl ts T{ +move to status line +T} +underline_char uc uc T{ +underline char and move past it +T} +up_half_line hu hu T{ +half a line up +T} +init_prog iprog iP T{ +path name of program for initialization +T} +key_a1 ka1 K1 T{ +upper left of keypad +T} +key_a3 ka3 K3 T{ +upper right of keypad +T} +key_b2 kb2 K2 T{ +center of keypad +T} +key_c1 kc1 K4 T{ +lower left of keypad +T} +key_c3 kc3 K5 T{ +lower right of keypad +T} +prtr_non mc5p pO T{ +turn on printer for #1 bytes +T} +char_padding rmp rP T{ +like ip but when in insert mode +T} +acs_chars acsc ac T{ +graphics charset pairs, based on vt100 +T} +plab_norm pln pn T{ +program label #1 to show string #2 +T} +key_btab kcbt kB T{ +back-tab key +T} +enter_xon_mode smxon SX T{ +turn on xon/xoff handshaking +T} +exit_xon_mode rmxon RX T{ +turn off xon/xoff handshaking +T} +enter_am_mode smam SA T{ +turn on automatic margins +T} +exit_am_mode rmam RA T{ +turn off automatic margins +T} +xon_character xonc XN T{ +XON character +T} +xoff_character xoffc XF T{ +XOFF character +T} +ena_acs enacs eA T{ +enable alternate char set +T} +label_on smln LO T{ +turn on soft labels +T} +label_off rmln LF T{ +turn off soft labels +T} +key_beg kbeg @1 T{ +begin key +T} +key_cancel kcan @2 T{ +cancel key +T} +key_close kclo @3 T{ +close key +T} +key_command kcmd @4 T{ +command key +T} +key_copy kcpy @5 T{ +copy key +T} +key_create kcrt @6 T{ +create key +T} +key_end kend @7 T{ +end key +T} +key_enter kent @8 T{ +enter/send key +T} +key_exit kext @9 T{ +exit key +T} +key_find kfnd @0 T{ +find key +T} +key_help khlp %1 T{ +help key +T} +key_mark kmrk %2 T{ +mark key +T} +key_message kmsg %3 T{ +message key +T} +key_move kmov %4 T{ +move key +T} +key_next knxt %5 T{ +next key +T} +key_open kopn %6 T{ +open key +T} +key_options kopt %7 T{ +options key +T} +key_previous kprv %8 T{ +previous key +T} +key_print kprt %9 T{ +print key +T} +key_redo krdo %0 T{ +redo key +T} +key_reference kref &1 T{ +reference key +T} +key_refresh krfr &2 T{ +refresh key +T} +key_replace krpl &3 T{ +replace key +T} +key_restart krst &4 T{ +restart key +T} +key_resume kres &5 T{ +resume key +T} +key_save ksav &6 T{ +save key +T} +key_suspend kspd &7 T{ +suspend key +T} +key_undo kund &8 T{ +undo key +T} +key_sbeg kBEG &9 T{ +shifted begin key +T} +key_scancel kCAN &0 T{ +shifted cancel key +T} +key_scommand kCMD *1 T{ +shifted command key +T} +key_scopy kCPY *2 T{ +shifted copy key +T} +key_screate kCRT *3 T{ +shifted create key +T} +key_sdc kDC *4 T{ +shifted delete-character key +T} +key_sdl kDL *5 T{ +shifted delete-line key +T} +key_select kslt *6 T{ +select key +T} +key_send kEND *7 T{ +shifted end key +T} +key_seol kEOL *8 T{ +shifted clear-to-end-of-line key +T} +key_sexit kEXT *9 T{ +shifted exit key +T} +key_sfind kFND *0 T{ +shifted find key +T} +key_shelp kHLP #1 T{ +shifted help key +T} +key_shome kHOM #2 T{ +shifted home key +T} +key_sic kIC #3 T{ +shifted insert-character key +T} +key_sleft kLFT #4 T{ +shifted left-arrow key +T} +key_smessage kMSG %a T{ +shifted message key +T} +key_smove kMOV %b T{ +shifted move key +T} +key_snext kNXT %c T{ +shifted next key +T} +key_soptions kOPT %d T{ +shifted options key +T} +key_sprevious kPRV %e T{ +shifted previous key +T} +key_sprint kPRT %f T{ +shifted print key +T} +key_sredo kRDO %g T{ +shifted redo key +T} +key_sreplace kRPL %h T{ +shifted replace key +T} +key_sright kRIT %i T{ +shifted right-arrow key +T} +key_srsume kRES %j T{ +shifted resume key +T} +key_ssave kSAV !1 T{ +shifted save key +T} +key_ssuspend kSPD !2 T{ +shifted suspend key +T} +key_sundo kUND !3 T{ +shifted undo key +T} +req_for_input rfi RF T{ +send next input char (for ptys) +T} +key_f11 kf11 F1 T{ +F11 function key +T} +key_f12 kf12 F2 T{ +F12 function key +T} +key_f13 kf13 F3 T{ +F13 function key +T} +key_f14 kf14 F4 T{ +F14 function key +T} +key_f15 kf15 F5 T{ +F15 function key +T} +key_f16 kf16 F6 T{ +F16 function key +T} +key_f17 kf17 F7 T{ +F17 function key +T} +key_f18 kf18 F8 T{ +F18 function key +T} +key_f19 kf19 F9 T{ +F19 function key +T} +key_f20 kf20 FA T{ +F20 function key +T} +key_f21 kf21 FB T{ +F21 function key +T} +key_f22 kf22 FC T{ +F22 function key +T} +key_f23 kf23 FD T{ +F23 function key +T} +key_f24 kf24 FE T{ +F24 function key +T} +key_f25 kf25 FF T{ +F25 function key +T} +key_f26 kf26 FG T{ +F26 function key +T} +key_f27 kf27 FH T{ +F27 function key +T} +key_f28 kf28 FI T{ +F28 function key +T} +key_f29 kf29 FJ T{ +F29 function key +T} +key_f30 kf30 FK T{ +F30 function key +T} +key_f31 kf31 FL T{ +F31 function key +T} +key_f32 kf32 FM T{ +F32 function key +T} +key_f33 kf33 FN T{ +F33 function key +T} +key_f34 kf34 FO T{ +F34 function key +T} +key_f35 kf35 FP T{ +F35 function key +T} +key_f36 kf36 FQ T{ +F36 function key +T} +key_f37 kf37 FR T{ +F37 function key +T} +key_f38 kf38 FS T{ +F38 function key +T} +key_f39 kf39 FT T{ +F39 function key +T} +key_f40 kf40 FU T{ +F40 function key +T} +key_f41 kf41 FV T{ +F41 function key +T} +key_f42 kf42 FW T{ +F42 function key +T} +key_f43 kf43 FX T{ +F43 function key +T} +key_f44 kf44 FY T{ +F44 function key +T} +key_f45 kf45 FZ T{ +F45 function key +T} +key_f46 kf46 Fa T{ +F46 function key +T} +key_f47 kf47 Fb T{ +F47 function key +T} +key_f48 kf48 Fc T{ +F48 function key +T} +key_f49 kf49 Fd T{ +F49 function key +T} +key_f50 kf50 Fe T{ +F50 function key +T} +key_f51 kf51 Ff T{ +F51 function key +T} +key_f52 kf52 Fg T{ +F52 function key +T} +key_f53 kf53 Fh T{ +F53 function key +T} +key_f54 kf54 Fi T{ +F54 function key +T} +key_f55 kf55 Fj T{ +F55 function key +T} +key_f56 kf56 Fk T{ +F56 function key +T} +key_f57 kf57 Fl T{ +F57 function key +T} +key_f58 kf58 Fm T{ +F58 function key +T} +key_f59 kf59 Fn T{ +F59 function key +T} +key_f60 kf60 Fo T{ +F60 function key +T} +key_f61 kf61 Fp T{ +F61 function key +T} +key_f62 kf62 Fq T{ +F62 function key +T} +key_f63 kf63 Fr T{ +F63 function key +T} +clr_bol el1 cb T{ +Clear to beginning of line +T} +clear_margins mgc MC T{ +clear right and left soft margins +T} +set_left_margin smgl ML T{ +set left soft margin at current column +T} +set_right_margin smgr MR T{ +set right soft margin at current column +T} +label_format fln Lf T{ +label format +T} +set_clock sclk SC T{ +set clock, #1 hrs #2 mins #3 secs +T} +display_clock dclk DK T{ +display clock at (#1,#2) +T} +remove_clock rmclk RC T{ +remove clock +T} +create_window cwin CW T{ +define a window #1 from #2,#3 to #4,#5 +T} +goto_window wingo WG T{ +go to window #1 +T} +hangup hup HU T{ +hang-up phone +T} +dial_phone dial DI T{ +dial number #1 +T} +quick_dial qdial QD T{ +dial number #1 without checking +T} +tone tone TO T{ +select touch tone dialing +T} +pulse pulse PU T{ +select pulse dialing +T} +flash_hook hook fh T{ +flash switch hook +T} +fixed_pause pause PA T{ +pause for 2-3 seconds +T} +wait_tone wait WA T{ +wait for dial-tone +T} +user0 u0 u0 T{ +User string #0 +T} +user1 u1 u1 T{ +User string #1 +T} +user2 u2 u2 T{ +User string #2 +T} +user3 u3 u3 T{ +User string #3 +T} +user4 u4 u4 T{ +User string #4 +T} +user5 u5 u5 T{ +User string #5 +T} +user6 u6 u6 T{ +User string #6 +T} +user7 u7 u7 T{ +User string #7 +T} +user8 u8 u8 T{ +User string #8 +T} +user9 u9 u9 T{ +User string #9 +T} +orig_pair op op T{ +Set default pair to its original value +T} +orig_colors oc oc T{ +Set all color pairs to the original ones +T} +initialize_color initc Ic T{ +initialize color #1 to (#2,#3,#4) +T} +initialize_pair initp Ip T{ +Initialize color pair #1 to fg=(#2,#3,#4), bg=(#5,#6,#7) +T} +set_color_pair scp sp T{ +Set current color pair to #1 +T} +set_foreground setf Sf T{ +Set foreground color #1 +T} +set_background setb Sb T{ +Set background color #1 +T} +change_char_pitch cpi ZA T{ +Change number of characters per inch +T} +change_line_pitch lpi ZB T{ +Change number of lines per inch +T} +change_res_horz chr ZC T{ +Change horizontal resolution +T} +change_res_vert cvr ZD T{ +Change vertical resolution +T} +define_char defc ZE T{ +Define a character +T} +enter_doublewide_mode swidm ZF T{ +Enter double-wide mode +T} +enter_draft_quality sdrfq ZG T{ +Enter draft-quality mode +T} +enter_italics_mode sitm ZH T{ +Enter italic mode +T} +enter_leftward_mode slm ZI T{ +Start leftward carriage motion +T} +enter_micro_mode smicm ZJ T{ +Start micro-motion mode +T} +enter_near_letter_quality snlq ZK T{ +Enter NLQ mode +T} +enter_normal_quality snrmq ZL T{ +Enter normal-quality mode +T} +enter_shadow_mode sshm ZM T{ +Enter shadow-print mode +T} +enter_subscript_mode ssubm ZN T{ +Enter subscript mode +T} +enter_superscript_mode ssupm ZO T{ +Enter superscript mode +T} +enter_upward_mode sum ZP T{ +Start upward carriage motion +T} +exit_doublewide_mode rwidm ZQ T{ +End double-wide mode +T} +exit_italics_mode ritm ZR T{ +End italic mode +T} +exit_leftward_mode rlm ZS T{ +End left-motion mode +T} +exit_micro_mode rmicm ZT T{ +End micro-motion mode +T} +exit_shadow_mode rshm ZU T{ +End shadow-print mode +T} +exit_subscript_mode rsubm ZV T{ +End subscript mode +T} +exit_superscript_mode rsupm ZW T{ +End superscript mode +T} +exit_upward_mode rum ZX T{ +End reverse character motion +T} +micro_column_address mhpa ZY T{ +Like column_address in micro mode +T} +micro_down mcud1 ZZ T{ +Like cursor_down in micro mode +T} +micro_left mcub1 Za T{ +Like cursor_left in micro mode +T} +micro_right mcuf1 Zb T{ +Like cursor_right in micro mode +T} +micro_row_address mvpa Zc T{ +Like row_address in micro mode +T} +micro_up mcuu1 Zd T{ +Like cursor_up in micro mode +T} +order_of_pins porder Ze T{ +Match software bits to print-head pins +T} +parm_down_micro mcud Zf T{ +Like parm_down_cursor in micro mode +T} +parm_left_micro mcub Zg T{ +Like parm_left_cursor in micro mode +T} +parm_right_micro mcuf Zh T{ +Like parm_right_cursor in micro mode +T} +parm_up_micro mcuu Zi T{ +Like parm_up_cursor in micro mode +T} +select_char_set scs Zj T{ +Select character set +T} +set_bottom_margin smgb Zk T{ +Set bottom margin at current line +T} +set_bottom_margin_parm smgbp Zl T{ +Set bottom margin at line #1 or #2 lines from bottom +T} +set_left_margin_parm smglp Zm T{ +Set left (right) margin at column #1 (#2) +T} +set_right_margin_parm smgrp Zn T{ +Set right margin at column #1 +T} +set_top_margin smgt Zo T{ +Set top margin at current line +T} +set_top_margin_parm smgtp Zp T{ +Set top (bottom) margin at row #1 (#2) +T} +start_bit_image sbim Zq T{ +Start printing bit image graphics +T} +start_char_set_def scsd Zr T{ +Start character set definition +T} +stop_bit_image rbim Zs T{ +Stop printing bit image graphics +T} +stop_char_set_def rcsd Zt T{ +End definition of character set +T} +subscript_characters subcs Zu T{ +List of subscriptable characters +T} +superscript_characters supcs Zv T{ +List of superscriptable characters +T} +these_cause_cr docr Zw T{ +Printing any of these characters causes CR +T} +zero_motion zerom Zx T{ +No motion for subsequent character +T} +.TE +.ad + +The following string capabilities are present in the SVr4.0 term structure, +but were originally not documented in the man page. + +.na +.TS H +center expand; +c l l c +c l l c +lw25 lw6 lw2 lw18. +\fBVariable Cap- TCap Description\fR +\fBString name Code\fR +char_set_names csnm Zy T{ +List of character set names +T} +key_mouse kmous Km T{ +Mouse event has occurred +T} +mouse_info minfo Mi T{ +Mouse status information +T} +req_mouse_pos reqmp RQ T{ +Request mouse position +T} +get_mouse getm Gm T{ +Curses should get button events +T} +set_a_foreground setaf AF T{ +Set foreground color using ANSI escape +T} +set_a_background setab AB T{ +Set background color using ANSI escape +T} +pkey_plab pfxl xl T{ +Program function key #1 to type string #2 and show string #3 +T} +device_type devt dv T{ +Indicate language/codeset support +T} +code_set_init csin ci T{ +Init sequence for multiple codesets +T} +set0_des_seq s0ds s0 T{ +Shift to code set 0 (EUC set 0, ASCII) +T} +set1_des_seq s1ds s1 T{ +Shift to code set 1 +T} +set2_des_seq s2ds s2 T{ +Shift to code set 2 +T} +set3_des_seq s3ds s3 T{ +Shift to code set 3 +T} +set_lr_margin smglr ML T{ +Set both left and right margins to #1, #2 +T} +set_tb_margin smgtb MT T{ +Sets both top and bottom margins to #1, #2 +T} +bit_image_repeat birep Xy T{ +Repeat bit image cell #1 #2 times +T} +bit_image_newline binel Zz T{ +Move to next row of the bit image +T} +bit_image_carriage_return bicr Yv T{ +Move to beginning of same row +T} +color_names colornm Yw T{ +Give name for color #1 +T} +define_bit_image_region defbi Yx T{ +Define rectangualar bit image region +T} +end_bit_image_region endbi Yy T{ +End a bit-image region +T} +set_color_band setcolor Yz T{ +Change to ribbon color #1 +T} +set_page_length slines YZ T{ +Set page length to #1 lines +T} +display_pc_char dispc S1 T{ +Display PC character +T} +enter_pc_charset_mode smpch S2 T{ +Enter PC character display mode +T} +exit_pc_charset_mode rmpch S3 T{ +Exit PC character display mode +T} +enter_scancode_mode smsc S4 T{ +Enter PC scancode mode +T} +exit_scancode_mode rmsc S5 T{ +Exit PC scancode mode +T} +pc_term_options pctrm S6 T{ +PC terminal options +T} +scancode_escape scesc S7 T{ +Escape for scancode emulation +T} +alt_scancode_esc scesa S8 T{ +Alternate escape for scancode emulation +T} +.TE +.ad + +.in .8i +The XSI Curses standard added these. They are probably in some post-4.1 +version of System V curses as well, but because XSI Curses lists them in +strict alphabetical order we don't know if this is the right binary order. +The \fBncurses\fR termcap names for them are invented; according to the +XSI Curses standard, they have no termcap names. If your compiled terminfo +entries use these, they may not be binary-compatible with System V terminfo +entries after SVr4.1; beware! + +.na +.TS H +center expand; +c l l c +c l l c +lw25 lw6 lw2 lw20. +\fBVariable Cap- TCap Description\fR +\fBString name Code\fR +enter_horizontal_hl_mode ehhlm Xh T{ +Enter horizontal highlight mode +T} +enter_left_hl_mode elhlm Xl T{ +Enter left highlight mode +T} +enter_low_hl_mode elohlm Xo T{ +Enter low highlight mode +T} +enter_right_hl_mode erhlm Xr T{ +Enter right highlight mode +T} +enter_top_hl_mode ethlm Xt T{ +Enter top highlight mode +T} +enter_vertical_hl_mode evhlm Xv T{ +Enter vertical highlight mode +T} +.TE +.ad +.\" $From: terminfo.tail,v 1.19 1998/06/30 01:10:04 tom Exp $ +.\" Beginning of terminfo.tail file +.ps +1 +.PP +.SS A Sample Entry +.PP +The following entry, describing an ANSI-standard terminal, is representative +of what a \fBterminfo\fR entry for a modern terminal typically looks like. +.PP +.nf +.in -2 +.ta .3i +.ft CW +\s-2ansi|ansi/pc-term compatible with color, + mc5i, + colors#8, ncv#3, pairs#64, + cub=\\E[%p1%dD, cud=\\E[%p1%dB, cuf=\\E[%p1%dC, + cuu=\\E[%p1%dA, dch=\\E[%p1%dP, dl=\\E[%p1%dM, + ech=\\E[%p1%dX, el1=\\E[1K, hpa=\\E[%p1%dG, ht=\\E[I, + ich=\\E[%p1%d@, il=\\E[%p1%dL, indn=\\E[%p1%dS, + kbs=^H, kcbt=\\E[Z, kcub1=\\E[D, kcud1=\\E[B, + kcuf1=\\E[C, kcuu1=\\E[A, kf1=\\E[M, kf10=\\E[V, + kf11=\\E[W, kf12=\\E[X, kf2=\\E[N, kf3=\\E[O, kf4=\\E[P, + kf5=\\E[Q, kf6=\\E[R, kf7=\\E[S, kf8=\\E[T, kf9=\\E[U, + kich1=\\E[L, mc4=\\E[4i, mc5=\\E[5i, nel=\\r\\E[S, + op=\\E[37;40m, rep=%p1%c\\E[%p2%{1}%-%db, + rin=\\E[%p1%dT, s0ds=\\E(B, s1ds=\\E)B, s2ds=\\E*B, + s3ds=\\E+B, setab=\\E[4%p1%dm, setaf=\\E[3%p1%dm, + setb=\\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, + setf=\\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, + sgr=\\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;12%;m, + sgr0=\\E[0;10m, tbc=\\E[2g, u6=\\E[%d;%dR, u7=\\E[6n, + u8=\\E[?%[;0123456789]c, u9=\\E[c, vpa=\\E[%p1%dd,\s+2 +.in +2 +.fi +.ft R +.PP +Entries may continue onto multiple lines by placing white space at +the beginning of each line except the first. +Comments may be included on lines beginning with ``#''. +Capabilities in +.I terminfo +are of three types: +Boolean capabilities which indicate that the terminal has +some particular feature, numeric capabilities giving the size of the terminal +or the size of particular delays, and string +capabilities, which give a sequence which can be used to perform particular +terminal operations. +.PP +.SS Types of Capabilities +.PP +All capabilities have names. For instance, the fact that +ANSI-standard terminals have +.I "automatic margins" +(i.e., an automatic return and line-feed +when the end of a line is reached) is indicated by the capability \fBam\fR. +Hence the description of ansi includes \fBam\fR. +Numeric capabilities are followed by the character `#' and then the value. +Thus \fBcols\fR, which indicates the number of columns the terminal has, +gives the value `80' for ansi. +.PP +Finally, string valued capabilities, such as \fBel\fR (clear to end of line +sequence) are given by the two-character code, an `=', and then a string +ending at the next following `,'. +.PP +A number of escape sequences are provided in the string valued capabilities +for easy encoding of characters there. Both \fB\eE\fR and \fB\ee\fR +map to an \s-1ESCAPE\s0 character, +\fB^x\fR maps to a control-x for any appropriate x, and the sequences +\fB\en \el \er \et \eb \ef \es\fR give +a newline, line-feed, return, tab, backspace, form-feed, and space. +Other escapes include \fB\e^\fR for \fB^\fR, +\fB\e\e\fR for \fB\e\fR, +\fB\e\fR, for comma, +\fB\e:\fR for \fB:\fR, +and \fB\e0\fR for null. +(\fB\e0\fR will produce \e200, which does not terminate a string but behaves +as a null character on most terminals, providing CS7 is specified. See stty(1).) +Finally, characters may be given as three octal digits after a \fB\e\fR. +.PP +A delay in milliseconds may appear anywhere in a string capability, enclosed in +$<..> brackets, as in \fBel\fP=\eEK$<5>, and padding characters are supplied by +.I tputs +to provide this delay. The delay must be a number with at most one decimal +place of precision; it may be followed by suffixes `*' or '/' or both. A `*' +indicates that the padding required is proportional to the number of lines +affected by the operation, and the amount given is the per-affected-unit +padding required. (In the case of insert character, the factor is still the +number of +.IR lines +affected.) Normally, padding is advisory if the device has the \fBxon\fR +capability; it is used for cost computation but does not trigger delays. A `/' +suffix indicates that the padding is mandatory and forces a delay of the given +number of milliseconds even on devices for which \fBxon\fR is present to +indicate flow control. +.PP +Sometimes individual capabilities must be commented out. +To do this, put a period before the capability name. +For example, see the second +.B ind +in the example above. +.br +.ne 5 +.PP +.SS Fetching Compiled Descriptions +.PP +If the environment variable TERMINFO is set, it is interpreted as the pathname +of a directory containing the compiled description you are working on. Only +that directory is searched. +.PP +If TERMINFO is not set, the \fBncurses\fR version of the terminfo reader code +will instead look in the directory \fB$HOME/.terminfo\fR +for a compiled description. +If it fails to find one there, and the environment variable TERMINFO_DIRS is +set, it will interpret the contents of that variable as a list of colon- +separated directories to be searched (an empty entry is interpreted as a +command to search \fI\*d\fR). If no description is found in any of the +TERMINFO_DIRS directories, the fetch fails. +.PP +If neither TERMINFO nor TERMINFO_DIRS is set, the last place tried will be the +system terminfo directory, \fI\*d\fR. +.PP +(Neither the \fB$HOME/.terminfo\fR lookups nor TERMINFO_DIRS extensions are +supported under stock System V terminfo/curses.) +.PP +.SS Preparing Descriptions +.PP +We now outline how to prepare descriptions of terminals. +The most effective way to prepare a terminal description is by imitating +the description of a similar terminal in +.I terminfo +and to build up a description gradually, using partial descriptions +with +.I vi +or some other screen-oriented program to check that they are correct. +Be aware that a very unusual terminal may expose deficiencies in +the ability of the +.I terminfo +file to describe it +or bugs in the screen-handling code of the test program. +.PP +To get the padding for insert line right (if the terminal manufacturer +did not document it) a severe test is to edit a large file at 9600 baud, +delete 16 or so lines from the middle of the screen, then hit the `u' +key several times quickly. +If the terminal messes up, more padding is usually needed. +A similar test can be used for insert character. +.PP +.SS Basic Capabilities +.PP +The number of columns on each line for the terminal is given by the +\fBcols\fR numeric capability. If the terminal is a \s-1CRT\s0, then the +number of lines on the screen is given by the \fBlines\fR capability. +If the terminal wraps around to the beginning of the next line when +it reaches the right margin, then it should have the \fBam\fR capability. +If the terminal can clear its screen, leaving the cursor in the home +position, then this is given by the \fBclear\fR string capability. +If the terminal overstrikes +(rather than clearing a position when a character is struck over) +then it should have the \fBos\fR capability. +If the terminal is a printing terminal, with no soft copy unit, +give it both +.B hc +and +.BR os . +.RB ( os +applies to storage scope terminals, such as \s-1TEKTRONIX\s+1 4010 +series, as well as hard copy and APL terminals.) +If there is a code to move the cursor to the left edge of the current +row, give this as +.BR cr . +(Normally this will be carriage return, control M.) +If there is a code to produce an audible signal (bell, beep, etc) +give this as +.BR bel . +.PP +If there is a code to move the cursor one position to the left +(such as backspace) that capability should be given as +.BR cub1 . +Similarly, codes to move to the right, up, and down should be +given as +.BR cuf1 , +.BR cuu1 , +and +.BR cud1 . +These local cursor motions should not alter the text they pass over, +for example, you would not normally use `\fBcuf1\fP=\ ' because the +space would erase the character moved over. +.PP +A very important point here is that the local cursor motions encoded +in +.I terminfo +are undefined at the left and top edges of a \s-1CRT\s0 terminal. +Programs should never attempt to backspace around the left edge, +unless +.B bw +is given, +and never attempt to go up locally off the top. +In order to scroll text up, a program will go to the bottom left corner +of the screen and send the +.B ind +(index) string. +.PP +To scroll text down, a program goes to the top left corner +of the screen and sends the +.B ri +(reverse index) string. +The strings +.B ind +and +.B ri +are undefined when not on their respective corners of the screen. +.PP +Parameterized versions of the scrolling sequences are +.B indn +and +.B rin +which have the same semantics as +.B ind +and +.B ri +except that they take one parameter, and scroll that many lines. +They are also undefined except at the appropriate edge of the screen. +.PP +The \fBam\fR capability tells whether the cursor sticks at the right +edge of the screen when text is output, but this does not necessarily +apply to a +.B cuf1 +from the last column. +The only local motion which is defined from the left edge is if +.B bw +is given, then a +.B cub1 +from the left edge will move to the right edge of the previous row. +If +.B bw +is not given, the effect is undefined. +This is useful for drawing a box around the edge of the screen, for example. +If the terminal has switch selectable automatic margins, +the +.I terminfo +file usually assumes that this is on; i.e., \fBam\fR. +If the terminal has a command which moves to the first column of the next +line, that command can be given as +.B nel +(newline). +It does not matter if the command clears the remainder of the current line, +so if the terminal has no +.B cr +and +.B lf +it may still be possible to craft a working +.B nel +out of one or both of them. +.PP +These capabilities suffice to describe hard-copy and \*(lqglass-tty\*(rq terminals. +Thus the model 33 teletype is described as +.PP +.DT +.nf +.ft CW +.in -7 + \s-133\||\|tty33\||\|tty\||\|model 33 teletype, + bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,\s+1 +.in +7 +.ft R +.PP +while the Lear Siegler \s-1ADM\-3\s0 is described as +.PP +.DT +.nf +.ft CW +.in -7 + \s-1adm3\||\|3\||\|lsi adm3, + am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J, + ind=^J, lines#24,\s+1 +.in +7 +.ft R +.fi +.PP +.SS Parameterized Strings +.PP +Cursor addressing and other strings requiring parameters +in the terminal are described by a +parameterized string capability, with +.IR printf (3S) +like escapes \fB%x\fR in it. +For example, to address the cursor, the +.B cup +capability is given, using two parameters: +the row and column to address to. +(Rows and columns are numbered from zero and refer to the +physical screen visible to the user, not to any unseen memory.) +If the terminal has memory relative cursor addressing, +that can be indicated by +.BR mrcup . +.PP +The parameter mechanism uses a stack and special \fB%\fP codes +to manipulate it. Typically a sequence will push one of the +parameters onto the stack and then print it in some format. +Often more complex operations are necessary. +.PP +The \fB%\fR encodings have the following meanings: +.PP +.DT +.nf +.ta .5i 1.5i + \s-1%% outputs `%' + %\fI[[\fP:\fI]flags][width[.precision]][\fPdoxXs\fI]\fP + as in \fBprintf\fP, flags are [-+#] and space + %c print pop() gives %c + + %p[1-9] push \fIi\fP'th parm + %P[a-z] set dynamic variable [a-z] to pop() + %g[a-z] get dynamic variable [a-z] and push it + %P[A-Z] set static variable [a-z] to pop() + %g[A-Z] get static variable [a-z] and push it + %'\fIc\fP' char constant \fIc\fP + %{\fInn\fP} integer constant \fInn\fP + %l push strlen(pop) + + %+ %- %* %/ %m + arithmetic (%m is mod): push(pop() op pop()) + %& %| %^ bit operations: push(pop() op pop()) + %= %> %< logical operations: push(pop() op pop()) + %A, %O logical and & or operations (for conditionals) + %! %~ unary operations push(op pop()) + %i add 1 to first two parms (for ANSI terminals) + + %? expr %t thenpart %e elsepart %; + if-then-else, %e elsepart is optional. + else-if's are possible a la Algol 68: + %? c\d1\u %t b\d1\u %e c\d2\u %t b\d2\u %e c\d3\u %t b\d3\u %e c\d4\u %t b\d4\u %e %; +\s+1 c\di\u are conditions, b\di\u are bodies. +.fi +.PP +Binary operations are in postfix form with the operands in the usual order. +That is, to get x-5 one would use "%gx%{5}%-". %P and %g variables are +persistent across escape-string evaluations. +.PP +Consider the HP2645, which, to get to row 3 and column 12, needs +to be sent \eE&a12c03Y padded for 6 milliseconds. Note that the order +of the rows and columns is inverted here, and that the row and column +are printed as two digits. +Thus its \fBcup\fR capability is \*(lqcup=6\eE&%p2%2dc%p1%2dY\*(rq. +.PP +The Microterm \s-1ACT-IV\s0 needs the current row and column sent +preceded by a \fB^T\fR, with the row and column simply encoded in binary, +\*(lqcup=^T%p1%c%p2%c\*(rq. +Terminals which use \*(lq%c\*(rq need to be able to +backspace the cursor (\fBcub1\fR), +and to move the cursor up one line on the screen (\fBcuu1\fR). +This is necessary because it is not always safe to transmit \fB\en\fR +\fB^D\fR and \fB\er\fR, as the system may change or discard them. +(The library routines dealing with terminfo set tty modes so that +tabs are never expanded, so \et is safe to send. +This turns out to be essential for the Ann Arbor 4080.) +.PP +A final example is the \s-1LSI ADM\s0-3a, which uses row and column +offset by a blank character, thus \*(lqcup=\eE=%p1%' '%+%c%p2%' '%+%c\*(rq. +After sending `\eE=', this pushes the first parameter, pushes the +ASCII value for a space (32), adds them (pushing the sum on the stack +in place of the two previous values) and outputs that value as a character. +Then the same is done for the second parameter. +More complex arithmetic is possible using the stack. +.PP +.SS Cursor Motions +.PP +If the terminal has a fast way to home the cursor +(to very upper left corner of screen) then this can be given as +\fBhome\fR; similarly a fast way of getting to the lower left-hand corner +can be given as \fBll\fR; this may involve going up with \fBcuu1\fR +from the home position, +but a program should never do this itself (unless \fBll\fR does) because it +can make no assumption about the effect of moving up from the home position. +Note that the home position is the same as addressing to (0,0): +to the top left corner of the screen, not of memory. +(Thus, the \eEH sequence on HP terminals cannot be used for +.BR home .) +.PP +If the terminal has row or column absolute cursor addressing, +these can be given as single parameter capabilities +.B hpa +(horizontal position absolute) +and +.B vpa +(vertical position absolute). +Sometimes these are shorter than the more general two parameter +sequence (as with the hp2645) and can be used in preference to +.BR cup . +If there are parameterized local motions (e.g., move +.I n +spaces to the right) these can be given as +.BR cud , +.BR cub , +.BR cuf , +and +.BR cuu +with a single parameter indicating how many spaces to move. +These are primarily useful if the terminal does not have +.BR cup , +such as the \s-1TEKTRONIX\s+1 4025. +.PP +If the terminal needs to be in a special mode when running +a program that uses these capabilities, +the codes to enter and exit this mode can be given as \fBsmcup\fR and \fBrmcup\fR. +This arises, for example, from terminals like the Concept with more than +one page of memory. +If the terminal has only memory relative cursor addressing and not screen +relative cursor addressing, a one screen-sized window must be fixed into +the terminal for cursor addressing to work properly. +This is also used for the \s-1TEKTRONIX\s+1 4025, +where +.B smcup +sets the command character to be the one used by terminfo. +If the \fBsmcup\fP sequence will not restore the screen after an +\fBrmcup\fP sequence is output (to the state prior to outputting +\fBrmcup\fP), specify \fBnrrmc\fP. +.PP +.SS Area Clears +.PP +If the terminal can clear from the current position to the end of the +line, leaving the cursor where it is, this should be given as \fBel\fR. +If the terminal can clear from the beginning of the line to the current +position inclusive, leaving +the cursor where it is, this should be given as \fBel1\fP. +If the terminal can clear from the current position to the end of the +display, then this should be given as \fBed\fR. +\fBEd\fR is only defined from the first column of a line. +(Thus, it can be simulated by a request to delete a large number of lines, +if a true +.B ed +is not available.) +.PP +.SS Insert/delete line and vertical motions +.PP +If the terminal can open a new blank line before the line where the cursor +is, this should be given as \fBil1\fR; this is done only from the first +position of a line. The cursor must then appear on the newly blank line. +If the terminal can delete the line which the cursor is on, then this +should be given as \fBdl1\fR; this is done only from the first position on +the line to be deleted. +Versions of +.B il1 +and +.B dl1 +which take a single parameter and insert or delete that many lines can +be given as +.B il +and +.BR dl . +.PP +If the terminal has a settable scrolling region (like the vt100) +the command to set this can be described with the +.B csr +capability, which takes two parameters: +the top and bottom lines of the scrolling region. +The cursor position is, alas, undefined after using this command. +.PP +It is possible to get the effect of insert or delete line using +.B csr +on a properly chosen region; the +.B sc +and +.B rc +(save and restore cursor) commands may be useful for ensuring that +your synthesized insert/delete string does not move the cursor. +(Note that the \fBncurses\fR(3) library does this synthesis +automatically, so you need not compose insert/delete strings for +an entry with \fBcsr\fR). +.PP +Yet another way to construct insert and delete might be to use a combination of +index with the memory-lock feature found on some terminals (like the HP-700/90 +series, which however also has insert/delete). +.PP +Inserting lines at the top or bottom of the screen can also be +done using +.B ri +or +.B ind +on many terminals without a true insert/delete line, +and is often faster even on terminals with those features. +.PP +The boolean \fBnon_dest_scroll_region\fR should be set if each scrolling +window is effectively a view port on a screen-sized canvas. To test for +this capability, create a scrolling region in the middle of the screen, +write something to the bottom line, move the cursor to the top of the region, +and do \fBri\fR followed by \fBdl1\fR or \fBind\fR. If the data scrolled +off the bottom of the region by the \fBri\fR re-appears, then scrolling +is non-destructive. System V and XSI Curses expect that \fBind\fR, \fBri\fR, +\fBindn\fR, and \fBrin\fR will simulate destructive scrolling; their +documentation cautions you not to define \fBcsr\fR unless this is true. +This \fBcurses\fR implementation is more liberal and will do explicit erases +after scrolling if \fBndstr\fR is defined. +.PP +If the terminal has the ability to define a window as part of +memory, which all commands affect, +it should be given as the parameterized string +.BR wind . +The four parameters are the starting and ending lines in memory +and the starting and ending columns in memory, in that order. +.PP +If the terminal can retain display memory above, then the +\fBda\fR capability should be given; if display memory can be retained +below, then \fBdb\fR should be given. These indicate +that deleting a line or scrolling may bring non-blank lines up from below +or that scrolling back with \fBri\fR may bring down non-blank lines. +.PP +.SS Insert/Delete Character +.PP +There are two basic kinds of intelligent terminals with respect to +insert/delete character which can be described using +.I terminfo. +The most common insert/delete character operations affect only the characters +on the current line and shift characters off the end of the line rigidly. +Other terminals, such as the Concept 100 and the Perkin Elmer Owl, make +a distinction between typed and untyped blanks on the screen, shifting +upon an insert or delete only to an untyped blank on the screen which is +either eliminated, or expanded to two untyped blanks. You can determine the +kind of terminal you have by clearing the screen and then typing +text separated by cursor motions. Type \*(lqabc\ \ \ \ def\*(rq using local +cursor motions (not spaces) between the \*(lqabc\*(rq and the \*(lqdef\*(rq. +Then position the cursor before the \*(lqabc\*(rq and put the terminal in insert +mode. If typing characters causes the rest of the line to shift +rigidly and characters to fall off the end, then your terminal does +not distinguish between blanks and untyped positions. If the \*(lqabc\*(rq +shifts over to the \*(lqdef\*(rq which then move together around the end of the +current line and onto the next as you insert, you have the second type of +terminal, and should give the capability \fBin\fR, which stands for +\*(lqinsert null\*(rq. +While these are two logically separate attributes (one line vs. multi-line +insert mode, and special treatment of untyped spaces) we have seen no +terminals whose insert mode cannot be described with the single attribute. +.PP +Terminfo can describe both terminals which have an insert mode, and terminals +which send a simple sequence to open a blank position on the current line. +Give as \fBsmir\fR the sequence to get into insert mode. +Give as \fBrmir\fR the sequence to leave insert mode. +Now give as \fBich1\fR any sequence needed to be sent just before sending +the character to be inserted. Most terminals with a true insert mode +will not give \fBich1\fR; terminals which send a sequence to open a screen +position should give it here. +.PP +If your terminal has both, insert mode is usually preferable to \fBich1\fR. +Technically, you should not give both unless the terminal actually requires +both to be used in combination. Accordingly, some non-curses applications get +confused if both are present; the symptom is doubled characters in an update +using insert. This requirement is now rare; most \fBich\fR sequences do not +require previous smir, and most smir insert modes do not require \fBich1\fR +before each character. Therefore, the new \fBcurses\fR actually assumes this +is the case and uses either \fBrmir\fR/\fBsmir\fR or \fBich\fR/\fBich1\fR as +appropriate (but not both). If you have to write an entry to be used under +new curses for a terminal old enough to need both, include the +\fBrmir\fR/\fBsmir\fR sequences in \fBich1\fR. +.PP +If post insert padding is needed, give this as a number of milliseconds +in \fBip\fR (a string option). Any other sequence which may need to be +sent after an insert of a single character may also be given in \fBip\fR. +If your terminal needs both to be placed into an `insert mode' and +a special code to precede each inserted character, then both +.BR smir / rmir +and +.B ich1 +can be given, and both will be used. +The +.B ich +capability, with one parameter, +.IR n , +will repeat the effects of +.B ich1 +.I n +times. +.PP +If padding is necessary between characters typed while not +in insert mode, give this as a number of milliseconds padding in \fBrmp\fP. +.PP +It is occasionally necessary to move around while in insert mode +to delete characters on the same line (e.g., if there is a tab after +the insertion position). If your terminal allows motion while in +insert mode you can give the capability \fBmir\fR to speed up inserting +in this case. Omitting \fBmir\fR will affect only speed. Some terminals +(notably Datamedia's) must not have \fBmir\fR because of the way their +insert mode works. +.PP +Finally, you can specify +.B dch1 +to delete a single character, +.B dch +with one parameter, +.IR n , +to delete +.I n characters, +and delete mode by giving \fBsmdc\fR and \fBrmdc\fR +to enter and exit delete mode (any mode the terminal needs to be placed +in for +.B dch1 +to work). +.PP +A command to erase +.I n +characters (equivalent to outputting +.I n +blanks without moving the cursor) +can be given as +.B ech +with one parameter. +.PP +.SS "Highlighting, Underlining, and Visible Bells" +.PP +If your terminal has one or more kinds of display attributes, +these can be represented in a number of different ways. +You should choose one display form as +\f2standout mode\fR, +representing a good, high contrast, easy-on-the-eyes, +format for highlighting error messages and other attention getters. +(If you have a choice, reverse video plus half-bright is good, +or reverse video alone.) +The sequences to enter and exit standout mode +are given as \fBsmso\fR and \fBrmso\fR, respectively. +If the code to change into or out of standout +mode leaves one or even two blank spaces on the screen, +as the TVI 912 and Teleray 1061 do, +then \fBxmc\fR should be given to tell how many spaces are left. +.PP +Codes to begin underlining and end underlining can be given as \fBsmul\fR +and \fBrmul\fR respectively. +If the terminal has a code to underline the current character and move +the cursor one space to the right, +such as the Microterm Mime, +this can be given as \fBuc\fR. +.PP +Other capabilities to enter various highlighting modes include +.B blink +(blinking) +.B bold +(bold or extra bright) +.B dim +(dim or half-bright) +.B invis +(blanking or invisible text) +.B prot +(protected) +.B rev +(reverse video) +.B sgr0 +(turn off +.I all +attribute modes) +.B smacs +(enter alternate character set mode) +and +.B rmacs +(exit alternate character set mode). +Turning on any of these modes singly may or may not turn off other modes. +.PP +If there is a sequence to set arbitrary combinations of modes, +this should be given as +.B sgr +(set attributes), +taking 9 parameters. +Each parameter is either 0 or nonzero, as the corresponding attribute is on or off. +The 9 parameters are, in order: +standout, underline, reverse, blink, dim, bold, blank, protect, alternate +character set. +Not all modes need be supported by +.BR sgr , +only those for which corresponding separate attribute commands exist. +.PP +Terminals with the ``magic cookie'' glitch +.RB ( xmc ) +deposit special ``cookies'' when they receive mode-setting sequences, +which affect the display algorithm rather than having extra bits for +each character. +Some terminals, such as the HP 2621, automatically leave standout +mode when they move to a new line or the cursor is addressed. +Programs using standout mode should exit standout mode before +moving the cursor or sending a newline, +unless the +.B msgr +capability, asserting that it is safe to move in standout mode, is present. +.PP +If the terminal has +a way of flashing the screen to indicate an error quietly (a bell replacement) +then this can be given as \fBflash\fR; it must not move the cursor. +.PP +If the cursor needs to be made more visible than normal when it is +not on the bottom line (to make, for example, a non-blinking underline into an +easier to find block or blinking underline) +give this sequence as +.BR cvvis . +If there is a way to make the cursor completely invisible, give that as +.BR civis . +The capability +.BR cnorm +should be given which undoes the effects of both of these modes. +.PP +If your terminal correctly generates underlined characters +(with no special codes needed) +even though it does not overstrike, +then you should give the capability \fBul\fR. +If a character overstriking another leaves both characters on the screen, +specify the capability \fBos\fP. +If overstrikes are erasable with a blank, +then this should be indicated by giving \fBeo\fR. +.PP +.SS Keypad and Function Keys +.PP +If the terminal has a keypad that transmits codes when the keys are pressed, +this information can be given. Note that it is not possible to handle +terminals where the keypad only works in local (this applies, for example, +to the unshifted HP 2621 keys). +If the keypad can be set to transmit or not transmit, +give these codes as \fBsmkx\fR and \fBrmkx\fR. +Otherwise the keypad is assumed to always transmit. +The codes sent by the left arrow, right arrow, up arrow, down arrow, +and home keys can be given as \fBkcub1, kcuf1, kcuu1, kcud1, +\fRand\fB khome\fR respectively. +If there are function keys such as f0, f1, ..., f10, the codes they send +can be given as \fBkf0, kf1, ..., kf10\fR. +If these keys have labels other than the default f0 through f10, the labels +can be given as \fBlf0, lf1, ..., lf10\fR. +The codes transmitted by certain other special keys can be given: +.B kll +(home down), +.B kbs +(backspace), +.B ktbc +(clear all tabs), +.B kctab +(clear the tab stop in this column), +.B kclr +(clear screen or erase key), +.B kdch1 +(delete character), +.B kdl1 +(delete line), +.B krmir +(exit insert mode), +.B kel +(clear to end of line), +.B ked +(clear to end of screen), +.B kich1 +(insert character or enter insert mode), +.B kil1 +(insert line), +.B knp +(next page), +.B kpp +(previous page), +.B kind +(scroll forward/down), +.B kri +(scroll backward/up), +.B khts +(set a tab stop in this column). +In addition, if the keypad has a 3 by 3 array of keys including the four +arrow keys, the other five keys can be given as +.BR ka1 , +.BR ka3 , +.BR kb2 , +.BR kc1 , +and +.BR kc3 . +These keys are useful when the effects of a 3 by 3 directional pad are needed. +.PP +Strings to program function keys can be given as +.BR pfkey , +.BR pfloc , +and +.BR pfx . +A string to program screen labels should be specified as \fBpln\fP. +Each of these strings takes two parameters: the function key number to +program (from 0 to 10) and the string to program it with. +Function key numbers out of this range may program undefined keys in +a terminal dependent manner. +The difference between the capabilities is that +.B pfkey +causes pressing the given key to be the same as the user typing the +given string; +.B pfloc +causes the string to be executed by the terminal in local; and +.B pfx +causes the string to be transmitted to the computer. +.PP +The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP +define the number of programmable +screen labels and their width and height. +If there are commands to turn the labels on and off, +give them in \fBsmln\fP and \fBrmln\fP. +\fBsmln\fP is normally output after one or more pln +sequences to make sure that the change becomes visible. +.PP +.SS Tabs and Initialization +.PP +If the terminal has hardware tabs, the command to advance to the next +tab stop can be given as +.B ht +(usually control I). +A ``back-tab'' command which moves leftward to the preceding tab stop can +be given as +.BR cbt . +By convention, if the teletype modes indicate that tabs are being +expanded by the computer rather than being sent to the terminal, +programs should not use +.B ht +or +.B cbt +even if they are present, since the user may not have the tab stops +properly set. +If the terminal has hardware tabs which are initially set every +.I n +spaces when the terminal is powered up, +the numeric parameter +.B it +is given, showing the number of spaces the tabs are set to. +This is normally used by the +.IR tset +command to determine whether to set the mode for hardware tab expansion, +and whether to set the tab stops. +If the terminal has tab stops that can be saved in non-volatile memory, +the terminfo description can assume that they are properly set. +.PP +Other capabilities +include +.BR is1 , +.BR is2 , +and +.BR is3 , +initialization strings for the terminal, +.BR iprog , +the path name of a program to be run to initialize the terminal, +and \fBif\fR, the name of a file containing long initialization strings. +These strings are expected to set the terminal into modes consistent +with the rest of the terminfo description. +They are normally sent to the terminal, by the +.IR tset +program, each time the user logs in. +They will be printed in the following order: +.BR is1 ; +.BR is2 ; +setting tabs using +.B tbc +and +.BR hts ; +.BR if ; +running the program +.BR iprog ; +and finally +.BR is3 . +Most initialization is done with +.BR is2 . +Special terminal modes can be set up without duplicating strings +by putting the common sequences in +.B is2 +and special cases in +.B is1 +and +.BR is3 . +A pair of sequences that does a harder reset from a totally unknown state +can be analogously given as +.BR rs1 , +.BR rs2 , +.BR rf , +and +.BR rs3 , +analogous to +.B is2 +and +.BR if . +These strings are output by the +.IR reset +program, which is used when the terminal gets into a wedged state. +Commands are normally placed in +.BR rs1 , +.BR rs2 +.B rs3 +and +.B rf +only if they produce annoying effects on the screen and are not +necessary when logging in. +For example, the command to set the vt100 into 80-column mode would +normally be part of +.BR is2 , +but it causes an annoying glitch of the screen and is not normally +needed since the terminal is usually already in 80 column mode. +.PP +If there are commands to set and clear tab stops, they can be given as +.B tbc +(clear all tab stops) +and +.B hts +(set a tab stop in the current column of every row). +If a more complex sequence is needed to set the tabs than can be +described by this, the sequence can be placed in +.B is2 +or +.BR if . +.SS Delays and Padding +.PP +Many older and slower terminals don't support either XON/XOFF or DTR +handshaking, including hard copy terminals and some very archaic CRTs +(including, for example, DEC VT100s). These may require padding characters +after certain cursor motions and screen changes. +.PP +If the terminal uses xon/xoff handshaking for flow control (that is, +it automatically emits ^S back to the host when its input buffers are +close to full), set +.BR xon . +This capability suppresses the emission of padding. You can also set it +for memory-mapped console devices effectively that don't have a speed limit. +Padding information should still be included so that routines can +make better decisions about relative costs, but actual pad characters will +not be transmitted. +.PP +If \fBpb\fR (padding baud rate) is given, padding is suppressed at baud rates +below the value of \fBpb\fR. If the entry has no padding baud rate, then +whether padding is emitted or not is completely controlled by \fBxon\fR. +.PP +If the terminal requires other than a null (zero) character as a pad, +then this can be given as \fBpad\fR. +Only the first character of the +.B pad +string is used. +.PP +.SS Status Lines +Some terminals have an extra `status line' which is not normally used by +software (and thus not counted in the terminal's \fBlines\fR capability). +.PP +The simplest case is a status line which is cursor-addressable but not +part of the main scrolling region on the screen; the Heathkit H19 has +a status line of this kind, as would a 24-line VT100 with a 23-line +scrolling region set up on initialization. This situation is indicated +by the \fBhs\fR capability. +.PP +Some terminals with status lines need special sequences to access the +status line. These may be expressed as a string with single parameter +\fBtsl\fR which takes the cursor to a given zero-origin column on the +status line. The capability \fBfsl\fR must return to the main-screen +cursor positions before the last \fBtsl\fR. You may need to embed the +string values of \fBsc\fR (save cursor) and \fBrc\fR (restore cursor) +in \fBtsl\fR and \fBfsl\fR to accomplish this. +.PP +The status line is normally assumed to be the same width as the width +of the terminal. If this is untrue, you can specify it with the numeric +capability \fBwsl\fR. +.PP +A command to erase or blank the status line may be specified as \fBdsl\fR. +.PP +The boolean capability \fBeslok\fR specifies that escape sequences, tabs, +etc. work ordinarily in the status line. +.PP +The \fBncurses\fR implementation does not yet use any of these capabilities. +They are documented here in case they ever become important. +.PP +.SS Line Graphics +.PP +Many terminals have alternate character sets useful for forms-drawing. +Terminfo and \fBcurses\fR build in support for the drawing characters +supported by the VT100, with some characters from the AT&T 4410v1 added. +This alternate character set may be specified by the \fBacsc\fR capability. +.PP +.TS H +center expand; +c l l c +c l l c +lw25 lw6 lw2 lw20. +.\".TH +\fBGlyph ACS Ascii VT100 +Name Name Default Name\fR +upper left corner ACS_ULCORNER + l +lower left corner ACS_LLCORNER + m +upper right corner ACS_URCORNER + k +lower right corner ACS_LRCORNER + j +tee pointing right ACS_LTEE + t +tee pointing left ACS_RTEE + u +tee pointing up ACS_BTEE + v +tee pointing down ACS_TTEE + w +horizontal line ACS_HLINE - q +vertical line ACS_VLINE | x +large plus or crossover ACS_PLUS + n +scan line 1 ACS_S1 ~ o +scan line 9 ACS_S9 \&_ s +diamond ACS_DIAMOND + ` +checker board (stipple) ACS_CKBOARD : a +degree symbol ACS_DEGREE \e f +plus/minus ACS_PLMINUS # g +bullet ACS_BULLET o ~ +arrow pointing left ACS_LARROW < , +arrow pointing right ACS_RARROW > + +arrow pointing down ACS_DARROW v . +arrow pointing up ACS_UARROW ^ - +board of squares ACS_BOARD # h +lantern symbol ACS_LANTERN # i +solid square block ACS_BLOCK # 0 +.TE +.PP +The best way to define a new device's graphics set is to add a column +to a copy of this table for your terminal, giving the character which +(when emitted between \fBsmacs\fR/\fBrmacs\fR switches) will be rendered +as the corresponding graphic. Then read off the VT100/your terminal +character pairs right to left in sequence; these become the ACSC string. +.PP +.SS Color Handling +.PP +Most color terminals are either `Tektronix-like' or `HP-like'. Tektronix-like +terminals have a predefined set of N colors (where N usually 8), and can set +character-cell foreground and background characters independently, mixing them +into N * N color-pairs. On HP-like terminals, the use must set each color +pair up separately (foreground and background are not independently settable). +Up to M color-pairs may be set up from 2*M different colors. ANSI-compatible +terminals are Tektronix-like. +.PP +Some basic color capabilities are independent of the color method. The numeric +capabilities \fBcolors\fR and \fBpairs\fR specify the maximum numbers of colors +and color-pairs that can be displayed simultaneously. The \fBop\fR (original +pair) string resets foreground and background colors to their default values +for the terminal. The \fBoc\fR string resets all colors or color-pairs to +their default values for the terminal. Some terminals (including many PC +terminal emulators) erase screen areas with the current background color rather +than the power-up default background; these should have the boolean capability +\fBbce\fR. +.PP +To change the current foreground or background color on a Tektronix-type +terminal, use \fBsetaf\fR (set ANSI foreground) and \fBsetab\fR (set ANSI +background) or \fBsetf\fR (set foreground) and \fBsetb\fR (set background). +These take one parameter, the color number. The SVr4 documentation describes +only \fBsetaf\fR/\fBsetab\fR; the XPG4 draft says that "If the terminal +supports ANSI escape sequences to set background and foreground, they should +be coded as \fBsetaf\fR and \fBsetab\fR, respectively. If the terminal +supports other escape sequences to set background and foreground, they should +be coded as \fBsetf\fR and \fBsetb\fR, respectively. The \fIvidputs()\fR +function and the refresh functions use \fBsetaf\fR and \fBsetab\fR if they are +defined." +.PP +The \fBsetaf\fR/\fBsetab\fR and \fBsetf\fR/\fBsetb\fR capabilities take a +single numeric argument each. Argument values 0-7 are portably defined as +follows (the middle column is the symbolic #define available in the header for +the \fBcurses\fR or \fBncurses\fR libraries). The terminal hardware is free to +map these as it likes, but the RGB values indicate normal locations in color +space. +.PP +.TS H +center; +l c c c +l l n l. +\fBColor #define Value RGB\fR +black \fBCOLOR_BLACK\fR 0 0, 0, 0 +red \fBCOLOR_RED\ \fR 1 max,0,0 +green \fBCOLOR_GREEN\fR 2 0,max,0 +yellow \fBCOLOR_YELLOW\fR 3 max,max,0 +blue \fBCOLOR_BLUE\fR 4 0,0,max +magenta \fBCOLOR_MAGENTA\fR 5 max,0,max +cyan \fBCOLOR_CYAN\fR 6 0,max,max +white \fBCOLOR_WHITE\fR 7 max,max,max +.TE +.PP +On an HP-like terminal, use \fBscp\fR with a color-pair number parameter to set +which color pair is current. +.PP +On a Tektronix-like terminal, the capability \fBccc\fR may be present to +indicate that colors can be modified. If so, the \fBinitc\fR capability will +take a color number (0 to \fBcolors\fR - 1)and three more parameters which +describe the color. These three parameters default to being interpreted as RGB +(Red, Green, Blue) values. If the boolean capability \fBhls\fR is present, +they are instead as HLS (Hue, Lightness, Saturation) indices. The ranges are +terminal-dependent. +.PP +On an HP-like terminal, \fBinitp\fR may give a capability for changing a +color-pair value. It will take seven parameters; a color-pair number (0 to +\fBmax_pairs\fR - 1), and two triples describing first background and then +foreground colors. These parameters must be (Red, Green, Blue) or +(Hue, Lightness, Saturation) depending on \fBhls\fR. +.PP +On some color terminals, colors collide with highlights. You can register +these collisions with the \fBncv\fR capability. This is a bit-mask of +attributes not to be used when colors are enabled. The correspondence with the +attributes understood by \fBcurses\fR is as follows: +.PP +.TS +center; +l c c +lw25 lw2 lw10. +\fBAttribute Bit Decimal\fR +A_STANDOUT 0 1 +A_UNDERLINE 1 2 +A_REVERSE 2 4 +A_BLINK 3 8 +A_DIM 4 16 +A_BOLD 5 32 +A_INVIS 6 64 +A_PROTECT 7 128 +A_ALTCHARSET 8 256 +.TE +.PP +For example, on many IBM PC consoles, the underline attribute collides with the +foreground color blue and is not available in color mode. These should have +an \fBncv\fR capability of 2. +.PP +.SS Miscellaneous +.PP +If the terminal can move up or down half a line, +this can be indicated with +.B hu +(half-line up) +and +.B hd +(half-line down). +This is primarily useful for superscripts and subscripts on hard-copy terminals. +If a hard-copy terminal can eject to the next page (form feed), give this as +.B ff +(usually control L). +.PP +If there is a command to repeat a given character a given number of +times (to save time transmitting a large number of identical characters) +this can be indicated with the parameterized string +.BR rep . +The first parameter is the character to be repeated and the second +is the number of times to repeat it. +Thus, tparm(repeat_char, 'x', 10) is the same as `xxxxxxxxxx'. +.PP +If the terminal has a settable command character, such as the \s-1TEKTRONIX\s+1 4025, +this can be indicated with +.BR cmdch . +A prototype command character is chosen which is used in all capabilities. +This character is given in the +.B cmdch +capability to identify it. +The following convention is supported on some UNIX systems: +The environment is to be searched for a +.B CC +variable, and if found, all +occurrences of the prototype character are replaced with the character +in the environment variable. +.PP +Terminal descriptions that do not represent a specific kind of known +terminal, such as +.IR switch , +.IR dialup , +.IR patch , +and +.IR network , +should include the +.B gn +(generic) capability so that programs can complain that they do not know +how to talk to the terminal. +(This capability does not apply to +.I virtual +terminal descriptions for which the escape sequences are known.) +.PP +If the terminal has a ``meta key'' which acts as a shift key, +setting the 8th bit of any character transmitted, this fact can +be indicated with +.BR km . +Otherwise, software will assume that the 8th bit is parity and it +will usually be cleared. +If strings exist to turn this ``meta mode'' on and off, they +can be given as +.B smm +and +.BR rmm . +.PP +If the terminal has more lines of memory than will fit on the screen +at once, the number of lines of memory can be indicated with +.BR lm . +A value of +.BR lm #0 +indicates that the number of lines is not fixed, +but that there is still more memory than fits on the screen. +.PP +If the terminal is one of those supported by the \s-1UNIX\s+1 virtual +terminal protocol, the terminal number can be given as +.BR vt . +.PP +Media copy +strings which control an auxiliary printer connected to the terminal +can be given as +.BR mc0 : +print the contents of the screen, +.BR mc4 : +turn off the printer, and +.BR mc5 : +turn on the printer. +When the printer is on, all text sent to the terminal will be sent +to the printer. +It is undefined whether the text is also displayed on the terminal screen +when the printer is on. +A variation +.B mc5p +takes one parameter, and leaves the printer on for as many characters +as the value of the parameter, then turns the printer off. +The parameter should not exceed 255. +All text, including +.BR mc4 , +is transparently passed to the printer while an +.B mc5p +is in effect. +.PP +.SS Glitches and Braindamage +.PP +Hazeltine terminals, which do not allow `~' characters to be displayed should +indicate \fBhz\fR. +.PP +Terminals which ignore a line-feed immediately after an \fBam\fR wrap, +such as the Concept and vt100, +should indicate \fBxenl\fR. +.PP +If +.B el +is required to get rid of standout +(instead of merely writing normal text on top of it), +\fBxhp\fP should be given. +.PP +Teleray terminals, where tabs turn all characters moved over to blanks, +should indicate \fBxt\fR (destructive tabs). +Note: the variable indicating this is now `dest_tabs_magic_smso'; in +older versions, it was teleray_glitch. +This glitch is also taken to mean that it is not possible to position +the cursor on top of a ``magic cookie'', +that to erase standout mode it is instead necessary to use +delete and insert line. The ncurses implementation ignores this glitch. +.PP +The Beehive Superbee, which is unable to correctly transmit the escape +or control C characters, has +.BR xsb , +indicating that the f1 key is used for escape and f2 for control C. +(Only certain Superbees have this problem, depending on the ROM.) +Note that in older terminfo versions, this capability was called +`beehive_glitch'; it is now `no_esc_ctl_c'. +.PP +Other specific terminal problems may be corrected by adding more +capabilities of the form \fBx\fIx\fR. +.PP +.SS Similar Terminals +.PP +If there are two very similar terminals, +one can be defined as being just like the other with certain exceptions. +The string capability \fBuse\fR can be given +with the name of the similar terminal. +The capabilities given before +.B use +override those in the terminal type invoked by +.BR use . +A capability can be canceled by placing \fBxx@\fR to the left of the +capability definition, where xx is the capability. +For example, the entry +.PP + 2621-nl, smkx@, rmkx@, use=2621, +.PP +defines a 2621-nl that does not have the \fBsmkx\fR or \fBrmkx\fR capabilities, +and hence does not turn on the function key labels when in visual mode. +This is useful for different modes for a terminal, or for different +user preferences. +.PP +.SS Pitfalls of Long Entries +.PP +Long terminfo entries are unlikely to be a problem; to date, no entry has even +approached terminfo's 4K string-table maximum. Unfortunately, the termcap +translations are much more strictly limited (to 1K), thus termcap translations +of long terminfo entries can cause problems. +.PP +The man pages for 4.3BSD and older versions of tgetent() instruct the user to +allocate a 1K buffer for the termcap entry. The entry gets null-terminated by +the termcap library, so that makes the maximum safe length for a termcap entry +1k-1 (1023) bytes. Depending on what the application and the termcap library +being used does, and where in the termcap file the terminal type that tgetent() +is searching for is, several bad things can happen. +.PP +Some termcap libraries print a warning message or exit if they find an +entry that's longer than 1023 bytes; others don't; others truncate the +entries to 1023 bytes. Some application programs allocate more than +the recommended 1K for the termcap entry; others don't. +.PP +Each termcap entry has two important sizes associated with it: before +"tc" expansion, and after "tc" expansion. "tc" is the capability that +tacks on another termcap entry to the end of the current one, to add +on its capabilities. If a termcap entry doesn't use the "tc" +capability, then of course the two lengths are the same. +.PP +The "before tc expansion" length is the most important one, because it +affects more than just users of that particular terminal. This is the +length of the entry as it exists in /etc/termcap, minus the +backslash-newline pairs, which tgetent() strips out while reading it. +Some termcap libraries strip off the final newline, too (GNU termcap does not). +Now suppose: +.TP 5 +* +a termcap entry before expansion is more than 1023 bytes long, +.TP 5 +* +and the application has only allocated a 1k buffer, +.TP 5 +* +and the termcap library (like the one in BSD/OS 1.1 and GNU) reads +the whole entry into the buffer, no matter what its length, to see +if it's the entry it wants, +.TP 5 +* +and tgetent() is searching for a terminal type that either is the +long entry, appears in the termcap file after the long entry, or +doesn't appear in the file at all (so that tgetent() has to search +the whole termcap file). +.PP +Then tgetent() will overwrite memory, perhaps its stack, and probably core dump +the program. Programs like telnet are particularly vulnerable; modern telnets +pass along values like the terminal type automatically. The results are almost +as undesirable with a termcap library, like SunOS 4.1.3 and Ultrix 4.4, that +prints warning messages when it reads an overly long termcap entry. If a +termcap library truncates long entries, like OSF/1 3.0, it is immune to dying +here but will return incorrect data for the terminal. +.PP +The "after tc expansion" length will have a similar effect to the +above, but only for people who actually set TERM to that terminal +type, since tgetent() only does "tc" expansion once it's found the +terminal type it was looking for, not while searching. +.PP +In summary, a termcap entry that is longer than 1023 bytes can cause, +on various combinations of termcap libraries and applications, a core +dump, warnings, or incorrect operation. If it's too long even before +"tc" expansion, it will have this effect even for users of some other +terminal types and users whose TERM variable does not have a termcap +entry. +.PP +When in -C (translate to termcap) mode, the \fBncurses\fR implementation of +\fBtic\fR(1) issues warning messages when the pre-tc length of a termcap +translation is too long. The -c (check) option also checks resolved (after tc +expansion) lengths. +.SS Binary Compatibility +It is not wise to count on portability of binary terminfo entries between +commercial UNIX versions. The problem is that there are at least two versions +of terminfo (under HP-UX and AIX) which diverged from System V terminfo after +SVr1, and have added extension capabilities to the string table that (in the +binary format) collide with System V and XSI Curses extensions. +.SH EXTENSIONS +The %x operator in parameterized strings is unique to the ncurses implementation +of \fBtparm\fR (it is required in order to support an unfortunate choice of +\fBinitc\fR format on the Linux console). +.PP +Some SVr4 \fBcurses\fR implementations, and all previous to SVr4, don't +interpret the %A and %O operators in parameter strings. +.PP +SVr4/XPG4 do not specify whether \fBmsgr\fR licenses movement while in +an alternate-character-set mode (such modes may, among other things, map +CR and NL to characters that don't trigger local motions). +The \fBncurses\fR implementation ignores \fBmsgr\fR in \fBALTCHARSET\fR +mode. This raises the possibility that an XPG4 +implementation making the opposite interpretation may need terminfo +entries made for \fBncurses\fR to have \fBmsgr\fR turned off. +.PP +The \fBncurses\fR library handles insert-character and insert-character modes +in a slightly non-standard way in order to get better update efficiency. See +the \fBInsert/Delete Character\fR subsection above. +.PP +The parameter substitutions for \fBset_clock\fR and \fBdisplay_clock\fR are +not documented in SVr4 or the XSI Curses standard. They are deduced from the +documentation for the AT&T 505 terminal. +.PP +Be careful assigning the \fBkmous\fR capability. The \fBncurses\fR wants to +interpret it as \fBKEY_MOUSE\fR, for use by terminals and emulators like xterm +that can return mouse-tracking information in the keyboard-input stream. +.PP +Different commercial ports of terminfo and curses support different subsets of +the XSI Curses standard and (in some cases) different extension sets. Here +is a summary, accurate as of October 1995: +.PP +\fBSVR4, Solaris, ncurses\fR -- +These support all SVr4 capabilities. +.PP +\fBSGI\fR -- +Supports the SVr4 set, adds one undocumented extended string +capability (\fBset_pglen\fR). +.PP +\fBSVr1, Ultrix\fR -- +These support a restricted subset of terminfo capabilities. The booleans +end with \fBxon_xoff\fR; the numerics with \fBwidth_status_line\fR; and the +strings with \fBprtr_non\fR. +.PP +\fBHP/UX\fR -- +Supports the SVr1 subset, plus the SVr[234] numerics \fBnum_labels\fR, +\fBlabel_height\fR, \fBlabel_width\fR, plus function keys 11 through 63, plus +\fBplab_norm\fR, \fBlabel_on\fR, and \fBlabel_off\fR, plus some incompatible +extensions in the string table. +.PP +\fBAIX\fR -- +Supports the SVr1 subset, plus function keys 11 through 63, plus a number +of incompatible string table extensions. +.PP +\fBOSF\fR -- +Supports both the SVr4 set and the AIX extensions. +.SH FILES +.TP 25 +\*d.db +file containing terminal descriptions on OpenBSD +.TP 25 +\*d/?/* +files containing terminal descriptions on other systems +.SH "SEE ALSO" +\fBinfo_mkdb(1)\fR, \fBtic\fR(1), \fBcurses\fR(3), \fBprintf\fR(3), \fBterm\fR(\*n). +.SH AUTHORS +Zeyd M. Ben-Halim, Eric S. Raymond. Descends from the original pcurses +by Pavel Curtis. +.\"# +.\"# The following sets edit modes for GNU EMACS +.\"# Local Variables: +.\"# mode:nroff +.\"# fill-column:79 +.\"# End: |