60546922f9a7caa850912bcf539125638bfc39ae
[ncurses.git] / doc / html / man / terminfo.5.html
1 <!-- 
2   * t
3   * DO NOT EDIT THIS FILE BY HAND!
4   * It is generated from terminfo.head, Caps, and terminfo.tail.
5   * Note: this must be run through tbl before nroff.
6   * The magic cookie on the first line triggers this under some man programs.
7   ****************************************************************************
8   * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc.              *
9   *                                                                          *
10   * Permission is hereby granted, free of charge, to any person obtaining a  *
11   * copy of this software and associated documentation files (the            *
12   * "Software"), to deal in the Software without restriction, including      *
13   * without limitation the rights to use, copy, modify, merge, publish,      *
14   * distribute, distribute with modifications, sublicense, and/or sell       *
15   * copies of the Software, and to permit persons to whom the Software is    *
16   * furnished to do so, subject to the following conditions:                 *
17   *                                                                          *
18   * The above copyright notice and this permission notice shall be included  *
19   * in all copies or substantial portions of the Software.                   *
20   *                                                                          *
21   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
22   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
23   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
24   * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
25   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
26   * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
27   * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
28   *                                                                          *
29   * Except as contained in this notice, the name(s) of the above copyright   *
30   * holders shall not be used in advertising or otherwise to promote the     *
31   * sale, use or other dealings in this Software without prior written       *
32   * authorization.                                                           *
33   ****************************************************************************
34   * @Id: terminfo.head,v 1.21 2013/03/09 22:11:36 tom Exp @
35   * Head of terminfo man page ends here
36   * @Id: terminfo.tail,v 1.68 2013/11/09 15:20:48 tom Exp @
37   * Beginning of terminfo.tail file
38   * This file is part of ncurses.
39   * See "terminfo.head" for copyright.
40   *.in -2
41   *.in +2
42   *.in -2
43   *.in +2
44   *.TH
45 -->
46 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
47 <HTML>
48 <HEAD>
49 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
50 <meta name="generator" content="Manpage converted by man2html - see http://invisible-island.net/scripts/readme.html#others_scripts">
51 <TITLE>terminfo 5   File Formats</TITLE>
52 <link rev=made href="mailto:bug-ncurses@gnu.org">
53 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
54 </HEAD>
55 <BODY>
56 <H1>terminfo 5   File Formats</H1>
57 <HR>
58 <PRE>
59 <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>                   File Formats                  <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
60
61
62
63
64 </PRE>
65 <H2><a name="h2-NAME">NAME</a></H2><PRE>
66        terminfo - terminal capability data base
67
68
69 </PRE>
70 <H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
71        /usr/share/terminfo/*/*
72
73
74 </PRE>
75 <H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>
76        <EM>Terminfo</EM>  is  a  data  base  describing terminals, used by
77        screen-oriented programs  such  as  <STRONG>nvi(1)</STRONG>,  <STRONG>rogue(1)</STRONG>  and
78        libraries  such  as <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>.  <EM>Terminfo</EM> describes termi-
79        nals by giving a set of capabilities which they  have,  by
80        specifying how to perform screen operations, and by speci-
81        fying padding requirements and  initialization  sequences.
82        This describes <STRONG>ncurses</STRONG> version 5.9 (patch 20150215).
83
84        Entries in <EM>terminfo</EM> consist of a sequence of `,' separated
85        fields (embedded commas may be escaped with a backslash or
86        notated  as \054).  White space after the `,' separator is
87        ignored.  The first entry  for  each  terminal  gives  the
88        names  which  are known for the terminal, separated by `|'
89        characters.  The first  name  given  is  the  most  common
90        abbreviation  for the terminal, the last name given should
91        be a long name fully identifying  the  terminal,  and  all
92        others  are  understood as synonyms for the terminal name.
93        All names but the last should be in lower case and contain
94        no  blanks;  the last name may well contain upper case and
95        blanks for readability.
96
97        Lines beginning with a `#' in the first column are treated
98        as  comments.  While comment lines are legal at any point,
99        the output of <STRONG>captoinfo</STRONG> and <STRONG>infotocap</STRONG>  (aliases  for  <STRONG>tic</STRONG>)
100        will move comments so they occur only between entries.
101
102        Newlines  and  leading  tabs  may  be  used for formatting
103        entries for readability.  These are  removed  from  parsed
104        entries.   The  <STRONG>infocmp</STRONG> <STRONG>-f</STRONG> option relies on this to format
105        if-then-else expressions: the result can be read by <STRONG>tic</STRONG>.
106
107        Terminal names (except for the last, verbose entry) should
108        be chosen using the following conventions.  The particular
109        piece of hardware making up the  terminal  should  have  a
110        root  name,  thus  "hp2621".  This name should not contain
111        hyphens.  Modes that the hardware can be in, or user pref-
112        erences,  should  be indicated by appending a hyphen and a
113        mode suffix.  Thus, a vt100 in 132 column  mode  would  be
114        vt100-w.  The following suffixes should be used where pos-
115        sible:
116
117       <STRONG>Suffix</STRONG>                  <STRONG>Meaning</STRONG>                   <STRONG>Example</STRONG>
118       -<EM>nn</EM>      Number of lines on the screen            aaa-60
119       -<EM>n</EM>p      Number of pages of memory                c100-4p
120       -am      With automargins (usually the default)   vt100-am
121       -m       Mono mode; suppress color                ansi-m
122       -mc      Magic cookie; spaces when highlighting   wy30-mc
123       -na      No arrow keys (leave them in local)      c100-na
124       -nam     Without automatic margins                vt100-nam
125       -nl      No status line                           att4415-nl
126       -ns      No status line                           hp2626-ns
127       -rv      Reverse video                            c100-rv
128       -s       Enable status line                       vt100-s
129       -vb      Use visible bell instead of beep         wy370-vb
130
131       -w       Wide mode (&gt; 80 columns, usually 132)    vt100-w
132
133        For more on terminal naming conventions, see  the  <STRONG>term(7)</STRONG>
134        manual page.
135
136
137 </PRE>
138 <H3><a name="h3-Predefined-Capabilities">Predefined Capabilities</a></H3><PRE>
139        The  following  is  a  complete  table of the capabilities
140        included in a terminfo description block and available  to
141        terminfo-using code.  In each line of the table,
142
143        The  <STRONG>variable</STRONG>  is the name by which the programmer (at the
144        terminfo level) accesses the capability.
145
146        The <STRONG>capname</STRONG> is the short name used  in  the  text  of  the
147        database,  and  is used by a person updating the database.
148        Whenever possible, capnames are chosen to be the  same  as
149        or similar to the ANSI X3.64-1979 standard (now superseded
150        by ECMA-48, which uses identical or very  similar  names).
151        Semantics are also intended to match those of the specifi-
152        cation.
153
154        The termcap code is the old <STRONG>termcap</STRONG> capability name  (some
155        capabilities are new, and have names which termcap did not
156        originate).
157
158        Capability names have no hard length limit, but an  infor-
159        mal  limit  of  5 characters has been adopted to keep them
160        short and to allow the tabs in the  source  file  <STRONG>Caps</STRONG>  to
161        line up nicely.
162
163        Finally,  the  description  field  attempts  to convey the
164        semantics of the capability.  You may find some  codes  in
165        the description field:
166
167        (P)    indicates that padding may be specified
168
169        #[1-9] in  the description field indicates that the string
170               is passed through tparm with parms as given (#<EM>i</EM>).
171
172        (P*)   indicates that padding may vary  in  proportion  to
173               the number of lines affected
174
175        (#<EM>i</EM>)   indicates the <EM>i</EM>th parameter.
176
177
178        These are the boolean capabilities:
179
180
181                <STRONG>Variable</STRONG>          <STRONG>Cap-</STRONG>   <STRONG>TCap</STRONG>     <STRONG>Description</STRONG>
182                <STRONG>Booleans</STRONG>          <STRONG>name</STRONG>   <STRONG>Code</STRONG>
183        auto_left_margin          bw     bw   cub1 wraps from col-
184                                              umn 0 to last column
185        auto_right_margin         am     am   terminal has auto-
186                                              matic margins
187        back_color_erase          bce    ut   screen erased with
188                                              background color
189        can_change                ccc    cc   terminal can re-
190                                              define existing col-
191                                              ors
192        ceol_standout_glitch      xhp    xs   standout not erased
193                                              by overwriting (hp)
194        col_addr_glitch           xhpa   YA   only positive motion
195                                              for hpa/mhpa caps
196
197
198
199        cpi_changes_res           cpix   YF   changing character
200                                              pitch changes reso-
201                                              lution
202        cr_cancels_micro_mode     crxm   YB   using cr turns off
203                                              micro mode
204        dest_tabs_magic_smso      xt     xt   tabs destructive,
205                                              magic so char
206                                              (t1061)
207        eat_newline_glitch        xenl   xn   newline ignored
208                                              after 80 cols (con-
209                                              cept)
210        erase_overstrike          eo     eo   can erase over-
211                                              strikes with a blank
212        generic_type              gn     gn   generic line type
213        hard_copy                 hc     hc   hardcopy terminal
214        hard_cursor               chts   HC   cursor is hard to
215                                              see
216        has_meta_key              km     km   Has a meta key
217                                              (i.e., sets 8th-bit)
218        has_print_wheel           daisy  YC   printer needs opera-
219                                              tor to change char-
220                                              acter set
221        has_status_line           hs     hs   has extra status
222                                              line
223        hue_lightness_saturation  hls    hl   terminal uses only
224                                              HLS color notation
225                                              (Tektronix)
226        insert_null_glitch        in     in   insert mode distin-
227                                              guishes nulls
228        lpi_changes_res           lpix   YG   changing line pitch
229                                              changes resolution
230        memory_above              da     da   display may be
231                                              retained above the
232                                              screen
233        memory_below              db     db   display may be
234                                              retained below the
235                                              screen
236        move_insert_mode          mir    mi   safe to move while
237                                              in insert mode
238        move_standout_mode        msgr   ms   safe to move while
239                                              in standout mode
240        needs_xon_xoff            nxon   nx   padding will not
241                                              work, xon/xoff
242                                              required
243        no_esc_ctlc               xsb    xb   beehive (f1=escape,
244                                              f2=ctrl C)
245        no_pad_char               npc    NP   pad character does
246                                              not exist
247        non_dest_scroll_region    ndscr  ND   scrolling region is
248                                              non-destructive
249        non_rev_rmcup             nrrmc  NR   smcup does not
250                                              reverse rmcup
251        over_strike               os     os   terminal can over-
252                                              strike
253        prtr_silent               mc5i   5i   printer will not
254                                              echo on screen
255        row_addr_glitch           xvpa   YD   only positive motion
256                                              for vpa/mvpa caps
257        semi_auto_right_margin    sam    YE   printing in last
258                                              column causes cr
259        status_line_esc_ok        eslok  es   escape can be used
260                                              on the status line
261        tilde_glitch              hz     hz   cannot print ~'s
262                                              (hazeltine)
263
264
265        transparent_underline     ul     ul   underline character
266                                              overstrikes
267        xon_xoff                  xon    xo   terminal uses
268                                              xon/xoff handshaking
269
270        These are the numeric capabilities:
271
272
273                <STRONG>Variable</STRONG>          <STRONG>Cap-</STRONG>   <STRONG>TCap</STRONG>     <STRONG>Description</STRONG>
274                 <STRONG>Numeric</STRONG>          <STRONG>name</STRONG>   <STRONG>Code</STRONG>
275        columns                   cols   co   number of columns in
276                                              a line
277        init_tabs                 it     it   tabs initially every
278                                              # spaces
279        label_height              lh     lh   rows in each label
280        label_width               lw     lw   columns in each
281                                              label
282        lines                     lines  li   number of lines on
283                                              screen or page
284        lines_of_memory           lm     lm   lines of memory if &gt;
285                                              line. 0 means varies
286        magic_cookie_glitch       xmc    sg   number of blank
287                                              characters left by
288                                              smso or rmso
289        max_attributes            ma     ma   maximum combined
290                                              attributes terminal
291                                              can handle
292        max_colors                colors Co   maximum number of
293                                              colors on screen
294        max_pairs                 pairs  pa   maximum number of
295                                              color-pairs on the
296                                              screen
297        maximum_windows           wnum   MW   maximum number of
298                                              defineable windows
299        no_color_video            ncv    NC   video attributes
300                                              that cannot be used
301                                              with colors
302        num_labels                nlab   Nl   number of labels on
303                                              screen
304        padding_baud_rate         pb     pb   lowest baud rate
305                                              where padding needed
306        virtual_terminal          vt     vt   virtual terminal
307                                              number (CB/unix)
308        width_status_line         wsl    ws   number of columns in
309                                              status line
310
311        The following numeric  capabilities  are  present  in  the
312        SVr4.0  term  structure, but are not yet documented in the
313        man page.  They came in with SVr4's printer support.
314
315
316                <STRONG>Variable</STRONG>          <STRONG>Cap-</STRONG>   <STRONG>TCap</STRONG>     <STRONG>Description</STRONG>
317                 <STRONG>Numeric</STRONG>          <STRONG>name</STRONG>   <STRONG>Code</STRONG>
318        bit_image_entwining       bitwin Yo   number of passes for
319                                              each bit-image row
320        bit_image_type            bitype Yp   type of bit-image
321                                              device
322        buffer_capacity           bufsz  Ya   numbers of bytes
323                                              buffered before
324                                              printing
325        buttons                   btns   BT   number of buttons on
326                                              mouse
327        dot_horz_spacing          spinh  Yc   spacing of dots hor-
328                                              izontally in dots
329                                              per inch
330
331        dot_vert_spacing          spinv  Yb   spacing of pins ver-
332                                              tically in pins per
333                                              inch
334        max_micro_address         maddr  Yd   maximum value in
335                                              micro_..._address
336        max_micro_jump            mjump  Ye   maximum value in
337                                              parm_..._micro
338        micro_col_size            mcs    Yf   character step size
339                                              when in micro mode
340        micro_line_size           mls    Yg   line step size when
341                                              in micro mode
342        number_of_pins            npins  Yh   numbers of pins in
343                                              print-head
344        output_res_char           orc    Yi   horizontal resolu-
345                                              tion in units per
346                                              line
347        output_res_horz_inch      orhi   Yk   horizontal resolu-
348                                              tion in units per
349                                              inch
350        output_res_line           orl    Yj   vertical resolution
351                                              in units per line
352        output_res_vert_inch      orvi   Yl   vertical resolution
353                                              in units per inch
354        print_rate                cps    Ym   print rate in char-
355                                              acters per second
356        wide_char_size            widcs  Yn   character step size
357                                              when in double wide
358                                              mode
359
360        These are the string capabilities:
361
362
363                <STRONG>Variable</STRONG>          <STRONG>Cap-</STRONG>   <STRONG>TCap</STRONG>     <STRONG>Description</STRONG>
364                 <STRONG>String</STRONG>           <STRONG>name</STRONG>   <STRONG>Code</STRONG>
365        acs_chars                 acsc   ac   graphics charset
366                                              pairs, based on
367                                              vt100
368        back_tab                  cbt    bt   back tab (P)
369        bell                      bel    bl   audible signal
370                                              (bell) (P)
371        carriage_return           cr     cr   carriage return (P*)
372                                              (P*)
373        change_char_pitch         cpi    ZA   Change number of
374                                              characters per inch
375                                              to #1
376        change_line_pitch         lpi    ZB   Change number of
377                                              lines per inch to #1
378        change_res_horz           chr    ZC   Change horizontal
379                                              resolution to #1
380        change_res_vert           cvr    ZD   Change vertical res-
381                                              olution to #1
382        change_scroll_region      csr    cs   change region to
383                                              line #1 to line #2
384                                              (P)
385        char_padding              rmp    rP   like ip but when in
386                                              insert mode
387        clear_all_tabs            tbc    ct   clear all tab stops
388                                              (P)
389        clear_margins             mgc    MC   clear right and left
390                                              soft margins
391        clear_screen              clear  cl   clear screen and
392                                              home cursor (P*)
393        clr_bol                   el1    cb   Clear to beginning
394                                              of line
395
396
397        clr_eol                   el     ce   clear to end of line
398                                              (P)
399        clr_eos                   ed     cd   clear to end of
400                                              screen (P*)
401        column_address            hpa    ch   horizontal position
402                                              #1, absolute (P)
403        command_character         cmdch  CC   terminal settable
404                                              cmd character in
405                                              prototype !?
406        create_window             cwin   CW   define a window #1
407                                              from #2,#3 to #4,#5
408        cursor_address            cup    cm   move to row #1 col-
409                                              umns #2
410        cursor_down               cud1   do   down one line
411        cursor_home               home   ho   home cursor (if no
412                                              cup)
413        cursor_invisible          civis  vi   make cursor invisi-
414                                              ble
415        cursor_left               cub1   le   move left one space
416        cursor_mem_address        mrcup  CM   memory relative cur-
417                                              sor addressing, move
418                                              to row #1 columns #2
419        cursor_normal             cnorm  ve   make cursor appear
420                                              normal (undo
421                                              civis/cvvis)
422        cursor_right              cuf1   nd   non-destructive
423                                              space (move right
424                                              one space)
425        cursor_to_ll              ll     ll   last line, first
426                                              column (if no cup)
427        cursor_up                 cuu1   up   up one line
428        cursor_visible            cvvis  vs   make cursor very
429                                              visible
430        define_char               defc   ZE   Define a character
431                                              #1, #2 dots wide,
432                                              descender #3
433        delete_character          dch1   dc   delete character
434                                              (P*)
435        delete_line               dl1    dl   delete line (P*)
436        dial_phone                dial   DI   dial number #1
437        dis_status_line           dsl    ds   disable status line
438        display_clock             dclk   DK   display clock
439        down_half_line            hd     hd   half a line down
440        ena_acs                   enacs  eA   enable alternate
441                                              char set
442        enter_alt_charset_mode    smacs  as   start alternate
443                                              character set (P)
444        enter_am_mode             smam   SA   turn on automatic
445                                              margins
446        enter_blink_mode          blink  mb   turn on blinking
447        enter_bold_mode           bold   md   turn on bold (extra
448                                              bright) mode
449        enter_ca_mode             smcup  ti   string to start pro-
450                                              grams using cup
451        enter_delete_mode         smdc   dm   enter delete mode
452        enter_dim_mode            dim    mh   turn on half-bright
453                                              mode
454        enter_doublewide_mode     swidm  ZF   Enter double-wide
455                                              mode
456        enter_draft_quality       sdrfq  ZG   Enter draft-quality
457                                              mode
458        enter_insert_mode         smir   im   enter insert mode
459        enter_italics_mode        sitm   ZH   Enter italic mode
460        enter_leftward_mode       slm    ZI   Start leftward car-
461                                              riage motion
462
463        enter_micro_mode          smicm  ZJ   Start micro-motion
464                                              mode
465        enter_near_letter_quality snlq   ZK   Enter NLQ mode
466        enter_normal_quality      snrmq  ZL   Enter normal-quality
467                                              mode
468        enter_protected_mode      prot   mp   turn on protected
469                                              mode
470        enter_reverse_mode        rev    mr   turn on reverse
471                                              video mode
472        enter_secure_mode         invis  mk   turn on blank mode
473                                              (characters invisi-
474                                              ble)
475        enter_shadow_mode         sshm   ZM   Enter shadow-print
476                                              mode
477        enter_standout_mode       smso   so   begin standout mode
478        enter_subscript_mode      ssubm  ZN   Enter subscript mode
479        enter_superscript_mode    ssupm  ZO   Enter superscript
480                                              mode
481        enter_underline_mode      smul   us   begin underline mode
482        enter_upward_mode         sum    ZP   Start upward car-
483                                              riage motion
484        enter_xon_mode            smxon  SX   turn on xon/xoff
485                                              handshaking
486        erase_chars               ech    ec   erase #1 characters
487                                              (P)
488        exit_alt_charset_mode     rmacs  ae   end alternate char-
489                                              acter set (P)
490        exit_am_mode              rmam   RA   turn off automatic
491                                              margins
492        exit_attribute_mode       sgr0   me   turn off all
493                                              attributes
494        exit_ca_mode              rmcup  te   strings to end pro-
495                                              grams using cup
496        exit_delete_mode          rmdc   ed   end delete mode
497        exit_doublewide_mode      rwidm  ZQ   End double-wide mode
498        exit_insert_mode          rmir   ei   exit insert mode
499        exit_italics_mode         ritm   ZR   End italic mode
500        exit_leftward_mode        rlm    ZS   End left-motion mode
501        exit_micro_mode           rmicm  ZT   End micro-motion
502                                              mode
503        exit_shadow_mode          rshm   ZU   End shadow-print
504                                              mode
505        exit_standout_mode        rmso   se   exit standout mode
506        exit_subscript_mode       rsubm  ZV   End subscript mode
507        exit_superscript_mode     rsupm  ZW   End superscript mode
508        exit_underline_mode       rmul   ue   exit underline mode
509        exit_upward_mode          rum    ZX   End reverse charac-
510                                              ter motion
511        exit_xon_mode             rmxon  RX   turn off xon/xoff
512                                              handshaking
513        fixed_pause               pause  PA   pause for 2-3 sec-
514                                              onds
515        flash_hook                hook   fh   flash switch hook
516        flash_screen              flash  vb   visible bell (may
517                                              not move cursor)
518        form_feed                 ff     ff   hardcopy terminal
519                                              page eject (P*)
520        from_status_line          fsl    fs   return from status
521                                              line
522        goto_window               wingo  WG   go to window #1
523        hangup                    hup    HU   hang-up phone
524        init_1string              is1    i1   initialization
525                                              string
526        init_2string              is2    is   initialization
527                                              string
528
529        init_3string              is3    i3   initialization
530                                              string
531        init_file                 if     if   name of initializa-
532                                              tion file
533        init_prog                 iprog  iP   path name of program
534                                              for initialization
535        initialize_color          initc  Ic   initialize color #1
536                                              to (#2,#3,#4)
537        initialize_pair           initp  Ip   Initialize color
538                                              pair #1 to
539                                              fg=(#2,#3,#4),
540                                              bg=(#5,#6,#7)
541        insert_character          ich1   ic   insert character (P)
542        insert_line               il1    al   insert line (P*)
543        insert_padding            ip     ip   insert padding after
544                                              inserted character
545        key_a1                    ka1    K1   upper left of keypad
546        key_a3                    ka3    K3   upper right of key-
547                                              pad
548        key_b2                    kb2    K2   center of keypad
549        key_backspace             kbs    kb   backspace key
550        key_beg                   kbeg   @1   begin key
551        key_btab                  kcbt   kB   back-tab key
552        key_c1                    kc1    K4   lower left of keypad
553        key_c3                    kc3    K5   lower right of key-
554                                              pad
555        key_cancel                kcan   @2   cancel key
556        key_catab                 ktbc   ka   clear-all-tabs key
557        key_clear                 kclr   kC   clear-screen or
558                                              erase key
559        key_close                 kclo   @3   close key
560        key_command               kcmd   @4   command key
561        key_copy                  kcpy   @5   copy key
562        key_create                kcrt   @6   create key
563        key_ctab                  kctab  kt   clear-tab key
564        key_dc                    kdch1  kD   delete-character key
565        key_dl                    kdl1   kL   delete-line key
566        key_down                  kcud1  kd   down-arrow key
567        key_eic                   krmir  kM   sent by rmir or smir
568                                              in insert mode
569        key_end                   kend   @7   end key
570        key_enter                 kent   @8   enter/send key
571        key_eol                   kel    kE   clear-to-end-of-line
572                                              key
573        key_eos                   ked    kS   clear-to-end-of-
574                                              screen key
575        key_exit                  kext   @9   exit key
576        key_f0                    kf0    k0   F0 function key
577        key_f1                    kf1    k1   F1 function key
578        key_f10                   kf10   k;   F10 function key
579        key_f11                   kf11   F1   F11 function key
580        key_f12                   kf12   F2   F12 function key
581        key_f13                   kf13   F3   F13 function key
582        key_f14                   kf14   F4   F14 function key
583        key_f15                   kf15   F5   F15 function key
584        key_f16                   kf16   F6   F16 function key
585        key_f17                   kf17   F7   F17 function key
586        key_f18                   kf18   F8   F18 function key
587        key_f19                   kf19   F9   F19 function key
588        key_f2                    kf2    k2   F2 function key
589        key_f20                   kf20   FA   F20 function key
590        key_f21                   kf21   FB   F21 function key
591        key_f22                   kf22   FC   F22 function key
592        key_f23                   kf23   FD   F23 function key
593        key_f24                   kf24   FE   F24 function key
594
595        key_f25                   kf25   FF   F25 function key
596        key_f26                   kf26   FG   F26 function key
597        key_f27                   kf27   FH   F27 function key
598        key_f28                   kf28   FI   F28 function key
599        key_f29                   kf29   FJ   F29 function key
600        key_f3                    kf3    k3   F3 function key
601        key_f30                   kf30   FK   F30 function key
602        key_f31                   kf31   FL   F31 function key
603        key_f32                   kf32   FM   F32 function key
604        key_f33                   kf33   FN   F33 function key
605        key_f34                   kf34   FO   F34 function key
606        key_f35                   kf35   FP   F35 function key
607        key_f36                   kf36   FQ   F36 function key
608        key_f37                   kf37   FR   F37 function key
609        key_f38                   kf38   FS   F38 function key
610        key_f39                   kf39   FT   F39 function key
611        key_f4                    kf4    k4   F4 function key
612        key_f40                   kf40   FU   F40 function key
613        key_f41                   kf41   FV   F41 function key
614        key_f42                   kf42   FW   F42 function key
615        key_f43                   kf43   FX   F43 function key
616        key_f44                   kf44   FY   F44 function key
617        key_f45                   kf45   FZ   F45 function key
618        key_f46                   kf46   Fa   F46 function key
619        key_f47                   kf47   Fb   F47 function key
620        key_f48                   kf48   Fc   F48 function key
621        key_f49                   kf49   Fd   F49 function key
622        key_f5                    kf5    k5   F5 function key
623        key_f50                   kf50   Fe   F50 function key
624        key_f51                   kf51   Ff   F51 function key
625        key_f52                   kf52   Fg   F52 function key
626        key_f53                   kf53   Fh   F53 function key
627        key_f54                   kf54   Fi   F54 function key
628        key_f55                   kf55   Fj   F55 function key
629        key_f56                   kf56   Fk   F56 function key
630        key_f57                   kf57   Fl   F57 function key
631        key_f58                   kf58   Fm   F58 function key
632        key_f59                   kf59   Fn   F59 function key
633        key_f6                    kf6    k6   F6 function key
634        key_f60                   kf60   Fo   F60 function key
635        key_f61                   kf61   Fp   F61 function key
636        key_f62                   kf62   Fq   F62 function key
637        key_f63                   kf63   Fr   F63 function key
638        key_f7                    kf7    k7   F7 function key
639        key_f8                    kf8    k8   F8 function key
640        key_f9                    kf9    k9   F9 function key
641        key_find                  kfnd   @0   find key
642        key_help                  khlp   %1   help key
643        key_home                  khome  kh   home key
644        key_ic                    kich1  kI   insert-character key
645        key_il                    kil1   kA   insert-line key
646        key_left                  kcub1  kl   left-arrow key
647        key_ll                    kll    kH   lower-left key (home
648                                              down)
649        key_mark                  kmrk   %2   mark key
650        key_message               kmsg   %3   message key
651        key_move                  kmov   %4   move key
652        key_next                  knxt   %5   next key
653        key_npage                 knp    kN   next-page key
654        key_open                  kopn   %6   open key
655        key_options               kopt   %7   options key
656        key_ppage                 kpp    kP   previous-page key
657        key_previous              kprv   %8   previous key
658        key_print                 kprt   %9   print key
659        key_redo                  krdo   %0   redo key
660
661        key_reference             kref   &amp;1   reference key
662        key_refresh               krfr   &amp;2   refresh key
663        key_replace               krpl   &amp;3   replace key
664        key_restart               krst   &amp;4   restart key
665        key_resume                kres   &amp;5   resume key
666        key_right                 kcuf1  kr   right-arrow key
667        key_save                  ksav   &amp;6   save key
668        key_sbeg                  kBEG   &amp;9   shifted begin key
669        key_scancel               kCAN   &amp;0   shifted cancel key
670        key_scommand              kCMD   *1   shifted command key
671        key_scopy                 kCPY   *2   shifted copy key
672        key_screate               kCRT   *3   shifted create key
673        key_sdc                   kDC    *4   shifted delete-char-
674                                              acter key
675        key_sdl                   kDL    *5   shifted delete-line
676                                              key
677        key_select                kslt   *6   select key
678        key_send                  kEND   *7   shifted end key
679        key_seol                  kEOL   *8   shifted clear-to-
680                                              end-of-line key
681        key_sexit                 kEXT   *9   shifted exit key
682        key_sf                    kind   kF   scroll-forward key
683        key_sfind                 kFND   *0   shifted find key
684        key_shelp                 kHLP   #1   shifted help key
685        key_shome                 kHOM   #2   shifted home key
686        key_sic                   kIC    #3   shifted insert-char-
687                                              acter key
688        key_sleft                 kLFT   #4   shifted left-arrow
689                                              key
690        key_smessage              kMSG   %a   shifted message key
691        key_smove                 kMOV   %b   shifted move key
692        key_snext                 kNXT   %c   shifted next key
693        key_soptions              kOPT   %d   shifted options key
694        key_sprevious             kPRV   %e   shifted previous key
695        key_sprint                kPRT   %f   shifted print key
696        key_sr                    kri    kR   scroll-backward key
697        key_sredo                 kRDO   %g   shifted redo key
698        key_sreplace              kRPL   %h   shifted replace key
699        key_sright                kRIT   %i   shifted right-arrow
700                                              key
701        key_srsume                kRES   %j   shifted resume key
702        key_ssave                 kSAV   !1   shifted save key
703        key_ssuspend              kSPD   !2   shifted suspend key
704        key_stab                  khts   kT   set-tab key
705        key_sundo                 kUND   !3   shifted undo key
706        key_suspend               kspd   &amp;7   suspend key
707        key_undo                  kund   &amp;8   undo key
708        key_up                    kcuu1  ku   up-arrow key
709        keypad_local              rmkx   ke   leave 'key-
710                                              board_transmit' mode
711        keypad_xmit               smkx   ks   enter 'key-
712                                              board_transmit' mode
713        lab_f0                    lf0    l0   label on function
714                                              key f0 if not f0
715        lab_f1                    lf1    l1   label on function
716                                              key f1 if not f1
717        lab_f10                   lf10   la   label on function
718                                              key f10 if not f10
719        lab_f2                    lf2    l2   label on function
720                                              key f2 if not f2
721        lab_f3                    lf3    l3   label on function
722                                              key f3 if not f3
723        lab_f4                    lf4    l4   label on function
724                                              key f4 if not f4
725
726
727        lab_f5                    lf5    l5   label on function
728                                              key f5 if not f5
729        lab_f6                    lf6    l6   label on function
730                                              key f6 if not f6
731        lab_f7                    lf7    l7   label on function
732                                              key f7 if not f7
733        lab_f8                    lf8    l8   label on function
734                                              key f8 if not f8
735        lab_f9                    lf9    l9   label on function
736                                              key f9 if not f9
737        label_format              fln    Lf   label format
738        label_off                 rmln   LF   turn off soft labels
739        label_on                  smln   LO   turn on soft labels
740        meta_off                  rmm    mo   turn off meta mode
741        meta_on                   smm    mm   turn on meta mode
742                                              (8th-bit on)
743        micro_column_address      mhpa   ZY   Like column_address
744                                              in micro mode
745        micro_down                mcud1  ZZ   Like cursor_down in
746                                              micro mode
747        micro_left                mcub1  Za   Like cursor_left in
748                                              micro mode
749        micro_right               mcuf1  Zb   Like cursor_right in
750                                              micro mode
751        micro_row_address         mvpa   Zc   Like row_address #1
752                                              in micro mode
753        micro_up                  mcuu1  Zd   Like cursor_up in
754                                              micro mode
755        newline                   nel    nw   newline (behave like
756                                              cr followed by lf)
757        order_of_pins             porder Ze   Match software bits
758                                              to print-head pins
759        orig_colors               oc     oc   Set all color pairs
760                                              to the original ones
761        orig_pair                 op     op   Set default pair to
762                                              its original value
763        pad_char                  pad    pc   padding char
764                                              (instead of null)
765        parm_dch                  dch    DC   delete #1 characters
766                                              (P*)
767        parm_delete_line          dl     DL   delete #1 lines (P*)
768        parm_down_cursor          cud    DO   down #1 lines (P*)
769        parm_down_micro           mcud   Zf   Like parm_down_cur-
770                                              sor in micro mode
771        parm_ich                  ich    IC   insert #1 characters
772                                              (P*)
773        parm_index                indn   SF   scroll forward #1
774                                              lines (P)
775        parm_insert_line          il     AL   insert #1 lines (P*)
776        parm_left_cursor          cub    LE   move #1 characters
777                                              to the left (P)
778        parm_left_micro           mcub   Zg   Like parm_left_cur-
779                                              sor in micro mode
780        parm_right_cursor         cuf    RI   move #1 characters
781                                              to the right (P*)
782        parm_right_micro          mcuf   Zh   Like parm_right_cur-
783                                              sor in micro mode
784        parm_rindex               rin    SR   scroll back #1 lines
785                                              (P)
786        parm_up_cursor            cuu    UP   up #1 lines (P*)
787        parm_up_micro             mcuu   Zi   Like parm_up_cursor
788                                              in micro mode
789        pkey_key                  pfkey  pk   program function key
790                                              #1 to type string #2
791
792
793        pkey_local                pfloc  pl   program function key
794                                              #1 to execute string
795                                              #2
796        pkey_xmit                 pfx    px   program function key
797                                              #1 to transmit
798                                              string #2
799        plab_norm                 pln    pn   program label #1 to
800                                              show string #2
801        print_screen              mc0    ps   print contents of
802                                              screen
803        prtr_non                  mc5p   pO   turn on printer for
804                                              #1 bytes
805        prtr_off                  mc4    pf   turn off printer
806        prtr_on                   mc5    po   turn on printer
807        pulse                     pulse  PU   select pulse dialing
808        quick_dial                qdial  QD   dial number #1 with-
809                                              out checking
810        remove_clock              rmclk  RC   remove clock
811        repeat_char               rep    rp   repeat char #1 #2
812                                              times (P*)
813        req_for_input             rfi    RF   send next input char
814                                              (for ptys)
815        reset_1string             rs1    r1   reset string
816        reset_2string             rs2    r2   reset string
817        reset_3string             rs3    r3   reset string
818        reset_file                rf     rf   name of reset file
819        restore_cursor            rc     rc   restore cursor to
820                                              position of last
821                                              save_cursor
822        row_address               vpa    cv   vertical position #1
823                                              absolute (P)
824        save_cursor               sc     sc   save current cursor
825                                              position (P)
826        scroll_forward            ind    sf   scroll text up (P)
827        scroll_reverse            ri     sr   scroll text down (P)
828        select_char_set           scs    Zj   Select character
829                                              set, #1
830        set_attributes            sgr    sa   define video
831                                              attributes #1-#9
832                                              (PG9)
833        set_background            setb   Sb   Set background color
834                                              #1
835        set_bottom_margin         smgb   Zk   Set bottom margin at
836                                              current line
837        set_bottom_margin_parm    smgbp  Zl   Set bottom margin at
838                                              line #1 or (if smgtp
839                                              is not given) #2
840                                              lines from bottom
841        set_clock                 sclk   SC   set clock, #1 hrs #2
842                                              mins #3 secs
843        set_color_pair            scp    sp   Set current color
844                                              pair to #1
845        set_foreground            setf   Sf   Set foreground color
846                                              #1
847        set_left_margin           smgl   ML   set left soft margin
848                                              at current column.
849                                              See smgl. (ML is not
850                                              in BSD termcap).
851        set_left_margin_parm      smglp  Zm   Set left (right)
852                                              margin at column #1
853        set_right_margin          smgr   MR   set right soft mar-
854                                              gin at current col-
855                                              umn
856        set_right_margin_parm     smgrp  Zn   Set right margin at
857                                              column #1
858
859        set_tab                   hts    st   set a tab in every
860                                              row, current columns
861        set_top_margin            smgt   Zo   Set top margin at
862                                              current line
863        set_top_margin_parm       smgtp  Zp   Set top (bottom)
864                                              margin at row #1
865        set_window                wind   wi   current window is
866                                              lines #1-#2 cols
867                                              #3-#4
868        start_bit_image           sbim   Zq   Start printing bit
869                                              image graphics
870        start_char_set_def        scsd   Zr   Start character set
871                                              definition #1, with
872                                              #2 characters in the
873                                              set
874        stop_bit_image            rbim   Zs   Stop printing bit
875                                              image graphics
876        stop_char_set_def         rcsd   Zt   End definition of
877                                              character set #1
878        subscript_characters      subcs  Zu   List of subscript-
879                                              able characters
880        superscript_characters    supcs  Zv   List of superscript-
881                                              able characters
882        tab                       ht     ta   tab to next 8-space
883                                              hardware tab stop
884        these_cause_cr            docr   Zw   Printing any of
885                                              these characters
886                                              causes CR
887        to_status_line            tsl    ts   move to status line,
888                                              column #1
889        tone                      tone   TO   select touch tone
890                                              dialing
891        underline_char            uc     uc   underline char and
892                                              move past it
893        up_half_line              hu     hu   half a line up
894        user0                     u0     u0   User string #0
895        user1                     u1     u1   User string #1
896        user2                     u2     u2   User string #2
897        user3                     u3     u3   User string #3
898        user4                     u4     u4   User string #4
899        user5                     u5     u5   User string #5
900        user6                     u6     u6   User string #6
901        user7                     u7     u7   User string #7
902        user8                     u8     u8   User string #8
903        user9                     u9     u9   User string #9
904        wait_tone                 wait   WA   wait for dial-tone
905        xoff_character            xoffc  XF   XOFF character
906        xon_character             xonc   XN   XON character
907        zero_motion               zerom  Zx   No motion for subse-
908                                              quent character
909
910        The following  string  capabilities  are  present  in  the
911        SVr4.0  term structure, but were originally not documented
912        in the man page.
913
914
915                <STRONG>Variable</STRONG>          <STRONG>Cap-</STRONG>     <STRONG>TCap</STRONG>    <STRONG>Description</STRONG>
916                 <STRONG>String</STRONG>           <STRONG>name</STRONG>     <STRONG>Code</STRONG>
917        alt_scancode_esc          scesa    S8   Alternate escape
918                                                for scancode emu-
919                                                lation
920        bit_image_carriage_return bicr     Yv   Move to beginning
921                                                of same row
922        bit_image_newline         binel    Zz   Move to next row
923                                                of the bit image
924
925        bit_image_repeat          birep    Xy   Repeat bit image
926                                                cell #1 #2 times
927        char_set_names            csnm     Zy   Produce #1'th item
928                                                from list of char-
929                                                acter set names
930        code_set_init             csin     ci   Init sequence for
931                                                multiple codesets
932        color_names               colornm  Yw   Give name for
933                                                color #1
934        define_bit_image_region   defbi    Yx   Define rectan-
935                                                gualar bit image
936                                                region
937        device_type               devt     dv   Indicate lan-
938                                                guage/codeset sup-
939                                                port
940        display_pc_char           dispc    S1   Display PC charac-
941                                                ter #1
942        end_bit_image_region      endbi    Yy   End a bit-image
943                                                region
944        enter_pc_charset_mode     smpch    S2   Enter PC character
945                                                display mode
946        enter_scancode_mode       smsc     S4   Enter PC scancode
947                                                mode
948        exit_pc_charset_mode      rmpch    S3   Exit PC character
949                                                display mode
950        exit_scancode_mode        rmsc     S5   Exit PC scancode
951                                                mode
952        get_mouse                 getm     Gm   Curses should get
953                                                button events,
954                                                parameter #1 not
955                                                documented.
956        key_mouse                 kmous    Km   Mouse event has
957                                                occurred
958        mouse_info                minfo    Mi   Mouse status
959                                                information
960        pc_term_options           pctrm    S6   PC terminal
961                                                options
962        pkey_plab                 pfxl     xl   Program function
963                                                key #1 to type
964                                                string #2 and show
965                                                string #3
966        req_mouse_pos             reqmp    RQ   Request mouse
967                                                position
968        scancode_escape           scesc    S7   Escape for scan-
969                                                code emulation
970        set0_des_seq              s0ds     s0   Shift to codeset 0
971                                                (EUC set 0, ASCII)
972        set1_des_seq              s1ds     s1   Shift to codeset 1
973        set2_des_seq              s2ds     s2   Shift to codeset 2
974        set3_des_seq              s3ds     s3   Shift to codeset 3
975        set_a_background          setab    AB   Set background
976                                                color to #1, using
977                                                ANSI escape
978        set_a_foreground          setaf    AF   Set foreground
979                                                color to #1, using
980                                                ANSI escape
981        set_color_band            setcolor Yz   Change to ribbon
982                                                color #1
983        set_lr_margin             smglr    ML   Set both left and
984                                                right margins to
985                                                #1, #2.  (ML is
986                                                not in BSD term-
987                                                cap).
988        set_page_length           slines   YZ   Set page length to
989                                                #1 lines
990
991        set_tb_margin             smgtb    MT   Sets both top and
992                                                bottom margins to
993                                                #1, #2
994
995         The  XSI  Curses  standard added these hardcopy capabili-
996         ties.  They were used in some post-4.1 versions of System
997         V curses, e.g., Solaris 2.5 and IRIX 6.x.  Except for <STRONG>YI</STRONG>,
998         the <STRONG>ncurses</STRONG> termcap names for them are invented.  Accord-
999         ing  to  the  XSI  Curses  standard, they have no termcap
1000         names.  If your compiled terminfo entries use these, they
1001         may  not  be  binary-compatible  with  System  V terminfo
1002         entries after SVr4.1; beware!
1003
1004
1005                 <STRONG>Variable</STRONG>         <STRONG>Cap-</STRONG>   <STRONG>TCap</STRONG>     <STRONG>Description</STRONG>
1006                  <STRONG>String</STRONG>          <STRONG>name</STRONG>   <STRONG>Code</STRONG>
1007         enter_horizontal_hl_mode ehhlm  Xh   Enter horizontal
1008                                              highlight mode
1009         enter_left_hl_mode       elhlm  Xl   Enter left highlight
1010                                              mode
1011         enter_low_hl_mode        elohlm Xo   Enter low highlight
1012                                              mode
1013         enter_right_hl_mode      erhlm  Xr   Enter right high-
1014                                              light mode
1015         enter_top_hl_mode        ethlm  Xt   Enter top highlight
1016                                              mode
1017         enter_vertical_hl_mode   evhlm  Xv   Enter vertical high-
1018                                              light mode
1019         set_a_attributes         sgr1   sA   Define second set of
1020                                              video attributes
1021                                              #1-#6
1022         set_pglen_inch           slengthYI   Set page length to
1023                                              #1 hundredth of an
1024                                              inch (some implemen-
1025                                              tations use sL for
1026                                              termcap).
1027
1028
1029 </PRE>
1030 <H3><a name="h3-User-Defined-Capabilities">User-Defined Capabilities</a></H3><PRE>
1031        The preceding section listed the <EM>predefined</EM>  capabilities.
1032        They  deal  with  some  special  features for terminals no
1033        longer (or possibly never) produced.   Occasionally  there
1034        are  special features of newer terminals which are awkward
1035        or impossible to represent by reusing the predefined capa-
1036        bilities.
1037
1038        <STRONG>ncurses</STRONG> addresses this limitation by allowing user-defined
1039        capabilities.  The <STRONG>tic</STRONG> and <STRONG>infocmp</STRONG> programs provide the <STRONG>-x</STRONG>
1040        option  for  this  purpose.   When  <STRONG>-x</STRONG>  is set, <STRONG>tic</STRONG> treats
1041        unknown capabilities as user-defined.   That  is,  if  <STRONG>tic</STRONG>
1042        encounters  a capability name which it does not recognize,
1043        it infers its type (boolean, number or  string)  from  the
1044        syntax and makes an extended table entry for that capabil-
1045        ity.  The <STRONG>use_extended_names</STRONG> function makes this  informa-
1046        tion conditionally available to applications.  The ncurses
1047        library provides the data leaving most of the behavior  to
1048        applications:
1049
1050        <STRONG>o</STRONG>   User-defined capability strings whose name begins with
1051            "k" are treated as function keys.
1052
1053        <STRONG>o</STRONG>   The types (boolean, number, string) determined by  <STRONG>tic</STRONG>
1054            can be inferred by successful calls on <STRONG>tigetflag</STRONG>, etc.
1055
1056        <STRONG>o</STRONG>   If  the  capability name happens to be two characters,
1057            the capability is also available through  the  termcap
1058            interface.
1059
1060        While termcap is said to be extensible because it does not
1061        use a predefined set of capabilities, in practice  it  has
1062        been  limited  to  the  capabilities  defined  by terminfo
1063        implementations.  As  a  rule,  user-defined  capabilities
1064        intended for use by termcap applications should be limited
1065        to booleans and numbers to avoid  running  past  the  1023
1066        byte  limit  assumed  by termcap implementations and their
1067        applications.  In particular, providing extended  sets  of
1068        function  keys  (past the 60 numbered keys and the handful
1069        of special named keys) is best done using the longer names
1070        available using terminfo.
1071
1072
1073 </PRE>
1074 <H3><a name="h3-A-Sample-Entry">A Sample Entry</a></H3><PRE>
1075        The following entry, describing an ANSI-standard terminal,
1076        is representative of what a <STRONG>terminfo</STRONG> entry  for  a  modern
1077        terminal typically looks like.
1078
1079        ansi|ansi/pc-term compatible with color,
1080                am, mc5i, mir, msgr,
1081                colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
1082                acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260
1083                     j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303
1084                     u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
1085                bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
1086                cr=^M, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
1087                cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
1088                cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
1089                dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
1090                el1=\E[1K, home=\E[H, hpa=\E[%i%p1%dG, ht=\E[I, hts=\EH,
1091                ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J,
1092                indn=\E[%p1%dS, invis=\E[8m, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
1093                kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L,
1094                mc4=\E[4i, mc5=\E[5i, nel=\r\E[S, op=\E[39;49m,
1095                rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, rin=\E[%p1%dT,
1096                rmacs=\E[10m, rmpch=\E[10m, rmso=\E[m, rmul=\E[m,
1097                s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B,
1098                setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
1099                sgr=\E[0;10%?%p1%t;7%;
1100                           %?%p2%t;4%;
1101                           %?%p3%t;7%;
1102                           %?%p4%t;5%;
1103                           %?%p6%t;1%;
1104                           %?%p7%t;8%;
1105                           %?%p9%t;11%;m,
1106                sgr0=\E[0;10m, smacs=\E[11m, smpch=\E[11m, smso=\E[7m,
1107                smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
1108                u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,
1109
1110        Entries  may continue onto multiple lines by placing white
1111        space at the beginning of  each  line  except  the  first.
1112        Comments  may  be  included  on  lines beginning with "#".
1113        Capabilities in <EM>terminfo</EM> are of three types:
1114
1115        <STRONG>o</STRONG>   Boolean capabilities which indicate that the  terminal
1116            has some particular feature,
1117
1118        <STRONG>o</STRONG>   numeric  capabilities  giving the size of the terminal
1119            or the size of particular delays, and
1120
1121        <STRONG>o</STRONG>   string capabilities, which give a sequence  which  can
1122            be used to perform particular terminal operations.
1123
1124
1125 </PRE>
1126 <H3><a name="h3-Types-of-Capabilities">Types of Capabilities</a></H3><PRE>
1127        All  capabilities have names.  For instance, the fact that
1128        ANSI-standard terminals have <EM>automatic</EM> <EM>margins</EM>  (i.e.,  an
1129        automatic  return  and line-feed when the end of a line is
1130        reached) is indicated by the  capability  <STRONG>am</STRONG>.   Hence  the
1131        description of ansi includes <STRONG>am</STRONG>.  Numeric capabilities are
1132        followed by the character "#" and then a  positive  value.
1133        Thus  <STRONG>cols</STRONG>, which indicates the number of columns the ter-
1134        minal has, gives the value  "80"  for  ansi.   Values  for
1135        numeric capabilities may be specified in decimal, octal or
1136        hexadecimal, using the C programming language  conventions
1137        (e.g., 255, 0377 and 0xff or 0xFF).
1138
1139        Finally,  string valued capabilities, such as <STRONG>el</STRONG> (clear to
1140        end of line sequence) are given by the two-character code,
1141        an  "=",  and  then  a string ending at the next following
1142        ",".
1143
1144        A number of escape sequences are provided  in  the  string
1145        valued capabilities for easy encoding of characters there.
1146        Both <STRONG>\E</STRONG> and <STRONG>\e</STRONG> map to an ESCAPE character, <STRONG>^x</STRONG>  maps  to  a
1147        control-x  for  any appropriate x, and the sequences <STRONG>\n</STRONG> <STRONG>\l</STRONG>
1148        <STRONG>\r</STRONG> <STRONG>\t</STRONG> <STRONG>\b</STRONG> <STRONG>\f</STRONG> <STRONG>\s</STRONG> give a  newline,  line-feed,  return,  tab,
1149        backspace, form-feed, and space.  Other escapes include
1150
1151        <STRONG>o</STRONG>   <STRONG>\^</STRONG> for <STRONG>^</STRONG>,
1152
1153        <STRONG>o</STRONG>   <STRONG>\\</STRONG> for <STRONG>\</STRONG>,
1154
1155        <STRONG>o</STRONG>   <STRONG>\</STRONG>, for comma,
1156
1157        <STRONG>o</STRONG>   <STRONG>\:</STRONG> for <STRONG>:</STRONG>,
1158
1159        <STRONG>o</STRONG>   and <STRONG>\0</STRONG> for null.
1160
1161            <STRONG>\0</STRONG>  will  produce  \200,  which  does  not terminate a
1162            string but behaves as a null character on most  termi-
1163            nals, providing CS7 is specified.  See <STRONG>stty(1)</STRONG>.
1164
1165            The  reason  for this quirk is to maintain binary com-
1166            patibility of the compiled terminfo files  with  other
1167            implementations,  e.g.,  the SVr4 systems, which docu-
1168            ment this.  Compiled terminfo  files  use  null-termi-
1169            nated  strings, with no lengths.  Modifying this would
1170            require a new binary format, which would not work with
1171            other implementations.
1172
1173        Finally,  characters  may  be  given as three octal digits
1174        after a <STRONG>\</STRONG>.
1175
1176        A delay in milliseconds may appear anywhere  in  a  string
1177        capability,  enclosed in $&lt;..&gt; brackets, as in <STRONG>el</STRONG>=\EK$&lt;5&gt;,
1178        and padding characters are supplied by  <EM>tputs</EM>  to  provide
1179        this  delay.   The delay must be a number with at most one
1180        decimal place of precision; it may be followed by suffixes
1181        "*"  or  "/"  or  both.   A "*" indicates that the padding
1182        required is proportional to the number of  lines  affected
1183        by  the  operation,  and  the  amount  given  is  the per-
1184        affected-unit padding required.  (In the  case  of  insert
1185        character,  the  factor  is  still  the  number  of  <EM>lines</EM>
1186        affected.)  Normally, padding is advisory  if  the  device
1187        has  the  <STRONG>xon</STRONG>  capability; it is used for cost computation
1188        but does not trigger delays.  A "/" suffix indicates  that
1189        the  padding  is mandatory and forces a delay of the given
1190        number of milliseconds even on devices for  which  <STRONG>xon</STRONG>  is
1191        present to indicate flow control.
1192
1193        Sometimes  individual  capabilities must be commented out.
1194        To do this, put a period before the capability name.   For
1195        example, see the second <STRONG>ind</STRONG> in the example above.
1196
1197
1198 </PRE>
1199 <H3><a name="h3-Fetching-Compiled-Descriptions">Fetching Compiled Descriptions</a></H3><PRE>
1200        The  <STRONG>ncurses</STRONG> library searches for terminal descriptions in
1201        several places.  It uses only the first description found.
1202        The  library  has  a  compiled-in list of places to search
1203        which can be overridden by environment variables.   Before
1204        starting  to  search, <STRONG>ncurses</STRONG> eliminates duplicates in its
1205        search list.
1206
1207        <STRONG>o</STRONG>   If the environment variable TERMINFO  is  set,  it  is
1208            interpreted  as the pathname of a directory containing
1209            the compiled description you  are  working  on.   Only
1210            that directory is searched.
1211
1212        <STRONG>o</STRONG>   If  TERMINFO  is not set, <STRONG>ncurses</STRONG> will instead look in
1213            the directory <STRONG>$HOME/.terminfo</STRONG> for a compiled  descrip-
1214            tion.
1215
1216        <STRONG>o</STRONG>   Next,  if  the  environment  variable TERMINFO_DIRS is
1217            set, <STRONG>ncurses</STRONG> will interpret the contents of that vari-
1218            able  as  a  list  of  colon-separated directories (or
1219            database files) to be searched.
1220
1221            An empty directory name (i.e., if the variable  begins
1222            or  ends  with a colon, or contains adacent colons) is
1223            interpreted as  the  system  location  <EM>/usr/share/ter-</EM>
1224            <EM>minfo</EM>.
1225
1226        <STRONG>o</STRONG>   Finally, <STRONG>ncurses</STRONG> searches these compiled-in locations:
1227
1228            <STRONG>o</STRONG>   a           list           of          directories
1229                (/usr/local/ncurses/share/terminfo:/usr/share/ter-
1230                minfo), and
1231
1232            <STRONG>o</STRONG>   the system terminfo directory, <EM>/usr/share/terminfo</EM>
1233                (the compiled-in default).
1234
1235
1236 </PRE>
1237 <H3><a name="h3-Preparing-Descriptions">Preparing Descriptions</a></H3><PRE>
1238        We now outline how to prepare descriptions  of  terminals.
1239        The  most  effective way to prepare a terminal description
1240        is by imitating the description of a similar  terminal  in
1241        <EM>terminfo</EM>  and  to  build up a description gradually, using
1242        partial descriptions with <EM>vi</EM> or some other screen-oriented
1243        program  to  check that they are correct.  Be aware that a
1244        very unusual terminal may expose deficiencies in the abil-
1245        ity  of  the  <EM>terminfo</EM>  file to describe it or bugs in the
1246        screen-handling code of the test program.
1247
1248        To get the padding for insert line right (if the  terminal
1249        manufacturer did not document it) a severe test is to edit
1250        a large file at 9600 baud, delete 16 or so lines from  the
1251        middle  of  the screen, then hit the "u" key several times
1252        quickly.  If the terminal messes up, more padding is  usu-
1253        ally  needed.  A similar test can be used for insert char-
1254        acter.
1255
1256
1257 </PRE>
1258 <H3><a name="h3-Basic-Capabilities">Basic Capabilities</a></H3><PRE>
1259        The number of columns on each line  for  the  terminal  is
1260        given  by the <STRONG>cols</STRONG> numeric capability.  If the terminal is
1261        a CRT, then the number of lines on the screen is given  by
1262        the <STRONG>lines</STRONG> capability.  If the terminal wraps around to the
1263        beginning of the next line when it reaches the right  mar-
1264        gin, then it should have the <STRONG>am</STRONG> capability.  If the termi-
1265        nal can clear its screen, leaving the cursor in  the  home
1266        position,  then this is given by the <STRONG>clear</STRONG> string capabil-
1267        ity.  If the terminal overstrikes (rather than clearing  a
1268        position  when  a character is struck over) then it should
1269        have the <STRONG>os</STRONG> capability.  If the  terminal  is  a  printing
1270        terminal,  with no soft copy unit, give it both <STRONG>hc</STRONG> and <STRONG>os</STRONG>.
1271        (<STRONG>os</STRONG> applies to storage scope terminals, such as  TEKTRONIX
1272        4010  series, as well as hard copy and APL terminals.)  If
1273        there is a code to move the cursor to the left edge of the
1274        current row, give this as <STRONG>cr</STRONG>.  (Normally this will be car-
1275        riage return, control M.)  If there is a code  to  produce
1276        an audible signal (bell, beep, etc) give this as <STRONG>bel</STRONG>.
1277
1278        If  there is a code to move the cursor one position to the
1279        left (such as backspace) that capability should  be  given
1280        as  <STRONG>cub1</STRONG>.   Similarly, codes to move to the right, up, and
1281        down should be given as <STRONG>cuf1</STRONG>, <STRONG>cuu1</STRONG>, and <STRONG>cud1</STRONG>.  These local
1282        cursor  motions  should not alter the text they pass over,
1283        for example, you would not normally use  "<STRONG>cuf1</STRONG>= "  because
1284        the space would erase the character moved over.
1285
1286        A  very  important  point  here  is  that the local cursor
1287        motions encoded in <EM>terminfo</EM> are undefined at the left  and
1288        top  edges  of  a  CRT  terminal.   Programs  should never
1289        attempt to backspace around the left edge,  unless  <STRONG>bw</STRONG>  is
1290        given, and never attempt to go up locally off the top.  In
1291        order to scroll text up, a program will go to  the  bottom
1292        left corner of the screen and send the <STRONG>ind</STRONG> (index) string.
1293
1294        To scroll text down, a program goes to the top left corner
1295        of the screen and sends the  <STRONG>ri</STRONG>  (reverse  index)  string.
1296        The  strings  <STRONG>ind</STRONG>  and  <STRONG>ri</STRONG> are undefined when not on their
1297        respective corners of the screen.
1298
1299        Parameterized versions of the scrolling sequences are <STRONG>indn</STRONG>
1300        and <STRONG>rin</STRONG> which have the same semantics as <STRONG>ind</STRONG> and <STRONG>ri</STRONG> except
1301        that they take one parameter, and scroll that many  lines.
1302        They  are also undefined except at the appropriate edge of
1303        the screen.
1304
1305        The <STRONG>am</STRONG> capability tells whether the cursor sticks  at  the
1306        right  edge  of  the  screen when text is output, but this
1307        does not necessarily apply to a <STRONG>cuf1</STRONG> from the last column.
1308        The  only local motion which is defined from the left edge
1309        is if <STRONG>bw</STRONG> is given, then a <STRONG>cub1</STRONG> from  the  left  edge  will
1310        move  to the right edge of the previous row.  If <STRONG>bw</STRONG> is not
1311        given, the effect is undefined.  This is useful for  draw-
1312        ing  a box around the edge of the screen, for example.  If
1313        the terminal has switch selectable automatic margins,  the
1314        <EM>terminfo</EM>  file  usually assumes that this is on; i.e., <STRONG>am</STRONG>.
1315        If the terminal has a command which  moves  to  the  first
1316        column  of the next line, that command can be given as <STRONG>nel</STRONG>
1317        (newline).  It does not matter if the command  clears  the
1318        remainder  of  the current line, so if the terminal has no
1319        <STRONG>cr</STRONG> and <STRONG>lf</STRONG> it may still be possible to craft a working  <STRONG>nel</STRONG>
1320        out of one or both of them.
1321
1322        These  capabilities  suffice  to  describe  hard-copy  and
1323        "glass-tty" terminals.  Thus  the  model  33  teletype  is
1324        described as
1325
1326        33|tty33|tty|model 33 teletype,
1327                bel=^G, cols#72, cr=^M, cud1=^J, hc, ind=^J, os,
1328
1329        while the Lear Siegler ADM-3 is described as
1330
1331        adm3|3|lsi adm3,
1332                am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J,
1333                ind=^J, lines#24,
1334
1335
1336 </PRE>
1337 <H3><a name="h3-Parameterized-Strings">Parameterized Strings</a></H3><PRE>
1338        Cursor  addressing  and other strings requiring parameters
1339        in the terminal are described by  a  parameterized  string
1340        capability,  with  <EM>printf</EM>-like  escapes  such as <EM>%x</EM> in it.
1341        For example, to address the cursor, the <STRONG>cup</STRONG> capability  is
1342        given, using two parameters: the row and column to address
1343        to.  (Rows and columns are numbered from zero and refer to
1344        the physical screen visible to the user, not to any unseen
1345        memory.)  If  the  terminal  has  memory  relative  cursor
1346        addressing, that can be indicated by <STRONG>mrcup</STRONG>.
1347
1348        The  parameter  mechanism uses a stack and special <STRONG>%</STRONG> codes
1349        to manipulate it.  Typically a sequence will push  one  of
1350        the  parameters  onto  the stack and then print it in some
1351        format.  Print (e.g., "%d")  is  a  special  case.   Other
1352        operations,  including  "%t"  pop  their  operand from the
1353        stack.  It is noted that more complex operations are often
1354        necessary, e.g., in the <STRONG>sgr</STRONG> string.
1355
1356        The <STRONG>%</STRONG> encodings have the following meanings:
1357
1358        <STRONG>%%</STRONG>   outputs "%"
1359
1360        <STRONG>%</STRONG><EM>[[</EM>:<EM>]flags][width[.precision]][</EM><STRONG>doxXs</STRONG><EM>]</EM>
1361             as  in  <STRONG>printf</STRONG>, flags are <EM>[-+#]</EM> and <EM>space</EM>.  Use a ":"
1362             to allow the next character to be a "-" flag,  avoid-
1363             ing interpreting "%-" as an operator.
1364
1365        %c   print pop() like %c in <STRONG>printf</STRONG>
1366
1367        <STRONG>%s</STRONG>   print pop() like %s in <STRONG>printf</STRONG>
1368
1369        <STRONG>%p</STRONG><EM>[1-9]</EM>
1370             push <EM>i</EM>'th parameter
1371
1372        <STRONG>%P</STRONG><EM>[a-z]</EM>
1373             set dynamic variable <EM>[a-z]</EM> to pop()
1374
1375        <STRONG>%g</STRONG><EM>[a-z]/</EM>
1376             get dynamic variable <EM>[a-z]</EM> and push it
1377
1378        <STRONG>%P</STRONG><EM>[A-Z]</EM>
1379             set static variable <EM>[a-z]</EM> to <EM>pop()</EM>
1380
1381        <STRONG>%g</STRONG><EM>[A-Z]</EM>
1382             get static variable <EM>[a-z]</EM> and push it
1383
1384             The  terms  "static"  and  "dynamic"  are misleading.
1385             Historically, these are simply two different sets  of
1386             variables,  whose  values are not reset between calls
1387             to <STRONG>tparm</STRONG>.  However, that fact is  not  documented  in
1388             other  implementations.  Relying on it will adversely
1389             impact portability to other implementations.
1390
1391        <STRONG>%'</STRONG><EM>c</EM><STRONG>'</STRONG> char constant <EM>c</EM>
1392
1393        <STRONG>%{</STRONG><EM>nn</EM><STRONG>}</STRONG>
1394             integer constant <EM>nn</EM>
1395
1396        <STRONG>%l</STRONG>   push strlen(pop)
1397
1398        <STRONG>%+</STRONG>, <STRONG>%-</STRONG>, <STRONG>%*</STRONG>, <STRONG>%/</STRONG>, <STRONG>%m</STRONG>
1399             arithmetic (%m is mod): <EM>push(pop()</EM> <EM>op</EM> <EM>pop())</EM>
1400
1401        <STRONG>%&amp;</STRONG>, <STRONG>%|</STRONG>, <STRONG>%^</STRONG>
1402             bit operations (AND, OR and exclusive-OR): <EM>push(pop()</EM>
1403             <EM>op</EM> <EM>pop())</EM>
1404
1405        <STRONG>%=</STRONG>, <STRONG>%&gt;</STRONG>, <STRONG>%&lt;</STRONG>
1406             logical operations: <EM>push(pop()</EM> <EM>op</EM> <EM>pop())</EM>
1407
1408        <STRONG>%A</STRONG>, <STRONG>%O</STRONG>
1409             logical AND and OR operations (for conditionals)
1410
1411        <STRONG>%!</STRONG>, <STRONG>%~</STRONG>
1412             unary   operations   (logical  and  bit  complement):
1413             push(op pop())
1414
1415        <STRONG>%i</STRONG>   add 1 to first two parameters (for ANSI terminals)
1416
1417        <STRONG>%?</STRONG> <EM>expr</EM> <STRONG>%t</STRONG> <EM>thenpart</EM> <STRONG>%e</STRONG> <EM>elsepart</EM> <STRONG>%;</STRONG>
1418             This forms  an  if-then-else.   The  <STRONG>%e</STRONG>  <EM>elsepart</EM>  is
1419             optional.   Usually  the  <STRONG>%?</STRONG> <EM>expr</EM> part pushes a value
1420             onto the stack, and <STRONG>%t</STRONG> pops it from the stack,  test-
1421             ing  if it is nonzero (true).  If it is zero (false),
1422             control passes to the <STRONG>%e</STRONG> (else) part.
1423
1424             It is possible to form else-if's a la Algol 68:
1425             <STRONG>%?</STRONG> c1 <STRONG>%t</STRONG> b1 <STRONG>%e</STRONG> c2 <STRONG>%t</STRONG> b2 <STRONG>%e</STRONG> c3 <STRONG>%t</STRONG> b3 <STRONG>%e</STRONG> c4 <STRONG>%t</STRONG> b4 <STRONG>%e</STRONG> <STRONG>%;</STRONG>
1426
1427             where ci are conditions, bi are bodies.
1428
1429             Use the <STRONG>-f</STRONG> option of <STRONG>tic</STRONG> or <STRONG>infocmp</STRONG> to see the struc-
1430             ture  of if-then-else's.  Some strings, e.g., <STRONG>sgr</STRONG> can
1431             be very complicated when written on one line.  The <STRONG>-f</STRONG>
1432             option  splits  the  string into lines with the parts
1433             indented.
1434
1435        Binary operations are in postfix form with the operands in
1436        the  usual  order.   That  is,  to  get  x-5 one would use
1437        "%gx%{5}%-".  <STRONG>%P</STRONG> and <STRONG>%g</STRONG> variables  are  persistent  across
1438        escape-string evaluations.
1439
1440        Consider the HP2645, which, to get to row 3 and column 12,
1441        needs to be sent \E&amp;a12c03Y  padded  for  6  milliseconds.
1442        Note  that  the  order of the rows and columns is inverted
1443        here, and that the row and column are printed as two  dig-
1444        its.  Thus its <STRONG>cup</STRONG> capability is "cup=6\E&amp;%p2%2dc%p1%2dY".
1445
1446        The Microterm ACT-IV needs the current row and column sent
1447        preceded by a <STRONG>^T</STRONG>, with the row and column  simply  encoded
1448        in  binary,  "cup=^T%p1%c%p2%c".  Terminals which use "%c"
1449        need to be able to backspace the  cursor  (<STRONG>cub1</STRONG>),  and  to
1450        move the cursor up one line on the screen (<STRONG>cuu1</STRONG>).  This is
1451        necessary because it is not always safe to transmit <STRONG>\n</STRONG>  <STRONG>^D</STRONG>
1452        and  <STRONG>\r</STRONG>,  as  the system may change or discard them.  (The
1453        library routines dealing with terminfo set  tty  modes  so
1454        that tabs are never expanded, so \t is safe to send.  This
1455        turns out to be essential for the Ann Arbor 4080.)
1456
1457        A final example is the LSI ADM-3a, which uses row and col-
1458        umn  offset  by  a  blank  character,  thus  "cup=\E=%p1%'
1459        '%+%c%p2%' '%+%c".  After sending "\E=", this  pushes  the
1460        first  parameter, pushes the ASCII value for a space (32),
1461        adds them (pushing the sum on the stack in  place  of  the
1462        two  previous  values) and outputs that value as a charac-
1463        ter.  Then the same is  done  for  the  second  parameter.
1464        More complex arithmetic is possible using the stack.
1465
1466
1467 </PRE>
1468 <H3><a name="h3-Cursor-Motions">Cursor Motions</a></H3><PRE>
1469        If the terminal has a fast way to home the cursor (to very
1470        upper left corner of screen) then this  can  be  given  as
1471        <STRONG>home</STRONG>;  similarly  a fast way of getting to the lower left-
1472        hand corner can be given as <STRONG>ll</STRONG>; this may involve going  up
1473        with  <STRONG>cuu1</STRONG>  from  the  home position, but a program should
1474        never do this itself (unless <STRONG>ll</STRONG> does) because it can  make
1475        no  assumption about the effect of moving up from the home
1476        position.  Note that the home  position  is  the  same  as
1477        addressing to (0,0): to the top left corner of the screen,
1478        not of memory.  (Thus, the \EH sequence  on  HP  terminals
1479        cannot be used for <STRONG>home</STRONG>.)
1480
1481        If the terminal has row or column absolute cursor address-
1482        ing, these can be given as single  parameter  capabilities
1483        <STRONG>hpa</STRONG> (horizontal position absolute) and <STRONG>vpa</STRONG> (vertical posi-
1484        tion absolute).  Sometimes these are shorter than the more
1485        general  two  parameter  sequence (as with the hp2645) and
1486        can be used in preference to <STRONG>cup</STRONG>.  If there are parameter-
1487        ized  local  motions  (e.g.,  move  <EM>n</EM> spaces to the right)
1488        these can be given as <STRONG>cud</STRONG>, <STRONG>cub</STRONG>, <STRONG>cuf</STRONG>, and <STRONG>cuu</STRONG> with a single
1489        parameter  indicating  how many spaces to move.  These are
1490        primarily useful if the terminal does not have  <STRONG>cup</STRONG>,  such
1491        as the TEKTRONIX 4025.
1492
1493        If the terminal needs to be in a special mode when running
1494        a program that uses these capabilities, the codes to enter
1495        and  exit this mode can be given as <STRONG>smcup</STRONG> and <STRONG>rmcup</STRONG>.  This
1496        arises, for example, from terminals like the Concept  with
1497        more  than  one  page of memory.  If the terminal has only
1498        memory relative cursor addressing and not screen  relative
1499        cursor addressing, a one screen-sized window must be fixed
1500        into the terminal for cursor addressing to work  properly.
1501        This is also used for the TEKTRONIX 4025, where <STRONG>smcup</STRONG> sets
1502        the command character to be the one used by terminfo.   If
1503        the  <STRONG>smcup</STRONG>  sequence  will not restore the screen after an
1504        <STRONG>rmcup</STRONG> sequence is output (to the state prior to outputting
1505        <STRONG>rmcup</STRONG>), specify <STRONG>nrrmc</STRONG>.
1506
1507
1508 </PRE>
1509 <H3><a name="h3-Area-Clears">Area Clears</a></H3><PRE>
1510        If the terminal can clear from the current position to the
1511        end of the line, leaving the  cursor  where  it  is,  this
1512        should be given as <STRONG>el</STRONG>.  If the terminal can clear from the
1513        beginning of the line to the current  position  inclusive,
1514        leaving  the  cursor  where it is, this should be given as
1515        <STRONG>el1</STRONG>.  If the terminal can clear from the current  position
1516        to  the  end  of the display, then this should be given as
1517        <STRONG>ed</STRONG>.  <STRONG>Ed</STRONG> is only defined from the first column of  a  line.
1518        (Thus,  it can be simulated by a request to delete a large
1519        number of lines, if a true <STRONG>ed</STRONG> is not available.)
1520
1521
1522 </PRE>
1523 <H3><a name="h3-Insert_delete-line-and-vertical-motions">Insert/delete line and vertical motions</a></H3><PRE>
1524        If the terminal can open a new blank line before the  line
1525        where  the cursor is, this should be given as <STRONG>il1</STRONG>; this is
1526        done only from the first position of a line.   The  cursor
1527        must then appear on the newly blank line.  If the terminal
1528        can delete the line which the  cursor  is  on,  then  this
1529        should  be  given as <STRONG>dl1</STRONG>; this is done only from the first
1530        position on the line to be deleted.  Versions of  <STRONG>il1</STRONG>  and
1531        <STRONG>dl1</STRONG>  which  take  a  single parameter and insert or delete
1532        that many lines can be given as <STRONG>il</STRONG> and <STRONG>dl</STRONG>.
1533
1534        If the terminal has a settable scrolling region (like  the
1535        vt100)  the  command to set this can be described with the
1536        <STRONG>csr</STRONG> capability, which takes two parameters:  the  top  and
1537        bottom lines of the scrolling region.  The cursor position
1538        is, alas, undefined after using this command.
1539
1540        It is possible to get the effect of insert or delete  line
1541        using <STRONG>csr</STRONG> on a properly chosen region; the <STRONG>sc</STRONG> and <STRONG>rc</STRONG> (save
1542        and restore cursor) commands may be  useful  for  ensuring
1543        that  your  synthesized insert/delete string does not move
1544        the cursor.  (Note that the <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG> library does  this
1545        synthesis   automatically,   so   you   need  not  compose
1546        insert/delete strings for an entry with <STRONG>csr</STRONG>).
1547
1548        Yet another way to construct insert and delete might be to
1549        use  a  combination  of index with the memory-lock feature
1550        found on some terminals (like the HP-700/90 series,  which
1551        however also has insert/delete).
1552
1553        Inserting  lines  at  the  top or bottom of the screen can
1554        also be done using <STRONG>ri</STRONG> or <STRONG>ind</STRONG> on many terminals  without  a
1555        true  insert/delete line, and is often faster even on ter-
1556        minals with those features.
1557
1558        The boolean <STRONG>non_dest_scroll_region</STRONG> should be set  if  each
1559        scrolling  window  is effectively a view port on a screen-
1560        sized canvas.  To  test  for  this  capability,  create  a
1561        scrolling  region in the middle of the screen, write some-
1562        thing to the bottom line, move the cursor to  the  top  of
1563        the region, and do <STRONG>ri</STRONG> followed by <STRONG>dl1</STRONG> or <STRONG>ind</STRONG>.  If the data
1564        scrolled off the bottom  of  the  region  by  the  <STRONG>ri</STRONG>  re-
1565        appears,  then scrolling is non-destructive.  System V and
1566        XSI Curses expect that <STRONG>ind</STRONG>, <STRONG>ri</STRONG>, <STRONG>indn</STRONG>, and <STRONG>rin</STRONG>  will  simu-
1567        late  destructive  scrolling; their documentation cautions
1568        you not to define <STRONG>csr</STRONG> unless this is  true.   This  <STRONG>curses</STRONG>
1569        implementation is more liberal and will do explicit erases
1570        after scrolling if <STRONG>ndstr</STRONG> is defined.
1571
1572        If the terminal has the ability to define a window as part
1573        of  memory,  which all commands affect, it should be given
1574        as the parameterized string <STRONG>wind</STRONG>.  The four parameters are
1575        the  starting  and ending lines in memory and the starting
1576        and ending columns in memory, in that order.
1577
1578        If the terminal can retain display memory above, then  the
1579        <STRONG>da</STRONG>  capability  should  be given; if display memory can be
1580        retained below, then <STRONG>db</STRONG> should be given.   These  indicate
1581        that  deleting  a  line  or  scrolling may bring non-blank
1582        lines up from below or that scrolling  back  with  <STRONG>ri</STRONG>  may
1583        bring down non-blank lines.
1584
1585
1586 </PRE>
1587 <H3><a name="h3-Insert_Delete-Character">Insert/Delete Character</a></H3><PRE>
1588        There  are  two  basic kinds of intelligent terminals with
1589        respect to insert/delete character which can be  described
1590        using  <EM>terminfo.</EM>   The most common insert/delete character
1591        operations affect only the characters on the current  line
1592        and  shift  characters  off  the  end of the line rigidly.
1593        Other terminals, such as the Concept 100  and  the  Perkin
1594        Elmer  Owl,  make  a distinction between typed and untyped
1595        blanks on the screen, shifting upon an  insert  or  delete
1596        only  to  an  untyped  blank on the screen which is either
1597        eliminated, or expanded to two untyped blanks.
1598
1599        You can determine the kind of terminal you have by  clear-
1600        ing  the  screen  and then typing text separated by cursor
1601        motions.  Type "abc    def"  using  local  cursor  motions
1602        (not  spaces) between the "abc" and the "def".  Then posi-
1603        tion the cursor before the "abc" and put the  terminal  in
1604        insert  mode.  If typing characters causes the rest of the
1605        line to shift rigidly and characters to fall off the  end,
1606        then your terminal does not distinguish between blanks and
1607        untyped positions.  If the "abc" shifts over to the  "def"
1608        which  then  move  together  around the end of the current
1609        line and onto the next as you insert, you have the  second
1610        type of terminal, and should give the capability <STRONG>in</STRONG>, which
1611        stands for "insert null".
1612
1613        While these are two  logically  separate  attributes  (one
1614        line  versus multi-line insert mode, and special treatment
1615        of untyped spaces) we have seen no terminals whose  insert
1616        mode cannot be described with the single attribute.
1617
1618        Terminfo  can describe both terminals which have an insert
1619        mode, and terminals which send a simple sequence to open a
1620        blank  position  on  the  current  line.  Give as <STRONG>smir</STRONG> the
1621        sequence to get  into  insert  mode.   Give  as  <STRONG>rmir</STRONG>  the
1622        sequence  to  leave  insert  mode.   Now  give as <STRONG>ich1</STRONG> any
1623        sequence needed to be sent just before sending the charac-
1624        ter  to  be  inserted.   Most terminals with a true insert
1625        mode will not give <STRONG>ich1</STRONG>; terminals which send  a  sequence
1626        to open a screen position should give it here.
1627
1628        If  your terminal has both, insert mode is usually prefer-
1629        able to <STRONG>ich1</STRONG>.   Technically,  you  should  not  give  both
1630        unless  the  terminal actually requires both to be used in
1631        combination.  Accordingly,  some  non-curses  applications
1632        get  confused  if both are present; the symptom is doubled
1633        characters in an update using insert.  This requirement is
1634        now rare; most <STRONG>ich</STRONG> sequences do not require previous smir,
1635        and most smir insert modes do not require <STRONG>ich1</STRONG> before each
1636        character.   Therefore,  the  new  <STRONG>curses</STRONG> actually assumes
1637        this is the case and uses either <STRONG>rmir</STRONG>/<STRONG>smir</STRONG> or <STRONG>ich</STRONG>/<STRONG>ich1</STRONG>  as
1638        appropriate (but not both).  If you have to write an entry
1639        to be used under new curses for a terminal old  enough  to
1640        need both, include the <STRONG>rmir</STRONG>/<STRONG>smir</STRONG> sequences in <STRONG>ich1</STRONG>.
1641
1642        If post insert padding is needed, give this as a number of
1643        milliseconds in <STRONG>ip</STRONG> (a string option).  Any other  sequence
1644        which  may  need  to  be  sent after an insert of a single
1645        character may also be given in <STRONG>ip</STRONG>.  If your terminal needs
1646        both to be placed into an "insert mode" and a special code
1647        to precede each inserted character,  then  both  <STRONG>smir</STRONG>/<STRONG>rmir</STRONG>
1648        and  <STRONG>ich1</STRONG>  can  be  given, and both will be used.  The <STRONG>ich</STRONG>
1649        capability, with one parameter, <EM>n</EM>, will repeat the effects
1650        of <STRONG>ich1</STRONG> <EM>n</EM> times.
1651
1652        If padding is necessary between characters typed while not
1653        in insert mode, give this as a number of milliseconds pad-
1654        ding in <STRONG>rmp</STRONG>.
1655
1656        It  is  occasionally  necessary  to  move  around while in
1657        insert mode to delete characters on the same  line  (e.g.,
1658        if  there is a tab after the insertion position).  If your
1659        terminal allows motion while in insert mode you  can  give
1660        the  capability  <STRONG>mir</STRONG>  to  speed up inserting in this case.
1661        Omitting <STRONG>mir</STRONG>  will  affect  only  speed.   Some  terminals
1662        (notably Datamedia's) must not have <STRONG>mir</STRONG> because of the way
1663        their insert mode works.
1664
1665        Finally, you can specify <STRONG>dch1</STRONG> to delete a  single  charac-
1666        ter,  <STRONG>dch</STRONG>  with  one parameter, <EM>n</EM>, to delete <EM>n</EM> <EM>characters,</EM>
1667        and delete mode by giving <STRONG>smdc</STRONG> and <STRONG>rmdc</STRONG> to enter and  exit
1668        delete  mode  (any mode the terminal needs to be placed in
1669        for <STRONG>dch1</STRONG> to work).
1670
1671        A command to erase <EM>n</EM> characters (equivalent to  outputting
1672        <EM>n</EM>  blanks  without  moving the cursor) can be given as <STRONG>ech</STRONG>
1673        with one parameter.
1674
1675
1676 </PRE>
1677 <H3><a name="h3-Highlighting_-Underlining_-and-Visible-Bells">Highlighting, Underlining, and Visible Bells</a></H3><PRE>
1678        If  your  terminal  has  one  or  more  kinds  of  display
1679        attributes,  these  can be represented in a number of dif-
1680        ferent ways.  You should choose one display form as <EM>stand-</EM>
1681        <EM>out</EM> <EM>mode</EM>, representing a good, high contrast, easy-on-the-
1682        eyes, format for highlighting  error  messages  and  other
1683        attention  getters.   (If you have a choice, reverse video
1684        plus half-bright is good, or reverse  video  alone.)   The
1685        sequences  to  enter  and  exit standout mode are given as
1686        <STRONG>smso</STRONG> and <STRONG>rmso</STRONG>, respectively.  If the code to  change  into
1687        or  out of standout mode leaves one or even two blank spa-
1688        ces on the screen, as the TVI 912  and  Teleray  1061  do,
1689        then <STRONG>xmc</STRONG> should be given to tell how many spaces are left.
1690
1691        Codes  to  begin  underlining  and  end underlining can be
1692        given as <STRONG>smul</STRONG> and <STRONG>rmul</STRONG> respectively.  If the terminal  has
1693        a  code  to  underline  the current character and move the
1694        cursor one space to the right, such as the Microterm Mime,
1695        this can be given as <STRONG>uc</STRONG>.
1696
1697        Other  capabilities  to  enter  various highlighting modes
1698        include <STRONG>blink</STRONG> (blinking) <STRONG>bold</STRONG> (bold or extra  bright)  <STRONG>dim</STRONG>
1699        (dim  or  half-bright)  <STRONG>invis</STRONG> (blanking or invisible text)
1700        <STRONG>prot</STRONG> (protected) <STRONG>rev</STRONG> (reverse video) <STRONG>sgr0</STRONG>  (turn  off  <EM>all</EM>
1701        attribute  modes)  <STRONG>smacs</STRONG>  (enter  alternate  character set
1702        mode) and  <STRONG>rmacs</STRONG>  (exit  alternate  character  set  mode).
1703        Turning  on  any of these modes singly may or may not turn
1704        off other modes.
1705
1706        If there is a sequence to set  arbitrary  combinations  of
1707        modes,  this should be given as <STRONG>sgr</STRONG> (set attributes), tak-
1708        ing 9 parameters.  Each parameter is either 0 or  nonzero,
1709        as the corresponding attribute is on or off.  The 9 param-
1710        eters are, in order: standout, underline, reverse,  blink,
1711        dim,  bold,  blank, protect, alternate character set.  Not
1712        all modes need be supported by <STRONG>sgr</STRONG>, only those  for  which
1713        corresponding separate attribute commands exist.
1714
1715        For example, the DEC vt220 supports most of the modes:
1716
1717         <STRONG>tparm</STRONG> <STRONG>parameter</STRONG>      <STRONG>attribute</STRONG>        <STRONG>escape</STRONG> <STRONG>sequence</STRONG>
1718
1719         none                 none             \E[0m
1720         p1                   standout         \E[0;1;7m
1721         p2                   underline        \E[0;4m
1722         p3                   reverse          \E[0;7m
1723         p4                   blink            \E[0;5m
1724         p5                   dim              not available
1725         p6                   bold             \E[0;1m
1726         p7                   invis            \E[0;8m
1727         p8                   protect          not used
1728         p9                   altcharset       ^O (off) ^N (on)
1729
1730        We  begin each escape sequence by turning off any existing
1731        modes, since there is no quick way  to  determine  whether
1732        they are active.  Standout is set up to be the combination
1733        of reverse and bold.  The vt220  terminal  has  a  protect
1734        mode,  though  it  is  not commonly used in sgr because it
1735        protects characters on the screen  from  the  host's  era-
1736        sures.   The  altcharset mode also is different in that it
1737        is either ^O or ^N, depending on whether it is off or  on.
1738        If  all  modes  are  turned  on, the resulting sequence is
1739        \E[0;1;4;5;7;8m^N.
1740
1741        Some sequences are common to different modes.   For  exam-
1742        ple,  ;7  is output when either p1 or p3 is true, that is,
1743        if either standout or reverse modes are turned on.
1744
1745        Writing out the above sequences, along with  their  depen-
1746        dencies yields
1747
1748       <STRONG>sequence</STRONG>             <STRONG>when</STRONG> <STRONG>to</STRONG> <STRONG>output</STRONG>      <STRONG>terminfo</STRONG> <STRONG>translation</STRONG>
1749
1750       \E[0                 always              \E[0
1751       ;1                   if p1 or p6         %?%p1%p6%|%t;1%;
1752       ;4                   if p2               %?%p2%|%t;4%;
1753       ;5                   if p4               %?%p4%|%t;5%;
1754       ;7                   if p1 or p3         %?%p1%p3%|%t;7%;
1755       ;8                   if p7               %?%p7%|%t;8%;
1756       m                    always              m
1757       ^N or ^O             if p9 ^N, else ^O   %?%p9%t^N%e^O%;
1758
1759        Putting this all together into the sgr sequence gives:
1760
1761            sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p4%t;5%;
1762                %?%p1%p3%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
1763
1764        Remember  that  if  you specify sgr, you must also specify
1765        sgr0.  Also, some implementations rely on sgr being  given
1766        if  sgr0  is, Not all terminfo entries necessarily have an
1767        sgr string, however.  Many terminfo  entries  are  derived
1768        from  termcap  entries which have no sgr string.  The only
1769        drawback to adding an sgr  string  is  that  termcap  also
1770        assumes  that  sgr0  does not exit alternate character set
1771        mode.
1772
1773        Terminals with the "magic  cookie"  glitch  (<STRONG>xmc</STRONG>)  deposit
1774        special   "cookies"   when   they   receive   mode-setting
1775        sequences, which affect the display algorithm rather  than
1776        having  extra  bits  for  each character.  Some terminals,
1777        such as the HP 2621,  automatically  leave  standout  mode
1778        when  they  move to a new line or the cursor is addressed.
1779        Programs using standout mode  should  exit  standout  mode
1780        before  moving the cursor or sending a newline, unless the
1781        <STRONG>msgr</STRONG> capability, asserting that it  is  safe  to  move  in
1782        standout mode, is present.
1783
1784        If  the terminal has a way of flashing the screen to indi-
1785        cate an error quietly (a bell replacement) then  this  can
1786        be given as <STRONG>flash</STRONG>; it must not move the cursor.
1787
1788        If  the  cursor  needs to be made more visible than normal
1789        when it is not on the bottom line (to make, for example, a
1790        non-blinking  underline  into  an  easier to find block or
1791        blinking underline) give this sequence as <STRONG>cvvis</STRONG>.  If there
1792        is  a  way  to  make the cursor completely invisible, give
1793        that as <STRONG>civis</STRONG>.  The capability <STRONG>cnorm</STRONG> should be given which
1794        undoes the effects of both of these modes.
1795
1796        If your terminal correctly generates underlined characters
1797        (with no special codes needed) even  though  it  does  not
1798        overstrike,  then you should give the capability <STRONG>ul</STRONG>.  If a
1799        character overstriking another leaves both  characters  on
1800        the screen, specify the capability <STRONG>os</STRONG>.  If overstrikes are
1801        erasable with a blank, then this should  be  indicated  by
1802        giving <STRONG>eo</STRONG>.
1803
1804
1805 </PRE>
1806 <H3><a name="h3-Keypad-and-Function-Keys">Keypad and Function Keys</a></H3><PRE>
1807        If the terminal has a keypad that transmits codes when the
1808        keys are pressed, this information  can  be  given.   Note
1809        that it is not possible to handle terminals where the key-
1810        pad only works in local (this applies, for example, to the
1811        unshifted  HP  2621  keys).   If  the keypad can be set to
1812        transmit or not transmit, give these  codes  as  <STRONG>smkx</STRONG>  and
1813        <STRONG>rmkx</STRONG>.  Otherwise the keypad is assumed to always transmit.
1814
1815        The  codes  sent by the left arrow, right arrow, up arrow,
1816        down arrow, and home keys can be given  as  <STRONG>kcub1,</STRONG>  <STRONG>kcuf1,</STRONG>
1817        <STRONG>kcuu1,</STRONG>  <STRONG>kcud1,</STRONG> and <STRONG>khome</STRONG> respectively.  If there are func-
1818        tion keys such as f0, f1, ..., f10, the  codes  they  send
1819        can  be  given as <STRONG>kf0,</STRONG> <STRONG>kf1,</STRONG> <STRONG>...,</STRONG> <STRONG>kf10</STRONG>.  If these keys have
1820        labels other than the default f0 through f10,  the  labels
1821        can be given as <STRONG>lf0,</STRONG> <STRONG>lf1,</STRONG> <STRONG>...,</STRONG> <STRONG>lf10</STRONG>.
1822
1823        The codes transmitted by certain other special keys can be
1824        given:
1825
1826        <STRONG>o</STRONG>   <STRONG>kll</STRONG> (home down),
1827
1828        <STRONG>o</STRONG>   <STRONG>kbs</STRONG> (backspace),
1829
1830        <STRONG>o</STRONG>   <STRONG>ktbc</STRONG> (clear all tabs),
1831
1832        <STRONG>o</STRONG>   <STRONG>kctab</STRONG> (clear the tab stop in this column),
1833
1834        <STRONG>o</STRONG>   <STRONG>kclr</STRONG> (clear screen or erase key),
1835
1836        <STRONG>o</STRONG>   <STRONG>kdch1</STRONG> (delete character),
1837
1838        <STRONG>o</STRONG>   <STRONG>kdl1</STRONG> (delete line),
1839
1840        <STRONG>o</STRONG>   <STRONG>krmir</STRONG> (exit insert mode),
1841
1842        <STRONG>o</STRONG>   <STRONG>kel</STRONG> (clear to end of line),
1843
1844        <STRONG>o</STRONG>   <STRONG>ked</STRONG> (clear to end of screen),
1845
1846        <STRONG>o</STRONG>   <STRONG>kich1</STRONG> (insert character or enter insert mode),
1847
1848        <STRONG>o</STRONG>   <STRONG>kil1</STRONG> (insert line),
1849
1850        <STRONG>o</STRONG>   <STRONG>knp</STRONG> (next page),
1851
1852        <STRONG>o</STRONG>   <STRONG>kpp</STRONG> (previous page),
1853
1854        <STRONG>o</STRONG>   <STRONG>kind</STRONG> (scroll forward/down),
1855
1856        <STRONG>o</STRONG>   <STRONG>kri</STRONG> (scroll backward/up),
1857
1858        <STRONG>o</STRONG>   <STRONG>khts</STRONG> (set a tab stop in this column).
1859
1860        In addition, if the keypad has a 3  by  3  array  of  keys
1861        including  the four arrow keys, the other five keys can be
1862        given as <STRONG>ka1</STRONG>, <STRONG>ka3</STRONG>, <STRONG>kb2</STRONG>, <STRONG>kc1</STRONG>, and <STRONG>kc3</STRONG>.  These keys are use-
1863        ful  when  the  effects  of  a  3 by 3 directional pad are
1864        needed.
1865
1866        Strings to program function keys can be  given  as  <STRONG>pfkey</STRONG>,
1867        <STRONG>pfloc</STRONG>,  and <STRONG>pfx</STRONG>.  A string to program screen labels should
1868        be specified as <STRONG>pln</STRONG>.  Each  of  these  strings  takes  two
1869        parameters:  the function key number to program (from 0 to
1870        10) and the string to program it with.  Function key  num-
1871        bers  out  of  this  range may program undefined keys in a
1872        terminal dependent manner.   The  difference  between  the
1873        capabilities  is  that <STRONG>pfkey</STRONG> causes pressing the given key
1874        to be the same as the user typing the given string;  <STRONG>pfloc</STRONG>
1875        causes the string to be executed by the terminal in local;
1876        and <STRONG>pfx</STRONG> causes the string to be transmitted  to  the  com-
1877        puter.
1878
1879        The capabilities <STRONG>nlab</STRONG>, <STRONG>lw</STRONG> and <STRONG>lh</STRONG> define the number of pro-
1880        grammable screen labels and their width  and  height.   If
1881        there  are  commands  to  turn the labels on and off, give
1882        them in <STRONG>smln</STRONG> and <STRONG>rmln</STRONG>.  <STRONG>smln</STRONG> is normally output after  one
1883        or more pln sequences to make sure that the change becomes
1884        visible.
1885
1886
1887 </PRE>
1888 <H3><a name="h3-Tabs-and-Initialization">Tabs and Initialization</a></H3><PRE>
1889        If the terminal has hardware tabs, the command to  advance
1890        to  the  next tab stop can be given as <STRONG>ht</STRONG> (usually control
1891        I).  A "back-tab" command which moves leftward to the pre-
1892        ceding  tab  stop  can be given as <STRONG>cbt</STRONG>.  By convention, if
1893        the teletype modes indicate that tabs are  being  expanded
1894        by  the  computer  rather than being sent to the terminal,
1895        programs should not  use  <STRONG>ht</STRONG>  or  <STRONG>cbt</STRONG>  even  if  they  are
1896        present,  since  the user may not have the tab stops prop-
1897        erly set.  If the terminal has  hardware  tabs  which  are
1898        initially  set every <EM>n</EM> spaces when the terminal is powered
1899        up, the numeric parameter <STRONG>it</STRONG> is given, showing the  number
1900        of  spaces  the tabs are set to.  This is normally used by
1901        the <EM>tset</EM> command to determine whether to set the mode  for
1902        hardware  tab expansion, and whether to set the tab stops.
1903        If the terminal has tab stops that can be  saved  in  non-
1904        volatile  memory, the terminfo description can assume that
1905        they are properly set.
1906
1907        Other capabilities include <STRONG>is1</STRONG>, <STRONG>is2</STRONG>, and <STRONG>is3</STRONG>,  initializa-
1908        tion  strings  for the terminal, <STRONG>iprog</STRONG>, the path name of a
1909        program to be run to initialize the terminal, and <STRONG>if</STRONG>,  the
1910        name  of  a  file  containing long initialization strings.
1911        These strings are expected to set the terminal into  modes
1912        consistent  with  the  rest  of  the terminfo description.
1913        They are normally sent to the terminal, by the <EM>init</EM> option
1914        of  the  <EM>tput</EM>  program,  each time the user logs in.  They
1915        will be printed in the following order:
1916
1917               run the program
1918                      <STRONG>iprog</STRONG>
1919
1920               output <STRONG>is1</STRONG> <STRONG>is2</STRONG>
1921
1922               set the margins using
1923                      <STRONG>mgc</STRONG>, <STRONG>smgl</STRONG> and <STRONG>smgr</STRONG>
1924
1925               set tabs using
1926                      <STRONG>tbc</STRONG> and <STRONG>hts</STRONG>
1927
1928               print the file
1929                      <STRONG>if</STRONG>
1930
1931               and finally
1932                      output <STRONG>is3</STRONG>.
1933
1934        Most initialization is done with  <STRONG>is2</STRONG>.   Special  terminal
1935        modes can be set up without duplicating strings by putting
1936        the common sequences in <STRONG>is2</STRONG> and special cases in  <STRONG>is1</STRONG>  and
1937        <STRONG>is3</STRONG>.
1938
1939        A set of sequences that does a harder reset from a totally
1940        unknown state can be given as <STRONG>rs1</STRONG>, <STRONG>rs2</STRONG>, <STRONG>rf</STRONG> and <STRONG>rs3</STRONG>, analo-
1941        gous  to  <STRONG>is1</STRONG>  <STRONG>,</STRONG>  <STRONG>is2</STRONG>  <STRONG>,</STRONG>  <STRONG>if</STRONG>  and <STRONG>is3</STRONG> respectively.  These
1942        strings are output by the <EM>reset</EM>  program,  which  is  used
1943        when  the terminal gets into a wedged state.  Commands are
1944        normally placed in <STRONG>rs1</STRONG>, <STRONG>rs2</STRONG> <STRONG>rs3</STRONG> and <STRONG>rf</STRONG> only if  they  pro-
1945        duce  annoying effects on the screen and are not necessary
1946        when logging in.  For example,  the  command  to  set  the
1947        vt100  into  80-column mode would normally be part of <STRONG>is2</STRONG>,
1948        but it causes an annoying glitch of the screen and is  not
1949        normally  needed  since the terminal is usually already in
1950        80 column mode.
1951
1952        The <EM>reset</EM> program writes strings including <STRONG>iprog</STRONG>, etc., in
1953        the  same  order  as  the  <EM>init</EM>  program, using <STRONG>rs1</STRONG>, etc.,
1954        instead of <STRONG>is1</STRONG>, etc.  If any of <STRONG>rs1</STRONG>, <STRONG>rs2</STRONG>, <STRONG>rs3</STRONG>, or <STRONG>rf</STRONG> reset
1955        capability  strings  are  missing, the <EM>reset</EM> program falls
1956        back  upon  the  corresponding  initialization  capability
1957        string.
1958
1959        If there are commands to set and clear tab stops, they can
1960        be given as <STRONG>tbc</STRONG> (clear all tab stops) and <STRONG>hts</STRONG> (set  a  tab
1961        stop  in the current column of every row).  If a more com-
1962        plex sequence is needed  to  set  the  tabs  than  can  be
1963        described  by  this,  the sequence can be placed in <STRONG>is2</STRONG> or
1964        <STRONG>if</STRONG>.
1965
1966
1967 </PRE>
1968 <H3><a name="h3-Delays-and-Padding">Delays and Padding</a></H3><PRE>
1969        Many older and slower  terminals  do  not  support  either
1970        XON/XOFF or DTR handshaking, including hard copy terminals
1971        and some very archaic CRTs (including,  for  example,  DEC
1972        VT100s).   These may require padding characters after cer-
1973        tain cursor motions and screen changes.
1974
1975        If the terminal uses xon/xoff handshaking for flow control
1976        (that  is, it automatically emits ^S back to the host when
1977        its input buffers are close to full), set <STRONG>xon</STRONG>.  This capa-
1978        bility  suppresses  the emission of padding.  You can also
1979        set it for memory-mapped console devices effectively  that
1980        do  not  have  a  speed limit.  Padding information should
1981        still be included so that routines can make  better  deci-
1982        sions about relative costs, but actual pad characters will
1983        not be transmitted.
1984
1985        If <STRONG>pb</STRONG> (padding baud rate) is given, padding is  suppressed
1986        at  baud rates below the value of <STRONG>pb</STRONG>.  If the entry has no
1987        padding baud rate, then whether padding is emitted or  not
1988        is completely controlled by <STRONG>xon</STRONG>.
1989
1990        If  the terminal requires other than a null (zero) charac-
1991        ter as a pad, then this can be given  as  <STRONG>pad</STRONG>.   Only  the
1992        first character of the <STRONG>pad</STRONG> string is used.
1993
1994
1995 </PRE>
1996 <H3><a name="h3-Status-Lines">Status Lines</a></H3><PRE>
1997        Some  terminals  have  an extra "status line" which is not
1998        normally used by software (and thus  not  counted  in  the
1999        terminal's <STRONG>lines</STRONG> capability).
2000
2001        The  simplest  case  is  a  status  line  which is cursor-
2002        addressable but not part of the main scrolling  region  on
2003        the  screen;  the  Heathkit  H19 has a status line of this
2004        kind, as would a 24-line VT100 with  a  23-line  scrolling
2005        region  set up on initialization.  This situation is indi-
2006        cated by the <STRONG>hs</STRONG> capability.
2007
2008        Some terminals with status lines need special sequences to
2009        access  the  status  line.   These  may  be expressed as a
2010        string with single parameter <STRONG>tsl</STRONG> which takes the cursor to
2011        a  given zero-origin column on the status line.  The capa-
2012        bility <STRONG>fsl</STRONG> must return to the main-screen cursor positions
2013        before  the  last  <STRONG>tsl</STRONG>.   You may need to embed the string
2014        values of <STRONG>sc</STRONG> (save cursor) and <STRONG>rc</STRONG> (restore cursor) in  <STRONG>tsl</STRONG>
2015        and <STRONG>fsl</STRONG> to accomplish this.
2016
2017        The  status  line is normally assumed to be the same width
2018        as the width of the terminal.  If this is untrue, you  can
2019        specify it with the numeric capability <STRONG>wsl</STRONG>.
2020
2021        A  command to erase or blank the status line may be speci-
2022        fied as <STRONG>dsl</STRONG>.
2023
2024        The  boolean  capability  <STRONG>eslok</STRONG>  specifies   that   escape
2025        sequences, tabs, etc., work ordinarily in the status line.
2026
2027        The  <STRONG>ncurses</STRONG>  implementation does not yet use any of these
2028        capabilities.  They are documented here in case they  ever
2029        become important.
2030
2031
2032 </PRE>
2033 <H3><a name="h3-Line-Graphics">Line Graphics</a></H3><PRE>
2034        Many  terminals  have  alternate character sets useful for
2035        forms-drawing.  Terminfo and <STRONG>curses</STRONG> build in  support  for
2036        the  drawing  characters supported by the VT100, with some
2037        characters from the AT&amp;T  4410v1  added.   This  alternate
2038        character set may be specified by the <STRONG>acsc</STRONG> capability.
2039
2040        <STRONG>Glyph</STRONG>                       <STRONG>ACS</STRONG>           <STRONG>Ascii</STRONG>     <STRONG>VT100</STRONG>
2041        <STRONG>Name</STRONG>                        <STRONG>Name</STRONG>          <STRONG>Default</STRONG>   <STRONG>Name</STRONG>
2042        UK pound sign               ACS_STERLING  f         }
2043        arrow pointing down         ACS_DARROW    v         .
2044        arrow pointing left         ACS_LARROW    &lt;         ,
2045        arrow pointing right        ACS_RARROW    &gt;         +
2046        arrow pointing up           ACS_UARROW    ^         -
2047        board of squares            ACS_BOARD     #         h
2048        bullet                      ACS_BULLET    o         ~
2049        checker board (stipple)     ACS_CKBOARD   :         a
2050        degree symbol               ACS_DEGREE    \         f
2051        diamond                     ACS_DIAMOND   +         `
2052        greater-than-or-equal-to    ACS_GEQUAL    &gt;         z
2053        greek pi                    ACS_PI        *         {
2054        horizontal line             ACS_HLINE     -         q
2055        lantern symbol              ACS_LANTERN   #         i
2056        large plus or crossover     ACS_PLUS      +         n
2057        less-than-or-equal-to       ACS_LEQUAL    &lt;         y
2058        lower left corner           ACS_LLCORNER  +         m
2059        lower right corner          ACS_LRCORNER  +         j
2060        not-equal                   ACS_NEQUAL    !         |
2061        plus/minus                  ACS_PLMINUS   #         g
2062        scan line 1                 ACS_S1        ~         o
2063        scan line 3                 ACS_S3        -         p
2064        scan line 7                 ACS_S7        -         r
2065        scan line 9                 ACS_S9        _         s
2066        solid square block          ACS_BLOCK     #         0
2067        tee pointing down           ACS_TTEE      +         w
2068        tee pointing left           ACS_RTEE      +         u
2069        tee pointing right          ACS_LTEE      +         t
2070        tee pointing up             ACS_BTEE      +         v
2071        upper left corner           ACS_ULCORNER  +         l
2072        upper right corner          ACS_URCORNER  +         k
2073        vertical line               ACS_VLINE     |         x
2074
2075        The  best  way to define a new device's graphics set is to
2076        add a column to a copy of this table  for  your  terminal,
2077        giving   the   character   which   (when  emitted  between
2078        <STRONG>smacs</STRONG>/<STRONG>rmacs</STRONG> switches) will be rendered as the  correspond-
2079        ing  graphic.  Then read off the VT100/your terminal char-
2080        acter pairs right to left in sequence;  these  become  the
2081        ACSC string.
2082
2083
2084 </PRE>
2085 <H3><a name="h3-Color-Handling">Color Handling</a></H3><PRE>
2086        Most  color  terminals are either "Tektronix-like" or "HP-
2087        like".  Tektronix-like terminals have a predefined set  of
2088        N  colors  (where N usually 8), and can set character-cell
2089        foreground and background characters independently, mixing
2090        them  into  N * N  color-pairs.  On HP-like terminals, the
2091        use must set each color pair up separately (foreground and
2092        background  are  not  independently  settable).   Up  to M
2093        color-pairs may be  set  up  from  2*M  different  colors.
2094        ANSI-compatible terminals are Tektronix-like.
2095
2096        Some basic color capabilities are independent of the color
2097        method.  The numeric capabilities <STRONG>colors</STRONG> and <STRONG>pairs</STRONG> specify
2098        the  maximum numbers of colors and color-pairs that can be
2099        displayed simultaneously.  The <STRONG>op</STRONG> (original  pair)  string
2100        resets  foreground  and background colors to their default
2101        values for the terminal.  The <STRONG>oc</STRONG> string resets all  colors
2102        or  color-pairs  to their default values for the terminal.
2103        Some terminals  (including  many  PC  terminal  emulators)
2104        erase  screen  areas  with  the  current  background color
2105        rather than the power-up default background; these  should
2106        have the boolean capability <STRONG>bce</STRONG>.
2107
2108        To  change the current foreground or background color on a
2109        Tektronix-type terminal, use <STRONG>setaf</STRONG> (set  ANSI  foreground)
2110        and  <STRONG>setab</STRONG>  (set ANSI background) or <STRONG>setf</STRONG> (set foreground)
2111        and <STRONG>setb</STRONG> (set background).  These take one parameter,  the
2112        color  number.   The  SVr4  documentation  describes  only
2113        <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>; the XPG4 draft says  that  "If  the  terminal
2114        supports ANSI escape sequences to set background and fore-
2115        ground, they should be coded as <STRONG>setaf</STRONG> and  <STRONG>setab</STRONG>,  respec-
2116        tively.   If  the terminal supports other escape sequences
2117        to set background and foreground, they should be coded  as
2118        <STRONG>setf</STRONG>  and  <STRONG>setb</STRONG>, respectively.  The <EM>vidputs()</EM> function and
2119        the refresh functions use <STRONG>setaf</STRONG>  and  <STRONG>setab</STRONG>  if  they  are
2120        defined."
2121
2122        The  <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>  and <STRONG>setf</STRONG>/<STRONG>setb</STRONG> capabilities take a single
2123        numeric argument each.  Argument values 0-7 of <STRONG>setaf</STRONG>/<STRONG>setab</STRONG>
2124        are  portably defined as follows (the middle column is the
2125        symbolic #define available in the header for the <STRONG>curses</STRONG> or
2126        <STRONG>ncurses</STRONG>  libraries).  The terminal hardware is free to map
2127        these as it likes, but  the  RGB  values  indicate  normal
2128        locations in color space.
2129
2130              <STRONG>Color</STRONG>       <STRONG>#define</STRONG>       <STRONG>Value</STRONG>       <STRONG>RGB</STRONG>
2131              black     <STRONG>COLOR_BLACK</STRONG>       0     0, 0, 0
2132              red       <STRONG>COLOR_RED</STRONG>         1     max,0,0
2133              green     <STRONG>COLOR_GREEN</STRONG>       2     0,max,0
2134              yellow    <STRONG>COLOR_YELLOW</STRONG>      3     max,max,0
2135              blue      <STRONG>COLOR_BLUE</STRONG>        4     0,0,max
2136              magenta   <STRONG>COLOR_MAGENTA</STRONG>     5     max,0,max
2137              cyan      <STRONG>COLOR_CYAN</STRONG>        6     0,max,max
2138              white     <STRONG>COLOR_WHITE</STRONG>       7     max,max,max
2139
2140        The  argument  values of <STRONG>setf</STRONG>/<STRONG>setb</STRONG> historically correspond
2141        to a different mapping, i.e.,
2142
2143              <STRONG>Color</STRONG>       <STRONG>#define</STRONG>       <STRONG>Value</STRONG>       <STRONG>RGB</STRONG>
2144              black     <STRONG>COLOR_BLACK</STRONG>       0     0, 0, 0
2145              blue      <STRONG>COLOR_BLUE</STRONG>        1     0,0,max
2146              green     <STRONG>COLOR_GREEN</STRONG>       2     0,max,0
2147              cyan      <STRONG>COLOR_CYAN</STRONG>        3     0,max,max
2148              red       <STRONG>COLOR_RED</STRONG>         4     max,0,0
2149              magenta   <STRONG>COLOR_MAGENTA</STRONG>     5     max,0,max
2150              yellow    <STRONG>COLOR_YELLOW</STRONG>      6     max,max,0
2151              white     <STRONG>COLOR_WHITE</STRONG>       7     max,max,max
2152
2153        It is important to not confuse the two sets of color capa-
2154        bilities;  otherwise  red/blue will be interchanged on the
2155        display.
2156
2157        On an HP-like terminal, use <STRONG>scp</STRONG> with a  color-pair  number
2158        parameter to set which color pair is current.
2159
2160        On  a  Tektronix-like  terminal, the capability <STRONG>ccc</STRONG> may be
2161        present to indicate that colors can be modified.   If  so,
2162        the <STRONG>initc</STRONG> capability will take a color number (0 to <STRONG>colors</STRONG>
2163        - 1)and three more parameters which  describe  the  color.
2164        These three parameters default to being interpreted as RGB
2165        (Red, Green, Blue) values.  If the boolean capability  <STRONG>hls</STRONG>
2166        is present, they are instead as HLS (Hue, Lightness, Satu-
2167        ration) indices.  The ranges are terminal-dependent.
2168
2169        On an HP-like terminal, <STRONG>initp</STRONG> may give  a  capability  for
2170        changing  a  color-pair value.  It will take seven parame-
2171        ters; a color-pair number (0 to <STRONG>max_pairs</STRONG> -  1),  and  two
2172        triples  describing  first  background and then foreground
2173        colors.  These parameters must be (Red,  Green,  Blue)  or
2174        (Hue, Lightness, Saturation) depending on <STRONG>hls</STRONG>.
2175
2176        On  some  color terminals, colors collide with highlights.
2177        You can register these collisions with the <STRONG>ncv</STRONG> capability.
2178        This  is a bit-mask of attributes not to be used when col-
2179        ors are enabled.  The correspondence with  the  attributes
2180        understood by <STRONG>curses</STRONG> is as follows:
2181
2182           <STRONG>Attribute</STRONG>              <STRONG>Bit</STRONG>   <STRONG>Decimal</STRONG>      <STRONG>Set</STRONG> <STRONG>by</STRONG>
2183           A_STANDOUT             0     1            sgr
2184           A_UNDERLINE            1     2            sgr
2185           A_REVERSE              2     4            sgr
2186           A_BLINK                3     8            sgr
2187           A_DIM                  4     16           sgr
2188           A_BOLD                 5     32           sgr
2189           A_INVIS                6     64           sgr
2190           A_PROTECT              7     128          sgr
2191           A_ALTCHARSET           8     256          sgr
2192           A_HORIZONTAL           9     512          sgr1
2193           A_LEFT                 10    1024         sgr1
2194           A_LOW                  11    2048         sgr1
2195           A_RIGHT                12    4096         sgr1
2196           A_TOP                  13    8192         sgr1
2197           A_VERTICAL             14    16384        sgr1
2198           A_ITALIC               15    32768        sitm
2199
2200        For  example,  on  many  IBM  PC  consoles,  the underline
2201        attribute collides with the foreground color blue  and  is
2202        not  available  in  color  mode.  These should have an <STRONG>ncv</STRONG>
2203        capability of 2.
2204
2205        SVr4 curses does nothing with <STRONG>ncv</STRONG>, ncurses  recognizes  it
2206        and optimizes the output in favor of colors.
2207
2208
2209 </PRE>
2210 <H3><a name="h3-Miscellaneous">Miscellaneous</a></H3><PRE>
2211        If  the terminal requires other than a null (zero) charac-
2212        ter as a pad, then this can be given  as  pad.   Only  the
2213        first  character of the pad string is used.  If the termi-
2214        nal does not have a pad character, specify npc.  Note that
2215        ncurses  implements  the  termcap-compatible  <STRONG>PC</STRONG> variable;
2216        though the application may set  this  value  to  something
2217        other  than  a  null,  ncurses will test <STRONG>npc</STRONG> first and use
2218        napms if the terminal has no pad character.
2219
2220        If the terminal can move up or down half a line, this  can
2221        be  indicated  with  <STRONG>hu</STRONG>  (half-line  up) and <STRONG>hd</STRONG> (half-line
2222        down).  This is primarily useful for superscripts and sub-
2223        scripts  on  hard-copy terminals.  If a hard-copy terminal
2224        can eject to the next page (form feed), give  this  as  <STRONG>ff</STRONG>
2225        (usually control L).
2226
2227        If  there is a command to repeat a given character a given
2228        number of times (to save time transmitting a large  number
2229        of  identical  characters)  this can be indicated with the
2230        parameterized string <STRONG>rep</STRONG>.   The  first  parameter  is  the
2231        character  to  be repeated and the second is the number of
2232        times to repeat it.  Thus, tparm(repeat_char, 'x', 10)  is
2233        the same as "xxxxxxxxxx".
2234
2235        If  the terminal has a settable command character, such as
2236        the TEKTRONIX 4025, this can be indicated with  <STRONG>cmdch</STRONG>.   A
2237        prototype command character is chosen which is used in all
2238        capabilities.  This character is given in the <STRONG>cmdch</STRONG>  capa-
2239        bility  to  identify it.  The following convention is sup-
2240        ported on some UNIX systems:  The  environment  is  to  be
2241        searched  for a <STRONG>CC</STRONG> variable, and if found, all occurrences
2242        of the prototype character are replaced with the character
2243        in the environment variable.
2244
2245        Terminal  descriptions  that  do  not represent a specific
2246        kind of known terminal, such as <EM>switch</EM>, <EM>dialup</EM>, <EM>patch</EM>, and
2247        <EM>network</EM>,  should  include  the  <STRONG>gn</STRONG> (generic) capability so
2248        that programs can complain that they do not  know  how  to
2249        talk  to the terminal.  (This capability does not apply to
2250        <EM>virtual</EM>  terminal  descriptions  for  which   the   escape
2251        sequences are known.)
2252
2253        If  the  terminal  has  a "meta key" which acts as a shift
2254        key, setting the 8th bit  of  any  character  transmitted,
2255        this  fact  can be indicated with <STRONG>km</STRONG>.  Otherwise, software
2256        will assume that the 8th bit is parity and it will usually
2257        be  cleared.  If strings exist to turn this "meta mode" on
2258        and off, they can be given as <STRONG>smm</STRONG> and <STRONG>rmm</STRONG>.
2259
2260        If the terminal has more lines of memory than will fit  on
2261        the  screen  at once, the number of lines of memory can be
2262        indicated with <STRONG>lm</STRONG>.  A value of  <STRONG>lm</STRONG>#0  indicates  that  the
2263        number of lines is not fixed, but that there is still more
2264        memory than fits on the screen.
2265
2266        If the terminal is one of those supported by the UNIX vir-
2267        tual  terminal  protocol, the terminal number can be given
2268        as <STRONG>vt</STRONG>.
2269
2270        Media copy strings which control an auxiliary printer con-
2271        nected to the terminal can be given as <STRONG>mc0</STRONG>: print the con-
2272        tents of the screen, <STRONG>mc4</STRONG>: turn off the printer,  and  <STRONG>mc5</STRONG>:
2273        turn  on  the  printer.   When the printer is on, all text
2274        sent to the terminal will be sent to the printer.   It  is
2275        undefined whether the text is also displayed on the termi-
2276        nal screen when the printer is on.  A variation <STRONG>mc5p</STRONG> takes
2277        one parameter, and leaves the printer on for as many char-
2278        acters as the value  of  the  parameter,  then  turns  the
2279        printer  off.   The  parameter should not exceed 255.  All
2280        text,  including  <STRONG>mc4</STRONG>,  is  transparently  passed  to  the
2281        printer while an <STRONG>mc5p</STRONG> is in effect.
2282
2283
2284 </PRE>
2285 <H3><a name="h3-Glitches-and-Braindamage">Glitches and Braindamage</a></H3><PRE>
2286        Hazeltine  terminals, which do not allow "~" characters to
2287        be displayed should indicate <STRONG>hz</STRONG>.
2288
2289        Terminals which ignore a line-feed immediately after an <STRONG>am</STRONG>
2290        wrap, such as the Concept and vt100, should indicate <STRONG>xenl</STRONG>.
2291
2292        If  <STRONG>el</STRONG>  is  required  to  get  rid of standout (instead of
2293        merely writing normal text on top of it),  <STRONG>xhp</STRONG>  should  be
2294        given.
2295
2296        Teleray  terminals,  where  tabs turn all characters moved
2297        over to blanks, should  indicate  <STRONG>xt</STRONG>  (destructive  tabs).
2298        Note:    the    variable    indicating    this    is   now
2299        "dest_tabs_magic_smso"; in older  versions,  it  was  tel-
2300        eray_glitch.  This glitch is also taken to mean that it is
2301        not possible to position the cursor on  top  of  a  "magic
2302        cookie",  that to erase standout mode it is instead neces-
2303        sary to use delete and insert line.  The ncurses implemen-
2304        tation ignores this glitch.
2305
2306        The  Beehive Superbee, which is unable to correctly trans-
2307        mit the escape or control C characters, has <STRONG>xsb</STRONG>,  indicat-
2308        ing  that the f1 key is used for escape and f2 for control
2309        C.  (Only certain Superbees have this  problem,  depending
2310        on  the  ROM.)  Note that in older terminfo versions, this
2311        capability  was  called  "beehive_glitch";   it   is   now
2312        "no_esc_ctl_c".
2313
2314        Other  specific  terminal  problems  may  be  corrected by
2315        adding more capabilities of the form <STRONG>x</STRONG><EM>x</EM>.
2316
2317
2318 </PRE>
2319 <H3><a name="h3-Similar-Terminals">Similar Terminals</a></H3><PRE>
2320        If there are two very similar terminals, one (the variant)
2321        can  be  defined  as  being just like the other (the base)
2322        with certain exceptions.  In the definition of  the  vari-
2323        ant,  the string capability <STRONG>use</STRONG> can be given with the name
2324        of the base terminal.  The capabilities given  before  <STRONG>use</STRONG>
2325        override  those  in  the base type named by <STRONG>use</STRONG>.  If there
2326        are multiple <STRONG>use</STRONG> capabilities, they are merged in  reverse
2327        order.   That is, the rightmost <STRONG>use</STRONG> reference is processed
2328        first, then the one to its left, and so forth.   Capabili-
2329        ties  given explicitly in the entry override those brought
2330        in by <STRONG>use</STRONG> references.
2331
2332        A capability can be canceled by placing <STRONG>xx@</STRONG> to the left of
2333        the  use  reference that imports it, where <EM>xx</EM> is the capa-
2334        bility.  For example, the entry
2335
2336               2621-nl, smkx@, rmkx@, use=2621,
2337
2338        defines a 2621-nl that does not  have  the  <STRONG>smkx</STRONG>  or  <STRONG>rmkx</STRONG>
2339        capabilities,  and hence does not turn on the function key
2340        labels when in visual mode.  This is useful for  different
2341        modes for a terminal, or for different user preferences.
2342
2343
2344 </PRE>
2345 <H3><a name="h3-Pitfalls-of-Long-Entries">Pitfalls of Long Entries</a></H3><PRE>
2346        Long  terminfo  entries  are  unlikely to be a problem; to
2347        date, no entry has even  approached  terminfo's  4096-byte
2348        string-table maximum.  Unfortunately, the termcap transla-
2349        tions are much more strictly limited (to 1023 bytes), thus
2350        termcap  translations  of  long terminfo entries can cause
2351        problems.
2352
2353        The man pages for 4.3BSD and older versions  of  <STRONG>tgetent()</STRONG>
2354        instruct  the  user to allocate a 1024-byte buffer for the
2355        termcap entry.  The  entry  gets  null-terminated  by  the
2356        termcap library, so that makes the maximum safe length for
2357        a termcap entry 1k-1 (1023) bytes.  Depending on what  the
2358        application  and  the termcap library being used does, and
2359        where in the termcap file the terminal type that <STRONG>tgetent()</STRONG>
2360        is searching for is, several bad things can happen.
2361
2362        Some  termcap libraries print a warning message or exit if
2363        they find an entry that's longer than 1023  bytes;  others
2364        do  not;  others truncate the entries to 1023 bytes.  Some
2365        application programs allocate more than the recommended 1K
2366        for the termcap entry; others do not.
2367
2368        Each termcap entry has two important sizes associated with
2369        it: before "tc" expansion, and after "tc" expansion.  "tc"
2370        is  the  capability that tacks on another termcap entry to
2371        the end of the current one, to add  on  its  capabilities.
2372        If  a termcap entry does not use the "tc" capability, then
2373        of course the two lengths are the same.
2374
2375        The "before tc expansion" length  is  the  most  important
2376        one,  because it affects more than just users of that par-
2377        ticular terminal.  This is the length of the entry  as  it
2378        exists in /etc/termcap, minus the backslash-newline pairs,
2379        which <STRONG>tgetent()</STRONG> strips out while reading it.  Some termcap
2380        libraries  strip  off  the final newline, too (GNU termcap
2381        does not).  Now suppose:
2382
2383        <STRONG>o</STRONG>   a termcap entry before expansion  is  more  than  1023
2384            bytes long,
2385
2386        <STRONG>o</STRONG>   and the application has only allocated a 1k buffer,
2387
2388        <STRONG>o</STRONG>   and  the  termcap  library (like the one in BSD/OS 1.1
2389            and GNU) reads the whole entry  into  the  buffer,  no
2390            matter  what  its length, to see if it is the entry it
2391            wants,
2392
2393        <STRONG>o</STRONG>   and <STRONG>tgetent()</STRONG> is searching for a  terminal  type  that
2394            either  is the long entry, appears in the termcap file
2395            after the long entry, or does not appear in  the  file
2396            at  all  (so  that  <STRONG>tgetent()</STRONG>  has to search the whole
2397            termcap file).
2398
2399        Then <STRONG>tgetent()</STRONG> will overwrite memory, perhaps  its  stack,
2400        and  probably core dump the program.  Programs like telnet
2401        are particularly vulnerable;  modern  telnets  pass  along
2402        values  like the terminal type automatically.  The results
2403        are almost as undesirable with  a  termcap  library,  like
2404        SunOS  4.1.3  and Ultrix 4.4, that prints warning messages
2405        when it reads an overly long termcap entry.  If a  termcap
2406        library  truncates  long  entries,  like  OSF/1 3.0, it is
2407        immune to dying here but will return  incorrect  data  for
2408        the terminal.
2409
2410        The "after tc expansion" length will have a similar effect
2411        to the above, but only for people who actually set TERM to
2412        that  terminal type, since <STRONG>tgetent()</STRONG> only does "tc" expan-
2413        sion once it is found the terminal  type  it  was  looking
2414        for, not while searching.
2415
2416        In summary, a termcap entry that is longer than 1023 bytes
2417        can cause, on various combinations  of  termcap  libraries
2418        and  applications,  a  core  dump,  warnings, or incorrect
2419        operation.  If it is too long even before "tc"  expansion,
2420        it will have this effect even for users of some other ter-
2421        minal types and users whose TERM variable does not have  a
2422        termcap entry.
2423
2424        When in -C (translate to termcap) mode, the <STRONG>ncurses</STRONG> imple-
2425        mentation of <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG> issues warning messages when the pre-
2426        tc  length  of  a termcap translation is too long.  The -c
2427        (check) option also checks resolved (after  tc  expansion)
2428        lengths.
2429
2430
2431 </PRE>
2432 <H3><a name="h3-Binary-Compatibility">Binary Compatibility</a></H3><PRE>
2433        It  is not wise to count on portability of binary terminfo
2434        entries between commercial UNIX versions.  The problem  is
2435        that  there  are  at least two versions of terminfo (under
2436        HP-UX and AIX) which diverged from System V terminfo after
2437        SVr1,  and have added extension capabilities to the string
2438        table that (in the binary format) collide  with  System  V
2439        and XSI Curses extensions.
2440
2441
2442 </PRE>
2443 <H2><a name="h2-EXTENSIONS">EXTENSIONS</a></H2><PRE>
2444        Searching for terminal descriptions in <STRONG>$HOME/.terminfo</STRONG> and
2445        TERMINFO_DIRS is not supported by older implementations.
2446
2447        Some SVr4 <STRONG>curses</STRONG>  implementations,  and  all  previous  to
2448        SVr4,  do not interpret the %A and %O operators in parame-
2449        ter strings.
2450
2451        SVr4/XPG4 do not specify whether  <STRONG>msgr</STRONG>  licenses  movement
2452        while  in an alternate-character-set mode (such modes may,
2453        among other things, map CR and NL to  characters  that  do
2454        not  trigger  local  motions).  The <STRONG>ncurses</STRONG> implementation
2455        ignores <STRONG>msgr</STRONG> in <STRONG>ALTCHARSET</STRONG> mode.  This raises  the  possi-
2456        bility  that  an  XPG4  implementation making the opposite
2457        interpretation may need terminfo entries made for  <STRONG>ncurses</STRONG>
2458        to have <STRONG>msgr</STRONG> turned off.
2459
2460        The  <STRONG>ncurses</STRONG>  library handles insert-character and insert-
2461        character modes in a slightly non-standard way to get bet-
2462        ter  update  efficiency.   See the <STRONG>Insert/Delete</STRONG> <STRONG>Character</STRONG>
2463        subsection above.
2464
2465        The  parameter  substitutions  for  <STRONG>set_clock</STRONG>   and   <STRONG>dis-</STRONG>
2466        <STRONG>play_clock</STRONG>  are  not  documented in SVr4 or the XSI Curses
2467        standard.  They are deduced from the documentation for the
2468        AT&amp;T 505 terminal.
2469
2470        Be  careful  assigning  the <STRONG>kmous</STRONG> capability.  The <STRONG>ncurses</STRONG>
2471        wants to interpret it as <STRONG>KEY_MOUSE</STRONG>, for use  by  terminals
2472        and  emulators  like  xterm that can return mouse-tracking
2473        information in the keyboard-input stream.
2474
2475        X/Open Curses does not mention italics.  Portable applica-
2476        tions  must  assume  that  numeric capabilities are signed
2477        16-bit values.  This  includes  the  <EM>no</EM><STRONG>_</STRONG><EM>color</EM><STRONG>_</STRONG><EM>video</EM>  (ncv)
2478        capability.   The  32768  mask value used for italics with
2479        ncv can be confused with an absent or cancelled  ncv.   If
2480        italics  should  work with colors, then the ncv value must
2481        be specified, even if it is zero.
2482
2483        Different commercial ports of terminfo and curses  support
2484        different  subsets of the XSI Curses standard and (in some
2485        cases) different extension sets.  Here is a summary, accu-
2486        rate as of October 1995:
2487
2488        <STRONG>SVR4,</STRONG> <STRONG>Solaris,</STRONG> <STRONG>ncurses</STRONG> -- These support all SVr4 capabili-
2489        ties.
2490
2491        <STRONG>SGI</STRONG> --  Supports  the  SVr4  set,  adds  one  undocumented
2492        extended string capability (<STRONG>set_pglen</STRONG>).
2493
2494        <STRONG>SVr1,</STRONG>  <STRONG>Ultrix</STRONG> -- These support a restricted subset of ter-
2495        minfo capabilities.  The booleans end with  <STRONG>xon_xoff</STRONG>;  the
2496        numerics  with  <STRONG>width_status_line</STRONG>;  and  the  strings with
2497        <STRONG>prtr_non</STRONG>.
2498
2499        <STRONG>HP/UX</STRONG> -- Supports  the  SVr1  subset,  plus  the  SVr[234]
2500        numerics <STRONG>num_labels</STRONG>, <STRONG>label_height</STRONG>, <STRONG>label_width</STRONG>, plus func-
2501        tion keys 11 through 63,  plus  <STRONG>plab_norm</STRONG>,  <STRONG>label_on</STRONG>,  and
2502        <STRONG>label_off</STRONG>, plus some incompatible extensions in the string
2503        table.
2504
2505        <STRONG>AIX</STRONG> -- Supports the SVr1 subset,  plus  function  keys  11
2506        through  63,  plus  a  number of incompatible string table
2507        extensions.
2508
2509        <STRONG>OSF</STRONG> -- Supports both the SVr4 set and the AIX extensions.
2510
2511
2512 </PRE>
2513 <H2><a name="h2-FILES">FILES</a></H2><PRE>
2514        /usr/share/terminfo/?/*  files     containing     terminal
2515                                 descriptions
2516
2517
2518 </PRE>
2519 <H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
2520        <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>,   <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>,  <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>,  <STRONG>printf(3)</STRONG>,  <STRONG><A HREF="term.5.html">term(5)</A></STRONG>.
2521        <STRONG><A HREF="term_variables.3x.html">term_variables(3x)</A></STRONG>.
2522
2523
2524 </PRE>
2525 <H2><a name="h2-AUTHORS">AUTHORS</a></H2><PRE>
2526        Zeyd M. Ben-Halim, Eric  S.  Raymond,  Thomas  E.  Dickey.
2527        Based on pcurses by Pavel Curtis.
2528
2529
2530
2531                                                             <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
2532 </PRE>
2533 <div class="nav">
2534 <ul>
2535 <li><a href="#h2-NAME">NAME</a></li>
2536 <li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
2537 <li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
2538 <ul>
2539 <li><a href="#h3-Predefined-Capabilities">Predefined Capabilities</a></li>
2540 <li><a href="#h3-User-Defined-Capabilities">User-Defined Capabilities</a></li>
2541 <li><a href="#h3-A-Sample-Entry">A Sample Entry</a></li>
2542 <li><a href="#h3-Types-of-Capabilities">Types of Capabilities</a></li>
2543 <li><a href="#h3-Fetching-Compiled-Descriptions">Fetching Compiled Descriptions</a></li>
2544 <li><a href="#h3-Preparing-Descriptions">Preparing Descriptions</a></li>
2545 <li><a href="#h3-Basic-Capabilities">Basic Capabilities</a></li>
2546 <li><a href="#h3-Parameterized-Strings">Parameterized Strings</a></li>
2547 <li><a href="#h3-Cursor-Motions">Cursor Motions</a></li>
2548 <li><a href="#h3-Area-Clears">Area Clears</a></li>
2549 <li><a href="#h3-Insert_delete-line-and-vertical-motions">Insert/delete line and vertical motions</a></li>
2550 <li><a href="#h3-Insert_Delete-Character">Insert/Delete Character</a></li>
2551 <li><a href="#h3-Highlighting_-Underlining_-and-Visible-Bells">Highlighting, Underlining, and Visible Bells</a></li>
2552 <li><a href="#h3-Keypad-and-Function-Keys">Keypad and Function Keys</a></li>
2553 <li><a href="#h3-Tabs-and-Initialization">Tabs and Initialization</a></li>
2554 <li><a href="#h3-Delays-and-Padding">Delays and Padding</a></li>
2555 <li><a href="#h3-Status-Lines">Status Lines</a></li>
2556 <li><a href="#h3-Line-Graphics">Line Graphics</a></li>
2557 <li><a href="#h3-Color-Handling">Color Handling</a></li>
2558 <li><a href="#h3-Miscellaneous">Miscellaneous</a></li>
2559 <li><a href="#h3-Glitches-and-Braindamage">Glitches and Braindamage</a></li>
2560 <li><a href="#h3-Similar-Terminals">Similar Terminals</a></li>
2561 <li><a href="#h3-Pitfalls-of-Long-Entries">Pitfalls of Long Entries</a></li>
2562 <li><a href="#h3-Binary-Compatibility">Binary Compatibility</a></li>
2563 </ul>
2564 </li>
2565 <li><a href="#h2-EXTENSIONS">EXTENSIONS</a></li>
2566 <li><a href="#h2-FILES">FILES</a></li>
2567 <li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
2568 <li><a href="#h2-AUTHORS">AUTHORS</a></li>
2569 </ul>
2570 </div>
2571 </BODY>
2572 </HTML>