NAME
   MarpaX::Database::Terminfo::Interface - Terminfo interface

VERSION
   version 0.010

SYNOPSIS
       use MarpaX::Database::Terminfo::Interface qw/:all/;
       use Log::Log4perl qw/:easy/;
       use Log::Any::Adapter;
       use Log::Any qw/$log/;
       #
       # Init log
       #
       our $defaultLog4perlConf = '
       log4perl.rootLogger              = WARN, Screen
       log4perl.appender.Screen         = Log::Log4perl::Appender::Screen
       log4perl.appender.Screen.stderr  = 0
       log4perl.appender.Screen.layout  = PatternLayout
       log4perl.appender.Screen.layout.ConversionPattern = %d %-5p %6P %m{chomp}%n
       ';
       Log::Log4perl::init(\$defaultLog4perlConf);
       Log::Any::Adapter->set('Log4perl');

       tgetent('ansi');

DESCRIPTION
   This modules implements a terminfo X/open-compliant interface.

SUBROUTINES/METHODS
 new($class, $opts)
   Instance an object. An optional $opt is a reference to a hash:

   $opts->{file} or $ENV{MARPAX_DATABASE_TERMINFO_FILE}
       File path to the terminfo database. This module will then parse it
       using Marpa. If set to any true value, this setting has precedence
       over the following txt key/value.

   $opts->{txt} or $ENV{MARPAX_DATABASE_TERMINFO_TXT}
       Text version of the terminfo database. This module will then parse
       it using Marpa. If set to any true value, this setting has
       precedence over the following bin key/value.

   $opts->{bin} or $ENV{MARPAX_DATABASE_TERMINFO_BIN}
       Path to a binary version of the terminfo database, created using
       Storable. This module is distributed with such a binary file, which
       contains the GNU ncurses definitions. The default behaviour is to
       use this file.

   $opts->{caps} or $ENV{MARPAX_DATABASE_TERMINFO_CAPS}
       Path to a text version of the terminfo<->termcap translation. This
       module is distributed with GNU ncurses translation files, namely:
       ncurses-Caps (default), ncurses-Caps.aix4 (default on AIX),
       ncurses-Caps.hpux11 (default on HP/UX), ncurses-Caps.keys,
       ncurses-Caps.osf1r5 (default on OSF1) and ncurses-Caps.uwin.

   $opts->{cache_stubs} or $ENV{MARPAX_DATABASE_TERMINFO_CACHE_STUBS}
       Flag saying if the compiled stubs of string features should be
       cached. Default is true.

   $opts->{cache_stubs_as_txt} or
   $ENV{MARPAX_DATABASE_TERMINFO_CACHE_STUBS_AS_TXT}
       Flag saying if the string versions (i.e. not compiled) stubs of
       string features should be cached or not. Default is true.

   $opts->{stubs_txt} or $ENV{MARPAX_DATABASE_TERMINFO_STUBS_TXT}
       Path to a text version of the terminfo string features<->stubs
       mapping, created using Data::Dumper. The content of this file is the
       text version of all stubs, that will be compiled if needed. This
       option is used only if cache_stubs is on. If set to any true value,
       this setting has precedence over the following bin key/value. Mostly
       useful for debugging or readability: the created stubs are
       immediately comprehensive, and if there is a bug in them, this
       option could be used.

   $opts->{stubs_bin} or $ENV{MARPAX_DATABASE_TERMINFO_STUBS_BIN}
       Path to a binary version of the terminfo string features<->stubs
       mapping, created using Storable module. The content of this file is
       the text version of all stubs, that will all be compiled if needed.
       This option is used only if cache_stubs is on. This module is
       distributed with such a binary file, which contains the GNU ncurses
       stubs definitions. The default behaviour is to use this file.

   $opts->{bsd_tputs} or $ENV{MARPAX_DATABASE_TERMINFO_BSD_TPUTS}
       Specific to ancient BSD programs, like nethack, that likes to get
       systematic delays. Default is false.

   $opts->{use_env} or $ENV{MARPAX_DATABASE_TERMINFO_USE_ENV}
       Initial value of use_env boolean, saying if lines and columns
       specified in terminfo are used or not. Default value is true. Please
       refer to the use_env() method.

   Default terminal setup is done using the $ENV{TERM} environment
   variable, if it exist, or 'unknown'. The database used is not a compiled
   database as with GNU ncurses, therefore the environment variable
   TERMINFO is not used. Instead, a compiled database should a perl's
   Storable version of a text database parsed by Marpa. See
   $ENV{MARPAX_DATABASE_TERMINFO_BIN} upper.

 _terminfo_db($self)
   Internal function. Returns the raw database, in the form of an array of
   hashes.

 _terminfo_current($self)
   Internal function. Returns the current terminfo entry.

 _t2other($self)
   Internal function. Returns the terminfo->termcap translation hash.

 _c2other($self)
   Internal function. Returns the terminfo->termcap translation hash.

 _capalias($self)
   Internal function. Returns the termcap aliases.

 _infoalias($self)
   Internal function. Returns the termcap aliases.

 _terminfo_init($self)
   Internal function. Initialize if needed and if possible the current
   terminfo. Returns a pointer to the current terminfo entry.

 flush($self, $cb, @args);
   Defines a flush callback function $cb with optional @arguments. Such
   callback is used in some case like a delay. If called as $self->flush(),
   returns undef or a reference to an array containing [$cb, @args].

 tgetent($self, $name[, $fh])
   Loads the entry for $name. Returns 1 on success, 0 if no entry, -1 if
   the terminfo database could not be found. This function will warn if the
   database has a problem. $name must be an alias in the terminfo database.
   If multiple entries have the same alias, the first that matches is
   taken. The variables PC, UP and BC are set by tgetent to the terminfo
   entry's data for pad_char, cursor_up and backspace_if_not_bs,
   respectively. The variable ospeed is set in a system-specific coding to
   reflect the terminal speed, or $ENV{MARPAX_DATABASE_TERMINFO_OSPEED} if
   defined, otherwise we attempt to get the value using POSIX interface, or
   "13". ospeed should be a value between 0 and 15, or 4097 and 4105, or
   4107 and 4111. The variable baudrate can be
   $ENV{MARPAX_DATABASE_TERMINFO_BAUDRATE} (unchecked! i.e. at your own
   risk) or is derived from ospeed, or "9600". $fh is an optional opened
   filehandle, used to guess about baudrate and ospeed. Defaults to
   fileno(\*STDIN) or 0. When loading a terminfo, termcap and variable
   entries are automatically derived using the caps parameter as documented
   in _new_instance().

 delay($self, $ms)
   Do a delay of $ms milliseconds when producing the output. If the current
   terminfo variable no_pad_char is true, or if there is no PC variable, do
   a system sleep. Otherwise use the PC variable as many times as necessary
   followed by a flush callback. Do nothing if outside of a "producing
   output" context (i.e. tputs(), etc...). Please note that delay by itself
   in the string is not recognized as a grammar lexeme. This is tputs()
   that is seeing the delay.

 tgetflag($self, $id)
   Gets the boolean value for termcap entry $id, or 0 if not available.
   Only the first two characters of the id parameter are compared in
   lookups.

 tigetflag($self, $id)
   Gets the boolean value for terminfo entry $id. Returns the value -1 if
   $id is not a boolean capability, or 0 if it is canceled or absent from
   the terminal description.

 tvgetflag($self, $id)
   Search for the boolean variable $id. Return true if found, false in all
   other cases.

 tgetnum($self, $id)
   Stores the numeric value for termcap entry $id, or -1 if not available.
   Only the first two characters of the id parameter are compared in
   lookups.

 tigetnum($self, $id)
   Gets the numeric value for terminfo entry $id. Returns the value -2 if
   $id is not a numeric capability, or -1 if it is canceled or absent from
   the terminal description.

 tvgetnum($self, $id, [$areap])
   Search for the numeric variable $id. If found, return true and store its
   value in the eventual ${$areap}, return false in all other cases.

 tgetstr($self, $id, [$areap])
   Returns a reference to termcap string entry for $id, or zero if it is
   not available. If $areap is defined and is a reference: if $id is a
   string then the found value is inserted at current pos()isition in
   ${$areap} and pos()isition is updated, otherwise (i.e. boolean and
   numeric cases) ${$areap} is overwritten with the found value. Only the
   first two characters of the id parameter are compared in lookups.

 tigetstr($self, $id)
   Returns a reference to terminfo string entry for $id, or -1 if $id is
   not a string capabilitty, or 0 it is canceled or absent from terminal
   description.

 tvgetstr($self, $id, [$areap])
   Search for the string variable $id. If found, return true and insert its
   value at pos()istion of eventual ${$areap}, this pos() being updated
   after the insert, return false in all other cases.

 tputs($self, $str, $affcnt, $outc, @outcArgs)
   Applies padding information to the string $str and outputs it. The $str
   must be a terminfo string variable or the return value from tparm(),
   tgetstr(), or tgoto(). $affcnt is the number of lines affected, or 1 if
   not applicable. $outc is a putchar-like routine to which the characters
   are passed, one at a time, as first argument, and @outcArgs as remaining
   arguments.

 putp($self, $str)
   Calls $self->tputs($str, 1, sub {print STDOUT shift}). Note that the
   output of putp always goes to stdout, not to the fildes specified in
   setupterm..

 tparm($self, $string, @param)
   Instantiates the string $string with parameters @param. Returns the
   string with the parameters applied.

 tgoto($self, $string, $col, $row)
   Instantiates the parameters into the given capability. The output from
   this routine is to be passed to tputs.

 use_env($self[, $boolean])
   Returns or set the use_env boolean. $boolean can be anything, this is
   internally convert to either 0 or 1.

SEE ALSO
   Unix Documentation Project - terminfo
   <http://nixdoc.net/man-pages/HP-UX/man4/terminfo.4.html#Formal%20Grammar
   >

   GNU Ncurses <http://www.gnu.org/software/ncurses/>

   Marpa::R2 <http://metacpan.org/release/Marpa-R2>

SUPPORT
 Bugs / Feature Requests
   Please report any bugs or feature requests through the issue tracker at
   <https://rt.cpan.org/Public/Dist/Display.html?Name=MarpaX-Database-Termi
   nfo>. You will be notified automatically of any progress on your issue.

 Source Code
   This is open source software. The code repository is available for
   public review and contribution under the terms of the license.

   <https://github.com/jddurand/marpax-database-terminfo>

     git clone git://github.com/jddurand/marpax-database-terminfo.git

AUTHOR
   jddurand <[email protected]>

CONTRIBUTOR
   Jean-Damien Durand <[email protected]>

COPYRIGHT AND LICENSE
   This software is copyright (c) 2013 by Jean-Damien Durand.

   This is free software; you can redistribute it and/or modify it under
   the same terms as the Perl 5 programming language system itself.