C
C Subroutine file 'sep.for' to read data in the form of the SEP header C or parameter files. C C Version: 5.60 C Date: 2002, March 4 C C Coded by: Ludek Klimes C Department of Geophysics, Charles University Prague, C Ke Karlovu 3, 121 16 Praha 2, Czech Republic, C E-mail: klimes@seis.karlov.mff.cuni.cz C C....................................................................... C C This file consists of the following external procedures: C SEPB... Subprogram designed to initiate the number of parameters C stored in common blocks /SEPT/ and /SEPC/ (include file C 'sep.inc'). C SEPB C SSEP... Subroutine designed to Switch between different sets C of the SEP parameters. C SSEP C RSEP1...Subroutine designed to Read a SEP-like parameter or header C file and to store the parameter names and values for C future use. It does the same as WSEP1 and closes the C input file. C RSEP1 C WSEP1...Subroutine designed to read a SEP-like parameter or header C file and to store the parameter names and values for C future use. It does not close the input file and leaves C it open for Writing. C WSEP1 C RSEP2...Subroutine designed to take a line from a SEP-like C parameter or header file and to store the parameter names C and values for future use. C RSEP2 C RSEP3Q..Subroutine designed to decide whether a parameter is C a number or a string. C RSEP3Q C RSEP3R..Subroutine designed to read the value of a given C real-valued parameter from previously stored contents of C SEP-like parameter or header files. C RSEP3R C RSEP3I..Subroutine designed to read the value of a given integer C parameter from previously stored contents of SEP-like C parameter or header files. Note that integer value can C be read both by RSEP3R into real-valued variable or by C RSEP3I into integer variable. C RSEP3I C RSEP3T..Subroutine designed to read the value of a given C text-valued parameter from previously stored contents of C SEP-like parameter or header files. C RSEP3T C WSEPR...Subroutine designed to write the value of a given C real-valued parameter into the output string. C WSEPR C WSEPI...Subroutine designed to write the value of a given C integer parameter into the output string. C WSEPI C WSEPT...Subroutine designed to write the value of a given C text-valued parameter into the output string. C WSEPT C WSEP3R..Subroutine designed to write the value of a given C real-valued parameter into the output file. C WSEP3R C WSEP3I..Subroutine designed to write the value of a given C integer parameter into the output file. C WSEP3I C WSEP3T..Subroutine designed to write the value of a given C text-valued parameter into the output file. C WSEP3T C C Referred external functions: C LOWER...file 'length.for' C LENGTH..file 'length.for' C C....................................................................... C C C Form of the SEP (Stanford Exploration Project) parameter files: C C All the data are specified in the form of PARAMETER=VALUE, e.g. C N1=50, with PARAMETER directly preceding = without intervening C spaces and with VALUE directly following = without intervening C spaces. The PARAMETER=VALUE couple must be delimited by a space C or comma from both sides. PARAMETER= followed by a space resets C the default parameter value. C C All other text in the input files is ignored. The file thus may C contain unused data or comments without leading comment character. C Everything between comment character # and the end of the C respective line is ignored, too. C C The PARAMETER=VALUE couples may be specified in any order. C The last appearance takes precedence. C C PARAMETER is the string identifying the variable. It must not be C enclosed in apostrophes (if it were, the apostrophes would be C considered as the part of the identifier). It must immediately C precede '=', with no intervening spaces. From the left, PARAMETER C is delimited by a space ' ', or by comma ','. C The PARAMETER string is not case-sensitive. C C On input, all characters '=' are determined and each of them C is assumed to correspond to one PARAMETER=VALUE couple. C Only characters '=' within 'value' strings enclosed in apostrophes C or within comments (after #) do not create PARAMETER=VALUE C couples. C C The most common parameters: C N1=positive integer... Number of gridpoints along the X1 axis. C Default: N1=1 C N2=positive integer... Number of gridpoints along the X2 axis. C Default: N2=1 C N3=positive integer... Number of gridpoints along the X3 axis. C Default: N3=1 C D1=real... Grid interval in the direction of the first coordinate C axis. C Default: D1=1. C D2=real... Grid interval in the direction of the second coordinate C axis. C Default: D2=1. C D3=real... Grid interval in the direction of the third coordinate C axis. C Default: D3=1. C O1=real... First coordinate of the grid origin (first point of the C grid). C Default: O1=0. C O2=real... Second coordinate of the grid origin. C Default: O2=0. C O3=real... Third coordinate of the grid origin. C Default: O3=0. C C Example of the SEP parameter file: C grd.h C C Each program may consider several sets of SEP-like specified C parameters, but most common is the use of a single parameter set. C The parameters of each parameter set may by step-by-step redefined. C A considerable attention should thus be paid to the order in which C the parameter files are read and in which subroutines RSEP1 and RSEP2 C are invoked with input files or lines. The order specifies the order C of preferences of redefined values. C C For example: C (a) Subroutine RSEP1 reads the parameters of the input file. C (b) Invocations of function RSEP3I define dimensions N1,N2,N3 of the C input file. C (c) Subroutine RSEP1 reads the parameters of the output file and C redefines the values of parameters N1,N2,N3. C (d) New invocations of function RSEP3I define dimensions N1,N2,N3 of C the output file. C C======================================================================= C C C BLOCK DATA SEPB C C Subprogram designed to initiate the numbers of parameters stored in C common blocks /SEPT/ and /SEPC/ (include file 'sep.inc'). C C----------------------------------------------------------------------- C INCLUDE 'sep.inc' C sep.inc C C----------------------------------------------------------------------- C C At the beginning, no parameters are defined, set 1 is to be used: DATA NPAR/0,MSET*0/ DATA ISET,NSET/1,1/ END C C======================================================================= C C C SUBROUTINE SSEP(I) INTEGER I C C Subroutine designed to switch between different sets of the SEP C parameters. C C Input: C I ... Index of the set to be used. C C No output. C C----------------------------------------------------------------------- C INCLUDE 'sep.inc' C sep.inc C C----------------------------------------------------------------------- INTEGER I1 C IF (I.GT.MSET) THEN C SEP-07 CALL ERROR('SEP-07: Too many sets of SEP parameters') C At most MSET parameter sets are available, see the file C sep.inc. END IF IF (I.GT.NSET) THEN DO 10, I1=NSET+1,I NSET=I1 NPAR(I1)=NPAR(I1-1) 10 CONTINUE ENDIF ISET=I RETURN END C C======================================================================= C C C SUBROUTINE RSEP1(LU,FILE) INTEGER LU CHARACTER*(*) FILE C C Subroutine designed to read a SEP-like parameter or header file and to C store the parameter names and values for future use. Unlike WSEP1, it C closes the input file. C C Input: C LU... Logical unit number of the input file. The file will be C opened, read and closed. C FILE... String containing the name of the input SEP parameter C file to be read. C If FILE=' ', no action is done. C C No output. C C----------------------------------------------------------------------- C EXTERNAL WSEP1 C C----------------------------------------------------------------------- C IF(FILE.NE.' ') THEN CALL WSEP1(LU,FILE) CLOSE(LU) END IF RETURN END C C======================================================================= C C C SUBROUTINE WSEP1(LU,FILE) INTEGER LU CHARACTER*(*) FILE C C Subroutine designed to read a SEP-like parameter or header file and to C store the parameter names and values for future use. This subroutine, C unlike RSEP1, leaves the input file open in order to append new lines C using the WRITE statement. C C Input: C LU... Logical unit number of the input file. The file will be C opened and read, but not closed. C FILE... String containing the name of the input SEP parameter C file to be read. C If FILE=' ', no action is done. C C No output. C C----------------------------------------------------------------------- C EXTERNAL RSEP2 C C----------------------------------------------------------------------- C CHARACTER*255 LINE C IF(FILE.NE.' ') THEN OPEN(LU,FILE=FILE,STATUS='OLD') 1 CONTINUE READ(LU,'(A)',END=9) LINE CALL RSEP2(LINE) GO TO 1 9 CONTINUE END IF RETURN END C C======================================================================= C C C SUBROUTINE RSEP2(LINE) CHARACTER*(*) LINE C C Subroutine designed to take a line from a SEP-like parameter or header C file and to store the parameter names and values for future use. C C Input: C LINE... String containing a line from a SEP parameter file. C C No output. C C----------------------------------------------------------------------- C INCLUDE 'sep.inc' C sep.inc C C----------------------------------------------------------------------- C EXTERNAL LENGTH,LOWER INTEGER LENGTH C C----------------------------------------------------------------------- C INTEGER M,K,L,I,J,I1 C C M... Length of the line. C K... Position of the current '=' character in the line, later C of the next character. C L... Starting position of the line part being interpreted. C I,J... Temporary indices. C C....................................................................... C C Length of the input line up to the comment sign '#': M=LEN(LINE) I=INDEX(LINE,'#') IF(I.GT.0) THEN M=I-1 END IF C L=1 1 CONTINUE C Assessing part LINE(L:M) of the input line: IF(L.GT.M) THEN GO TO 9 END IF C C Searching for '=' in the line: K=INDEX(LINE(L:M),'=')+L-1 IF(K.LT.L) THEN GO TO 9 END IF C Preparing storage location for the new parameter: IF(NPAR(NSET)+1.GT.MPAR) THEN C SEP-01 CALL ERROR('SEP-01: Too many input parameters to store') END IF DO 10, I1=NPAR(NSET),NPAR(ISET)+1,-1 PAR(I1+1) =PAR(I1) VALUE(I1+1)=VALUE(I1) NCHAR(I1+1)=NCHAR(I1) 10 CONTINUE DO 11, I1=NSET,ISET,-1 NPAR(I1)=NPAR(I1)+1 11 CONTINUE C C Name of the parameter must precede '=': DO 2 I=K-1,L,-1 IF(LINE(I:I).EQ.' '.OR.LINE(I:I).EQ.',') THEN GO TO 3 END IF 2 CONTINUE 3 CONTINUE IF(I.GE.K-1) THEN PAR(NPAR(ISET))=' ' ELSE PAR(NPAR(ISET))=LINE(I+1:K-1) CALL LOWER(PAR(NPAR(ISET))) END IF C C Value of the parameter must follow '=': K=K+1 IF(K.GT.M) THEN C End of line just after '=': NCHAR(NPAR(ISET))=0 L=K ELSE IF(LINE(K:K).EQ.''''.OR.LINE(K:K).EQ.'"') THEN C String enclosed in apostrophes or quotes following '=': NCHAR(NPAR(ISET))=0 L=K C Loop for embedded apostrophes 5 CONTINUE L=L+1 C L is the position after the opening apostrophe I=INDEX(LINE(L:M),LINE(K:K)) IF(I.LE.0) THEN C SEP-02 CALL ERROR('SEP-02: String not terminated by apostrophe') END IF J=NCHAR(NPAR(ISET)) NCHAR(NPAR(ISET))=J+I-1 VALUE(NPAR(ISET))(J+1:J+I-1)=LINE(L:L+I-2) L=L+I C L is the position after the terminating apostrophe IF(LINE(L:L).EQ.LINE(K:K)) GO TO 5 ELSE C String without apostrophes or quotes following '=': I=INDEX(LINE(K:M),' ') J=INDEX(LINE(K:M),',') IF(I.LE.0) THEN IF(J.LE.0) THEN I=M-K+2 ELSE I=J END IF ELSE IF(J.GT.0) THEN I=MIN0(I,J) END IF END IF NCHAR(NPAR(ISET))=I-1 IF(I.GT.1) THEN VALUE(NPAR(ISET))=LINE(K:K+I-2) END IF L=K+I C L is the position after the terminating separator ' ' or ',' END IF C C Blank parameter: IF(PAR(NPAR(ISET)).EQ.' ') THEN DO 12, I1=NPAR(ISET),NPAR(NSET)-1 PAR(I1) =PAR(I1+1) VALUE(I1)=VALUE(I1+1) NCHAR(I1)=NCHAR(I1+1) 12 CONTINUE DO 13, I1=ISET,NSET NPAR(I1)=NPAR(I1)-1 13 CONTINUE END IF C C Removing duplicate registrations: DO 7 I=NPAR(ISET)-1,NPAR(ISET-1)+1,-1 IF(PAR(I).EQ.PAR(NPAR(ISET))) THEN NCHAR(I)=NCHAR(NPAR(ISET)) VALUE(I)=VALUE(NPAR(ISET)) DO 14, I1=NPAR(ISET),NPAR(NSET)-1 PAR(I1) =PAR(I1+1) VALUE(I1)=VALUE(I1+1) NCHAR(I1)=NCHAR(I1+1) 14 CONTINUE DO 15, I1=ISET,NSET NPAR(I1)=NPAR(I1)-1 15 CONTINUE GO TO 8 END IF 7 CONTINUE 8 CONTINUE GO TO 1 C 9 CONTINUE RETURN END C C======================================================================= C C C SUBROUTINE RSEP3Q(NAME,LNUM) CHARACTER*(*) NAME LOGICAL LNUM C C Subroutine designed to decide whether a given parameter is a number or C a string. C C Input: C NAME... String containing the name of the parameter. Except for C its case, it should match the parameter name in the input C SEP parameter file. C C Output: C LNUM... LNUM=.TRUE.: Parameter given by NAME is an integer or real C number. C LNUM=.FALSE.: Parameter given by NAME is a string or a C default. C C----------------------------------------------------------------------- C INCLUDE 'sep.inc' C sep.inc C C----------------------------------------------------------------------- C EXTERNAL LOWER C C----------------------------------------------------------------------- C CHARACTER*20 LOWNAM INTEGER I C C....................................................................... C LOWNAM=NAME CALL LOWER(LOWNAM) DO 10 I=NPAR(ISET-1)+1,NPAR(ISET) IF(PAR(I).EQ.LOWNAM) THEN IF(NCHAR(I).LE.0) THEN LNUM=.FALSE. ELSE IF(('0'.LE.VALUE(I)(1:1).AND.VALUE(I)(1:1).LE.'9').OR. * VALUE(I)(1:1).EQ.'+'.OR.VALUE(I)(1:1).EQ.'-'.OR. * VALUE(I)(1:1).EQ.'.') THEN LNUM=.TRUE. ELSE LNUM=.FALSE. END IF END IF 10 CONTINUE RETURN END C C======================================================================= C C C SUBROUTINE RSEP3R(NAME,ROUT,RDEF) CHARACTER*(*) NAME REAL ROUT,RDEF C C Subroutine designed to read the value of a given real-valued parameter C from previously stored contents of SEP-like parameter or header files. C Note that integer value can be read both by RSEP3R into real-valued C variable or by RSEP3I into integer variable. C C Input: C NAME... String containing the name of the parameter. Except for C its case, it should match the parameter name in the input C SEP parameter file. C RDEF... Default value of the parameter. C C Output: C ROUT... Value of the parameter. C C----------------------------------------------------------------------- C INCLUDE 'sep.inc' C sep.inc C C----------------------------------------------------------------------- C EXTERNAL LENGTH,LOWER INTEGER LENGTH C C----------------------------------------------------------------------- C CHARACTER*20 LOWNAM CHARACTER*7 FORMAT INTEGER I C LOWNAM=NAME CALL LOWER(LOWNAM) ROUT=RDEF DO 10 I=NPAR(ISET-1)+1,NPAR(ISET) IF(PAR(I).EQ.LOWNAM) THEN IF(NCHAR(I).LE.0) THEN ROUT=RDEF ELSE FORMAT='(F00.0)' FORMAT(3:3)=CHAR(ICHAR('0')+NCHAR(I)/10) FORMAT(4:4)=CHAR(ICHAR('0')+MOD(NCHAR(I),10)) READ(VALUE(I),FORMAT,ERR=20) ROUT END IF END IF 10 CONTINUE RETURN C 20 CONTINUE C SEP-03 WRITE(*,'(5A)') ' Parameter: ''',PAR(I)(1:LENGTH(PAR(I))), * ''', Value: ''',VALUE(I)(1:NCHAR(I)),'''' CALL ERROR('SEP-03 in RSEP3R when reading real value') RETURN END C C======================================================================= C C C SUBROUTINE RSEP3I(NAME,IOUT,IDEF) CHARACTER*(*) NAME INTEGER IOUT,IDEF C C Subroutine designed to read the value of a given integer parameter C from previously stored contents of SEP-like parameter or header files. C Note that integer value can be read both by RSEP3R into real-valued C variable or by RSEP3I into integer variable. C C Input: C NAME... String containing the name of the parameter. Except for C its case, it should match the parameter name in the input C SEP parameter file. C IDEF... Default value of the parameter. C C Output: C IOUT... Value of the parameter. C C----------------------------------------------------------------------- C INCLUDE 'sep.inc' C sep.inc C C----------------------------------------------------------------------- C EXTERNAL LENGTH,LOWER INTEGER LENGTH C C----------------------------------------------------------------------- C CHARACTER*20 LOWNAM CHARACTER*5 FORMAT INTEGER I C LOWNAM=NAME CALL LOWER(LOWNAM) IOUT=IDEF DO 10 I=NPAR(ISET-1)+1,NPAR(ISET) IF(PAR(I).EQ.LOWNAM) THEN IF(NCHAR(I).LE.0) THEN IOUT=IDEF ELSE FORMAT='(I00)' FORMAT(3:3)=CHAR(ICHAR('0')+NCHAR(I)/10) FORMAT(4:4)=CHAR(ICHAR('0')+MOD(NCHAR(I),10)) READ(VALUE(I),FORMAT,ERR=20) IOUT END IF END IF 10 CONTINUE RETURN C 20 CONTINUE C SEP-04 WRITE(*,'(5A)') ' Parameter: ''',PAR(I)(1:LENGTH(PAR(I))), * ''', Value: ''',VALUE(I)(1:NCHAR(I)),'''' CALL ERROR('SEP-04 in RSEP3I when reading integer value') RETURN END C C======================================================================= C C C SUBROUTINE RSEP3T(NAME,TOUT,TDEF) CHARACTER*(*) NAME,TOUT,TDEF C C Subroutine designed to read the value of a given text-valued parameter C from previously stored contents of SEP-like parameter or header files. C C Input: C NAME... String containing the name of the parameter. Except for C its case, it should match the parameter name in the input C SEP parameter file. C TDEF... Default value of the parameter. C C Output: C TOUT... Value of the parameter. C C----------------------------------------------------------------------- C INCLUDE 'sep.inc' C sep.inc C C----------------------------------------------------------------------- C EXTERNAL LOWER C C----------------------------------------------------------------------- C CHARACTER*20 LOWNAM INTEGER I C LOWNAM=NAME CALL LOWER(LOWNAM) TOUT=TDEF DO 10 I=NPAR(ISET-1)+1,NPAR(ISET) IF(PAR(I).EQ.LOWNAM) THEN IF(NCHAR(I).LE.0) THEN TOUT=TDEF ELSE TOUT=VALUE(I)(1:NCHAR(I)) END IF END IF 10 CONTINUE RETURN END C C======================================================================= C C C SUBROUTINE WSEPR(LINE,NAME,RVAL) CHARACTER*(*) LINE,NAME REAL RVAL C C Subroutine designed to write the value of a given real-valued C parameter into the output string. C C Input: C NAME... String containing the name of the parameter. C RVAL... Value of the parameter. C C Output: C LINE... String containing 2 spaces followed by the NAME=RVAL C couple. C C----------------------------------------------------------------------- C EXTERNAL LENGTH,WSEPI INTEGER LENGTH C C----------------------------------------------------------------------- C C NWIDTH is the maximum width of the output real number in C characters. The real number should be written with the accuracy C of NWIDTH-6 digits. C INTEGER NWIDTH,I,J PARAMETER (NWIDTH=12) CHARACTER*(NWIDTH) TEXT CHARACTER*7 FORMAT C C....................................................................... C C Decision whether RVAL can be written as integer not exceeding 9 C digits, with relative rounding error up to 0.0000005: IF(-999999999.LE.NINT(RVAL).AND.NINT(RVAL).LE.999999999.AND. * ABS(FLOAT(NINT(RVAL))-RVAL).LE.0.0000005*ABS(RVAL)) THEN C The real number will be written in integer format CALL WSEPI(LINE,NAME,NINT(RVAL)) ELSE C The real number will be written in floating-point format C C Output format: FORMAT='(G12.6)' FORMAT(3:3)=CHAR(ICHAR('0')+NWIDTH/10) FORMAT(4:4)=CHAR(ICHAR('0')+MOD(NWIDTH,10)) C WRITE(TEXT,FORMAT) RVAL DO 11 J=1,NWIDTH IF(TEXT(J:J).NE.' ') THEN GO TO 12 END IF 11 CONTINUE 12 CONTINUE I=LENGTH(NAME)+3 IF(I+LENGTH(TEXT(J:)).GT.LEN(LINE)) THEN C SEP-05 CALL ERROR('SEP-05 in WSEPR: Too small output string') END IF LINE(1:2)=' ' LINE(3:I-1)=NAME LINE(I:I)='=' LINE(I+1:)=TEXT(J:) END IF RETURN END C C======================================================================= C C C SUBROUTINE WSEPI(LINE,NAME,IVAL) CHARACTER*(*) LINE,NAME INTEGER IVAL C C Subroutine designed to write the value of a given integer C parameter into the output string. C C Input: C NAME... String containing the name of the parameter. C IVAL... Value of the parameter. C C Output: C LINE... String containing a space followed by the NAME=IVAL C couple. C C----------------------------------------------------------------------- C EXTERNAL LENGTH INTEGER LENGTH C C----------------------------------------------------------------------- C C NWIDTH is the maximum width of the output integer in characters. C INTEGER NWIDTH,I,J PARAMETER (NWIDTH=12) CHARACTER*(NWIDTH) TEXT CHARACTER*5 FORMAT C C Output format: FORMAT='(I00)' FORMAT(3:3)=CHAR(ICHAR('0')+NWIDTH/10) FORMAT(4:4)=CHAR(ICHAR('0')+MOD(NWIDTH,10)) C WRITE(TEXT,FORMAT) IVAL DO 11 J=1,NWIDTH IF(TEXT(J:J).NE.' ') THEN GO TO 12 END IF 11 CONTINUE 12 CONTINUE I=LENGTH(NAME)+3 IF(I+LENGTH(TEXT(J:)).GT.LEN(LINE)) THEN C SEP-06 CALL ERROR('SEP-06 in WSEPI: Too small output string') END IF LINE(1:2)=' ' LINE(3:I-1)=NAME LINE(I:I)='=' LINE(I+1:)=TEXT(J:) RETURN END C C======================================================================= C C C SUBROUTINE WSEPT(LINE,NAME,TVAL) CHARACTER*(*) LINE,NAME,TVAL C C Subroutine designed to write the value of a given text-valued C parameter into the output string. C C Input: C NAME... String containing the name of the parameter. C TVAL... Value of the parameter. C C Output: C LINE... String containing a space followed by the NAME=TVAL C couple. C C----------------------------------------------------------------------- C EXTERNAL LENGTH INTEGER LENGTH C C----------------------------------------------------------------------- C C NWIDTH is the maximum width of the output integer in characters. C INTEGER I,J C LINE=' ' I=LENGTH(NAME)+3 J=LENGTH(TVAL) IF(I+2+J.GT.LEN(LINE)) THEN C SEP-08 CALL ERROR('SEP-08 in WSEPT: Too small output string') END IF LINE(1:2)=' ' LINE(3:I-1)=NAME LINE(I:I+1)='=''' LINE(I+2:I+2+J-1)=TVAL(1:J) LINE(I+2+J:I+2+J)='''' RETURN END C C======================================================================= C C C SUBROUTINE WSEP3R(LU,NAME,RVAL) INTEGER LU CHARACTER*(*) NAME REAL RVAL C C Subroutine designed to write the value of a given real C parameter into the output file. C C Input: C LU... Logical unit number of the already open output file. C NAME... String containing the name of the parameter. C RVAL... Value of the parameter. C C No output. C C----------------------------------------------------------------------- C EXTERNAL LENGTH INTEGER LENGTH C C----------------------------------------------------------------------- C CHARACTER*80 LINE C CALL WSEPR(LINE,NAME,RVAL) WRITE(LU,'(A)') LINE(1:LENGTH(LINE)) RETURN END C C======================================================================= C C C SUBROUTINE WSEP3I(LU,NAME,IVAL) CHARACTER*(*) NAME INTEGER LU,IVAL C C Subroutine designed to write the value of a given integer C parameter into the output file. C C Input: C LU... Logical unit number of the already open output file. C NAME... String containing the name of the parameter. C IVAL... Value of the parameter. C C No output. C C----------------------------------------------------------------------- C EXTERNAL LENGTH INTEGER LENGTH C C----------------------------------------------------------------------- C CHARACTER*80 LINE C CALL WSEPI(LINE,NAME,IVAL) WRITE(LU,'(A)') LINE(1:LENGTH(LINE)) RETURN END C C======================================================================= C C C SUBROUTINE WSEP3T(LU,NAME,TVAL) CHARACTER*(*) NAME,TVAL INTEGER LU C C Subroutine designed to write the value of a given text-valued C parameter into the output file. C C Input: C LU... Logical unit number of the already open output file. C NAME... String containing the name of the parameter. C TVAL... Value of the parameter. C C No output. C C----------------------------------------------------------------------- C EXTERNAL LENGTH INTEGER LENGTH C C----------------------------------------------------------------------- C CHARACTER*80 LINE C CALL WSEPT(LINE,NAME,TVAL) WRITE(LU,'(A)') LINE(1:LENGTH(LINE)) RETURN END C C======================================================================= C