ISCE_INSAR/components/isceobj/Util/src/rdf_reader.F

5383 lines
130 KiB
Fortran

c****************************************************************
character*(*) function rdfversion()
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
call rdf_trace('RDFVERSION')
rdfversion = a_version
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_init(a_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
integer i_lun
integer i_iostat
integer i_tabs(10)
integer i_val
character*320 a_vals(100)
character*320 a_keyw
character*320 a_valu
character*320 a_unit
character*320 a_dimn
character*320 a_elem
character*320 a_oper
character*320 a_cmnt
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdftrim
external rdftrim
character*320 rdfupper
external rdfupper
c DATA STATEMENTS:
data i_errflag / 1, 0, 0 /
data i_error / 0 /
data a_errfile / 'message' /
data i_fsizes / 40, 10, 6, 4, 4, 11, 3, 0, 0, 0/
data i_prelen / 0 /
data i_suflen / 0 /
data i_stack / 0 /
data a_prefix / ' ' /
data a_suffix / ' ' /
data a_prfx / ' ' /
data a_sufx / ' ' /
data a_intfmt / 'i' /
data a_realfmt / 'f' /
data a_dblefmt / '*' /
data a_cmdl(0) / '!' /
data a_cmdl(1) / ';' /
data a_cmdl(2) / ' ' /
data i_delflag / 0, 0, 0, 0 /
data a_version /'<< RDF_READER Version 30.0 30-September-1999 >>'/
c PROCESSING STEPS:
call rdf_trace('RDF_INIT')
if (a_data .ne. ' ') then
call rdf_parse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
a_keyw = rdfupper(a_keyw)
if (a_keyw .eq. ' ') then
call rdf_error('Command field blank. ')
else if (a_keyw .eq. 'ERRFILE') then
write(6,*) 'Error file = ',a_valu(1:max(1,rdflen(a_valu)))
if (rdfupper(a_errfile) .eq. 'SCREEN') then
i_errflag(1) = 1
i_errflag(2) = 0
i_errflag(3) = 0
a_errfile = ' '
else if (rdfupper(a_errfile) .eq. 'MESSAGE') then
i_errflag(1) = 0
i_errflag(2) = 1
i_errflag(3) = 0
a_errfile = ' '
else
i_errflag(1) = 0
i_errflag(2) = 0
i_errflag(3) = 1
a_errfile = a_valu
endif
else if (a_keyw .eq. 'ERROR_SCREEN') then
if (rdfupper(a_valu) .eq. 'ON') then
i_errflag(1) = 1
else
i_errflag(1) = 0
endif
else if (a_keyw .eq. 'ERROR_BUFFER') then
if (rdfupper(a_valu) .eq. 'ON') then
i_errflag(2) = 1
else
i_errflag(2) = 0
endif
else if (a_keyw .eq. 'ERROR_OUTPUT') then
if (a_valu .eq. ' ' .or. rdfupper(a_valu) .eq. 'OFF') then
i_errflag(3) = 0
a_errfile = ' '
else
i_errflag(3) = 1
a_errfile = a_valu
endif
else if (a_keyw .eq. 'COMMENT') then
do i=1,3
a_cmdl(i-1) = ' '
end do
call rdf_parse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
call rdf_getfields(a_valu,i_val,a_vals)
do i=1,3
if (i .le. i_val) then
a_cmdl(i-1) = a_vals(i)
else
a_cmdl(i-1) = ' '
end if
end do
else if (a_keyw .eq. 'COMMENT0') then
a_cmdl(0) = a_valu
else if (a_keyw .eq. 'COMMENT1') then
a_cmdl(1) = a_valu
else if (a_keyw .eq. 'COMMENT2') then
a_cmdl(2) = a_valu
else if (a_keyw .eq. 'COMMENT_DELIMITOR_SUPPRESS') then
if (rdfupper(a_valu) .eq. 'ON') then
i_delflag(1) = 1
else
i_delflag(1) = 0
endif
else if (a_keyw .eq. 'TABS') then
read(a_valu,fmt=*,iostat=i_iostat) (i_tabs(i),i=1,7)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse tab command. '// a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
write(6,*) 'tabs = ',(i_tabs(i),i=1,7)
i_fsizes(1) = i_tabs(1)
do i = 2,7
i_fsizes(i) = i_tabs(i) - i_tabs(i-1)
enddo
write(6,*) 'fields = ',(i_fsizes(i),i=1,7)
else if (a_keyw .eq. 'KEYWORD FIELD SIZE') then
read(a_valu,fmt=*,iostat=i_iostat) i_fsizes(1)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse keyword field size. '//a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
else if (a_keyw .eq. 'UNIT FIELD SIZE') then
read(a_valu,fmt=*,iostat=i_iostat) i_fsizes(2)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse unit field size. '//a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
else if (a_keyw .eq. 'DIMENSION FIELD SIZE') then
read(a_valu,fmt=*,iostat=i_iostat) i_fsizes(3)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse dimension field size. '//a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
else if (a_keyw .eq. 'ELEMENT FIELD SIZE') then
read(a_valu,fmt=*,iostat=i_iostat) i_fsizes(4)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse element field size. '//a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
else if (a_keyw .eq. 'OPERATOR FIELD SIZE') then
read(a_valu,fmt=*,iostat=i_iostat) i_fsizes(5)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse operator field size. '//a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
else if (a_keyw .eq. 'VALUE FIELD SIZE') then
read(a_valu,fmt=*,iostat=i_iostat) i_fsizes(6)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse value field size. '//a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
else if (a_keyw .eq. 'COMMENT FIELD SIZE') then
read(a_valu,fmt=*,iostat=i_iostat) i_fsizes(7)
if (i_iostat .ne. 0) then
a_errtmp = 'Unable to parse comment field size. '// a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
else if (a_keyw .eq. 'INTEGER FORMAT') then
a_intfmt = a_valu
c if (index(rdfupper(a_intfmt),'I') .eq. 0) then
c call rdf_error('Unable to parse integer format. '//
c & a_data(1:max(1,rdflen(a_data))))
c endif
else if (a_keyw .eq. 'REAL FORMAT') then
a_realfmt = a_valu
c if (index(rdfupper(a_realfmt),'F') .eq. 0) then
c call rdf_error('Unable to parse real format. '//
c & a_data(1:max(1,rdflen(a_data))))
c endif
else if (a_keyw .eq. 'DOUBLE FORMAT') then
a_dblefmt = a_valu
c if (index(rdfupper(a_dblefmt),'F') .eq. 0) then
c call rdf_error('Unable to parse dble format. '//
c & a_data(1:max(1,rdflen(a_data))))
c endif
else
a_errtmp = 'Command not recognized. '// a_data(1:max(1,rdflen(a_data)))
call rdf_error(a_errtmp)
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_read(a_rdfname)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c** rdf_merge
c**
c** NOTES:
c** rdf_merge actually reads the file. rdf_read is a special case where
c** you zero out all of the existing data loading into memory
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_rdfname
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
data i_nums /0/
c FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDF_READ')
i_nums = 0 ! zeros out all loaded data fields
i_pntr = 0
call rdf_merge(a_rdfname)
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_clear()
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDF_CLEAR')
do i=1,i_nums
a_dsets(i) = ' '
a_matks(i) = ' '
a_strts(i) = ' '
a_prfxs(i) = ' '
a_sufxs(i) = ' '
a_keyws(i) = ' '
a_units(i) = ' '
a_dimns(i) = ' '
a_elems(i) = ' '
a_opers(i) = ' '
a_valus(i) = ' '
a_cmnts(i) = ' '
enddo
i_nums = 0
i_pntr = 0
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_num(i_num)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i_num
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDF_NUM')
i_num = i_nums
c i_pntr = i_nums
call rdf_trace(' ')
return
end
c****************************************************************
integer*4 function rdfnum()
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDFNUM')
i_pntr = i_nums
rdfnum = i_nums
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_insert(a_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
integer i_flg
integer i_indx
integer i_loc
integer i_indxx
integer i_iostat
character*320 a_keyw
character*320 a_valu
character*320 a_unit
character*320 a_dimn
character*320 a_elem
character*320 a_oper
character*320 a_cmnt
character*320 a_kkkk
character*320 a_dset
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdftrim
external rdftrim
character*320 rdfupper
external rdfupper
character*320 rdfcullsp
external rdfcullsp
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_INSERT')
if (i_pntr .eq. 0) then
i_indx=1
else
i_indx=i_pntr
endif
call rdf_parse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
if (a_keyw .ne. ' ') call rdf_index(a_keyw,i_indxx,i_flg)
c if (i_flg .gt. 0) then
c call rdf_error('Parameter already exists. '//
c & a_keyw(1:max(rdflen(a_keyw),1)))
c else
if (.true.) then
if (i_nums .ge. I_PARAMS) then
a_errtmp = 'RDF Buffer full, unable to insert parameter. '//
& a_keyw(1:max(rdflen(a_keyw),1))
call rdf_error(a_errtmp)
else if (i_indx .lt. 1 .or. i_indx .gt. i_nums+1) then
a_errtmp = 'Index not within valid range 1 to i_nums+1. '//
& a_keyw(1:max(rdflen(a_keyw),1))//' '//rdfint1(i_indx)
call rdf_error(a_errtmp)
else
i_loc = index(a_keyw,':')
if (i_loc .gt. 0) then
a_kkkk = rdftrim(a_keyw(i_loc+1:))
if (i_loc .gt. 1) then
a_dset = rdftrim(a_keyw(1:i_loc-1))
else
a_dset = ' '
endif
else
a_kkkk = rdftrim(a_keyw)
a_dset = ' '
endif
if (rdfupper(a_kkkk) .eq. 'PREFIX') then
a_prfx = a_valu
a_prefix = a_prfx
call rdf_unquote(a_prefix,i_prelen)
else if (rdfupper(a_kkkk) .eq. 'SUFFIX') then
a_sufx = a_valu
a_suffix = a_sufx
call rdf_unquote(a_suffix,i_suflen)
else
do i=i_nums,i_indx,-1
a_dsets(i+1) = a_dsets(i)
a_matks(i+1) = a_matks(i)
a_strts(i+1) = a_strts(i)
a_prfxs(i+1) = a_prfxs(i)
a_sufxs(i+1) = a_sufxs(i)
a_keyws(i+1) = a_keyws(i)
a_valus(i+1) = a_valus(i)
a_units(i+1) = a_units(i)
a_dimns(i+1) = a_dimns(i)
a_elems(i+1) = a_elems(i)
a_opers(i+1) = a_opers(i)
a_cmnts(i+1) = a_cmnts(i)
enddo
i_nums = i_nums + 1
a_dsets(i_indx) = a_dset
a_strts(i_indx) = ' '
a_keyws(i_indx) = a_kkkk
a_valus(i_indx) = a_valu
a_units(i_indx) = a_unit
a_dimns(i_indx) = a_dimn
a_elems(i_indx) = a_elem
a_opers(i_indx) = a_oper
a_cmnts(i_indx) = a_cmnt
if (a_keyws(i_indx) .ne. ' ') then
a_prfxs(i_indx) = a_prfx
a_sufxs(i_indx) = a_sufx
if (i_prelen .gt. 0) then
a_matks(i_indx) = rdfupper(rdfcullsp(rdftrim(a_prefix(1:i_prelen)//a_keyws(i_indx))))
else
a_matks(i_indx) = rdfupper(rdfcullsp(rdftrim(a_keyws(i_indx))))
endif
a_matks(i_indx) = a_matks(i_indx)(1:rdflen(a_matks(i_indx)))//rdfupper(rdfcullsp(a_suffix))
else
a_prfxs(i_indx) = ' '
a_sufxs(i_indx) = ' '
a_matks(i_indx) = ' '
endif
endif
i_pntr = 0
if (a_keyw .ne. ' ') call rdf_index(a_keyw,i_indxx,i_flg)
i_pntr = i_indx
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_append(a_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i
integer i_flg
character*(*) a_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_loc
integer i_lun
integer i_indx
integer i_indxx
integer i_iostat
character*320 a_keyw
character*320 a_valu
character*320 a_unit
character*320 a_dimn
character*320 a_elem
character*320 a_oper
character*320 a_cmnt
character*320 a_kkkk
character*320 a_dset
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdftrim
external rdftrim
character*320 rdfupper
external rdfupper
character*320 rdfcullsp
external rdfcullsp
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_APPEND')
if (i_pntr .eq. 0) then
i_indx=i_nums
else
i_indx=i_pntr
endif
call rdf_parse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
i_flg = 0
if (a_keyw .ne. ' ') call rdf_index(a_keyw,i_indxx,i_flg)
if (i_flg .gt. 0) then
a_errtmp = 'Parameter already exists. '//
& a_keyw(1:max(rdflen(a_keyw),1))
call rdf_error(a_errtmp)
else
if (i_nums .ge. I_PARAMS) then
a_errtmp = 'Buffer full, unable to insert parameter. '//
& a_keyw(1:max(rdflen(a_keyw),1))
call rdf_error(a_errtmp)
else if (i_indx .lt. 0 .or. i_indx .gt. i_nums) then
a_errtmp = 'Index not within valid range 1 to i_nums+1. '//
& a_keyw(1:max(rdflen(a_keyw),1))//' '//rdfint1(i_indx)
call rdf_error(a_errtmp)
else
i_loc = index(a_keyw,':')
if (i_loc .gt. 0) then
a_kkkk = rdftrim(a_keyw(i_loc+1:))
if (i_loc .gt. 1) then
a_dset = rdftrim(a_keyw(1:i_loc-1))
else
a_dset = ' '
endif
else
a_kkkk = rdftrim(a_keyw)
a_dset = ' '
endif
if (rdfupper(a_kkkk) .eq. 'PREFIX') then
a_prfx = a_valu
a_prefix = a_prfx
call rdf_unquote(a_prefix,i_prelen)
else if (rdfupper(a_kkkk) .eq. 'SUFFIX') then
a_sufx = a_valu
a_suffix = a_sufx
call rdf_unquote(a_suffix,i_suflen)
else
do i=i_nums,i_indx+1,-1
a_dsets(i+1) = a_dsets(i)
a_matks(i+1) = a_matks(i)
a_strts(i+1) = a_strts(i)
a_prfxs(i+1) = a_prfxs(i)
a_sufxs(i+1) = a_sufxs(i)
a_keyws(i+1) = a_keyws(i)
a_valus(i+1) = a_valus(i)
a_units(i+1) = a_units(i)
a_dimns(i+1) = a_dimns(i)
a_elems(i+1) = a_elems(i)
a_opers(i+1) = a_opers(i)
a_cmnts(i+1) = a_cmnts(i)
enddo
i_nums = i_nums+1
a_dsets(i_indx+1) = a_dset
a_strts(i_indx+1) = ' '
a_keyws(i_indx+1) = a_kkkk
a_valus(i_indx+1) = a_valu
a_units(i_indx+1) = a_unit
a_dimns(i_indx+1) = a_dimn
a_elems(i_indx+1) = a_elem
a_opers(i_indx+1) = a_oper
a_cmnts(i_indx+1) = a_cmnt
if (a_keyws(i_indx+1) .ne. ' ') then
a_prfxs(i_indx+1) = a_prfx
a_sufxs(i_indx+1) = a_sufx
if (i_prelen .gt. 0) then
a_matks(i_indx+1) = rdfupper(rdfcullsp(rdftrim(a_prefix(1:i_prelen)//a_keyws(i_indx+1))))
else
a_matks(i_indx+1) = rdfupper(rdfcullsp(rdftrim(a_keyws(i_indx+1))))
endif
a_matks(i_indx+1) = a_matks(i_indx+1)(1:rdflen(a_matks(i_indx+1)))//rdfupper(rdfcullsp(a_suffix))
else
a_prfxs(i_indx+1) = ' '
a_sufxs(i_indx+1) = ' '
a_matks(i_indx+1) = ' '
endif
endif
i_pntr = 0
if (a_keyw .ne. ' ') call rdf_index(a_keyw,i_indxx,i_flg)
i_pntr = i_indx+1
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_insertcols(a_keyw,a_valu,a_unit,a_dimn,a_elem,a_oper,a_cmnt)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
integer i_flg
integer i_loc
integer i_lun
integer i_indx
integer i_indxx
character*320 a_kkkk
character*320 a_dset
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdftrim
external rdftrim
character*320 rdfupper
external rdfupper
character*320 rdfcullsp
external rdfcullsp
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_INSERTCOLS')
if (i_pntr .eq. 0) then
i_indx=1
else
i_indx=i_pntr
endif
if (i_nums .ge. I_PARAMS) then
a_errtmp = 'Buffer full, unable to insert parameter. '//
& a_keyw(1:max(rdflen(a_keyw),1))
call rdf_error(a_errtmp)
else if (i_indx .lt. 1 .or. i_indx .gt. i_nums+1) then
a_errtmp = 'Index not within valid range 1 to i_nums+1. '//
& a_keyw(1:max(rdflen(a_keyw),1))//' '//rdfint1(i_indx)
call rdf_error(a_errtmp)
else
i_loc = index(a_keyw,':')
if (i_loc .gt. 0) then
a_kkkk = rdftrim(a_keyw(i_loc+1:))
if (i_loc .gt. 1) then
a_dset = rdfupper(rdfcullsp(rdftrim(a_keyw(1:i_loc-1))))
else
a_dset = ' '
endif
else
a_kkkk = rdftrim(a_keyw)
a_dset = ' '
endif
do i=i_nums,i_indx,-1
a_dsets(i+1) = a_dsets(i)
a_matks(i+1) = a_matks(i)
a_strts(i+1) = a_strts(i)
a_prfxs(i+1) = a_prfxs(i)
a_sufxs(i+1) = a_sufxs(i)
a_keyws(i+1) = a_keyws(i)
a_valus(i+1) = a_valus(i)
a_units(i+1) = a_units(i)
a_dimns(i+1) = a_dimns(i)
a_elems(i+1) = a_elems(i)
a_opers(i+1) = a_opers(i)
a_cmnts(i+1) = a_cmnts(i)
enddo
i_nums = i_nums + 1
a_dsets(i_indx) = a_dset
a_strts(i_indx) = ' '
a_keyws(i_indx) = a_kkkk
a_valus(i_indx) = a_valu
a_units(i_indx) = a_unit
a_dimns(i_indx) = a_dimn
a_elems(i_indx) = a_elem
a_opers(i_indx) = a_oper
a_cmnts(i_indx) = a_cmnt
if (a_keyws(i_indx) .ne. ' ') then
a_prfxs(i_indx) = a_prfx
a_sufxs(i_indx) = a_sufx
if (i_prelen .gt. 0) then
a_matks(i_indx) = rdfupper(rdfcullsp(rdftrim(a_prefix(1:i_prelen)//a_keyws(i_indx))))
else
a_matks(i_indx) = rdfupper(rdfcullsp(rdftrim(a_keyws(i_indx))))
endif
a_matks(i_indx) = a_matks(i_indx)(1:rdflen(a_matks(i_indx)))//rdfupper(rdfcullsp(a_suffix))
else
a_prfxs(i_indx) = ' '
a_sufxs(i_indx) = ' '
a_matks(i_indx) = ' '
endif
i_pntr = 0
if (a_keyw .ne. ' ') call rdf_index(a_keyw,i_indxx,i_flg)
i_pntr = i_indx
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_appendcols(a_keyw,a_valu,a_unit,a_dimn,a_elem,a_oper,a_cmnt)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
integer i_flg
integer i_loc
integer i_lun
integer i_indx
integer i_indxx
character*320 a_kkkk
character*320 a_dset
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdftrim
external rdftrim
character*320 rdfint1
external rdfint1
character*320 rdfupper
external rdfupper
character*320 rdfcullsp
external rdfcullsp
c PROCESSING STEPS:
call rdf_trace('RDF_APPENDCOLS')
if (i_pntr .eq. 0) then
i_indx=i_nums
else
i_indx=i_pntr
endif
if (i_nums .ge. I_PARAMS) then
a_errtmp = 'Buffer full, unable to insert parameter. '//
& a_keyw(1:max(rdflen(a_keyw),1))
call rdf_error(a_errtmp)
else if (i_indx .lt. 0 .or. i_indx .gt. i_nums) then
a_errtmp = 'Index not within valid range 1 to i_nums+1. '//
& a_keyw(1:max(rdflen(a_keyw),1))//' '//rdfint1(i_indx-1)
call rdf_error(a_errtmp)
else
i_loc = index(a_keyw,':')
if (i_loc .gt. 0) then
a_kkkk = rdftrim(a_keyw(i_loc+1:))
if (i_loc .gt. 1) then
a_dset = rdfupper(rdfcullsp(rdftrim(a_keyw(1:i_loc-1))))
else
a_dset = ' '
endif
else
a_kkkk = rdftrim(a_keyw)
a_dset = ' '
endif
if (rdfupper(a_kkkk) .eq. 'PREFIX') then
a_prfx = a_valu
a_prefix = a_prfx
call rdf_unquote(a_prefix,i_prelen)
else if (rdfupper(a_kkkk) .eq. 'SUFFIX') then
a_sufx = a_valu
a_suffix = a_sufx
call rdf_unquote(a_suffix,i_suflen)
else
do i=i_nums,i_indx+1,-1
a_dsets(i+1) = a_dsets(i)
a_strts(i+1) = a_strts(i)
a_prfxs(i+1) = a_prfxs(i)
a_sufxs(i+1) = a_sufxs(i)
a_keyws(i+1) = a_keyws(i)
a_valus(i+1) = a_valus(i)
a_units(i+1) = a_units(i)
a_dimns(i+1) = a_dimns(i)
a_elems(i+1) = a_elems(i)
a_opers(i+1) = a_opers(i)
a_cmnts(i+1) = a_cmnts(i)
enddo
a_dsets(i_indx+1) = a_dset
a_strts(i_indx+1) = ' '
a_keyws(i_indx+1) = a_kkkk
a_valus(i_indx+1) = a_valu
a_units(i_indx+1) = a_unit
a_dimns(i_indx+1) = a_dimn
a_elems(i_indx+1) = a_elem
a_opers(i_indx+1) = a_oper
a_cmnts(i_indx+1) = a_cmnt
if (a_keyws(i_indx+1) .ne. ' ') then
a_prfxs(i_indx+1) = a_prfx
a_sufxs(i_indx+1) = a_sufx
if (i_prelen .gt. 0) then
a_matks(i_indx+1) = rdfupper(rdfcullsp(rdftrim(a_prefix(1:i_prelen)//a_keyws(i_indx+1))))
else
a_matks(i_indx+1) = rdfupper(rdfcullsp(rdftrim(a_keyws(i_indx+1))))
endif
a_matks(i_indx+1) = a_matks(i_indx+1)(1:rdflen(a_matks(i_indx+1)))//rdfupper(rdfcullsp(a_suffix))
else
a_prfxs(i_indx+1) = ' '
a_sufxs(i_indx+1) = ' '
a_matks(i_indx+1) = ' '
endif
i_pntr = 0
if (a_keyw .ne. ' ') call rdf_index(a_keyw,i_indxx,i_flg)
i_pntr = i_indx+1
i_nums = i_nums + 1
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_entercols(i_indx,a_keyw,a_valu,a_unit,a_dimn,a_elem,a_oper,a_cmnt)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i
integer i_indx
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_loc
integer i_lun
integer i_indxx
integer i_indxxx
character*320 a_kkkk
character*320 a_dset
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdftrim
external rdftrim
character*320 rdfupper
external rdfupper
character*320 rdfcullsp
external rdfcullsp
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_ENTERCOLS')
if (i_indx .eq. 0) then
i_indxx=i_pntr
else
i_indxx=i_indx
endif
if (i_nums .ge. I_PARAMS) then
a_errtmp = 'Buffer full, unable to insert parameter. '//
& a_keyw(1:max(rdflen(a_keyw),1))
call rdf_error(a_errtmp)
else if (i_indxx .lt. 1 .or. i_indxx .gt. i_nums+1) then
a_errtmp = 'Index not within valid range 1 to i_nums+1. '//
& a_keyw(1:max(rdflen(a_keyw),1))//' '//rdfint1(i_indxx)
call rdf_error(a_errtmp)
else
i_loc = index(a_keyw,':')
if (i_loc .gt. 0) then
a_kkkk = rdftrim(a_keyw(i_loc+1:))
if (i_loc .gt. 1) then
a_dset = rdfupper(rdfcullsp(rdftrim(a_keyw(1:i_loc-1))))
else
a_dset = ' '
endif
else
a_kkkk = rdftrim(a_keyw)
a_dset = ' '
endif
do i=i_nums,i_indxx,-1
a_dsets(i+1) = a_dsets(i)
a_strts(i+1) = a_strts(i)
a_prfxs(i+1) = a_prfxs(i)
a_sufxs(i+1) = a_sufxs(i)
a_keyws(i+1) = a_keyws(i)
a_valus(i+1) = a_valus(i)
a_units(i+1) = a_units(i)
a_dimns(i+1) = a_dimns(i)
a_elems(i+1) = a_elems(i)
a_opers(i+1) = a_opers(i)
a_cmnts(i+1) = a_cmnts(i)
enddo
i_nums = i_nums + 1
a_dsets(i_indxx) = a_dset
a_strts(i_indxx) = ' '
a_keyws(i_indxx) = a_kkkk
a_valus(i_indxx) = a_valu
a_units(i_indxx) = a_unit
a_dimns(i_indxx) = a_dimn
a_elems(i_indxx) = a_elem
a_opers(i_indxx) = a_oper
a_cmnts(i_indxx) = a_cmnt
if (a_keyws(i_indxx) .ne. ' ') then
a_prfxs(i_indxx) = a_prfx
a_sufxs(i_indxx) = a_sufx
if (i_prelen .gt. 0) then
a_matks(i_indxx) = rdfupper(rdfcullsp(rdftrim(a_prefix(1:i_prelen)//a_keyws(i_indxx))))
else
a_matks(i_indxx) = rdfupper(rdfcullsp(rdftrim(a_keyws(i_indxx))))
endif
a_matks(i_indxx) = a_matks(i_indxx)(1:rdflen(a_matks(i_indxx)))//rdfupper(rdfcullsp(a_suffix))
else
a_prfxs(i_indxx) = ' '
a_sufxs(i_indxx) = ' '
a_matks(i_indxx) = ' '
endif
i_pntr = 0
if (a_keyw .ne. ' ') call rdf_index(a_keyw,i_indxxx,i_flg)
i_pntr = i_indxx
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_view(i_indx,a_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i_indx
c OUTPUT VARIABLES:
character*(*) a_data
c LOCAL VARIABLES:
integer i_lun
character*320 a_keyw
character*320 a_valu
character*320 a_unit
character*320 a_dimn
character*320 a_elem
character*320 a_oper
character*320 a_cmnt
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_VIEW')
i_pntr = max(min(i_indx,i_nums),0)
if (i_indx .ge. 1 .and. i_indx .le. i_nums) then
if (a_dsets(i_indx) .eq. ' ') then
a_keyw = a_matks(i_indx)
else
a_keyw = a_dsets(i_indx)(1:rdflen(a_dsets(i_indx)))//':'//a_matks(i_indx)
endif
a_valu = a_valus(i_indx)
a_unit = a_units(i_indx)
a_dimn = a_dimns(i_indx)
a_elem = a_elems(i_indx)
a_oper = a_opers(i_indx)
a_cmnt = a_cmnts(i_indx)
c type *,'a_keyw =',a_keyw(1:max(rdflen(a_keyw),1)),rdflen(a_keyw)
c type *,'a_unit =',a_unit(1:max(rdflen(a_unit),1)),rdflen(a_unit)
c type *,'a_dimn =',a_dimn(1:max(rdflen(a_dimn),1)),rdflen(a_dimn)
c type *,'a_elem =',a_elem(1:max(rdflen(a_elem),1)),rdflen(a_elem)
c type *,'a_oper =',a_oper(1:max(rdflen(a_oper),1)),rdflen(a_oper)
c type *,'a_valu =',a_valu(1:max(rdflen(a_valu),1)),rdflen(a_valu)
c type *,'a_cmnt =',a_cmnt(1:max(rdflen(a_cmnt),1)),rdflen(a_cmnt)
call rdf_unparse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
c type *,'a_data =',a_data(1:max(rdflen(a_data),1)),rdflen(a_data)
else
a_valu = ' '
a_unit = ' '
a_dimn = ' '
a_elem = ' '
a_oper = ' '
a_cmnt = ' '
if (i_indx .ne. 0) then
a_errtmp = 'Requested buffer entry does not contain valid data. '
& //rdfint1(i_indx)
call rdf_error(a_errtmp)
endif
a_data = ' '
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_viewcols(i_indx,a_keyw,a_valu,a_unit,a_dimn,a_elem,a_oper,a_cmnt)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i_indx
c OUTPUT VARIABLES:
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
character*320 a_errtmp
c LOCAL VARIABLES:
integer i_lun
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_VIEWCOLS')
i_pntr = max(min(i_indx,i_nums),0)
if (i_indx .ge. 1 .and. i_indx .le. i_nums) then
if (a_dsets(i_indx) .eq. ' ') then
a_keyw = a_keyws(i_indx)
else
a_keyw = a_dsets(i_indx)(1:rdflen(a_dsets(i_indx)))//':'//a_keyws(i_indx)
endif
a_valu = a_valus(i_indx)
a_unit = a_units(i_indx)
a_dimn = a_dimns(i_indx)
a_elem = a_elems(i_indx)
a_oper = a_opers(i_indx)
a_cmnt = a_cmnts(i_indx)
c i_pntr = i_indx
else
a_valu = ' '
a_unit = ' '
a_dimn = ' '
a_elem = ' '
a_oper = ' '
a_cmnt = ' '
if (i_indx .ne. 0) then
a_errtmp = 'Requested buffer entry does not contain valid data. '
& //rdfint1(i_indx)
call rdf_error(a_errtmp)
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_find(a_keyw,a_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*320 a_valu
character*320 a_unit
character*320 a_dimn
character*320 a_elem
character*320 a_oper
character*320 a_cmnt
character*320 a_errtmp
character*(*) a_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_indx
integer i_flg
integer i_lun
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_FIND')
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .ge. 1) then
a_valu = a_valus(i_indx)
a_unit = a_units(i_indx)
a_dimn = a_dimns(i_indx)
a_elem = a_elems(i_indx)
a_oper = a_opers(i_indx)
a_cmnt = a_cmnts(i_indx)
call rdf_unparse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
endif
if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning last one found. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_findcols(a_keyw,a_valu,a_unit,a_dimn,a_elem,a_oper,a_cmnt)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
character*320 a_errtmp
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_indx
integer i_flg
integer i_lun
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDF_FINDCOLS')
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_valu = a_valus(i_indx)
a_unit = a_units(i_indx)
a_dimn = a_dimns(i_indx)
a_elem = a_elems(i_indx)
a_oper = a_opers(i_indx)
a_cmnt = a_cmnts(i_indx)
endif
if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning last one found. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_remove(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
integer i_flg
integer i_indx
character*320 a_kkkk
character*320 a_dset
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDF_REMOVE')
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 0) then
a_errtmp = 'Keyword not found. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else
if (i_flg .gt. 1) then
a_errtmp = 'Multiple Keywords found. Deleting last occurance. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
endif
i_pntr = i_indx
do i = i_indx+1,i_nums
a_dsets(i-1) = a_dsets(i)
a_matks(i-1) = a_matks(i)
a_strts(i-1) = a_strts(i)
a_prfxs(i-1) = a_prfxs(i)
a_sufxs(i-1) = a_sufxs(i)
a_keyws(i-1) = a_keyws(i)
a_valus(i-1) = a_valus(i)
a_units(i-1) = a_units(i)
a_dimns(i-1) = a_dimns(i)
a_elems(i-1) = a_elems(i)
a_opers(i-1) = a_opers(i)
a_cmnts(i-1) = a_cmnts(i)
enddo
endif
i_nums = i_nums - 1
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_update(a_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_keyw
character*320 a_valu
character*320 a_unit
character*320 a_dimn
character*320 a_elem
character*320 a_oper
character*320 a_cmnt
character*320 a_errtmp
integer i_flg
integer i_indx
integer i_lun
integer i_iostat
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDF_UPDATE')
call rdf_unparse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .ge. 1) then
a_valus(i_indx) = a_valu
a_units(i_indx) = a_unit
a_dimns(i_indx) = a_dimn
a_elems(i_indx) = a_elem
a_opers(i_indx) = a_oper
a_cmnts(i_indx) = a_cmnt
endif
if (i_flg .eq. 0) then
if (i_nums .lt. I_PARAMS) then
a_errtmp = 'Keyword not found, inserting at end. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
call rdf_insertcols(a_keyw,a_valu,a_unit,a_dimn,a_elem,a_oper,a_cmnt)
else
a_errtmp = 'Buffer Full, cannot add parameter '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_updatecols(a_keyw,a_unit,a_dimn,a_elem,a_oper,a_cmnt,a_valu)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
character*320 a_errtmp
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
integer i_iostat
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDF_UPDATECOLS')
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .ge. 1) then
a_valus(i_indx) = a_valu
a_units(i_indx) = a_unit
a_dimns(i_indx) = a_dimn
a_elems(i_indx) = a_elem
a_opers(i_indx) = a_oper
a_cmnts(i_indx) = a_cmnt
endif
if (i_flg .eq. 0) then
if (i_nums .lt. I_PARAMS) then
a_errtmp = 'Keyword not found, inserting at end. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
call rdf_insertcols(a_keyw,a_valu,a_unit,a_dimn,a_elem,a_oper,a_cmnt)
else
a_errtmp = 'Buffer Full, cannot add parameter '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_index(a_keyw,i_indx,i_flg)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
integer i_indx
integer i_flg
c LOCAL VARIABLES:
integer i
integer i_loc
integer i_ocr
integer i_ocl
integer i_cnt
integer i_stat
character*320 a_kkkk
character*320 a_dset
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdfupper
external rdfupper
character*320 rdftrim
external rdftrim
character*320 rdfcullsp
external rdfcullsp
data i_ocl / 0/
save i_ocl
data i_cnt / 0/
save i_cnt
c PROCESSING STEPS:
call rdf_trace('RDF_INDEX')
i_loc = index(a_keyw,':')
if (i_loc .gt. 0) then
a_kkkk = rdfupper(rdfcullsp(rdftrim(a_keyw(i_loc+1:))))
if (i_loc .gt. 1) then
a_dset = rdfupper(rdfcullsp(rdftrim(a_keyw(1:i_loc-1))))
else
a_dset = ' '
endif
else
a_kkkk = rdfupper(rdfcullsp(rdftrim(a_keyw)))
a_dset = ' '
endif
i_loc = index(a_kkkk,';')
if (i_loc .gt. 0) then
read(a_kkkk(i_loc+1:),'(i10)',iostat=i_stat) i_ocr
if (i_stat .ne. 0) call rdf_error('Error reading i_ocr')
if (i_loc .gt. 1) then
a_kkkk = a_kkkk(1:i_loc-1)
else
a_kkkk = ' '
endif
else
i_ocr = 0
endif
i_flg = 0
i_indx = 0
c type *,'a_kkkk=',a_kkkk(1:max(1,rdflen(a_kkkk)))
c type *,'i_ocr =',i_ocr,i_ocl
if (a_kkkk .ne. ' ') then
if (i_pntr .ge. 1 .and. i_pntr .le. i_nums) then
if (a_kkkk .eq. a_matks(i_pntr) .and.
& (a_dset .eq. a_dsets(i_pntr) .or. a_dset .eq. ' ') .and.
& ((i_ocr .eq. 0 .and. i_cnt .eq. 1).or. (i_ocr .eq. i_ocl)) ) then ! Found a match
i_indx = i_pntr
if (i_ocr .eq. 0) then
i_flg = i_cnt
else
i_flg = 1
endif
call rdf_trace(' ')
return
endif
endif
i_pntr = 0
i_ocl = 0
i_cnt = 0
i_flg = 0
do i = 1,i_nums
if (a_kkkk .eq. a_matks(i) .and.
& (a_dset .eq. a_dsets(i) .or. a_dset .eq. ' ') ) then ! Found a match
i_cnt = i_cnt + 1
c type *,'a_kkkk=a_matks(i)',i_cnt,' ',a_matks(i)(1:max(1,rdflen(a_matks(i))))
if (i_ocr .eq. i_cnt .or. i_ocr .eq. 0) then
i_flg = i_flg + 1
i_indx = i
i_pntr = i
i_ocl = i_cnt
endif
endif
enddo
endif
c type *,'i_flg=',i_flg
call rdf_trace(' ')
return
end
c****************************************************************
integer*4 function rdfindx(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*320 a_errtmp
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDFINDX')
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
rdfindx = i_indx
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfvalu(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
integer i_iostat
character*320 a_valu
character*320 a_data
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDFVALU')
a_valu = ' '
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_valu = a_valus(i_indx)
else if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
a_valu = ' '
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
a_valu = a_valus(i_indx)
endif
rdfvalu = a_valu
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfunit(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
character*320 a_unit
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDFUNIT')
a_unit = ' '
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_unit = a_units(i_indx)
else if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
rdfunit = a_unit
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfdimn(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
character*320 a_dimn
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDFDIMN')
a_dimn = ' '
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_dimn = a_dimns(i_indx)
else if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
rdfdimn = a_dimn
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfelem(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
character*320 a_elem
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDFELEM')
a_elem = ' '
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_elem = a_elems(i_indx)
else if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
rdfelem = a_elem
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfoper(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
character*320 a_oper
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
integer rdflen
external rdflen
character*320 rdfint1
external rdfint1
c FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDFOPER')
a_oper = ' '
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_oper = a_opers(i_indx)
else if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
rdfoper = a_oper
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfcmnt(a_keyw)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
character*320 a_cmnt
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDFCMNT')
a_cmnt = ' '
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_cmnt = a_cmnts(i_indx)
else if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),1))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
endif
rdfcmnt = a_cmnt
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfval(a_keyw,a_unit)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c** This routine is just to maintain backward compatibility
c** with older versions of rdf_reader. Should use rdfdata.
c**
c** ROUTINES CALLED:
c** rdfdata
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_keyw
character*(*) a_unit
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
character*320 rdfdata
external rdfdata
c PROCESSING STEPS:
call rdf_trace('RDFVAL')
rdfval = rdfdata(a_keyw,a_unit)
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfdata(a_keyw,a_ounit)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*(*) a_ounit
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_flg
integer i_indx
integer i_lun
character*320 a_valu
character*320 a_unit
character*320 a_dimn
character*320 a_elem
character*320 a_oper
character*320 a_cmnt
character*320 a_errtmp
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
character*320 rdfint1
external rdfint1
c PROCESSING STEPS:
call rdf_trace('RDFDATA')
a_valu = ' '
a_unit = ' '
a_dimn = ' '
a_elem = ' '
a_oper = ' '
a_cmnt = ' '
call rdf_index(a_keyw,i_indx,i_flg)
if (i_flg .eq. 1) then
a_valu = a_valus(i_indx)
a_unit = a_units(i_indx)
a_dimn = a_dimns(i_indx)
a_elem = a_elems(i_indx)
a_oper = a_opers(i_indx)
a_cmnt = a_cmnts(i_indx)
endif
if (i_flg .eq. 0) then ! Data not found
a_errtmp = 'Keyword not found. '//a_keyw(1:max(min(rdflen(a_keyw),150),2))
call rdf_error(a_errtmp)
else if (i_flg .ge. 2) then
a_errtmp = 'Multiple matching keywords found, returning index of last. '//
& a_keyw(1:max(min(rdflen(a_keyw),150),2))//' '//rdfint1(i_flg)
call rdf_error(a_errtmp)
else
call rdf_cnvrt(a_ounit,a_unit,a_valu)
endif
rdfdata = a_valu
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_cnvrt(a_ounit,a_unit,a_valu)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_ounit
character*(*) a_unit
character*(*) a_valu
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
integer ii
integer i_stat
integer i_type
integer i_uinp
integer i_uout
integer i_lun
integer i_iostat
integer i_val
real*8 r_val
character*320 a_uinp(100)
character*320 a_uout(100)
character*320 a_vals(100)
character*320 a_fmt
character*320 a_errtmp
real*8 r_addit1
real*8 r_addit2
real*8 r_scale1
real*8 r_scale2
real*8 r_cnv(20,20,2)
integer i_cnv(20)
character*20 a_cnv(20,20)
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdflower
external rdflower
character*320 rdftrim
external rdftrim
c DATA STATEMENTS:
data i_cnv(1) /9/ ! length
data a_cnv(1,1) /'nm'/, r_cnv(1,1,1) /1.e-9/, r_cnv(1,1,2) /0./
data a_cnv(1,2) /'um'/, r_cnv(1,2,1) /1.e-6/, r_cnv(1,2,2) /0./
data a_cnv(1,3) /'mm'/, r_cnv(1,3,1) /1.e-3/, r_cnv(1,3,2) /0./
data a_cnv(1,4) /'cm'/, r_cnv(1,4,1) /1.e-2/, r_cnv(1,4,2) /0./
data a_cnv(1,5) /'m' /, r_cnv(1,5,1) /1.0 /, r_cnv(1,5,2) /0./
data a_cnv(1,6) /'km'/, r_cnv(1,6,1) /1.e+3/, r_cnv(1,6,2) /0./
data a_cnv(1,7) /'in'/, r_cnv(1,7,1) /2.54e-2/, r_cnv(1,7,2) /0./
data a_cnv(1,8) /'ft'/, r_cnv(1,8,1) /3.048e-1/, r_cnv(1,8,2) /0./
data a_cnv(1,9) /'mi'/, r_cnv(1,9,1) /1.609344e3/, r_cnv(1,9,2) /0./
data i_cnv(2) /7/ ! area
data a_cnv(2,1) /'mm*mm'/, r_cnv(2,1,1) /1.e-6/, r_cnv(2,1,2) /0./
data a_cnv(2,2) /'cm*cm'/, r_cnv(2,2,1) /1.e-4/, r_cnv(2,2,2) /0./
data a_cnv(2,3) /'m*m' /, r_cnv(2,3,1) /1.0 /, r_cnv(2,3,2) /0./
data a_cnv(2,4) /'km*km'/, r_cnv(2,4,1) /1.e+6/, r_cnv(2,4,2) /0./
data a_cnv(2,5) /'in*in'/, r_cnv(2,5,1) /6.4516e-4/, r_cnv(2,5,2) /0./
data a_cnv(2,6) /'ft*ft'/, r_cnv(2,6,1) /9.290304e-2/, r_cnv(2,6,2) /0./
data a_cnv(2,7) /'mi*mi'/, r_cnv(2,7,1) /2.58995511e6/, r_cnv(2,7,2) /0./
data i_cnv(3) /7/ ! time
data a_cnv(3,1) /'ns'/, r_cnv(3,1,1) /1.e-9/, r_cnv(3,1,2) /0./
data a_cnv(3,2) /'us'/, r_cnv(3,2,1) /1.e-6/, r_cnv(3,2,2) /0./
data a_cnv(3,3) /'ms'/, r_cnv(3,3,1) /1.e-3/, r_cnv(3,3,2) /0./
data a_cnv(3,4) /'s' /, r_cnv(3,4,1) /1.0/, r_cnv(3,4,2) /0./
data a_cnv(3,5) /'min'/,r_cnv(3,5,1) /6.0e1/, r_cnv(3,5,2) /0./
data a_cnv(3,6) /'hr' /,r_cnv(3,6,1) /3.6e3/, r_cnv(3,6,2) /0./
data a_cnv(3,7) /'day'/,r_cnv(3,7,1) /8.64e4/, r_cnv(3,7,2) /0./
data i_cnv(4) /6/ ! velocity
data a_cnv(4,1) /'cm/s'/, r_cnv(4,1,1) /1.e-2/, r_cnv(4,1,2) /0./
data a_cnv(4,2) /'m/s'/, r_cnv(4,2,1) /1.0/, r_cnv(4,2,2) /0./
data a_cnv(4,3) /'km/s'/, r_cnv(4,3,1) /1.e3/, r_cnv(4,3,2) /0./
data a_cnv(4,4) /'km/hr'/, r_cnv(4,4,1) /2.77777778e-1/, r_cnv(4,4,2) /0./
data a_cnv(4,5) /'ft/s'/, r_cnv(4,5,1) /3.04878e-1/, r_cnv(4,5,2) /0./
data a_cnv(4,6) /'mi/hr'/, r_cnv(4,6,1) /4.4704e-1/, r_cnv(4,6,2) /0./
data i_cnv(5) /5/ ! power
data a_cnv(5,1) /'mw'/, r_cnv(5,1,1) /1.e-3/, r_cnv(5,1,2) /0./
data a_cnv(5,2) /'w'/, r_cnv(5,2,1) /1.0/, r_cnv(5,2,2) /0./
data a_cnv(5,3) /'kw'/, r_cnv(5,3,1) /1.e3/, r_cnv(5,3,2) /0./
data a_cnv(5,4) /'dbm'/,r_cnv(5,4,1) /1.e-3/, r_cnv(5,4,2) /0./
data a_cnv(5,5) /'dbw'/,r_cnv(5,5,1) /1.0/, r_cnv(5,5,2) /0./
data i_cnv(6) /4/ ! frequency
data a_cnv(6,1) /'hz'/, r_cnv(6,1,1) /1.0/, r_cnv(6,1,2) /0./
data a_cnv(6,2) /'khz'/,r_cnv(6,2,1) /1.0e3/, r_cnv(6,2,2) /0./
data a_cnv(6,3) /'mhz'/,r_cnv(6,3,1) /1.0e6/, r_cnv(6,3,2) /0./
data a_cnv(6,4) /'ghz'/,r_cnv(6,4,1) /1.0e9/, r_cnv(6,4,2) /0./
data i_cnv(7) /3/ ! angle
data a_cnv(7,1) /'deg'/,r_cnv(7,1,1) /1.0/, r_cnv(7,1,2) /0./
data a_cnv(7,2) /'rad'/,r_cnv(7,2,1) /57.29577951/, r_cnv(7,2,2) /0./
data a_cnv(7,3) /'arc'/,r_cnv(7,3,1) /0.000277778/, r_cnv(7,3,2) /0./
data i_cnv(8) /7/ ! data
data a_cnv(8,1) /'bits'/, r_cnv(8,1,1) /1./, r_cnv(8,1,2) /0./
data a_cnv(8,2) /'kbits'/, r_cnv(8,2,1) /1.e3/, r_cnv(8,2,2) /0./
data a_cnv(8,3) /'mbits'/, r_cnv(8,3,1) /1.e6/, r_cnv(8,3,2) /0./
data a_cnv(8,4) /'bytes'/, r_cnv(8,4,1) /8./, r_cnv(8,4,2) /0./
data a_cnv(8,5) /'kbytes'/,r_cnv(8,5,1) /8320./, r_cnv(8,5,2) /0./
data a_cnv(8,6) /'mbytes'/,r_cnv(8,6,1) /8388608./, r_cnv(8,6,2) /0./
data a_cnv(8,7) /'words'/, r_cnv(8,7,1) /32./, r_cnv(8,7,2) /0./
data i_cnv(9) /7/ ! data rate
data a_cnv(9,1) /'bits/s'/, r_cnv(9,1,1) /1./, r_cnv(9,1,2) /0./
data a_cnv(9,2) /'kbits/s'/, r_cnv(9,2,1) /1.e3/, r_cnv(9,2,2) /0./
data a_cnv(9,3) /'mbits/s'/, r_cnv(9,3,1) /1.e6/, r_cnv(9,3,2) /0./
data a_cnv(9,4) /'bytes/s'/, r_cnv(9,4,1) /8./, r_cnv(9,4,2) /0./
data a_cnv(9,5) /'kbytes/s'/,r_cnv(9,5,1) /8320./, r_cnv(9,5,2) /0./
data a_cnv(9,6) /'mbytes/s'/,r_cnv(9,6,1) /8388608./, r_cnv(9,6,2) /0./
data a_cnv(9,7) /'baud'/, r_cnv(9,7,1) /1./, r_cnv(9,7,2) /0./
data i_cnv(10) /3/ ! temperature
data a_cnv(10,1) /'deg c'/,r_cnv(10,1,1) /1.0/, r_cnv(10,1,2) /0.0/
data a_cnv(10,2) /'deg k'/,r_cnv(10,2,1) /1.0/, r_cnv(10,2,2) /273.0/
data a_cnv(10,3) /'deg f'/,r_cnv(10,3,1) /0.555556/, r_cnv(10,3,2) /-32/
data i_cnv(11) /2/ ! ratio
data a_cnv(11,1) /'-'/, r_cnv(11,1,1) /1.0/, r_cnv(11,1,2) /0.0/
data a_cnv(11,2) /'db'/,r_cnv(11,2,1) /1.0/, r_cnv(11,2,2) /0.0/
data i_cnv(12) /2/ ! fringe rate
data a_cnv(12,1) /'deg/m'/,r_cnv(12,1,1) /1.0/ , r_cnv(12,1,2) /0.0/
data a_cnv(12,2) /'rad/m'/,r_cnv(12,2,1) /57.29577951/, r_cnv(12,2,2) /0.0/
save i_cnv,r_cnv,a_cnv
c PROCESSING STEPS:
if (a_valu .eq. ' ') return
if (a_unit .eq. ' ') return
if (a_ounit .eq. ' ') return
if (a_unit .eq. '&') return
if (a_ounit .eq. '&') return
if (a_unit .eq. '?') return
if (a_ounit .eq. '?') return
call rdf_trace('RDF_CNVRT')
i_uinp = 1
a_uinp(1) = ' '
do i=1,rdflen(a_unit)
if (a_unit(i:i) .eq. ',') then
i_uinp = i_uinp + 1
a_uinp(i_uinp) = ' '
else
a_uinp(i_uinp)(rdflen(a_uinp(i_uinp))+1:) = rdflower(a_unit(i:i))
endif
enddo
i_uout = 1
a_uout(1) = ' '
do i=1,rdflen(a_ounit)
if (a_ounit(i:i) .eq. ',') then
i_uout = i_uout + 1
a_uout(i_uout) = ' '
else
a_uout(i_uout)(rdflen(a_uout(i_uout))+1:) = rdflower(a_ounit(i:i))
endif
enddo
if (i_uinp .ne. i_uout .and. i_uinp .gt. 1 .and. i_uout .gt. 1) then
a_errtmp = 'Number of units input not equal to number of units output. '//
& a_unit(1:max(min(rdflen(a_unit),150),2))//' '//a_ounit(1:max(min(rdflen(a_ounit),150),2))
call rdf_error(a_errtmp)
call rdf_trace(' ')
return
endif
call rdf_getfields(a_valu,i_val,a_vals)
if (i_uinp .eq. 1 .and. i_val .gt. 1) then
do ii = 2,i_val
a_uinp(ii) = a_uinp(1)
enddo
i_uinp = i_val
endif
if (i_uout .eq. 1 .and. i_val .gt. 1) then
do ii = 2,i_val
a_uout(ii) = a_uout(1)
enddo
i_uout = i_val
endif
do ii = i_uinp+1,i_val
a_uinp(ii) = ' '
enddo
do ii = i_uout+1,i_val
a_uout(ii) = ' '
enddo
do ii = 1,i_val
if ((a_uinp(ii) .ne. ' ' .and. a_uinp(ii) .ne. '&') .and.
& (a_uout(ii) .ne. ' ' .and. a_uout(ii) .ne. '&')) then
i_stat=0
if (a_uinp(ii) .ne. a_uout(ii) ) then
do i_type = 1,12
if (i_stat .eq. 0) then
r_scale1 = 0.
r_scale2 = 0.
do i=1,i_cnv(i_type)
if (a_uinp(ii) .eq. a_cnv(i_type,i)) then
r_scale1 = r_cnv(i_type,i,1)
r_addit1 = r_cnv(i_type,i,2)
endif
if (a_uout(ii) .eq. a_cnv(i_type,i)) then
r_scale2 = r_cnv(i_type,i,1)
r_addit2 = r_cnv(i_type,i,2)
endif
enddo
if (r_scale1 .ne. 0. .and. r_scale2 .ne. 0.) then
read(a_vals(ii),*,iostat=i_iostat) r_val
if (i_iostat .eq. 0) then
if (index(a_uinp(ii),'db') .gt. 0) r_val = 10.0**(r_val/10.)
r_val = (r_val+r_addit1)*r_scale1/r_scale2 - r_addit2
if (index(a_uout(ii),'db') .gt. 0) r_val = 10.0*dlog10(r_val)
if (a_dblefmt .eq. '*') then
write(a_vals(ii),fmt=*,iostat=i_iostat) r_val
else
a_fmt='('//a_dblefmt(1:max(1,rdflen(a_dblefmt)))//')'
write(a_vals(ii),fmt=a_fmt,iostat=i_iostat) r_val
endif
if (i_iostat .ne. 0 ) write(6,*) 'Internal write error ',i_iostat,r_val,a_vals(ii)
a_vals(ii) = rdftrim(a_vals(ii))
i_stat = 1
else
i_stat = 2
endif
endif
endif
enddo
if (i_stat .ne. 1) then
a_errtmp = 'Unit conversion error '//
& a_uinp(ii)(1:max(1,rdflen(a_uinp(ii))))//' > '//a_uout(ii)(1:max(1,rdflen(a_uout(ii))))//
& ' val:'//a_vals(ii)
call rdf_error(a_errtmp)
endif
endif
endif
enddo
a_valu=' '
do ii=1,i_val
if (rdflen(a_valu) .eq. 0) then
a_valu=a_vals(ii)
else
a_valu=a_valu(:rdflen(a_valu))//' '//a_vals(ii)
endif
enddo
c write(6,*) a_valu(1:max(1,rdflen(a_valu)))
call rdf_trace(' ')
return
end
c****************************************************************
integer*4 function rdferr(a_err)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
c OUTPUT VARIABLES:
character*(*) a_err
c LOCAL VARIABLES:
integer i
integer i_err
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDFERR')
i_err = max(i_error,0)
if (i_error .gt. 0) then
a_err = a_error(1)
do i = 1,i_error-1
a_error(i) = a_error(i+1)
enddo
i_error = i_error - 1
else
a_err = ' '
i_error = 0
endif
rdferr = i_err
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdftrim(a_input)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_input
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_value
integer i
integer i_len
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
i_len=len(a_input)
i_len = rdflen(a_input)
call rdf_trace('RDFTRIM')
a_value = a_input
if (i_len .gt. 0) then
if (i_len .gt. 320) then
write(6,*) 'String rdflen exceeds 320 in rdftrim ',i_len
write(6,*) a_input
endif
i = 1
do while ((i .lt. i_len) .and.
& (a_value(i:i) .eq. char(32) .or. a_value(i:i) .eq. char(9)))
i = i + 1
enddo
a_value = a_value(i:)
i_len = i_len - i + 1
do while ((i_len .gt. 1) .and.
& (a_value(i_len:i_len) .eq. char(32) .or. a_value(i_len:i_len) .eq. char(9)))
i_len = i_len - 1
enddo
a_value = a_value(1:i_len)
if (a_value(1:1) .eq. char(9)) a_value = a_value(2:)
endif
rdftrim = a_value
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfcullsp(a_temp)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
integer i_pos
integer i_len
character*(*) a_temp
character*320 a_temp2
character*320 a_string
integer*4 rdflen
external rdflen
call rdf_trace('RDFCULLSP')
a_string=a_temp ! replace tabs with spaces
c type *,'a_string=',a_string(1:max(1,rdflen(a_string)))
i_pos = index(a_string,char(9))
do while (i_pos .ne. 0)
a_string(i_pos:i_pos) = ' '
c type *,'a_string=',a_string(1:max(1,rdflen(a_string))),i_pos
i_pos = index(a_string,char(9))
end do
c type *,' '
i_len = rdflen(a_string)
i_pos = index(a_string,' ') ! convert multiple spaces to single spaces
do while (i_pos .ne. 0 .and. i_pos .lt. rdflen(a_string))
a_string=a_string(:i_pos)//a_string(i_pos+2:)
c type *,'a_string=',a_string(1:max(1,rdflen(a_string))),i_pos
i_len = i_len-1
i_pos = index(a_string,' ')
end do
a_temp2 = a_string ! (1:max(1,rdflen(a_string)))
rdfcullsp = a_temp2
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdflower(a_inpval)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_inpval
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
integer i
integer i_len
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFLOWER')
i_len = rdflen(a_inpval)
a_outval = ' '
do i=1,i_len
if (ichar(a_inpval(i:i)) .ge. 65 .and. ichar(a_inpval(i:i)) .le. 90 ) then
a_outval(i:i) = char(ichar(a_inpval(i:i))+32)
else
a_outval(i:i) = a_inpval(i:i)
endif
enddo
rdflower=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfupper(a_inpval)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_inpval
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
integer i
integer i_len
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFUPPER')
i_len = rdflen(a_inpval)
a_outval = ' '
do i=1,i_len
if (ichar(a_inpval(i:i)) .ge. 97 .and. ichar(a_inpval(i:i)) .le. 122 ) then
a_outval(i:i) = char(ichar(a_inpval(i:i))-32)
else
a_outval(i:i) = a_inpval(i:i)
endif
enddo
rdfupper=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfint(i_num,i_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i_num
integer i_data(*)
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
character*320 a_fmt
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFINT')
if (a_intfmt .eq. '*') then
write(unit=a_outval,fmt=*) (i_data(i),i=1,i_num)
else
write(a_fmt,'(a,i2,a,a)') '(',i_num,a_intfmt(1:max(rdflen(a_intfmt),1)),')'
write(unit=a_outval,fmt=a_fmt) (i_data(i),i=1,i_num)
endif
rdfint=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfint1(i_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
integer i_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFINT1')
write(a_outval,*) i_data
rdfint1=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfint2(i_data1,i_data2)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
integer i_data1
integer i_data2
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFINT2')
write(a_outval,*) i_data1,i_data2
rdfint2=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfint3(i_data1,i_data2,i_data3)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
integer i_data1
integer i_data2
integer i_data3
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFINT3')
write(a_outval,*) i_data1,i_data2,i_data3
rdfint3=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfreal(i_num,r_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer*4 i_num
real*4 r_data(*)
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
character*320 a_fmt
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFREAL')
if (a_realfmt .eq. '*') then
write(unit=a_outval,fmt=*) (r_data(i),i=1,i_num)
else
write(a_fmt,'(a,i2,a,a)') '(',i_num,a_realfmt(1:max(rdflen(a_realfmt),1)),')'
write(unit=a_outval,fmt=a_fmt) (r_data(i),i=1,i_num)
endif
rdfreal=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfreal1(r_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
real*4 r_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFREAL1')
write(a_outval,*) r_data
rdfreal1=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfreal2(r_data1,r_data2)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
real*4 r_data1,r_data2
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFREAL2')
write(a_outval,*) r_data1,r_data2
rdfreal2=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfreal3(r_data1,r_data2,r_data3)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
real*4 r_data1,r_data2,r_data3
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFREAL3')
write(a_outval,*) r_data1,r_data2,r_data3
rdfreal3=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfdble(i_num,r_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer*4 i_num
real*8 r_data(*)
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
character*320 a_fmt
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFDBLE')
if (a_dblefmt .eq. '*') then
write(unit=a_outval,fmt=*) (r_data(i),i=1,i_num)
else
write(a_fmt,'(a,i2,a,a)') '(',i_num,'('//a_dblefmt(1:max(rdflen(a_dblefmt),1)),',x))'
write(unit=a_outval,fmt=a_fmt) (r_data(i),i=1,i_num)
endif
rdfdble=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfdble1(r_data)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
real*8 r_data
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFDBLE1')
write(a_outval,*) r_data
rdfdble1=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfdble2(r_data1,r_data2)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
real*8 r_data1,r_data2
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFDBLE2')
write(a_outval,*) r_data1,r_data2
rdfdble2=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfdble3(r_data1,r_data2,r_data3)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
real*8 r_data1,r_data2,r_data3
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
character*320 a_outval
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFDBLE3')
write(a_outval,*) r_data1,r_data2,r_data3
rdfdble3=a_outval
call rdf_trace(' ')
return
end
c****************************************************************
integer*4 function rdflen(a_string)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION: This function returns the position
c** of the last none blank character in the string.
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_string
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_len
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDFLEN')
i_len=len(a_string)
do while(i_len .gt. 0 .and. (a_string(i_len:i_len) .eq. ' ' .or.
& ichar(a_string(i_len:i_len)) .eq. 0))
i_len=i_len-1
c write(6,*) i_len,' ',ichar(a_string(i_len:i_len)),' ',a_string(i_len:i_len)
enddo
rdflen=i_len
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfquote(a_string)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_string
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_string
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
C FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDFQUOTE')
i_string = rdflen(a_string)
rdfquote = '"'//a_string(1:i_string)//'"'
call rdf_trace(' ')
return
end
c****************************************************************
character*(*) function rdfunquote(a_string)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_string
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i_string
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
C FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('UNRDFQUOTE')
call rdf_unquote(a_string,i_string)
rdfunquote = a_string
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_unquote(a_string,i_string)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_string
c OUTPUT VARIABLES:
integer i_string
c LOCAL VARIABLES:
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
C FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDF_UNQUOTE')
i_string = rdflen(a_string)
if (i_string .gt. 1) then
if (a_string(1:1) .eq. '"' .and. a_string(i_string:i_string) .eq. '"' ) then
if (i_string .eq. 2) then
a_string = ' '
else
a_string = a_string(2:i_string-1)
endif
i_string = i_string-2
endif
endif
call rdf_trace(' ')
return
end
c****************************************************************
integer*4 function rdfmap(i,j,k)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
integer i
integer j
integer k
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
C FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDF_MAP')
if (k .eq. 0) then
rdfmap = 0
else if (k .eq. 1) then
rdfmap = i
else if (k .eq. 2) then
rdfmap = j
else
rdfmap = 0
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_indices(a_dimn,i_dimn,i_strt,i_stop,i_order)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_dimn
c OUTPUT VARIABLES:
integer i_dimn
integer i_order(20)
integer i_strt(20)
integer i_stop(20)
c LOCAL VARIABLES:
integer i
integer i_pos
integer i_stat
integer i_fields
character*320 a_fields(100)
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
C FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDF_INDICES')
call rdf_getfields(a_dimn,i_fields,a_fields)
do i=1,i_fields
i_pos = index(a_fields(i),'-')
if (i_pos .gt. 0) then
if (i_pos .gt. 1) then
read(a_fields(i)(1:i_pos-1),'(i10)',iostat=i_stat) i_order(i)
if (i_stat .ne. 0) then
write(6, *) '*** RDF ERROR *** Cannot parse indices order field ',a_fields(i)(1:i_pos-1)
i_order(i) = 1
endif
else
i_order(i) = i
endif
a_fields(i) = a_fields(i)(i_pos+1:)
else
i_order(i) = i
endif
i_pos = index(a_fields(i),':')
if (i_pos .gt. 0) then
if (i_pos .gt. 1) then
read(a_fields(i)(1:i_pos-1),'(i10)',iostat=i_stat) i_strt(i)
if (i_stat .ne. 0) then
write(6, *) '*** RDF ERROR *** Cannot parse indices start field ',a_fields(i)(1:i_pos-1)
i_strt(i) = 1
endif
else
i_strt(i) = 1
endif
a_fields(i) = a_fields(i)(i_pos+1:)
else
i_strt(i) = 1
endif
i_pos=max(1,rdflen(a_fields(i))) ! inserted for Vax compatibility
read(unit=a_fields(i)(1:i_pos),fmt='(i10)',iostat=i_stat) i_stop(i)
if (i_stat .ne. 0) then
write(6, *) '*** RDF ERROR *** Cannot parse indices stop field: ',rdflen(a_fields(i)),':',
& a_fields(i)(1:max(1,rdflen(a_fields(i))))
i_stop(i) = i_strt(i)
endif
enddo
i_dimn = i_fields
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_getfields(a_string,i_values,a_values)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INPUT VARIABLES:
character*(*) a_string
c OUTPUT VARIABLES:
character*(*) a_values(*)
integer i_values
c LOCAL VARIABLES:
integer i
integer i_on
integer i_cnt
integer i_quote
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
C FUNCTION_STATEMENTS:
c PROCESSING STEPS:
call rdf_trace('RDF_GETFIELDS')
i_on = 0
i_cnt = 0
i_values = 0
i_quote = 0
do i=1,len(a_string)
if (i_quote .eq. 1 .or. (
& a_string(i:i) .ne. ' ' .and.
& a_string(i:i) .ne. ',' .and.
& a_string(i:i) .ne. char(9)) ) then
if (i_on .eq. 0) then
i_on = 1
i_cnt = 0
i_values=min(i_values+1,100)
a_values(i_values)=' '
endif
if (a_string(i:i) .eq. '"') then
i_quote=1-i_quote
endif
i_cnt = i_cnt+1
a_values(i_values)(i_cnt:i_cnt) = a_string(i:i)
else
if (i_quote .eq. 0) then
i_on = 0
i_cnt = 0
endif
endif
enddo
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_parse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
integer i
character*(*) a_data
c OUTPUT VARIABLES:
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
character*320 a_errtmp
c LOCAL VARIABLES:
integer i_type
integer i_keyw
integer i_valu
integer i_unit
integer i_dimn
integer i_elem
integer i_oper
integer i_cmnt
integer i_lun
integer i_iostat
c COMMON BLOCKS:
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
character*320 rdftrim
external rdftrim
c PROCESSING STEPS:
call rdf_trace('RDF_PARSE')
a_keyw = ' '
a_valu = ' '
a_oper = ' '
a_unit = ' '
a_dimn = ' '
a_elem = ' '
a_cmnt = ' '
i_keyw = 0
i_valu = 0
i_oper = 0
i_unit = 0
i_elem = 0
i_dimn = 0
i_cmnt = 0
i_type = 1
do i=1,rdflen(a_data)
if (i_type .eq. 0) then
i_cmnt = i_cmnt + 1
if (i_cmnt .le. I_MCPF) a_cmnt(i_cmnt:i_cmnt) = a_data(i:i)
else if (a_data(i:i) .eq. a_cmdl(0) .and. a_cmdl(0) .ne. ' ') then
i_type = 0
else if (a_data(i:i) .eq. a_cmdl(1) .and. a_cmdl(1) .ne. ' ') then
i_type = 0
else if (a_data(i:i) .eq. a_cmdl(2) .and. a_cmdl(2) .ne. ' ') then
i_type = 0
else if (i_type .eq. 10) then
i_valu = i_valu + 1
if (i_valu .le. I_MCPF) then
a_valu(i_valu:i_valu) = a_data(i:i)
else if (i_valu .eq. I_MCPF+1) then
a_errtmp = '*** WARNING *** RDF_PARSE - Value field exceeds max characters per line. '//
& a_cmnt
call rdf_error(a_errtmp)
endif
else if (a_data(i:i) .eq. '(' ) then
i_type = 2
else if (a_data(i:i) .eq. ')' ) then
i_type = 1
else if (a_data(i:i) .eq. '[' ) then
i_type = 3
else if (a_data(i:i) .eq. ']' ) then
i_type = 1
else if (a_data(i:i) .eq. '{' ) then
i_type = 4
else if (a_data(i:i) .eq. '}' ) then
i_type = 1
else if (a_data(i:i) .eq. '=' ) then
i_type = 10
a_oper = '='
else if (a_data(i:i) .eq. '<' ) then
i_type = 10
a_oper = '<'
else if (a_data(i:i) .eq. '>' ) then
i_type = 10
a_oper = '>'
else if (i_type .eq. 1) then
i_keyw = i_keyw + 1
if (i_keyw .le. I_MCPF) a_keyw(i_keyw:i_keyw) = (a_data(i:i))
else if (i_type .eq. 2) then
i_unit = i_unit + 1
if (i_unit .le. I_MCPF) a_unit(i_unit:i_unit) = (a_data(i:i))
else if (i_type .eq. 3) then
i_dimn = i_dimn + 1
if (i_dimn .le. I_MCPF) a_dimn(i_dimn:i_dimn) = (a_data(i:i))
else if (i_type .eq. 4) then
i_elem = i_elem + 1
if (i_elem .le. I_MCPF) a_elem(i_elem:i_elem) = (a_data(i:i))
endif
enddo
if (i_cmnt .eq. I_MCPF+1) then
a_errtmp = '*** WARNING *** Comment field exceeds max characters per line. '//
& a_cmnt
call rdf_error(a_errtmp)
endif
if (i_keyw .eq. I_MCPF+1) then
a_errtmp = 'Keyword field exceeds max characters per line. '//
& a_cmnt
call rdf_error(a_errtmp)
endif
if (i_unit .eq. I_MCPF+1) then
a_errtmp = 'Unit field exceeds max characters per line. '//
& a_unit
call rdf_error(a_errtmp)
endif
if (i_dimn .eq. I_MCPF+1) then
a_errtmp = 'Dimension field exceeds max characters per line. '//
& a_dimn
call rdf_error(a_errtmp)
endif
if (i_elem .eq. I_MCPF+1) then
a_errtmp = 'Element field exceeds max characters per line. '//
& a_elem
call rdf_error(a_errtmp)
endif
a_keyw = rdftrim(a_keyw)
a_valu = rdftrim(a_valu)
a_unit = rdftrim(a_unit)
a_dimn = rdftrim(a_dimn)
a_elem = rdftrim(a_elem)
a_oper = rdftrim(a_oper)
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_unparse(a_data,a_keyw,a_unit,a_dimn,a_elem,a_oper,a_valu,a_cmnt)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_keyw
character*(*) a_valu
character*(*) a_unit
character*(*) a_dimn
character*(*) a_elem
character*(*) a_oper
character*(*) a_cmnt
c OUTPUT VARIABLES:
character*(*) a_data
c LOCAL VARIABLES:
integer i
integer i_tabs(10)
integer i_keyw
integer i_valu
integer i_unit
integer i_dimn
integer i_elem
integer i_oper
integer i_cmnt
character*320 a_ktemp
character*320 a_otemp
character*320 a_vtemp
character*320 a_ctemp
character*320 a_utemp
character*320 a_dtemp
character*320 a_etemp
character*320 a_cdel
c COMMON BLOCKS
c EQUIVALENCE STATEMENTS:
c DATA STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c PROCESSING STEPS:
call rdf_trace('RDF_UNPARSE')
if (a_keyw .eq. ' ' .and. a_unit .eq. ' ' .and.
& a_valu .eq. ' ' .and. a_oper .eq. ' ') then
if (a_cmnt .eq. ' ') then
a_data = ' '
else
a_cdel = a_cmdl(0)
c if (a_cdel .eq. ' ') a_cdel = '!'
c a_data = a_cdel(1:max(rdflen(a_cdel),1))//' '//a_cmnt(1:rdflen(a_cmnt))
if (a_cdel .eq. ' ') then
a_data = ' '
else
a_data = a_cdel(1:max(rdflen(a_cdel),1))//' '//a_cmnt(1:rdflen(a_cmnt))
endif
endif
else
a_cdel = a_cmdl(0)
c if (a_cdel .eq. ' ') a_cdel = '!'
if (a_cmnt .eq. ' ' .and. i_delflag(1) .eq. 1) a_cdel = ' '
a_ktemp = a_keyw
a_otemp = a_oper
a_vtemp = a_valu
a_utemp = ' '
a_dtemp = ' '
a_etemp = ' '
if (a_cdel .eq. ' ') then
a_ctemp = ' '
else
a_ctemp = a_cdel(1:max(rdflen(a_cdel),1))//' '//a_cmnt(1:max(rdflen(a_cmnt),1))
endif
if (a_unit .ne. ' ') a_utemp = '('//a_unit(1:max(rdflen(a_unit),1))//')'
if (a_dimn .ne. ' ') a_dtemp = '['//a_dimn(1:max(rdflen(a_dimn),1))//']'
if (a_elem .ne. ' ') a_etemp = '{'//a_elem(1:max(rdflen(a_elem),1))//'}'
i_tabs(1) = i_fsizes(1)
do i = 2,7
i_tabs(i) = i_tabs(i-1) + i_fsizes(i)
enddo
i_keyw = min(max(rdflen(a_ktemp) + 1, i_tabs(1) ),320)
i_unit = min(max(rdflen(a_utemp) + 1, i_tabs(2) - i_keyw),320)
i_dimn = min(max(rdflen(a_dtemp) + 1, i_tabs(3) - i_unit - i_keyw),320)
i_elem = min(max(rdflen(a_etemp) + 1, i_tabs(4) - i_dimn - i_unit - i_keyw),320)
i_oper = min(max(rdflen(a_otemp) + 1, i_tabs(5) - i_elem - i_dimn - i_unit - i_keyw),320)
i_valu = min(max(rdflen(a_vtemp) + 1, i_tabs(6) - i_oper - i_elem - i_dimn - i_unit - i_keyw),320)
i_cmnt = min(max(rdflen(a_ctemp) + 1, i_tabs(7) - i_valu - i_oper - i_elem - i_dimn - i_unit - i_keyw),320)
a_data = a_ktemp(1:i_keyw)//a_utemp(1:i_unit)//a_dtemp(1:i_dimn)//a_etemp(1:i_elem)//
& a_otemp(1:i_oper)//a_vtemp(1:i_valu)//a_ctemp(1:i_cmnt)
endif
call rdf_trace(' ')
return
end
c****************************************************************
subroutine rdf_trace(a_routine)
c****************************************************************
c**
c** FILE NAME: rdf_reader.f
c**
c** DATE WRITTEN: 15-Sept-1997
c**
c** PROGRAMMER: Scott Shaffer
c**
c** FUNCTIONAL DESCRIPTION:
c**
c** ROUTINES CALLED:
c**
c** NOTES:
c**
c** UPDATE LOG:
c**
c** Date Changed Reason Changed CR # and Version #
c** ------------ ---------------- -----------------
c**
c*****************************************************************
implicit none
c INCLUDE FILES
include 'rdf_common.inc'
c INPUT VARIABLES:
character*(*) a_routine
c OUTPUT VARIABLES:
c LOCAL VARIABLES:
integer i
integer i_setup
c COMMON BLOCKS
c EQUIVALENCE STATEMENTS:
c FUNCTION_STATEMENTS:
integer*4 rdflen
external rdflen
c DATA STATEMENTS:
data i_setup /0/
save i_setup
c PROCESSING STEPS:
if (i_setup .eq. 0) then
i_stack = 0
i_setup = 1
endif
if (a_routine .ne. ' ') then
i_stack = i_stack+1
if (i_stack .gt. 0 .and. i_stack .le. 10) a_stack(i_stack) = a_routine
c type *,'TRACE IN: i_stack=',i_stack,' ',a_stack(i_stack)
else
c type *,'TRACE OUT: i_stack=',i_stack,' ',a_stack(i_stack)
if (i_stack .gt. 0 .and. i_stack .le. 10) a_stack(i_stack) = ' '
i_stack = max(i_stack - 1, 0)
endif
return
end
c The following is a commented out version of the include file that must accompany the source code
cc PARAMETER STATEMENTS:
c integer I_PARAMS
c parameter(I_PARAMS = 500)
c
c integer I_MCPF
c parameter(I_MCPF = 320)
c
c integer i_nums
c integer i_pntr
c character*320 a_dsets(I_PARAMS)
c character*320 a_prfxs(I_PARAMS)
c character*320 a_sufxs(I_PARAMS)
c character*320 a_strts(I_PARAMS)
c character*320 a_matks(I_PARAMS)
c character*320 a_keyws(I_PARAMS)
c character*320 a_units(I_PARAMS)
c character*320 a_dimns(I_PARAMS)
c character*320 a_elems(I_PARAMS)
c character*320 a_opers(I_PARAMS)
c character*320 a_cmnts(I_PARAMS)
c character*320 a_valus(I_PARAMS)
c common /params/ i_pntr,i_nums,a_dsets,a_prfxs,a_sufxs,a_strts,a_matks,
c & a_keyws,a_units,a_dimns,a_elems,a_opers,a_valus,a_cmnts
c
c integer i_errflag(3)
c integer i_error
c character*320 a_error(I_PARAMS)
c character*320 a_errfile
c common /errmsg/ i_errflag,i_error,a_error,a_errfile
c
c integer i_fsizes(10)
c character*320 a_intfmt
c character*320 a_realfmt
c character*320 a_dblefmt
c common /inital/ i_fsizes,a_intfmt,a_realfmt,a_dblefmt
c
c integer i_prelen
c integer i_suflen
c character*320 a_prfx
c character*320 a_sufx
c character*320 a_prefix
c character*320 a_suffix
c common /indata/ a_prfx,a_sufx,a_prefix,a_suffix,i_prelen,i_suflen
c 3456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
c 1 2 3 4 5 6 7 8 9 100 110 120 130