23 integer,
intent(in) :: lugb, lugi, idxver
24 character*(*) :: filename
25 integer,
intent(out) :: iret
27 integer (kind = 8) :: msk1, msk2
28 parameter(msk1 = 32000_8, msk2 = 4000_8)
29 character(len=1),
pointer,
dimension(:) :: cbuf
30 integer :: numtot, nnum, nlen, mnum, kw
31 integer :: irgi, iw, nmess
34 subroutine getg2i2r(lugb, msk1, msk2, mnum, idxver, cbuf, &
35 nlen, nnum, nmess, iret)
36 integer,
intent(in) :: lugb
37 integer (kind = 8),
intent(in) :: msk1, msk2
38 integer,
intent(in) :: mnum, idxver
39 character(len = 1),
pointer,
dimension(:) :: cbuf
40 integer,
intent(out) :: nlen, nnum, nmess, iret
52 call getg2i2r(lugb, msk1, msk2, mnum, idxver, cbuf, &
53 nlen, nnum, nmess, irgi)
54 if (irgi .gt. 1 .or. nnum .eq. 0 .or. nlen .eq. 0)
then
58 numtot = numtot + nnum
66 call bawrite(lugi, iw, nlen, kw, cbuf)
71 do while (irgi .eq. 1 .and. nnum .gt. 0)
72 if (
associated(cbuf))
then
76 call getg2i2r(11, msk1, msk2, mnum, idxver, cbuf, &
77 nlen, nnum, nmess, irgi)
78 if (irgi .le. 1 .and. nnum .gt. 0)
then
79 numtot = numtot + nnum
81 call bawrite(lugi, iw, nlen, kw, cbuf)
265subroutine getidx2(lugb, lugi, idxver, cindex, nlen, nnum, iret)
269 integer,
intent(in) :: lugb, lugi
270 integer,
intent(inout) :: idxver
271 character(len = 1),
pointer,
dimension(:) :: cindex
272 integer,
intent(out) :: nlen, nnum, iret
274 integer,
parameter :: maxidx = 10000
275 integer (kind = 8),
parameter :: msk1 = 32000_8, msk2 = 4000_8
277 integer :: irgi, mskp, nmess, i
283 character(len = 1),
pointer,
dimension(:) :: cbuf
286 type(gindex),
save :: idxlist(10000)
292 subroutine getg2i2(lugi, cbuf, idxver, nlen, nnum, iret)
293 integer,
intent(in) :: lugi
294 character(len=1),
pointer,
dimension(:) :: cbuf
295 integer,
intent(out) :: idxver, nlen, nnum, iret
297 subroutine getg2i2r(lugb, msk1, msk2, mnum, idxver, cbuf, &
298 nlen, nnum, nmess, iret)
299 integer,
intent(in) :: lugb
300 integer (kind = 8),
intent(in) :: msk1, msk2
301 integer,
intent(in) :: mnum, idxver
302 character(len = 1),
pointer,
dimension(:) :: cbuf
303 integer,
intent(out) :: nlen, nnum, nmess, iret
309 write(
g2_log_msg,
'(a, i2, a, i2, a, i1)')
'getidx2: lugb ', lugb,
' lugi ', lugi, &
315 if (lugb .eq. 0)
then
318 if (
associated(idxlist(i)%cbuf))
then
320 deallocate(idxlist(i)%cbuf)
321 nullify(idxlist(i)%cbuf)
331 if (lugb .le. 0 .or. lugb .gt. 9999)
then
332 print *,
' file unit number out of range'
333 print *,
' use unit numbers in range: 0 - 9999 '
339 if (lugi .eq. lugb)
then
340 if (
associated(idxlist(lugb)%cbuf)) &
341 deallocate(idxlist(lugb)%cbuf)
343 nullify(idxlist(lugb)%cbuf)
344 idxlist(lugb)%nlen = 0
345 idxlist(lugb)%nnum = 0
350 if (lugi .lt. 0)
then
352 if (
associated(idxlist(lugb)%cbuf)) &
353 deallocate(idxlist(lugb)%cbuf)
355 nullify(idxlist(lugb)%cbuf)
356 idxlist(lugb)%nlen = 0
357 idxlist(lugb)%nnum = 0
362 if (
associated(idxlist(lugb)%cbuf))
then
364 cindex => idxlist(lugb)%cbuf
365 nlen = idxlist(lugb)%nlen
366 nnum = idxlist(lugb)%nnum
367 idxver = idxlist(lugb)%idxver
376 call getg2i2(lux, idxlist(lugb)%cbuf, idxver, nlen, nnum, irgi)
377 elseif (lux .le. 0)
then
379 call getg2i2r(lugb, msk1, msk2, mskp, idxver, idxlist(lugb)%cbuf, &
380 nlen, nnum, nmess, irgi)
384 if (irgi .ne. 0)
then
387 print *,
' error reading index file '
393 cindex => idxlist(lugb)%cbuf
394 idxlist(lugb)%nlen = nlen
395 idxlist(lugb)%nnum = nnum
396 idxlist(lugb)%idxver = idxver
648subroutine getg2i2r(lugb, msk1, msk2, mnum, idxver, cbuf, nlen, nnum, nmess, iret)
653 integer,
intent(in) :: lugb
654 integer (kind = 8),
intent(in) :: msk1, msk2
655 integer,
intent(in) :: mnum, idxver
656 character(len = 1),
pointer,
dimension(:) :: cbuf
657 integer,
intent(out) :: nlen, nnum, nmess, iret
659 character(len = 1),
pointer,
dimension(:) :: cbuftmp
660 integer :: nbytes, newsize, next, numfld, m, mbuf
661 integer (kind = 8) :: iseek, lskip, lgrib
662 integer :: istat, init, iret1, lgrib4
663 parameter(init = 50000, next = 10000)
666 subroutine ix2gb2(lugb, lskip8, idxver, lgrib8, cbuf, numfld, mlen, iret)
667 integer,
intent(in) :: lugb
668 integer (kind = 8),
intent(in) :: lskip8
669 integer,
intent(in) :: idxver
670 integer (kind = 8),
intent(in) :: lgrib8
671 character(len = 1),
pointer,
intent(inout),
dimension(:) :: cbuf
672 integer,
intent(out) :: numfld, mlen, iret
678 write(
g2_log_msg, *)
'getg2i2r: lugb ', lugb,
' msk1 ', msk1,
' msk2 ', msk2,
'idxver', idxver
686 allocate(cbuf(mbuf), stat = istat)
687 if (istat .ne. 0)
then
694 call skgb8(lugb, iseek, msk1, lskip, lgrib)
696 if (lgrib .gt. 0)
then
697 iseek = lskip + lgrib
698 call skgb8(lugb, iseek, msk2, lskip, lgrib)
706 do while (iret .eq. 0 .and. lgrib .gt. 0)
707 lgrib4 = int(lgrib, kind(4))
708 call ix2gb2(lugb, lskip, idxver, lgrib, cbuftmp, numfld, nbytes, iret1)
709 if (iret1 .ne. 0) print *,
' SAGT ', numfld, nbytes, iret1
710 if (nbytes + nlen .gt. mbuf)
then
711 newsize = max(mbuf + next, mbuf + nbytes)
712 call realloc(cbuf, nlen, newsize, istat)
713 if (istat .ne. 0)
then
722 if (
associated(cbuftmp))
then
723 cbuf(nlen + 1 : nlen + nbytes) = cbuftmp(1 : nbytes)
724 deallocate(cbuftmp, stat = istat)
725 if (istat .ne. 0)
then
726 print *,
' deallocating cbuftmp ... ', istat
737 iseek = lskip + lgrib
738 call skgb8(lugb, iseek, msk2, lskip, lgrib)
814subroutine getgb2s(cbuf, nlen, nnum, j, jdisc, jids, jpdtn, jpdt, jgdtn, &
815 jgdt, k, gfld, lpos, iret)
819 character(len = 1),
intent(in) :: cbuf(nlen)
820 integer,
intent(in) :: nlen, nnum, j, jdisc
821 integer,
dimension(:) :: jids(*)
822 integer,
intent(in) :: jpdtn
823 integer,
dimension(:) :: jpdt(*)
824 integer,
intent(in) :: jgdtn
825 integer,
dimension(:) :: jgdt(*)
826 integer,
intent(out) :: k
828 integer,
intent(out) :: lpos, iret
831 subroutine getgb2s2(cbuf, idxver, nlen, nnum, j, jdisc, jids, jpdtn, jpdt, jgdtn, &
832 jgdt, k, gfld, lpos, iret)
834 character(len = 1),
intent(in) :: cbuf(nlen)
835 integer,
intent(in) :: idxver, nlen, nnum, j, jdisc
836 integer,
dimension(:) :: jids(*)
837 integer,
intent(in) :: jpdtn
838 integer,
dimension(:) :: jpdt(*)
839 integer,
intent(in) :: jgdtn
840 integer,
dimension(:) :: jgdt(*)
841 integer,
intent(out) :: k
843 integer,
intent(out) :: lpos, iret
849 call getgb2s2(cbuf, 1, nlen, nnum, j, jdisc, jids, jpdtn, jpdt, jgdtn, &
850 jgdt, k, gfld, lpos, iret)
927subroutine getgb2s2(cbuf, idxver, nlen, nnum, j, jdisc, jids, jpdtn, jpdt, jgdtn, &
928 jgdt, k, gfld, lpos, iret)
933 character(len = 1),
intent(in) :: cbuf(nlen)
934 integer,
intent(in) :: idxver, nlen, nnum, j, jdisc
935 integer,
dimension(:) :: jids(*)
936 integer,
intent(in) :: jpdtn
937 integer,
dimension(:) :: jpdt(*)
938 integer,
intent(in) :: jgdtn
939 integer,
dimension(:) :: jgdt(*)
940 integer,
intent(out) :: k
942 integer,
intent(out) :: lpos, iret
945 logical :: match1, match3, match4
946 integer :: i, icnd, inlen, iof, ipos, jpos, lsec1, lsec3, lsec4, lsec5, numgdt, numpdt, inc
949 subroutine g2_gbytec1(in, siout, iskip, nbits)
950 character*1,
intent(in) :: in(*)
951 integer,
intent(inout) :: siout
952 integer,
intent(in) :: iskip, nbits
954 subroutine gf_unpack1(cgrib, lcgrib, iofst, ids, idslen, ierr)
955 character(len = 1),
intent(in) :: cgrib(lcgrib)
956 integer,
intent(in) :: lcgrib
957 integer,
intent(inout) :: iofst
958 integer,
pointer,
dimension(:) :: ids
959 integer,
intent(out) :: ierr, idslen
961 subroutine gf_unpack3(cgrib, lcgrib, iofst, igds, igdstmpl, &
962 mapgridlen, ideflist, idefnum, ierr)
963 character(len = 1),
intent(in) :: cgrib(lcgrib)
964 integer,
intent(in) :: lcgrib
965 integer,
intent(inout) :: iofst
966 integer,
pointer,
dimension(:) :: igdstmpl, ideflist
967 integer,
intent(out) :: igds(5)
968 integer,
intent(out) :: ierr, idefnum
970 subroutine gf_unpack4(cgrib, lcgrib, iofst, ipdsnum, ipdstmpl, &
971 mappdslen, coordlist, numcoord, ierr)
972 character(len = 1),
intent(in) :: cgrib(lcgrib)
973 integer,
intent(in) :: lcgrib
974 integer,
intent(inout) :: iofst
975 real,
pointer,
dimension(:) :: coordlist
976 integer,
pointer,
dimension(:) :: ipdstmpl
977 integer,
intent(out) :: ipdsnum
978 integer,
intent(out) :: ierr, numcoord
980 subroutine gf_unpack5(cgrib, lcgrib, iofst, ndpts, idrsnum, &
981 idrstmpl, mapdrslen, ierr)
982 character(len = 1),
intent(in) :: cgrib(lcgrib)
983 integer,
intent(in) :: lcgrib
984 integer,
intent(inout) :: iofst
985 integer,
intent(out) :: ndpts, idrsnum
986 integer,
pointer,
dimension(:) :: idrstmpl
987 integer,
intent(out) :: ierr
993 write(
g2_log_msg, *)
'getgb2s2: idxver ', idxver,
' nlen ', nlen, &
994 ' nnum ', nnum,
' j ', j,
' jdisc ', jdisc
1003 nullify(gfld%idsect, gfld%local)
1004 nullify(gfld%list_opt, gfld%igdtmpl, gfld%ipdtmpl)
1005 nullify(gfld%coord_list, gfld%idrtmpl, gfld%bmap, gfld%fld)
1006 if (idxver .eq. 1)
then
1015 do while (iret .ne. 0 .and. k .lt. nnum)
1018 call g2_gbytec1(cbuf, inlen, ipos * 8, 4 * 8)
1025 call g2_gbytec1(cbuf, gfld%discipline, (ipos + inc + 41) * 8, 1 * 8)
1026 if (jdisc .ne. -1 .and. jdisc .ne. gfld%discipline)
then
1034 call g2_gbytec1(cbuf, lsec1, (ipos + inc + 44) * 8, 4 * 8)
1036 call gf_unpack1(cbuf(ipos + inc + 45), lsec1, iof, gfld%idsect, gfld%idsectlen, icnd)
1037 if (icnd .eq. 0)
then
1039 do i = 1, gfld%idsectlen
1040 if (jids(i) .ne. -9999 .and. jids(i) .ne. gfld%idsect(i))
then
1046 if (.not. match1)
then
1047 deallocate(gfld%idsect)
1053 jpos = ipos + 44 + inc + lsec1
1055 call g2_gbytec1(cbuf, lsec3, jpos * 8, 4 * 8)
1056 if (jgdtn .eq. -1)
then
1059 call g2_gbytec1(cbuf, numgdt, (jpos + 12) * 8, 2 * 8)
1060 if (jgdtn .eq. numgdt)
then
1062 call gf_unpack3(cbuf(jpos + 1), lsec3, iof, kgds, gfld%igdtmpl, &
1063 gfld%igdtlen, gfld%list_opt, gfld%num_opt, icnd)
1064 if (icnd .eq. 0)
then
1066 do i = 1, gfld%igdtlen
1067 if (jgdt(i) .ne. -9999 .and. jgdt(i).ne.gfld%igdtmpl(i))
then
1075 if (.not. match3)
then
1076 if (
associated(gfld%idsect))
deallocate(gfld%idsect)
1077 if (
associated(gfld%igdtmpl))
deallocate(gfld%igdtmpl)
1078 if (
associated(gfld%list_opt))
deallocate(gfld%list_opt)
1082 gfld%griddef = kgds(1)
1083 gfld%ngrdpts = kgds(2)
1084 gfld%numoct_opt = kgds(3)
1085 gfld%interp_opt = kgds(4)
1086 gfld%igdtnum = kgds(5)
1094 call g2_gbytec1(cbuf, lsec4, jpos * 8, 4 * 8)
1095 if (jpdtn .eq. -1)
then
1099 call g2_gbytec1(cbuf, numpdt, (jpos + 7) * 8, 2 * 8)
1100 if (jpdtn .eq. numpdt)
then
1102 call gf_unpack4(cbuf(jpos + 1), lsec4, iof, gfld%ipdtnum, &
1103 gfld%ipdtmpl, gfld%ipdtlen, gfld%coord_list, gfld%num_coord, icnd)
1104 if (icnd .eq. 0)
then
1106 do i = 1, gfld%ipdtlen
1107 if (jpdt(i) .ne. -9999 .and. jpdt(i) .ne. gfld%ipdtmpl(i))
then
1115 if (.not. match4)
then
1116 if (
associated(gfld%idsect))
deallocate(gfld%idsect)
1117 if (
associated(gfld%ipdtmpl))
deallocate(gfld%ipdtmpl)
1118 if (
associated(gfld%coord_list))
deallocate(gfld%coord_list)
1122 if (match1 .and. match3 .and. match4)
then
1124 call g2_gbytec1(cbuf, gfld%version, (ipos + inc + 40) * 8, 1 * 8)
1125 call g2_gbytec1(cbuf, gfld%ifldnum, (ipos + inc + 42) * 8, 2 * 8)
1126 gfld%unpacked = .false.
1127 jpos = ipos + 44 + inc + lsec1
1128 if (jgdtn .eq. -1)
then
1130 call gf_unpack3(cbuf(jpos + 1), lsec3, iof, kgds, gfld%igdtmpl, &
1131 gfld%igdtlen, gfld%list_opt, gfld%num_opt, icnd)
1132 gfld%griddef = kgds(1)
1133 gfld%ngrdpts = kgds(2)
1134 gfld%numoct_opt = kgds(3)
1135 gfld%interp_opt = kgds(4)
1136 gfld%igdtnum = kgds(5)
1139 if (jpdtn .eq. -1)
then
1141 call gf_unpack4(cbuf(jpos + 1), lsec4, iof, gfld%ipdtnum, &
1142 gfld%ipdtmpl, gfld%ipdtlen, gfld%coord_list, gfld%num_coord, icnd)
1145 call g2_gbytec1(cbuf, lsec5, jpos * 8, 4 * 8)
1147 call gf_unpack5(cbuf(jpos + 1), lsec5, iof, gfld%ndpts, &
1148 gfld%idrtnum, gfld%idrtmpl, gfld%idrtlen, icnd)
1150 call g2_gbytec1(cbuf, gfld%ibmap, (jpos + 5) * 8, 1 * 8)
1255subroutine ix2gb2(lugb, lskip8, idxver, lgrib8, cbuf, numfld, mlen, iret)
1261 integer,
intent(in) :: lugb
1262 integer (kind = 8),
intent(in) :: lskip8
1263 integer,
intent(in) :: idxver
1264 integer (kind = 8),
intent(in) :: lgrib8
1265 character(len = 1),
pointer,
intent(inout),
dimension(:) :: cbuf
1266 integer,
intent(out) :: numfld, mlen, iret
1268 character cver, cdisc
1269 character(len = 4) :: ctemp
1270 integer (kind = 8) :: loclus8, locgds8, locbms8
1272 integer :: indbmp, numsec, newsize, g2_mova2i, mbuf, lindex
1274 integer :: ilndrs, ilnpds, istat
1275 integer (kind = 8) :: ibread8, lbread8, ibskip8, lengds8
1276 integer (kind = 8) :: ilnpds8, ilndrs8
1277 integer :: lensec, lensec1
1278 integer :: mypos, inc
1283 parameter(linmax = 5000)
1286 parameter(init = 50000)
1289 parameter(next = 10000)
1292 parameter(mxbms = 6)
1293 integer :: IXDS1, IXDS2
1294 parameter(ixds1 = 28, ixds2 = 52)
1297 parameter(ixids = 44)
1299 parameter(ixsdr = 20)
1301 integer :: IXBMS1, IXBMS2
1302 parameter(ixbms1 = 24, ixbms2 = 44)
1304 integer :: INT1_BITS, INT2_BITS, INT4_BITS, INT8_BITS
1305 parameter(int1_bits = 8, int2_bits = 16, int4_bits = 32, int8_bits = 64)
1307 integer :: IXDRS1, IXDRS2
1308 parameter(ixdrs1 = 20, ixdrs2 = 36)
1311 character cbread(LINMAX), cindex(LINMAX)
1312 character cids(LINMAX), cgds(LINMAX)
1315 subroutine g2_gbytec1(in, siout, iskip, nbits)
1316 character*1,
intent(in) :: in(*)
1317 integer,
intent(inout) :: siout
1318 integer,
intent(in) :: iskip, nbits
1321 character*1,
intent(inout) :: out(*)
1322 integer (kind = 8),
intent(in) :: sin
1323 integer,
intent(in) :: iskip, nbits
1326 character*1,
intent(inout) :: out(*)
1327 integer,
intent(in) :: in
1328 integer,
intent(in) :: iskip, nbits
1334 write(
g2_log_msg, *)
'ix2gb2: lugb ', lugb,
' lskip8 ', lskip8,
' idxver ', idxver
1340 if (idxver .eq. 1)
then
1360 allocate(cbuf(mbuf), stat = istat)
1361 if (istat .ne. 0)
then
1368 ibread8 = min(lgrib8, linmax)
1369 call bareadl(lugb, lskip8, ibread8, lbread8, cbread)
1370 if (lbread8 .ne. ibread8)
then
1376 if (cbread(8) .ne. char(2))
then
1386 call g2_gbytec1(cbread, lensec1, 16 * int1_bits, int4_bits)
1387 lensec1 = min(lensec1, int(ibread8, kind(lensec1)))
1390 cids(1:lensec1) = cbread(17:16 + lensec1)
1396 ibskip8 = lskip8 + 16_8 + int(lensec1, kind(8))
1400 ibread8 = max(5, mxbms)
1404 call bareadl(lugb, ibskip8, ibread8, lbread8, cbread)
1408 ctemp = cbread(1)//cbread(2)//cbread(3)//cbread(4)
1409 if (ctemp .eq.
'7777')
return
1412 if (lbread8 .ne. ibread8)
then
1419 call g2_gbytec1(cbread, lensec, 0, int4_bits)
1420 call g2_gbytec1(cbread, numsec, int4_bits, int1_bits)
1424 if (numsec .eq. 2)
then
1426 loclus8 = ibskip8 - lskip8
1427 elseif (numsec .eq. 3)
then
1432 call bareadl(lugb, ibskip8, lengds8, lbread8, cgds)
1433 if (lbread8 .ne. lengds8)
then
1438 locgds8 = ibskip8 - lskip8
1439 elseif (numsec .eq. 4)
then
1452 if (idxver .eq. 1)
then
1454 lskip = int(lskip8, kind(4))
1455 call g2_sbytec1(cindex, lskip, mypos, int4_bits)
1456 mypos = mypos + int4_bits
1457 call g2_sbytec1(cindex, int(loclus8, kind(4)), mypos, int4_bits)
1458 mypos = mypos + int4_bits
1459 call g2_sbytec1(cindex, int(locgds8, kind(4)), mypos, int4_bits)
1460 mypos = mypos + int4_bits
1461 call g2_sbytec1(cindex, int(ibskip8 - lskip8, kind(4)), mypos, int4_bits)
1463 write(
g2_log_msg, *)
' writing pds location to index: mypos/8 ', mypos/8, &
1464 ' loc ', int(ibskip8 - lskip8, kind(4))
1467 mypos = mypos + int4_bits * 4
1470 call g2_sbytec81(cindex, lskip8, mypos, int8_bits)
1471 mypos = mypos + int8_bits
1472 call g2_sbytec81(cindex, loclus8, mypos, int8_bits)
1473 mypos = mypos + int8_bits
1474 call g2_sbytec81(cindex, locgds8, mypos, int8_bits)
1475 mypos = mypos + int8_bits
1476 call g2_sbytec81(cindex, ibskip8 - lskip8, mypos, int8_bits)
1477 mypos = mypos + int8_bits * 4
1481 write(
g2_log_msg, *)
' writing total len to index: mypos/8 ', mypos/8, lgrib8
1486 call g2_sbytec81(cindex, lgrib8, mypos, int8_bits)
1487 mypos = mypos + int8_bits
1488 cindex((mypos / 8) + 1) = cver
1489 mypos = mypos + int1_bits
1490 cindex((mypos / 8) + 1) = cdisc
1491 mypos = mypos + int1_bits
1492 call g2_sbytec1(cindex, numfld + 1, mypos, int2_bits)
1493 mypos = mypos + int2_bits
1496 cindex(ixids + 1 + inc:ixids + lensec1 + inc) = cids(1:lensec1)
1497 lindex = ixids + lensec1 + inc
1500 cindex(lindex + 1:lindex + lengds8) = cgds(1:lengds8)
1501 lindex = lindex + int(lengds8, kind(lindex))
1506 call bareadl(lugb, ibskip8, ilnpds8, lbread8, cindex(lindex + 1))
1507 if (lbread8 .ne. ilnpds8)
then
1511 lindex = lindex + ilnpds
1512 mypos = mypos + ilnpds
1514 write(
g2_log_msg, *)
' after writing pds location to index: mypos/8 ', mypos/8
1517 elseif (numsec .eq. 5)
then
1521 write(
g2_log_msg, *)
' before writing drs to index: ibskip8 - lskip8 ', ibskip8 - lskip8, ixdrs2
1525 if (idxver .eq. 1)
then
1526 call g2_sbytec1(cindex, int(ibskip8 - lskip8, kind(4)), ixdrs1 * int1_bits, int4_bits)
1528 call g2_sbytec81(cindex, ibskip8 - lskip8, ixdrs2 * int1_bits, int8_bits)
1534 call bareadl(lugb, ibskip8, ilndrs8, lbread8, cindex(lindex + 1))
1535 if (lbread8 .ne. ilndrs8)
then
1539 lindex = lindex + ilndrs
1540 elseif (numsec .eq. 6)
then
1543 indbmp = g2_mova2i(cbread(6))
1545 write(
g2_log_msg, *)
' section 6: indbmp', indbmp
1549 if (indbmp .lt. 254)
then
1550 if (idxver .eq. 1)
then
1551 locbms = int(ibskip8 - lskip8, kind(4))
1552 call g2_sbytec1(cindex, locbms, ixbms1 * int1_bits, int4_bits)
1554 locbms8 = ibskip8 - lskip8
1555 call g2_sbytec81(cindex, locbms8, ixbms2 * int1_bits, int8_bits)
1558 write(
g2_log_msg, *)
' section 6: locbms', locbms,
'locbms8', locbms8
1561 elseif (indbmp .eq. 254)
then
1562 if (idxver .eq. 1)
then
1563 call g2_sbytec1(cindex, locbms, ixbms1 * int1_bits, int4_bits)
1565 call g2_sbytec81(cindex, locbms8, ixbms2 * int1_bits, int8_bits)
1567 elseif (indbmp .eq. 255)
then
1568 if (idxver .eq. 1)
then
1569 call g2_sbytec1(cindex, int(ibskip8 - lskip8, kind(4)), ixbms1 * int1_bits, int4_bits)
1571 call g2_sbytec81(cindex, ibskip8 - lskip8, ixbms2 * int1_bits, int8_bits)
1576 cindex(lindex + 1:lindex + mxbms) = cbread(1:mxbms)
1577 lindex = lindex + mxbms
1581 call g2_sbytec1(cindex, lindex, 0, int4_bits)
1582 elseif (numsec .eq. 7)
then
1585 write(
g2_log_msg, *)
' writing offset to the data in cindex: ibskip8 - lskip8 ', ibskip8 - lskip8, &
1590 if (idxver .eq. 1)
then
1591 call g2_sbytec1(cindex, int(ibskip8 - lskip8, kind(4)), ixds1 * int1_bits, int4_bits)
1593 call g2_sbytec81(cindex, ibskip8 - lskip8, ixds2 * int1_bits, int8_bits)
1601 if (lindex + mlen .gt. mbuf)
then
1602 newsize = max(mbuf + next, mbuf + lindex)
1603 call realloc(cbuf, mlen, newsize, istat)
1604 if (istat .ne. 0)
then
1613 cbuf(mlen + 1:mlen + lindex) = cindex(1:lindex)
1614 mlen = mlen + lindex
1622 ibskip8 = ibskip8 + lensec