package Util::Xanadu; ############################################################################## # # DESCRIPTION: This Tool subclass adds functionality for running # DESCRIPTION: xspec and ximage # # HISTORY # HISTORY: $Log: Xanadu.pm,v $ # HISTORY: Revision 1.7 2014/02/27 07:01:07 apsop # HISTORY: VERSION header now shows CVS Revision # HISTORY: # HISTORY: Revision 1.6 2011/01/18 20:34:54 apsop # HISTORY: Module changed to better handle calls to qdp and xselect # HISTORY: Also, environment parameter $xanadu is set to $ENV{HEADAS} # HISTORY: # HISTORY: Revision 1.5 2009/06/09 15:04:52 apsop # HISTORY: added command line qdp option # HISTORY: # HISTORY: Revision 1.4 2009/06/05 22:12:37 apsop # HISTORY: added qdp block to script method # HISTORY: # HISTORY: Revision 1.3 2006/09/10 20:11:21 apsop # HISTORY: Set environmental variables PGPLOT_FONT, PGPLOT_RGB and PFILES. # HISTORY: # HISTORY: Revision 1.2 2006/08/01 20:35:34 apsop # HISTORY: Add in CVS history indicator. # HISTORY: # HISTORY: 1.0 -> 1.1 2002-04-01 # HISTORY: Now allows an Xserver display to be specified when initializing # HISTORY: # HISTORY: 1.1 -> 1.2 2004-02-11 # HISTORY: Modified environment setup to conform to the new Tool scheme. # # VERSION: $Revision: 1.7 $ # ############################################################################## use Util::Tool; @ISA=("Util::Tool"); use strict; my $INVOCATION; my $BIN; my $LIB; my %ENVIRONMENT=(); sub new { my $self=shift; my $program=shift; $self=$self->SUPER::new($BIN,$program); ##################################### # set the paths ##################################### $self->bins($BIN); $self->libs($LIB); ################################## # set the temporary command file ################################## $INVOCATION++; $self->{COMMAND_FILE} = "${program}_${INVOCATION}_commands.tmp"; if($program eq "xspec" ) { $self->command_line("-", $self->{COMMAND_FILE} ); } elsif($program eq "ximage") { $self->command_line("@".$self->{COMMAND_FILE} ); } return $self; } ###################### # ACCESSORS: ###################### ######################################################################## # Returns a hash of environment variables which must # be set before running this tool ######################################################################## sub environment { my $self=shift; return {%ENVIRONMENT}; } # end of environment method #################################################################### # get or set the executable directories in the class data. # This method also sets a number of environment variables # required by XANADU. ################################################################## sub bin { #(directory, [display]) my $self=shift; if (@_) { ####################################################### # set the bin directory and some environment variables ####################################################### $BIN = shift; my $display=shift || ":0.0"; my $xanadu=$BIN; $xanadu =~ s/\/[^\/]*$//; $ENVIRONMENT{XANBIN}=$xanadu; $ENVIRONMENT{HEADAS}=$xanadu; $ENVIRONMENT{XRDEFAULTS} ="$xanadu/xrdefaults"; $ENVIRONMENT{POW_LIBRARY}="$xanadu/lib/pow"; $ENVIRONMENT{PGPLOT_DIR} ="$xanadu/lib"; $ENVIRONMENT{PGPLOT_FONT} ="$xanadu/lib/grfont.dat"; $ENVIRONMENT{PGPLOT_RGB} ="$xanadu/lib/rgb.txt"; $ENVIRONMENT{PFILES} = ".;$xanadu/syspfiles"; $LIB="$xanadu/lib"; $xanadu =~ s/\/[^\/]*$//; $ENVIRONMENT{XANADU}=$xanadu; ################################################################# # Ximage expects an X server, even if it never actually # displays anything on it. If there isn't one it complains. # Here we simply set the display and assume that it is actually # running on the system. ################################################################# $ENVIRONMENT{DISPLAY} = $display; } return $BIN } # end of bin method ######################################################################### # set the command script to be fed to the xanadu tool ######################################################################### sub script { #(commands) my $self = shift; unlink $self->{COMMAND_FILE}; open SCRIPT, ">$self->{COMMAND_FILE}"; print SCRIPT join("\n", @_) ."\n"; close SCRIPT; ######################################## # For QDP dump script to $self->{STDIN} ######################################## if ( $self->name( ) eq 'qdp') { $self->command_line( shift @_ ); $self->stdin( join("\n", @_) ."\n" ); } elsif($self->name( ) eq 'xselect') { $self->command_line( "\@".$self->{COMMAND_FILE} ); } return $self; } # end of script method ############################################################################ ############################################################################ # clean up temporary files ############################################################################ sub DESTROY { my $self=shift; unlink $self->{COMMAND_FILE}; unlink "xautosav.xcm"; # xspec file # check for an overridden destructor... $self->SUPER::DESTROY if $self->can("SUPER::DESTROY"); } 1;