<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<!-- 
  ****************************************************************************
  * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * @Id: tic.1m,v 1.44 2006/12/24 17:59:11 tom Exp @
-->
<HTML>
<HEAD>
<TITLE>tic 1m</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1>tic 1m</H1>
<HR>
<PRE>
<!-- Manpage converted by man2html 3.0.1 -->
<STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>                                                         <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>




</PRE>
<H2>NAME</H2><PRE>
       <STRONG>tic</STRONG> - the <EM>terminfo</EM> entry-description compiler


</PRE>
<H2>SYNOPSIS</H2><PRE>
       <STRONG>tic</STRONG>  [<STRONG>-1CGILNTUVacfgrstx</STRONG>]  [<STRONG>-e</STRONG> <EM>names</EM>] [<STRONG>-o</STRONG> <EM>dir</EM>] [<STRONG>-R</STRONG> <EM>subset</EM>]
       [<STRONG>-v</STRONG>[<EM>n</EM>]] [<STRONG>-w</STRONG>[<EM>n</EM>]] <EM>file</EM>


</PRE>
<H2>DESCRIPTION</H2><PRE>
       The command <STRONG>tic</STRONG> translates a  <STRONG>terminfo</STRONG>  file  from  source
       format  into compiled format.  The compiled format is nec-
       essary for use with the library routines in <STRONG><A HREF="ncurses.3x.html">ncurses(3x)</A></STRONG>.

       The results are normally placed  in  the  system  terminfo
       directory  <STRONG>/usr/share/terminfo</STRONG>.   There  are  two  ways to
       change this behavior.

       First, you may override the system default by setting  the
       variable  <STRONG>TERMINFO</STRONG>  in  your  shell environment to a valid
       (existing) directory name.

       Secondly, if <STRONG>tic</STRONG> cannot get access to  <EM>/usr/share/terminfo</EM>
       or  your  TERMINFO  directory,  it looks for the directory
       <EM>$HOME/.terminfo</EM>; if that directory exists,  the  entry  is
       placed there.

       Libraries that read terminfo entries are expected to check
       for a TERMINFO directory first, look at <EM>$HOME/.terminfo</EM> if
       TERMINFO  is  not set, and finally look in <EM>/usr/share/ter-</EM>
       <EM>minfo</EM>.

       <STRONG>-1</STRONG>     restricts the output to a single column

       <STRONG>-a</STRONG>     tells  <STRONG>tic</STRONG>  to  retain  commented-out  capabilities
              rather than discarding them.  Capabilities are com-
              mented by prefixing them with a period.  This  sets
              the  <STRONG>-x</STRONG> option, because it treats the commented-out
              entries as user-defined names.  If  the  source  is
              termcap,  accept  the 2-character names required by
              version 6.  Otherwise these are ignored.

       <STRONG>-C</STRONG>     Force source translation to termcap format.   Note:
              this  differs  from the <STRONG>-C</STRONG> option of <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG> in
              that it does not merely translate capability names,
              but  also  translates  terminfo  strings to termcap
              format.  Capabilities that are not translatable are
              left  in  the  entry under their terminfo names but
              commented out with two preceding dots.

       <STRONG>-c</STRONG>     tells <STRONG>tic</STRONG> to only check <EM>file</EM> for errors,  including
              syntax  problems and bad use links.  If you specify
              <STRONG>-C</STRONG> (<STRONG>-I</STRONG>) with this option, the code will print warn-
              ings about entries which, after use resolution, are
              more than 1023 (4096) bytes long.  Due to  a  fixed
              buffer  length  in  older  termcap libraries (and a
              documented limit in terminfo),  these  entries  may
              cause core dumps.

       <STRONG>-e</STRONG> <EM>names</EM>
              Limit  writes  and  translations  to  the following
              comma-separated list of terminals.  If any name  or
              alias of a terminal matches one of the names in the
              list, the entry will be written  or  translated  as
              normal.   Otherwise no output will be generated for
              it.  The option value is interpreted as a file con-
              taining  the  list  if  it  contains a '/'.  (Note:
              depending on how tic was compiled, this option  may
              require <STRONG>-I</STRONG> or <STRONG>-C</STRONG>.)

       <STRONG>-f</STRONG>     Display  complex  terminfo  strings  which  contain
              if/then/else/endif expressions indented  for  read-
              ability.

       <STRONG>-G</STRONG>     Display  constant  literals  in decimal form rather
              than their character equivalents.

       <STRONG>-g</STRONG>     Display constant character literals in quoted  form
              rather than their decimal equivalents.

       <STRONG>-I</STRONG>     Force source translation to terminfo format.

       <STRONG>-L</STRONG>     Force  source  translation to terminfo format using
              the long C variable names listed in &lt;<STRONG>term.h</STRONG>&gt;

       <STRONG>-N</STRONG>     Disable smart defaults.  Normally, when translating
              from termcap to terminfo, the compiler makes a num-
              ber of assumptions about  the  defaults  of  string
              capabilities  <STRONG>reset1_string</STRONG>,  <STRONG>carriage_return</STRONG>, <STRONG>cur-</STRONG>
              <STRONG>sor_left</STRONG>, <STRONG>cursor_down</STRONG>,  <STRONG>scroll_forward</STRONG>,  <STRONG>tab</STRONG>,  <STRONG>new-</STRONG>
              <STRONG>line</STRONG>,  <STRONG>key_backspace</STRONG>,  <STRONG>key_left</STRONG>, and <STRONG>key_down</STRONG>, then
              attempts to use obsolete  termcap  capabilities  to
              deduce correct values.  It also normally suppresses
              output of obsolete termcap capabilities such as <STRONG>bs</STRONG>.
              This  option forces a more literal translation that
              also preserves the obsolete capabilities.

       <STRONG>-o</STRONG><EM>dir</EM>  Write compiled entries to given  directory.   Over-
              rides the TERMINFO environment variable.

       <STRONG>-R</STRONG><EM>subset</EM>
              Restrict  output to a given subset.  This option is
              for use with  archaic  versions  of  terminfo  like
              those on SVr1, Ultrix, or HP/UX that do not support
              the full set of SVR4/XSI Curses terminfo; and  out-
              right broken ports like AIX 3.x that have their own
              extensions incompatible with  SVr4/XSI.   Available
              subsets  are  "SVr1",  "Ultrix",  "HP",  "BSD"  and
              "AIX"; see <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for details.

       <STRONG>-r</STRONG>     Force entry resolution (so there are  no  remaining
              tc  capabilities)  even  when  doing translation to
              termcap format.  This may  be  needed  if  you  are
              preparing  a  termcap  file  for  a termcap library
              (such as GNU termcap through  version  1.3  or  BSD
              termcap through 4.3BSD) that does not handle multi-
              ple tc capabilities per entry.

       <STRONG>-s</STRONG>     Summarize the compile by showing the directory into
              which  entries  are  written,  and  the  number  of
              entries which are compiled.

       <STRONG>-T</STRONG>     eliminates size-restrictions on the generated text.
              This  is  mainly  useful  for testing and analysis,
              since the compiled descriptions are limited  (e.g.,
              1023 for termcap, 4096 for terminfo).

       <STRONG>-t</STRONG>     tells  <STRONG>tic</STRONG>  to  discard commented-out capabilities.
              Normally when translating from terminfo to termcap,
              untranslatable capabilities are commented-out.

       <STRONG>-U</STRONG>   tells  <STRONG>tic</STRONG> to not post-process the data after parsing
            the source file.  Normally, it infers data  which  is
            commonly  missing in older terminfo data, or in term-
            caps.

       <STRONG>-V</STRONG>   reports the version of ncurses which was used in this
            program, and exits.

       <STRONG>-v</STRONG><EM>n</EM>  specifies  that  (verbose) output be written to stan-
            dard error trace information showing <STRONG>tic</STRONG>'s  progress.
            The  optional  parameter  <EM>n</EM> is a number from 1 to 10,
            inclusive, indicating the desired level of detail  of
            information.   If  <EM>n</EM> is omitted, the default level is
            1.  If <EM>n</EM> is specified and greater than 1,  the  level
            of detail is increased.

       <STRONG>-w</STRONG><EM>n</EM>  specifies  the width of the output.  The parameter is
            optional.  If it is omitted, it defaults to 60.

       <STRONG>-x</STRONG>   Treat unknown capabilities as user-defined.  That is,
            if  you  supply  a capability name which <STRONG>tic</STRONG> does not
            recognize, it will infer its type (boolean, number or
            string)  from  the  syntax and make an extended table
            entry  for  that.   User-defined  capability  strings
            whose  name begins with ``k'' are treated as function
            keys.

       <EM>file</EM> contains one or more <STRONG>terminfo</STRONG>  terminal  descriptions
            in source format [see <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>].  Each description
            in the file describes the capabilities of a  particu-
            lar terminal.

       The debug flag levels are as follows:

       1      Names of files created and linked

       2      Information related to the ``use'' facility

       3      Statistics from the hashing algorithm

       5      String-table memory allocations

       7      Entries into the string-table

       8      List of tokens encountered by scanner

       9      All values computed in construction of the hash ta-
              ble

       If the debug level <EM>n</EM> is not given, it is taken to be  one.

       All but one of the capabilities recognized by <STRONG>tic</STRONG> are doc-
       umented in <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.  The exception is the <STRONG>use</STRONG> capabil-
       ity.

       When  a  <STRONG>use</STRONG>=<EM>entry</EM>-<EM>name</EM>  field is discovered in a terminal
       entry currently being compiled, <STRONG>tic</STRONG> reads  in  the  binary
       from  <STRONG>/usr/share/terminfo</STRONG> to complete the entry.  (Entries
       created from <EM>file</EM> will be used first.  If the  environment
       variable  <STRONG>TERMINFO</STRONG>  is  set,  that  directory  is searched
       instead of <STRONG>/usr/share/terminfo</STRONG>.)  <STRONG>tic</STRONG> duplicates the capa-
       bilities  in  <EM>entry</EM>-<EM>name</EM>  for  the current entry, with the
       exception  of  those  capabilities  that  explicitly   are
       defined in the current entry.

       When    an   entry,   e.g.,   <STRONG>entry_name_1</STRONG>,   contains   a
       <STRONG>use=</STRONG><EM>entry</EM>_<EM>name</EM>_<EM>2</EM>  field,  any  canceled  capabilities   in
       <EM>entry</EM>_<EM>name</EM>_<EM>2</EM>  must also appear in <STRONG>entry_name_1</STRONG> before <STRONG>use=</STRONG>
       for these capabilities to be canceled in <STRONG>entry_name_1</STRONG>.

       If the environment variable <STRONG>TERMINFO</STRONG> is set, the  compiled
       results are placed there instead of <STRONG>/usr/share/terminfo</STRONG>.

       Total compiled entries cannot exceed 4096 bytes.  The name
       field cannot exceed 512 bytes.  Terminal  names  exceeding
       the  maximum  alias  length (32 characters on systems with
       long filenames, 14 characters otherwise) will be truncated
       to  the maximum alias length and a warning message will be
       printed.


