Util::Ftool (version 2.1)


package Util::Ftool;
##############################################################################
#
# DESCRIPTION: This sub-class adds FTOOLS environment initialization
#
# HISTORY: 1.0 -> 1.1 2001-03-05
# HISTORY: Modified the way the PATH and LD_LIBRARY_PATH environment variables
# HISTORY: are set to make the more robust.
# HISTORY: 
# HISTORY: 1.1 -> 2.0 2002-04-18
# HISTORY: Made this a subclass of ParfileTool to better handle FTOOLS
# HISTORY: and HEAdas, not to mention PseudoFtools.
# HISTORY:
# HISTORY: 2.0 -> 2.1 2004-02-11
# HISTORY: The environment method now returns a reference to a hash
# HISTORY: 
# HISTORY: 2.1 -> 2.2 2004-10-01
# HISTORY: Now set the TCLRL_LIBDIR environment variable
#
# VERSION: 2.1
#
##############################################################################

use Util::ParfileTool;
@ISA=("Util::ParfileTool");
use strict;

my $INSTALL_DIR;
my @BINS=();
my @LIBS=();
my $SYSPFILES;
my %ENVIRONMENT=();

my $VERSION;

#########################################################################
#
#########################################################################
sub new {
    my $self=shift;
    my $tool=shift;

    $self->SUPER::new($tool,$SYSPFILES, \@BINS, \@LIBS);

} # end of constructor




########################################################################
# Returns a hash of environment variables which must
# be set before running this tool
########################################################################
sub environment {
    my $self=shift;

    return {%{$self->SUPER::environment()}, %ENVIRONMENT};

} # end of environment method




####################################################################
# This method does all the initialization for this class, given
# the name of the FTOOLS machine-specific instalation directory
####################################################################
sub install_dir {
        my $self=shift;


    if(@_) {
        my $ftools = shift;

        $INSTALL_DIR=$ftools;

        #####################################################
        # set the executable directories, the libraries and 
        # the parfile directory
        #####################################################
        @BINS=("$ftools/bin", "$ftools/scripts");
        @LIBS=("$ftools/lib");
        $SYSPFILES = "$ftools/syspfiles";

        ##########################################
        # parse the FTOOLS version name
        ##########################################
        ($VERSION) = $ftools =~ m|/[a-z]*\.([^/]*)/[^/]*$|;

        #####################################################
        # Set the FTOOLS environment variables
        #####################################################
        $ENVIRONMENT{FTOOLS}=$ftools;
        $ENVIRONMENT{LHEASOFT}=$ftools;
        $ENVIRONMENT{LHEA_DATA}="$ftools/../refdata";
        $ENVIRONMENT{LHEA_HELP}="$ftools/../help";
        $ENVIRONMENT{PGPLOT_FONT}="$ftools/lib/grfont.dat";

        $ENVIRONMENT{LHEAPERL}=$^X; # <- perl version running this script

        $ENVIRONMENT{FTOOLSINPUT }="stdin";
        $ENVIRONMENT{FTOOLSOUTPUT}="stdout";

        #####################################################################
        # the following is to get rid of the 
        # readline: warning: rl_prep_terminal: cannot get terminal settings
        # error from lcurve, but it is broken in the release version of
        # FTOOLS 5.2 . Talk to Bryan Irby about this.
        # 2004-10-01 setting this seems to break grppha in 5.3.1
        #####################################################################
        #$ENVIRONMENT{XPINOREADLINE} = 1;
        
        $ENVIRONMENT{TCLRL_LIBDIR} = "$ftools/lib";
    }

    return $INSTALL_DIR;
}

##############################################################
# returns the version of the FTOOLS being used.
# Note this version name is derived by parsing the name
# of the FTOOLS instalation directory.
############################################################
sub version {
    my $self=shift;
    return $VERSION;
}


####################################################
# assemble the error message.
# Override the generic message to specify "FTOOL"
####################################################
sub error_message {
    my $self=shift;

    my $message="Error from FTOOL $self->{COMMAND} - ".
                "exit status $self->{STATUS}";
    return $message;
}


sub DESTROY {
    my $self = shift;
    # check for an overridden destructor...
    $self->SUPER::DESTROY if $self->can("SUPER::DESTROY");
}


1;