#!perl #
# # Subroutine file 'sep.pl' to read data in the form of the SEP header # or parameter files. # # Version: 5.20 # Date: 1998, November 2 # # Coded by: Ludek Klimes # Department of Geophysics, Charles University Prague, # Ke Karlovu 3, 121 16 Praha 2, Czech Republic, # E-mail: klimes@seis.karlov.mff.cuni.cz # #....................................................................... # # This file consists of the following PERL subroutines: # RSEP1...Subroutine designed to read a SEP-like parameter or header # file and to store the parameter names and values for # future use. # RSEP1 # RSEP3...Subroutine designed to read the value of a given text, # integer or real-valued parameter from a previously stored # contents of SEP-like parameter or header file. # RSEP3 # #....................................................................... # # # Form of the SEP (Stanford Exploration Project) parameter files: # Refer to Fortran file sep.for. # #======================================================================= # # # # Subroutine RSEP1($FILE) # ~~~~~~~~~~~~~~~~~~~~~~~ # Subroutine designed to read a SEP-like parameter or header file and to # store the parameter names and values for future use. # # Input: # $FILE...String containing the name of the input SEP parameter # file to be read. # If $FILE=' ', no action is done. # # No output. # #----------------------------------------------------------------------- # sub RSEP1 { package Sep; $FILE=$_[0]; # if ($FILE eq ' ') { @SEPSTR=(); } else { open(LU,"<$FILE"); # Reading the SEP file into string array @SEPSTR @SEPSTR=; close(LU) || die "Error when closing '$FILE'"; } } #======================================================================= # # # # Subroutine RSEP3($NAME,$OUT,$DEF) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Subroutine designed to read the value of a given text, integer or # real-valued parameter from a previously stored contents of SEP-like # parameter or header file. # # Input: # $NAME...String containing the name of the parameter. Except for # its case, it should match the parameter name in the input # SEP parameter file. # $DEF... Default value of the parameter. # # Output: # $OUT... Value of the parameter. # #----------------------------------------------------------------------- # sub RSEP3 { package Sep; $NAME=$_[0]; $DEF=$_[2]; #--------------------------------------------------------------------- # Converting the parameter name to the lowercase string to be searched $nameeq=' '."\L$NAME\E".'='; # # Setting the default value $OUT=$DEF; # # Loop over lines foreach $SEPSTR (@SEPSTR) { $i=index($SEPSTR,'#',0)-1; if ($i==-2) { $i=length($SEPSTR); } # Converting string $SEPSTR to lowercase $sepstr="\L$SEPSTR\E"; $i=rindex($sepstr,$nameeq,$i); if ($i>-1) { # Line contains string $nameeq $i=$i+length($nameeq); if (substr($SEPSTR,$i,1) eq "'") { # Parameter value is a string in apostrophes $i=$i+1; $j=index($SEPSTR,"'",$i); } elsif (substr($SEPSTR,$i,1) eq '"') { # Parameter value is a string in double quotes $i=$i+1; $j=index($SEPSTR,'"',$i); } else { # Parameter value is terminated by ' ' or ',' or end of line or '#' $j=index($SEPSTR,' ',$i); $k=index($SEPSTR,',',$i); if ($j<=-1 || ($k>-1 && $j>$k)) { $j=$k; } if ($j<=-1) { $j=length($SEPSTR)-1; } $k=index($SEPSTR,'#',0); if ($k>-1 && $j>$k) { $j=$k; } } $j=$j-$i; if ($j>0) { $OUT=substr($SEPSTR,$i,$j); } } } #--------------------------------------------------------------------- $_[1]=$OUT; } #======================================================================= 1; #