TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) ------------------------------------------------------------------------------- terminfo PURPOSE Describes terminals by capability. DESCRIPTION A terminfo file is a data base that describes terminals, defining their capabilities and their methods of operation. It is used by various programs, including the Extended Curses Library (libcur.a) and the vi editor. The information defined includes initialization sequences, padding requirements, cursor positioning, and other command sequences that control specific terminals. This section explains the terminfo source file format. Before a terminfo source file can be used, it must be compiled using the tic command, which is described in AIX Operating System Commands Reference. You can edit and modify these source files, such as /usr/lib/terminfo/ibm.ti, which describes IBM terminals, and /usr/lib/terminfo/dec.ti, which describes DEC terminals. See "TERM" for a list of some of the terminals supported by predefined terminfo data base files and the corresponding values for the TERM environment variable. If you have a terminal which is not supported, see if one of the many sample terminfo files supplied with your system will meet your need; if such a sample file exists, you can install it on your system (you may have to make some minor adjustments) using the "tic" program supplied with your system. Also, if you have termcap descriptions from other UNIX systems, you may translate them into terminfo descriptions, using an "ex" script called /usr/lib/terminfo/cvt.ex (supplied with your system, as well). Each terminfo entry consists of a number of fields separated by commas, ignoring any white space between commas. The first field for each terminal gives the various names the terminal is known separated by | (vertical bar) characters. The first name given should be 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 except the last should be in lowercase and not contain blanks. The last name can contain uppercase characters for readability. Terminal names (except the last) should be chosen using the following conventions. A root name should be chosen to represent the particular hardware class of the terminal. This name should not contain hyphens, except to avoid synonyms that conflict with other names. Possible modes for the hardware or user preferences are indicated by appending a - (hyphen) and an indicator of the mode to the root name. Thus, a terminal in 132 column mode would be term-w. The following suffixes should be used where possible: Processed November 7, 1990 TERMINFO(5,F) 1 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) Suffix Meaning Example -am With automatic margins (usually default) term-am -c Color mode term-c -w Wide mode (more than 80 columns) term-w -nam Without automatic margins term-nam -n Number of lines on the screen term-60 -na No arrow keys (leave them in local) term-na -np Number of pages of memory term-4p -rv Reverse video term-rv Types of Capabilities Capabilities in terminfo are of three types: boolean, numeric, and string. Boolean capabilities indicate that the terminal has some particular feature. Boolean capabilities are true if the corresponding name is in the terminal description. Numeric capabilities give the size of the terminal or the size of particular delays. String capabilities give a sequence that can be used to perform particular terminal operations. Entries can continue onto multiple lines by placing white space at the beginning of each subsequent line. Comments are included on lines beginning with the # (sharp sign) character. List of Capabilities The following table shows VARIABLE, which is the name the programmer uses to access the terminfo capability. The CAP NAME (capability name) is the short name used in the text of the data base, and is used by a person updating the data base. The I. CODE is the 2-letter internal code used in the compiled data base, and always corresponds to a termcap capability name. Capability names have no absolute length limit. An informal limit of five characters is adopted to keep them short and to allow the tabs in the source file caps to be aligned. Whenever possible, names are chosen to be the same as or similar to the ANSI X3.64 standard of 1979. (P) Indicates that padding may be specified. (G) Indicates that the string is passed through tparm with parameters as given (#i). (*) Indicates that padding may be based on the number of lines affected. (#i) Indicates the i(th) parameter. CAP I. VARIABLE NAME CODE DESCRIPTION Booleans: Processed November 7, 1990 TERMINFO(5,F) 2 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) CAP I. VARIABLE NAME CODE DESCRIPTION auto_left_margin bw bw Indicates cub1 wraps from column 0 to last column. auto_right_margin am am Indicates terminal has automatic margins. beehive_glitch xsb xs Indicates a terminal with fl=escape and f2=Ctrl-C. ceol_standout_glitch xhp xs Indicates standout not erased by overwriting. eat_newline_glitch xenl xn Ignores new-line character after 80 columns. erase_overstrike eo eo Erases overstrikes with a blank. generic_type gn gn Indicates generic line type (such as, dialup, switch) hard_copy hc hc Indicates hardcopy terminal. has_meta_key km km Indicates terminal has a meta key (shift, sets parity bit). has_status_line hs hs Indicates terminal has extra "status line". insert_null_glitch in in Indicates insert mode distinguishes nulls. memory_above da da Retains information above display in memory. memory_below db db Retains information below display in memory. move_insert_mode mir mi Indicates safe to move while in insert mode. move_standout_mode msgr ms Indicates safe to move in standout modes. over_strike os os Indicates terminal overstrikes. status_line_esc_ok eslok es Indicates escape can be used on the status line. teleray_glitch xt xt Indicates destructive tabs and blanks inserted while entering standout mode. tilde_glitch hz hz Indicates terminal cannot print ~ characters. transparent_underline ul ul Overstrikes with underline character. xon_xoff xon xo Indicates terminal uses xon/xoff handshaking. Numbers: columns cols co Specifies the number of columns in a line. init_tabs it it Provides tabs initially every # spaces. lines lines li Specifies the number of lines on screen or page Processed November 7, 1990 TERMINFO(5,F) 3 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) CAP I. VARIABLE NAME CODE DESCRIPTION lines_of_memory lm lm Specifies the number of lines of memory if > lines. A value of 0 indicates variable. magic_cookie_glitch xmc sg Indicates number of blank characters left by smso or rmso. padding_baud_rate pb pb Indicates lowest baud where carriage return and line return padding is needed. virtual_terminal vt vt Indicates virtual terminal number. width_status_lines wsl ws Specifies the number of columns in status line. Strings: appl_defined_str apstr za Application defined terminal string. back_tab cbt bt Back tab. (P) bell bel bl Produces an audible signal (bell). (P) box_chars_1 box1 bx Box characters primary set. box_chars_2 box2 by Box characters alternate set. box_attr_1 batt1 Bx Attributes for box_chars_1. box_attr_2 batt2 By Attributes for box_chars_2. carriage_return cr cr Indicates carriage return. (P*) change_scroll_region csr cs Changes scroll region to lines #1 through #2. (PG) clear_all_tabs tbc ct Clears all tab stops. (P) clear_screen clear cl Clears screen and puts cursor in home position. (P*) clr_eol el ce Clears to end of line. (P) clr_eos ed cd Clears to end of the display. (P*) color_bg_0 colb0 d0 Background color 0 black. color_bg_1 colb1 d1 Background color 1 red. color_bg_2 colb2 d2 Background color 2 green. color_bg_3 colb3 d3 Background color 3 brown. color_bg_4 colb4 d4 Background color 4 blue. color_bg_5 colb5 d5 Background color 5 magenta. color_bg_6 colb6 d6 Background color 6 cyan. color_bg_7 colb7 d7 Background color 7 white. color_fg_0 colf0 c0 Foreground color 0 white. color_fg_1 colf1 c1 Foreground color 1 red. color_fg_2 colf2 c2 Foreground color 2 green. color_fg_3 colf3 c3 Foreground color 3 brown. color_fg_4 colf4 c4 Foreground color 4 blue. color_fg_5 colf5 c5 Foreground color 5 magenta. color_fg_6 colf6 c6 Foreground color 6 cyan. color_fg_7 colf7 c7 Foreground color 7 black. column_address hpa ch Sets cursor column. (PG) command_character cmdch CC Indicates terminal command prototype character can be set. Processed November 7, 1990 TERMINFO(5,F) 4 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) CAP I. VARIABLE NAME CODE DESCRIPTION cursor_address cup cm Indicates screen relative cursor motion row #1 col #2. (PG) cursor_down cud1 do Moves cursor down one line. cursor_home home ho Moves cursor to home position (if no cup). cursor_invisible civis vi Makes cursor invisible. cursor_left cubl le Moves cursor left one space. cursor_mem_address mrcup CM Indicates memory relative cursor addressing. cursor_normal cnorm ve Makes cursor appear normal (undo vs or vi). cursor_right cuf1 nd Indicates nondestructive space (cursor right). cursor_to_ll ll ll Moves cursor to first column of last line (if no cup). cursor_up cuu1 up Moves cursor up one line (cursor up). cursor_visible cvvis vs Makes cursor very visible. delete_character dch1 dc Deletes character. (P*) delete_line dl1 dl Deletes line. (P*) dis_status_line dsl ds Disables status line. down_half_line hd hd Indicates subscript (forward 1/2 line feed). enter_alt_charset_mode smacs as Starts alternate character set. (P) enter_blink_mode blink mb Enables blinking. enter_bold_mode bold md Enables bold (extra bright) mode. enter_ca_mode smcup ti Begins programs that use cup. enter_delete_mode smdc dm Starts delete mode. enter_dim_mode dim mh Enables half-bright mode. enter_insert_mode smir im Starts insert mode. enter_protected_mode prot mp Enables protected mode. enter_reverse_mode rev mr Enables reverse video mode. enter_secure_mode invis mk Enables blank mode (characters invisible). enter_standout_mode smso so Begins standout mode. enter_underline_mode smul us Starts underscore mode. erase_chars ech ec Erases #1 characters. (PG) exit_alt_charset_mode rmacs ae Ends alternate character set. (P) exit_attribute_mode sgr0 me Disables all attributes. exit_ca_mode rmcup te Ends programs that use cup. exit_delete_mode rmdc ed Ends delete mode. exit_insert_mode rmir ei Ends insert mode. exit_standout_mode rmso se Ends stand out mode. exit_underline_mode rmul ue Ends underscore mode. flash_screen flash vb Indicates visual bell (may not move cursor). font_0 font0 f0 Select font 0. font_1 font1 f1 Select font 1. font_2 font2 f2 Select font 2. Processed November 7, 1990 TERMINFO(5,F) 5 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) CAP I. VARIABLE NAME CODE DESCRIPTION font_3 font3 f3 Select font 3. font_4 font4 f4 Select font 4. font_5 font5 f5 Select font 5. font_6 font6 f6 Select font 6. font_7 font7 f7 Select font 7. form_feed ff ff Ejects page (hardcopy terminal). (P*) from_status_line fsl fs Returns from status line. init_1string is1 is Initializes terminal. init_2string is2 is Initializes terminal. init_3string is3 (none) Initializes terminal. init_file if if Identifies file containing is. insert_character ich1 ic Inserts character. (P) insert_line il1 al Adds new blank line. (P*) insert_padding ip ip Inserts pad after character inserted. (P*) key_backspace kbs kb Sent by backspace key. key_back_tab kbtab k0 Sent by backtab key. key_catab ktbc ka Sent by clear-all-tabs key. key_clear kclr kC Sent by clear-screen or erase key. key_ctab kctab kt Sent by clear-tab key. key_command kcmd kc Command request key. key_command_pane kcpn kW Command pane key. key_dc kdch1 kD Sent by delete-character key. key_dl kdl1 kL Sent by delete-line key. key_do kdo ki Do request key. key_down kcud1 kd Sent by terminal down arrow key. key_eic krmir kM Sent by rmir or smir in insert mode. key_end kend kw End key. key_eol ke1 kE Sent by clear-to-end-of-line key. key_eos ked kS Sent by clear-to-end-of-screen key. key_f0 kf0 k0 Sent by function key F0. key_f1 kf1 k1 Sent by function key F1. key_f2 kf2 k2 Sent by function key F2. key_f3 kf3 k3 Sent by function key F3. key_f4 kf4 k4 Sent by function key F4. key_f5 kf5 k5 Sent by function key F5. key_f6 kf6 k6 Sent by function key F6. key_f7 kf7 k7 Sent by function key F7. key_f8 kf8 k8 Sent by function key F8. key_f9 kf9 k9 Sent by function key F9. key_f10 kf10 k; Sent by function key F10. key_f11 kf11 k< Sent by function key F11. key_f12 kf12 k> Sent by function key F12. key_help khlp kq Help key. key_home khome kh Sent by home key. key_ic kich1 kI Sent by insert character/enter insert mode key. key_il kil1 kA Sent by insert line key. Processed November 7, 1990 TERMINFO(5,F) 6 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) CAP I. VARIABLE NAME CODE DESCRIPTION key_left kcub1 kl Sent by terminal left arrow key. key_ll kll kH Sent by home-down key. key_newline knl nl New-line key. key_next_pane knpn kv Next-pane key. key_npage knp kN Sent by next-page key. key_ppage kpp kP Sent by previous-page key. key_prev_cmd kpcmd kp Sent by previous-command key. key_quit kquit kQ Quit key. key_right kcuf1 kr Sent by terminal right arrow key. key_scroll_left kscl kz Scroll left. key_scroll_right kscr kZ Scroll right. key_select ksel kU Select key. key_sf kind kF Sent by scroll-forward/down key. key_smap_in1 kmpf1 Kv Input for special mapped key 1. key_smap_out1 kmpt1 KV Output for mapped key 1. key_smap_in2 kmpf2 Kw Input for special mapped key 2. key_smap_out2 kmpt2 KW Output for mapped key 2. key_smap_in3 kmpf3 Kx Input for special mapped key 3. key_smap_out3 kmpt3 KX Output for mapped key 3. key_smap_in4 kmpf4 Ky Input for special mapped key 4. key_smap_out4 kmpt4 KY Output for mapped key 4. key_smap_in5 kmpf5 Kz Input for special mapped key 5. key_smap_out5 kmpt5 KZ Output for mapped key 5. key_sr kri kR Sent by scroll-backward/up key. key_stab khts kT Sent by set-tab key. key_tab ktab kn Tab key. key_up kcuu1 ku Sent by terminal up arrow key. keypad_local rmkx ke Ends keypad transmit mode. keypad_xmit smkx ks Puts terminal in keypad transmit mode. lab_f0 lf0 l0 Labels function key F0 if not F0. lab_f1 lf1 l1 Labels function key F1 if not F1. lab_f2 lf2 l2 Labels function key F2 if not F2. lab_f3 lf3 l3 Labels function key F3 if not F3. lab_f4 lf4 l4 Labels function key F4 if not F4. lab_f5 lf5 l5 Labels function key F5 if not F5. lab_f6 lf6 l6 Labels function key F6 if not F6. lab_f7 lf7 l7 Labels function key F7 if not F7. lab_f8 lf8 l8 Labels function key F8 if not F8. lab_f9 lf9 l9 Labels function key F9 if not F9. lab_f10 lf10 la Labels function key F10 if not F10. meta_on smm mm Enables "meta mode" (8th bit). meta_off rmm mo Disables "meta mode". newline nel nw Performs new-line function (behaves like CR followed by LF). pad_char pad pc Pads character (instead of NUL). parm_dch dch DC Deletes #1 characters. (PG*) parm_delete_line dl DL Deletes #1 lines. (PG*) parm_down_cursor cud DO Moves cursor down #1 lines. (PG*) Processed November 7, 1990 TERMINFO(5,F) 7 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) CAP I. VARIABLE NAME CODE DESCRIPTION parm_ich ich IC Inserts #1 blank characters. (PG*) parm_index indn SF Scrolls forward #1 lines. (PG) parm_insert_line il AL Adds #1 new blank lines. (PG*) parm_left_cursor cub LE Moves cursor left #1 spaces. (PG) parm_right_cursor cuf RI Moves cursor right #1 spaces. (PG*) parm_rindex rin SR Scrolls backward #1 lines. (PG) parm_up_cursor cuu UP Moves cursor up #1 lines. (PG*) pkey_key pfkey pk Programs function key #1 to type string #2. pkey_local pfloc pl Programs function key #1 to execute string #2. pkey_xmit pfx px Programs function key #1 to xmit string #2. print_screen mc0 ps Prints contents of the screen. prtr_off mc4 pf Disables the printer. prtr_on mc5 po Enables the printer. repeat_char rep rp Repeats character #1 #2 times. (PG*) reset_1string rs1 r1 Resets terminal to known modes. reset_2string rs2 r2 Resets terminal to known modes. reset_3string rs3 r3 Resets terminal to known modes. reset_file rf rf Identifies the file containing reset string. restore_cursor rc rc Restores cursor to position of last sc. row_address vpa cv Positions cursor to an absolute vertical position (set row). (PG) save_cursor sc sc Saves cursor position. (P) scroll_forward ind sf Scrolls text up. (P) scroll_reverse ri sr Scrolls text down. (P) set_attributes sgr sa Defines the video attributes. (PG9) set_tab hts st Sets a tab in all rows, current column. set_window wind wi Indicates current window is lines #1-#2 cols #3-#4. tab ht ta Tabs to next 8-space hardware tab stop. to_status_line tsl ts Moves to status line, column #1. underline_char uc uc Underscores one character and moves beyond it. up_half_line hu hu Indicates superscript (reverse 1/2 line-feed). init_prog iprog iP Locates the program for init. key_a1 ka1 K1 Specifies upper left of keypad. key_a3 ka3 K3 Specifies upper right of keypad. key_b2 kb2 K2 Specifies center of keypad. key_c1 kc1 K4 Specifies lower left of keypad. key_c3 kc3 K5 Specifies lower right of keypad. prtr_non mc5p pO Enables the printer for #1 bytes. Processed November 7, 1990 TERMINFO(5,F) 8 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) Terminal capabilities have names. For instance, the fact that a terminal has automatic margins (such as, an automatic new-line when the end of a line is reached) is indicated by the capability am. Hence the description of the terminal includes am. Numeric capabilities are followed by the # (sharp sign) character and then the value. Thus the cols#80 capability, which indicates the number of columns the terminal has, gives the value 80 for the terminal. Finally, string-valued capabilities, such as el (clear to end of line sequence) are given by the 2-character code, an = (equal sign), and then a string ending at the following , (comma). A delay in milliseconds may appear anywhere in a string capability, enclosed between a $< and a > as in "el=\EK$<3>", and padding characters are supplied by tputs to provide this delay. The delay can be either a number, such as 20, or a number followed by an * (asterisk), such as "3*". An asterisk 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 lines affected. This is always 1, unless the terminal has xenl and the software uses it.) When an asterisk is specified, it is sometimes useful to give a delay of the form a.b, such as, 3.5, to specify a delay per unit to tenths of milliseconds. (Only one decimal place is allowed.) A number of escape sequences are provided in the string-valued capabilities for easy encoding of characters there. Both \E and \e map to an Escape character, ^x maps to a Ctrl-x for any appropriate x, and the sequences \n, \l, \r, \t, \b, \f, \s give a new-line, line-feed, return, tab, backspace, form-feed, and space. Other escapes include \^ (backslash caret) for a ^ (caret), \ \ (backslash backslash) for a \ (backslash), \, (backslash comma) for a , (comma), \: (backslash colon) for a : (colon), and \0 (backslash) for the null character. (\0 will produce \200, which does not terminate a string but behaves as a null character on most terminals.) Finally, characters can be given as 3 octal digits after a \ (backslash). Sometimes, individual capabilities must be commented out. To do this, put a period before the capability name. Preparing Descriptions An effective way to prepare a terminal description is to imitate the description of a similar terminal in the terminfo file and add to the description gradually, using partial descriptions with vi to check that they are correct. Be aware that a very unusual terminal may expose deficiencies in the ability of this file to describe it or bugs in vi. To test a new terminal description, set the environment variable TERMINFO to a path name of a directory containing the compiled description you are working on and programs will look there rather than in /usr/lib/terminfo. A test to get the correct padding (if not known) is to edit the /etc/passwd file at 9600 baud, delete about 16 lines from the middle of the screen, then hit the u key several times quickly. If the terminal fails to display the result properly, more padding is usually needed. A similar test can be used for insert character. Basic Capabilities Processed November 7, 1990 TERMINFO(5,F) 9 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) The following describe basic terminal capabilities: am Indicates that the cursor moves to the beginning of the next line when it reaches the right margin. This capability also indicates whether the cursor can move beyond the bottom right corner of the screen. bel Produces an audible signal (such as a bell or a beep). bw Indicates that a backspace from the left edge of the terminal moves the cursor to the last column of the previous row. clear Clears the screen leaving the cursor in the home position. cols Specifies the number of columns on each line for the terminal. cr Moves the cursor to the left edge of the current row. This code is usually carriage return (Ctrl-M). cub1 Moves the cursor one space to the left, such as backspace. cuf1, cuu1, and cud1 Moves the cursor to the right, up, and down, respectively. hc Specifies a printing terminal. The os capability should also be specified. lines Specifies the number of lines on a cathode ray tube (CRT) terminal. os Indicates that when a character is displayed or printed in a position already occupied by another character, the terminal overstrikes the existing character, rather than replacing it with the new character. os applies to storage scope, printing, and APL terminals. The terminfo initialization subroutine, setupterm, calls termdef to determine the number of lines and columns on the display. If termdef cannot supply this information, then setupterm uses the lines and cols values in the data base. A point to note here is that the local cursor motions encoded in terminfo are undefined at the left and top edges of a CRT terminal. Programs should never attempt to backspace around the left edge, unless bw is given, and never attempt to go up locally off the top. In order to scroll text up, a program should go to the bottom left corner of the screen and send the ind (index) string. To scroll text down, a program goes to the top left corner of the screen and sends the ri (reverse index) string. The strings ind and ri are undefined when not on their respective corners of the screen. The am 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 cuf1 from the last column. Local motion is defined from the left edge only if bw is given. In this case, a cub1 from the left edge moves to the right edge of the Processed November 7, 1990 TERMINFO(5,F) 10 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) previous row. If 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 terminfo file usually assumes that it is on by specifying am. If the terminal has a command that moves to the first column of the next line, that command can be given as nel (newline). It does not matter if the command clears the remainder of the current line, so if the terminal has no cr and lf, it may still be possible to craft a working nel out of one or both of them. These capabilities suffice to describe printing terminals and simple CRT terminals. Thus, the Model 33 Teletype is described as: 33 | tty33 | tty | Model 33 Teletype, bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os, And another terminal is described as: xxxx | x | xxxxxxxx, am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J, ind=^J, lines#24, Parameterized Strings Cursor addressing and other strings requiring parameters in the terminal are described by a parameterized string capability, with escapes similar to printf %x in it. For example, to address the cursor, the cup capability is given using two parameters: the row and column to address to. (Rows and columns are numbered starting with 0 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 mrcup. The capabilities and their parameters, with descriptions, are: cub1 Backspaces the cursor one space. cup Addresses the cursor using two parameters: the row and column to address. Rows and columns are numbered starting with 0 and refer to the physical screen visible to the user, not to memory. cuu1 Moves the cursor up one line on the screen. hpa and vpa Indicates the cursor has row or column absolute cursor addressing, horizontal position absolute (hpa) and vertical position absolute (vpa). Sometimes the hpa and vpa capabilities are shorter than the more general two parameter sequence and can be used in preference to cup. If there are parameterized local motions (such as, move n spaces to the right) these can be given as cud, cub, cuf, and cuu with a single parameter indicating how many spaces to move. These are primarily useful if the terminal does not have cup. Processed November 7, 1990 TERMINFO(5,F) 11 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) indn and rin Scrolls text. These are parameterized versions of the basic capabilities ind and ri. n is the number of lines. mrcup Indicates the terminal has memory-relative cursor addressing. The parameter mechanism uses a stack and special % codes to manipulate it. Typically a sequence pushes one of the parameters onto the stack and then prints it in some format. Often more complex operations are necessary. The "%" encodings have the following meanings: "%%" Outputs a "%". (percent sign). "%"d Print pop() as in printf (numeric string from stack). "%"2d Print pop() like "%"2d (minimum 2 digits output from stack). "%"3d Print pop() like "%"3d (minimum 3 digits output from stack). "%"02d Prints as in printf (2 digits output). "%"03d Prints as in printf (3 digits output). "%"c Print pop() gives "%"c (character output from stack). "%"s Print pop() gives "%"s (string output from stack). "%"p[i] Pushes the i(th) parameter onto stack. "%"P[a-z] Sets variable [a-z] to pop() (variable output from stack). "%"g[a-z] Gets variable [a-z] and pushes it onto the stack. "%"'c' Character constant c. "%"{nn} Integer constant nn. "%+ %- %* %/ %m" Arithmetic ("%"m is modulus): push(pop() operation pop()) "%& %| %^" Bit operations: push(pop() operation pop()) "%= %> %<" Logical operations: push(pop() operation pop()). "%! %^" Unary operations push(operation pop()) "%"i Add 1 to first two parameters (for ANSI terminals). "%"? expr "%"t thenpart "%"e elsepart "%"; If-then-else. The "%"e elsepart is optional. You can make an else-if construct as with Algol 68: "%"? c[1] "%"t b[1] "%"e c[2] "%"t b[2] "%"e c[3] "%"t b[3] "%"e b[4] "%"; In this example, c[i] denote conditions, and b[i] denote bodies. Binary operations are in postfix form with the operands in the usual order. That is, to get "x - 5" one would use "%gx%{5}%-". Consider a terminal, which, to get to row 3 and column 12, needs to be sent "\E&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 cup capability is "cup=6\E&a%p2%2dc%p1%2dY". Processed November 7, 1990 TERMINFO(5,F) 12 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) Some terminals need the current row and column sent preceded by a ^T with the row and column simply encoded in binary; "cup=^T%p1%c%p2%c". Terminals that use %c need to be able to backspace the cursor (cub1), and to move the cursor up one line on the screen (cuu1). This is necessary because it is not always safe to transmit \n, ^D, and \r, as the system may change or discard them. (The library routines dealing with terminfo set terminal modes so that tabs are not expanded by the operating system; thus \t is safe to send.) A final example is a terminal that uses row and column offset by a blank character, thus "cup=\E=%p1%' '%+%c%p2%' '%+%c". After sending "\E=", 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. Cursor Motions If the terminal has a fast way to home the cursor (to very upper left corner of screen) then this can be given as home. Similarly a fast way of getting to the lower left-hand corner can be given as ll; this may involve going up with cuu1 from the home position, but a program should never do this itself (unless ll 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 (0,0) to the top left corner of the screen, not of memory. (Thus, the \EH sequence on some terminals cannot be used for home.) Area Clears The following areas are used to clear large areas of the terminal: ed Clears from the current position to the end of the display. This is defined only 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 ed is not available.) el Clears from the current cursor position to the end of the line without moving the cursor. Insert/Delete Line The following describes the insert and delete line capabilities: csr Indicates the terminal has a scrolling region that can be set. This capability takes two parameters: the top and bottom lines of the scrolling region. da Indicates the terminal can retain display memory above what is visible. db Indicates the display memory can be retained below what is visible. Processed November 7, 1990 TERMINFO(5,F) 13 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) dl1 Indicates the line the cursor is on can be deleted. This done only from the first position on the line to be deleted. Additionally, the dl capability takes a single parameter indicating the number of lines to be deleted. il1 Creates a new blank line before the line where the cursor is currently located and scrolls the rest of the screen down. This is done only from the first position of a line. The cursor then appears on the newly blank line. Additionally, the il capability can take a single parameter indicating the number of lines to insert. rc Restores the cursor. When used after the csr capability, it gives an effect similar to delete line. sc Saves the cursor. When used after the csr capability, it gives an effect similar to insert line. wind Indicates the terminal has the ability to define a window as part of memory. This a parameterized string with 4 parameters: the starting and ending lines in memory and the stating and ending columns in memory, in that order. Insert/Delete Character Generally, there are two kinds of programmable terminals with respect to insert/delete character operations which can be described using the terminfo file. The most common insert/delete character operations affect only the characters on the current line and shift characters to the right and off the line. Other terminals make a distinction between typed and untyped blanks on the screen, shifting data displayed to insert or delete at a position on the screen occupied by an untyped blank, which is either eliminated or expanded to two untyped blanks. Clearing the screen and then typing text separated by cursor motions differentiates between the terminal types. You can determine the kind of terminal you have by doing the following: 1. Type "abc def" using local cursor movements, not spaces, between the "abc" and the "def". 2. Position the cursor before the "abc" and place the terminal in insert mode. If typing characters causes the characters on the line to the right of the cursor to shift and exit the right side of the display, the terminal does not distinguish between blanks and untyped positions. If the "abc" moves to positions to the immediate left of the "def" and the characters move to the right on the line, around the end, and to the next line, the terminal is the second type. This is described by the in capability, which signifies insert null. While these are two logically separate attributes (one line vs. multiline insert mode, and special treatment of untyped spaces) there are no known terminals whose insert mode cannot be described with the single attribute. Processed November 7, 1990 TERMINFO(5,F) 14 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) The terminfo file can describe both terminals having an insert mode and terminals that send a simple sequence to open a blank position on the current line. The following are used to describe insert or delete character capabilities: dch1 Deletes a single character. dch with one parameter, n deletes n characters. ech Erases n characters (equivalent to typing n blanks without moving the cursor) with one parameter. ich1 Precedes the character to be inserted. Most terminals with an insert mode do not use this. Terminals that send a sequence to open a screen position should give it. (If the terminal has both, insert mode is usually preferable to ich1. Do not give both unless the terminal actually requires both to be used in combination.) ip Indicates post padding needed. This is given as a number of milliseconds. Any other sequence that may need to be sent after inserting a single character can be given in this capability. mir Allows cursor motion while in insert mode. It is sometimes necessary to move the cursor while in insert mode to delete characters on the same line. Some terminals may not have this capability due to their handling of insert mode. rmdc Exits delete mode. rmir Ends insert mode. smdc Enters delete mode. smir Begins insert mode. Note that if your terminal needs both to be placed in an insert mode and a special code to precede each inserted character, then both smir/rmir and ich1 can be given, and both will be used. The ich capability, with one parameter, n, will repeat the effects of ich1 n times. Highlighting, Underlining, and Visual Bells If your terminal has one or more kinds of display attributes such as highlighting, underlining, and visual bells, these can be presented in a number of ways. Highlighting, such as standout mode, presents a good, high contrast, easy-on-the-eyes format to add emphasis to error messages, and other attention getters. Underlining is another method to focus attention to a particular portion of the terminal. Visual bells include methods such as flashing the screen. The following capabilities describe highlighting, underlining, and visual bells for a terminal: blink Indicates terminal has blink highlighting mode. Processed November 7, 1990 TERMINFO(5,F) 15 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) bold Indicates terminal has extra bright highlighting mode. civis Causes the cursor to be invisible. cnorm Causes the cursor to display normal. This capability reverses the effects of the civis and cvvis capabilities. cvvis Causes the cursor to be more visible than normal when it is not on the bottom line. dim Indicates the terminal has half-bright highlighting modes. eo Indicates blanks erase overstrikes. flash Indicates the terminal has a way of flashing the screen (a bell replacement) for errors without moving the cursor. invis Indicates the terminal has blanking or invisible text highlighting modes. msgr Indicates it is safe to move the cursor while in standout mode. Otherwise, programs using standout mode should exit standout mode before moving the cursor or sending a new-line. Some terminals automatically leave standout mode when they move to a new line or the cursor is addressed. prot Indicates the terminal has protected highlighting mode. rev Indicates the terminal has reverse video mode. rmso Exits standout mode. rmul Ends underlining. sgr Sets attributes. sgr0 turns off all attributes. Otherwise, if the terminal allows a sequence to set arbitrary combinations of modes, sgr takes 9 parameters. Each parameter is either 0 or 1, as the corresponding attribute is on or off. The 9 parameters are in this order: standout, underline, reverse, blink, dim, bold, blank, protect, and alternate character set. (sgr can only support those modes for which separate attributes exist on a particular terminal.) smcup and rmcup Indicates the terminal needs to be in a special mode when running a program that uses any of the highlighting, underlining or visual bell capabilities. smcup enters this mode, while rmcup exits this mode. This need arises, for example, from terminals with more than one page of memory. If the terminal has only memory relative cursor addressing, and not screen relative cursor addressing, a screen-sized window must be fixed into the terminal for cursor addressing to work properly. This is also used where smcup sets the command character to be used by the terminfo file. Processed November 7, 1990 TERMINFO(5,F) 16 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) smso Enters standout mode. smul Begins underlining. uc Underlines the current character and moves the cursor one space to the right. ul Indicates the terminal correctly generates underlined characters (with no special codes needed) even though it does not overstrike. xmc Indicates the number of blanks left if the capability to enter or exit standout mode leaves blank spaces on the screen. Keypad 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 mode. If the keypad can be set to transmit or not transmit, give these codes as smkx and rmkx. 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 kcub1, kcuf1, kcuu1, kcud1, and khome, respectively. If there are function keys such as F0, F1,..., F10, the codes they send can be given as kf0, kf1,..., kf10. If these keys have labels other than the default F0 through F10, the labels can be given as lf0, lf1,..., lf10. The codes transmitted by certain other special keys can be given as: kbs Indicates the backspace key. kclr Indicates the clear screen or erase key. kctab Indicates clear the tab stop in this column. kdch1 Indicates the delete character key. kdl1 Indicates the delete line key. ked Indicates clear to end of screen. kel Indicates clear to end of line. khts Indicates set a tab stop in this column. kich1 Indicates insert character or enter insert mode. kil1 Indicates insert line. kind Indicates scroll forward and/or down. Processed November 7, 1990 TERMINFO(5,F) 17 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) kll Indicates home down key (home is the lower left corner of the display, in this instance). kmir Indicates exit insert mode. knp Indicates next page. kpp Indicates previous page. ktbc Indicates the clear all tabs key. ri Indicates scroll backward and/or up. In addition, if the keypad has a 3-by-3 array of keys including the 4 arrow keys, the other 5 keys can be given as ka1, ka3, kb2, kc1, and kc3. These keys are useful when the effects of a 3-by-3 directional pad are needed. Tabs and Initialization If the terminal has hardware tabs, the command to advance to the next tab stop can be given as ht (usually Ctrl-I). A "backtab" command which moves left toward the previous tab stop can be given as cbt. By convention, if the terminal modes indicate that tabs are being expanded by the operating system rather than being sent to the terminal, programs should not use ht or cbt even if they are present, since the user may not have the tab stops properly set. If the terminal has hardware tabs that are initially set every n spaces when the terminal is powered up, the numeric parameter it is given, showing the number of spaces the tabs are set to. This is normally used by the 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 nonvolatile memory, the terminfo description can assume that they are properly set. Other capabilities include is1, is2, and is3, initialization strings for the terminal, iprog, the path name of a program to be run to initialize the terminal, and if, 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 tset program, each time the user logs in. They are printed in the following order: is1, is2, setting tabs using tbc and hts; if; running the program iprog; and finally is3. Most initialization is done with is2. Special terminal modes can be set up without duplicating strings by putting the common sequences in is2 and special cases in is1 and is3. A pair of sequences that does a harder reset from a totally unknown state can be analogously given as rs1, rs2, rf, and rs3, analogous to is2 and if. These strings are output by the reset program, which is used when the terminal starts behaving strangely, or not responding at all. Commands are normally placed in rs2 and rf only if they produce annoying effects on the screen and are not necessary when logging in. For example, the command to set the terminal into 80-column mode would normally be part of is2, but it causes an annoying screen behavior and is not normally needed since the terminal is usually already in 80-column mode. Processed November 7, 1990 TERMINFO(5,F) 18 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) If there are commands to set and clear tab stops, they can be given as tbc (clear all tab stops) and 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 is2 or if. Certain capabilities control padding in the terminal driver. These are primarily needed by hard copy terminals, and are used by the tset program to set terminal modes appropriately. Delays embedded in the capabilities cr, ind, cub1, ff, and tab cause the appropriate delay bits to be set in the terminal driver. If pb (padding baud rate) is given, these values can be ignored at baud rates below the value of pb. Miscellaneous Strings If the terminal requires other than a null (zero) character as a pad, then this can be given as pad. Only the first character of the pad string is used. If the terminal has an extra "status line" that is not normally used by software, this fact can be indicated. If the status line is viewed as an extra line below the bottom line, into which one can cursor address normally, the capability hs should be given. Special strings to go to the beginning of the status line and to return from the status line can be given as tsl and fsl. (fsl must leave the cursor position in the same place it was before tsl. If necessary, the sc and rc strings can be included in tsl and fsl to get this effect.) The parameter tsl takes one parameter, which is the column number of the status line the cursor is to be moved to. If escape sequences and other special commands, such as tab, work while in the status line, the flag eslok can be given. A string that turns off the status line (or otherwise erases its contents) should be given as dsl. If the terminal has commands to save and restore the position of the cursor, give them as sc and rc. The status line is normally assumed to be the same width as the rest of the screen, such as, cols. If the status line is a different width (possibly because the terminal does not allow an entire line to be loaded) the width, in columns, can be indicated with the numeric parameter wsl. If the terminal can move up or down half a line, this can be indicated with hu (half-line up) and hd (half-line down). This is primarily useful for superscripts and subscripts on hardcopy terminals. If a hardcopy terminal can eject to the next page (form-feed), give this as ff (usually Ctrl-L). 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 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". If the terminal has a "meta key" which acts as a shift key, setting the eighth bit of any character transmitted, this fact can be indicated with km. Otherwise, software will assume that the eighth 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 smm and rmm. Processed November 7, 1990 TERMINFO(5,F) 19 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) 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 lm. A value of lm#0 indicates that the number of lines is not fixed, but that there is still more memory than fits on the screen. Media copy strings that control an auxiliary printer connected to the terminal can be given in the following ways: mc0 prints the contents of the screen, mc4 turns off the printer, and mc5 turns on the printer. When the printer is on, all text sent to the terminal is sent to the printer. It is undefined whether the text is also displayed on the terminal screen when the printer is on. A variation 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 mc4, is transparently passed to the printer while an mc5p is in effect. Strings to program function keys can be given as pfkey, pfloc, and pfx. 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 can program undefined keys in a terminal-dependent manner. The difference between the capabilities is that pfkey causes pressing the given key to be the same as the user typing the given string; pfloc causes the string to be executed by the terminal in local mode; and pfx causes the string to be transmitted to the computer. Indicating Terminal Problems Terminals that do not allow ~ (tilde) characters to be displayed should indicate hz. Terminals that ignore a line-feed character immediately after an am wrap should indicate xenl. If el is required to get rid of standout (instead of merely writing normal text on top of it), xhp should be given. Terminals for which tabs turn all characters moved to blanks should indicate xt (destructive tabs). This capability is interpreted to mean that it is not possible to position the cursor on top of the pads inserted for standout mode. Instead, it is necessary to erase standout mode using delete and insert line. The terminal that is unable to correctly transmit the ESC (escape) or Ctrl-C characters has xsb, indicating that the F1 key is used for ESC and F2 for Ctrl-C. Other specific terminal problems can be corrected by adding more capabilities of the form xx. Similar Terminals If two terminals are very similar, one can be defined as being just like the other with certain exceptions. The string capability use can be given with the name of the similar terminal. The capabilities given before use override those Processed November 7, 1990 TERMINFO(5,F) 20 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) in the terminal type invoked by use. A capability can be cancelled by placing xx@ to the left of the capability definition, where xx is the capability. For example, the entry: term-nl, smkx@, rmkx@, use=term, defines a terminal that does not have the smkx or rmkx 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. Data Base File Names Compiled terminfo descriptions are placed in subdirectories under /usr/lib/terminfo in order to avoid performing linear searches through a single directory containing all of the terminfo description files. A given description file is stored in /usr/lib/terminfo/c/name, where name is the name of the terminal, and c is the first letter of the terminal name. For example, the compiled description for the terminal "term4-nl" can be found in the file "/usr/lib/terminfo/t/term4-nl" You can create synonyms for the same terminal by making multiple links to the same compiled file. (See the ln command in AIX Operating System Commands Reference on how to create multiple links to a file.) EXAMPLE The following entry, which describes a terminal, is among the entries in the terminfo file. hft|High Function Terminal, cr=^M, cud1=|J, ind=\E[S, bel=^G, il1=\E[L, am, cub1=^H, ed=\E[J, el=\E[K, clear=\E[H\E[J, cup=\E[%ip1%d;%p2%dH, cols#80, lines#25, dch1=\E[P, dl1=\E[M, home=\E[H, ich=\E[%p1%d@, ich1=\E[@, smir=\E[4h, rmir=\E4l, bold=\E[1m, rev=\E[7m, blink=\E[5m, invis=\E[8m, sgr0=\E[0m, sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;m, kcuu1=\E[A, kcud1=\E[B, kcub1=\E[D, kcuf1=\E[C, khome=\E[H, kbs=^H, kbtab=\[Z cuf1=\E[C, ht=^I, cuu1=\E[A, xon, rmul=\E[m, smul=\E[4m, rmso=\E[m, smso=\E[7m, kpp=\E[150q, knp=\E[154q, kf1=\E[001q, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q, kf9=\E[009q, kf10=\E[010q, kf11=\E[011q, kf12=\E[012q, bw, it#8, ms, hpa=\E%i%p1%dG, ech=\E[%p1dx, kdch1=\E[P, kind=\E[151q, kich1=\E[139q, krmir=\E[41, knl=^M, ko=^I, ktab=^I, kri=\E[155q, kend=\E[146q cub=\E[%p1%dD, cuf=\E[%p1%dC, indn=\E[%p1dS, rin=\E[%p1%dT, ri=\E[T, cuu=\E[%p1%dA, cud=\E[%p1%dB, box1=\332\304\277\263 \331\300\302\264\301\303\305, box2=\311\315\273\272 \274\310\313\271\312\314\316, batt2=md, Processed November 7, 1990 TERMINFO(5,F) 21 TERMINFO(5,F) AIX Technical Reference TERMINFO(5,F) FILE /usr/lib/terminfo/?/* Compiled terminal capability data base. RELATED INFORMATION In this book: "curses," "Terminfo Level Subroutines," "extended curses library," "printf, fprintf, sprintf, NLprintf, NLfprintf, NLsprintf, wsprintf," "termdef," and "TERM." The display and tic commands in AIX Operating System Commands Reference. Processed November 7, 1990 TERMINFO(5,F) 22