54 SUBROUTINE ixgb2(LUGB,LSKIP,LGRIB,CBUF,NUMFLD,MLEN,IRET)
57 CHARACTER(LEN=1),
POINTER,
DIMENSION(:) :: CBUF
58 parameter(linmax=5000,init=50000,next=10000)
59 parameter(ixskp=4,ixlus=8,ixsgd=12,ixspd=16,ixsdr=20,ixsbm=24,
60 & ixds=28,ixlen=36,ixfld=42,ixids=44)
61 parameter(mxskp=4,mxlus=4,mxsgd=4,mxspd=4,mxsdr=4,mxsbm=4,
62 & mxds=4,mxlen=4,mxfld=2,mxbms=6)
63 CHARACTER CBREAD(LINMAX),CINDEX(LINMAX)
65 CHARACTER CIDS(LINMAX),CGDS(LINMAX),CBMS(6)
66 CHARACTER(LEN=4) :: CTEMP
67 INTEGER LOCLUS,LOCGDS,LENGDS,LOCBMS
73 IF (
ASSOCIATED(cbuf))
NULLIFY(cbuf)
75 ALLOCATE(cbuf(mbuf),stat=istat)
82 ibread=min(lgrib,linmax)
83 CALL baread(lugb,lskip,ibread,lbread,cbread)
84 IF(lbread.NE.ibread)
THEN
88 IF(cbread(8).NE.char(2))
THEN
95 lensec1=min(lensec1,ibread)
96 cids(1:lensec1)=cbread(17:16+lensec1)
97 ibskip=lskip+16+lensec1
102 CALL baread(lugb,ibskip,ibread,lbread,cbread)
103 ctemp=cbread(1)//cbread(2)//cbread(3)//cbread(4)
104 IF (ctemp.EQ.
'7777')
RETURN
105 IF(lbread.NE.ibread)
THEN
112 IF (numsec.EQ.2)
THEN
114 ELSEIF (numsec.EQ.3)
THEN
117 CALL baread(lugb,ibskip,lengds,lbread,cgds)
118 IF(lbread.NE.lengds)
THEN
123 ELSEIF (numsec.EQ.4)
THEN
125 CALL g2_sbytec(cindex,lskip,8*ixskp,8*mxskp)
126 CALL g2_sbytec(cindex,loclus,8*ixlus,8*mxlus)
127 CALL g2_sbytec(cindex,locgds,8*ixsgd,8*mxsgd)
128 CALL g2_sbytec(cindex,ibskip-lskip,8*ixspd,8*mxspd)
129 CALL g2_sbytec(cindex,lgrib,8*ixlen,8*mxlen)
132 CALL g2_sbytec(cindex,numfld+1,8*ixfld,8*mxfld)
133 cindex(ixids+1:ixids+lensec1)=cids(1:lensec1)
135 cindex(lindex+1:lindex+lengds)=cgds(1:lengds)
138 CALL baread(lugb,ibskip,ilnpds,lbread,cindex(lindex+1))
139 IF(lbread.NE.ilnpds)
THEN
145 ELSEIF (numsec.EQ.5)
THEN
146 CALL g2_sbytec(cindex,ibskip-lskip,8*ixsdr,8*mxsdr)
148 CALL baread(lugb,ibskip,ilndrs,lbread,cindex(lindex+1))
149 IF(lbread.NE.ilndrs)
THEN
155 ELSEIF (numsec.EQ.6)
THEN
156 indbmp=mova2i(cbread(6))
157 IF ( indbmp.LT.254 )
THEN
159 CALL g2_sbytec(cindex,locbms,8*ixsbm,8*mxsbm)
160 ELSEIF ( indbmp.EQ.254 )
THEN
161 CALL g2_sbytec(cindex,locbms,8*ixsbm,8*mxsbm)
162 ELSEIF ( indbmp.EQ.255 )
THEN
163 CALL g2_sbytec(cindex,ibskip-lskip,8*ixsbm,8*mxsbm)
165 cindex(lindex+1:lindex+mxbms)=cbread(1:mxbms)
168 ELSEIF (numsec.EQ.7)
THEN
169 CALL g2_sbytec(cindex,ibskip-lskip,8*ixds,8*mxds)
171 IF ((lindex+mlen).GT.mbuf)
THEN
173 newsize=max(mbuf+next,mbuf+lindex)
174 CALL realloc(cbuf,mlen,newsize,istat)
175 IF ( istat .NE. 0 )
THEN
182 cbuf(mlen+1:mlen+lindex)=cindex(1:lindex)