</PRE>
<H2>COMPATIBILITY</H2><PRE>
       There is some evidence that historic  <STRONG>tic</STRONG>  implementations
       treated  description  fields with no whitespace in them as
       additional aliases or short names.  This <STRONG>tic</STRONG> does  not  do
       that,  but  it  does  warn  when description fields may be
       treated that way and check them for dangerous  characters.


</PRE>
<H2>EXTENSIONS</H2><PRE>
       Unlike the stock SVr4 <STRONG>tic</STRONG> command, this implementation can
       actually compile termcap sources.   In  fact,  entries  in
       terminfo  and  termcap  syntax  can  be  mixed in a single
       source file.  See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>  for  the  list  of  termcap
       names taken to be equivalent to terminfo names.

       The  SVr4  manual  pages  are  not clear on the resolution
       rules for <STRONG>use</STRONG> capabilities.  This  implementation  of  <STRONG>tic</STRONG>
       will find <STRONG>use</STRONG> targets anywhere in the source file, or any-
       where in the file tree rooted at <STRONG>TERMINFO</STRONG> (if <STRONG>TERMINFO</STRONG>  is
       defined),  or  in the user's <EM>$HOME/.terminfo</EM> directory (if
       it exists), or (finally) anywhere  in  the  system's  file
       tree of compiled entries.

       The  error  messages from this <STRONG>tic</STRONG> have the same format as
       GNU C error messages, and can be  parsed  by  GNU  Emacs's
       compile facility.

       The  <STRONG>-C</STRONG>,  <STRONG>-G</STRONG>,  <STRONG>-I</STRONG>, <STRONG>-N</STRONG>, <STRONG>-R</STRONG>, <STRONG>-T</STRONG>, <STRONG>-V</STRONG>, <STRONG>-a</STRONG>, <STRONG>-e</STRONG>, <STRONG>-f</STRONG>, <STRONG>-g</STRONG>, <STRONG>-o</STRONG>, <STRONG>-r</STRONG>,
       <STRONG>-s</STRONG>, <STRONG>-t</STRONG> and <STRONG>-x</STRONG> options are not supported under  SVr4.   The
       SVr4 <STRONG>-c</STRONG> mode does not report bad use links.

       System  V does not compile entries to or read entries from
       your <EM>$HOME/.terminfo</EM> directory unless TERMINFO is  explic-
       itly set to it.


</PRE>
<H2>FILES</H2><PRE>
       <STRONG>/usr/share/terminfo/?/*</STRONG>
            Compiled terminal description database.


</PRE>
<H2>SEE ALSO</H2><PRE>
       <STRONG><A HREF="infocmp.1m.html">infocmp(1m)</A></STRONG>,    <STRONG><A HREF="captoinfo.1m.html">captoinfo(1m)</A></STRONG>,   <STRONG><A HREF="infotocap.1m.html">infotocap(1m)</A></STRONG>,   <STRONG><A HREF="toe.1m.html">toe(1m)</A></STRONG>,
       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.

       This describes <STRONG>ncurses</STRONG> version 5.6 (patch 20081011).



                                                                <STRONG><A HREF="tic.1m.html">tic(1m)</A></STRONG>
</PRE>
<HR>
<ADDRESS>
Man(1) output converted with
<a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a>
</ADDRESS>
</BODY>
</HTML>
