40 CHARACTER*128 BORT_STR,ERRSTR
80 IF(
iolun(lun).EQ.0)
THEN
85 ELSE IF(
mtab(1,lun).EQ.0)
THEN
91 IF(
lus(lun).NE.0)
THEN
94 ELSE IF(
lus(lun).GT.0)
THEN
109 ELSE IF(
icmpdx(abs(
lus(lun)),lun).EQ.1)
THEN
123 ELSE IF(
lus(lun).GT.0)
THEN
149 DO WHILE ((lum.LT.lun).AND.(
lus(lun).EQ.0))
150 IF(
ishrdx(lum,lun).EQ.1)
THEN
164 IF(
iolun(lun).NE.0 .AND.
ntba(lun).GT.0)
THEN
168 IF(
iomsg(lun).NE.0)
THEN
169 IF(
lus(lun).LE.0)
THEN
175 inv(n,lun) =
inv(n,lun)+inc
179 IF(
lus(lun).LE.0)
THEN
188 nemo =
taba(itba,lun)(4:11)
190 mtab(itba,lun) = inod
204 lunit = abs(
iolun(lun))
219 IF(
typ(node).EQ.
'SUB')
THEN
223 ELSEIF(
typ(node).EQ.
'SEQ')
THEN
227 ELSEIF(
typ(node).EQ.
'RPC')
THEN
231 ELSEIF(
typ(node).EQ.
'RPS')
THEN
235 ELSEIF(
typ(node).EQ.
'REP')
THEN
239 ELSEIF(
typ(node).EQ.
'DRS')
THEN
243 ELSEIF(
typ(node).EQ.
'DRP')
THEN
247 ELSEIF(
typ(node).EQ.
'DRB')
THEN
251 ELSEIF(
typ(node).EQ.
'NUM')
THEN
255 ELSEIF(
typ(node).EQ.
'CHR')
THEN
272 expand =
typ(n).EQ.
'SUB' .OR.
typ(n).EQ.
'DRP' .OR.
typ(n).EQ.
'DRS'
273 . .OR.
typ(n).EQ.
'REP' .OR.
typ(n).EQ.
'DRB'
282 IF(
typ(noda).NE.
'REP')
knt(node) = 1
285 IF(newn.GT.
maxjl)
GOTO 902
288 2
IF(
jump(node)*
knt(node).GT.0)
THEN
291 ELSE IF(
link(node).GT.0)
THEN
296 IF(node.EQ.noda)
GOTO 3
297 IF(node.EQ.0 )
GOTO 903
298 knt(node) = max(
knt(node)-1,0)
309 CALL errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
311 WRITE ( unit=errstr, fmt=
'(A,I5,2X,A10,A5,6I8)' )
316 CALL errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
324 901
WRITE(bort_str,
'("BUFRLIB: MAKESTAB - UNKNOWN TYPE ",A)')
typ(node)
326 902
WRITE(bort_str,
'("BUFRLIB: MAKESTAB - NUMBER OF JSEQ ENTRIES IN'//
327 .
' JUMP/LINK TABLE EXCEEDS THE LIMIT (",I6,")")')
maxjl
329 903
WRITE(bort_str,
'("BUFRLIB: MAKESTAB - NODE IS ZERO, FAILED TO '//
330 .
'CIRCULATE (TAG IS ",A,")")')
tag(n)
subroutine bort(STR)
Log one error message and abort application program.
subroutine chekstab(LUN)
This subroutine checks that an internal BUFR table representation is self-consistent and fully define...
recursive subroutine closmg(LUNIN)
This subroutine closes the BUFR message that is currently open for writing within internal arrays ass...
subroutine cpbfdx(LUD, LUN)
This subroutine copies all of the DX BUFR table information from one unit to another within internal ...
subroutine errwrt(STR)
This subroutine allows the user to specify a custom location for the logging of error and diagnostic ...
integer function icmpdx(LUD, LUN)
This function determines whether the full set of associated DX BUFR Table information is identical be...
integer function ishrdx(LUD, LUN)
This function determines whether the same DX BUFR Table is being shared between two Fortran logical u...
subroutine makestab
This subroutine constructs the internal jump/link table within module tables, using all of the intern...
This module contains array and variable declarations used to store bitmaps internally within a data s...
integer ntamc
Number of Table A mnemonics in jump/link table (up to a maximum of MXTAMC) which contain at least one...
This module contains a declaration for an array used by subroutine makestab() to keep track of which ...
integer, dimension(:), allocatable lus
Tracking index for each I/O internal stream index.
This module contains array and variable declarations for use with any 2-03-YYY (change reference valu...
integer nnrv
Number of entries in the jump/link table which contain new reference values (up to a maximum of MXNRV...
This module contains array declarations used to store file and message status indicators for all logi...
integer, dimension(:), allocatable iolun
File status indicators.
integer, dimension(:), allocatable iomsg
Message status indicator corresponding to iolun, denoting whether a BUFR message is currently open wi...
This module contains array and variable declarations used to store DX BUFR tables internally for mult...
integer, dimension(:), allocatable ntba
Number of Table A entries for each internal I/O stream (up to a maximum of MAXTBA,...
character *128, dimension(:,:), allocatable taba
Table A entries for each internal I/O stream.
integer, dimension(:,:), allocatable mtab
Entries within jump/link table corresponding to taba.
This module contains array and variable declarations used to store the internal jump/link table.
integer, dimension(:), allocatable jseq
Temporary storage used in expanding sequences.
integer, dimension(:), allocatable irf
Reference values corresponding to tag and typ:
integer, dimension(:,:), allocatable iseq
Temporary storage used in expanding sequences.
integer, dimension(:), allocatable isc
Scale factors corresponding to tag and typ:
integer, dimension(:), allocatable ibt
Bit widths corresponding to tag and typ:
integer, dimension(:), allocatable knt
Temporary storage used in calculating delayed replication counts.
real *8, dimension(:), allocatable vali
Initialized data values corresponding to typ:
character *3, dimension(:), allocatable typ
Type indicators corresponding to tag:
integer, dimension(:), allocatable jmpb
Jump backward indices corresponding to tag and typ:
character *10, dimension(:), allocatable tag
Mnemonics in the jump/link table.
integer ntab
Number of entries in the jump/link table.
integer, dimension(:), allocatable jump
Jump forward indices corresponding to tag and typ:
integer, dimension(:), allocatable itp
Integer type values corresponding to typ:
integer, dimension(:), allocatable link
Link indices corresponding to tag, typ and jmpb:
integer, dimension(:), allocatable knti
Initialized replication counts corresponding to typ and jump:
This module contains declarations for arrays used to store data values and associated metadata for th...
integer, dimension(:), allocatable nval
Number of data values in BUFR data subset.
integer, dimension(:,:), allocatable, target inv
Inventory pointer which links each data value to its corresponding node in the internal jump/link tab...
This module contains an array declaration used to track, for each I/O stream index,...
logical, dimension(:), allocatable xtab
Tracking index for each internal I/O stream index.
This module declares and initializes the BMISS variable.
real *8, public bmiss
Current placeholder value to represent "missing" data when reading from or writing to BUFR files; thi...
This module declares and initializes the MAXJL variable.
integer maxjl
Maximum number of entries in the internal jump/link table.
This module declares and initializes the NFILES variable.
integer, public nfiles
Maximum number of BUFR files that can be connected to the BUFRLIB software (for reading or writing) a...
subroutine strcln
This subroutine resets the internal mnemonic string cache.
subroutine tabsub(LUN, NEMO)
This subroutine builds the entire jump/link tree (including recursively resolving all "child" mnemoni...
recursive subroutine wrdxtb(LUNDX, LUNOT)
This subroutine generates one or more BUFR messages from the DX BUFR tables information associated wi...