# # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation, # YDC Corporation, IPA (Information-technology Promotion Agency, Japan). # All rights reserved. # # Redistribution and use of this software in source and binary forms, with # or without modification, are permitted provided that the following # conditions and disclaimer are agreed and accepted by the user: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Neither the names of the copyrighters, the name of the project which # is related to this software (hereinafter referred to as "project") nor # the names of the contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # 4. No merchantable use may be permitted without prior written # notification to the copyrighters. However, using this software for the # purpose of testing or evaluating any products including merchantable # products may be permitted without any notification to the copyrighters. # # # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING # BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF # THE POSSIBILITY OF SUCH DAMAGE. # ######################################################################## package V6evalCommon; use Exporter; @ISA = qw(Exporter); use File::Basename; @EXPORT = qw( pathinit searchPath $SeqName $SeqDir $V6EVALPREFX $V6EVALROOT $V6EVALBIN $V6EVALETC $V6EVALINC ); sub pathinit(@); sub searchPath($$); #sub readTnDef($); #sub readNutDef($); ######################################################################## # Path Init #----------------------------------------------------------------------- sub pathinit(@) { my( $path, # path ) = @_; ($SeqName,$SeqDir,$SeqSuffix) = fileparse($0,'.seq'); $V6EVALPREFIX= "/usr/local/v6eval"; $V6EVALROOT = $path || $ENV{V6EVALROOT} || $V6EVALPREFIX; $V6EVALBIN = $ENV{V6EVALBIN} || "$V6EVALROOT/bin/"; $V6EVALETC = $ENV{V6EVALETC} || "./:$V6EVALROOT/etc/"; $V6EVALINC = $ENV{V6EVALINC} || "$SeqDir:./:$V6EVALROOT/include/"; } ######################################################################## # Search Path #----------------------------------------------------------------------- sub searchPath($$) { my( $path, # path $filename # filename for search ) = @_; my $fullname=""; if($filename =~ m!.*/.+!) { $fullname=$filename; } my @paths=split(/:/,($path)); foreach(@paths) { my $tmpname=$_ . "/" . $filename; #my $tmpname=$_ . $filename; if($fullname eq "") { $fullname=$tmpname if(-r $tmpname); } } $fullname; } __END__ sub readTnDef($) { my( $tn ) = @_; #--------------------------------------------------------------- # Check TN definition and setup environment #--------------------------------------------------------------- my (%TnDef); prTrace("Looking up $tn"); open(FILE,"$tn") || prErrExit("Can not open $tn"); my $lines=0; while(){ $lines++; # skip comment line next if(/^\s*$/ || /^#/); # chomp; # check syntax if( /^(socketpath)\s+(\S+)/ ) { $SocketPath=$2; } elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-f]{1,2}:){5}[0-9a-f]{1,2})/){ $TnDef{$1."_device"}=$2; $TnDef{$1."_addr"}=$3; } elsif( /^(RemoteCuPath)\s+(\S+)/ || /^(RemoteDevice)\s+(\S+)/ || /^(RemoteDebug)\s+(\S+)/ || /^(RemoteIntDebug)\s+(\S+)/ || /^(RemoteLog)\s+(\S+)/ || /^(RemoteSpeed)\s+(\S+)/ || /^(RemoteLogout)\s+(\S+)/ || /^(RemoteMethod)\s+(\S+)/ || /^(filter)\s+(\S+)/){ } else{ $TnDef{'error'} .= "line $lines : unknown directive $_\n";} # set if( /^(\S+)\s+(.*)/ ) { if($TnDef{$1}){ $TnDef{'error'} .= "line $lines : duplicate entry $_\n";} } else { $TnDef{$1} = $2; } } prTrace("TN : $_"); } close FILE; return %TnDef; } sub readNutDef($) { my( $nut ) = @_; #--------------------------------------------------------------- # Check NUT definition and setup environment #--------------------------------------------------------------- my (%NutDef); prTrace("Looking up $nut"); open(FILE, "$nut") || prErrExit("Can not open $nut"); while(){ next if(/^\s*$/ || /^#/); # remove comment chomp; if( /^(\S+)\s+(.*)/ ) { $NutDef{$1} = $2; } if( /^(System)\s+(.*)/ || /^(TargetName)\s+(.*)/ || /^(HostName)\s+(.*)/ || /^(Type)\s+(.*)/ ) { prLog("$1$2"); } elsif( /^(User)\s+(\S+)/ || /^(Password)\s+(\S+)/ ){ } elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2})/){ $NutDef{$1."_device"}=$2; $NutDef{$1."_addr"}=$3; } else{ $NutDef{'error'} .= "line $lines : unknown directive $_\n";} prTrace("NUT: $_"); } close FILE; return %NutDef; }