diff options
Diffstat (limited to 'pkg/tbtables/fitsio/ftmahd.f')
-rw-r--r-- | pkg/tbtables/fitsio/ftmahd.f | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/pkg/tbtables/fitsio/ftmahd.f b/pkg/tbtables/fitsio/ftmahd.f new file mode 100644 index 00000000..58e45342 --- /dev/null +++ b/pkg/tbtables/fitsio/ftmahd.f @@ -0,0 +1,73 @@ +C---------------------------------------------------------------------- + subroutine ftmahd(iunit,extno,xtend,status) + +C Move to Absolute Header Data unit +C move the i/o pointer to the specified HDU and initialize all +C the common block parameters which describe the extension + +C iunit i fortran unit number +C extno i number of the extension to point to. +C xtend i returned type of extension: 0 = the primary HDU +C 1 = an ASCII table +C 2 = a binary table +C status i output error status +C +C written by Wm Pence, HEASARC/GSFC, June, 1991 + + integer iunit,extno,xtend,status + +C COMMON BLOCK DEFINITIONS:-------------------------------------------- + integer nb,ne + parameter (nb = 20) + parameter (ne = 200) + integer bufnum,chdu,hdutyp,maxhdu,hdstrt,hdend,nxthdr,dtstrt + integer nxtfld + logical wrmode + common/ft0001/bufnum(199),chdu(nb),hdutyp(nb),maxhdu(nb), + & wrmode(nb),hdstrt(nb,ne),hdend(nb),nxthdr(nb),dtstrt(nb),nxtfld +C END OF COMMON BLOCK DEFINITIONS----------------------------------- + + integer ibuff,movto,tstat + + if (status .gt. 0)then + return + else if (extno .le. 0 .or. extno .ge. ne)then + status=301 + return + end if + + ibuff=bufnum(iunit) + +C check if we are already positioned to the correct HDU + if (extno .eq. chdu(ibuff))then +C just return the type of extension + xtend=hdutyp(ibuff) + else + +C now move to the extension, or the highest one we know about +10 movto=min(extno,maxhdu(ibuff)+1) + +C before closing out the CHDU, make sure the new extension exists + call ftmbyt(iunit,hdstrt(ibuff,movto),.false.,status) + if (status .gt. 0)return + +C close out the current HDU before moving to the new one + call ftchdu(iunit,status) + if (status .gt. 0)then + call ftpmsg('FTMAHD could not close the'// + & ' current HDU before moving to the new HDU.') + return + end if + + call ftgext(iunit,movto,xtend,status) + if (status .gt. 0)then +C failed to move to new extension, so restore previous extension + tstat=0 + call ftrhdu(iunit,movto,tstat) + return + end if + +C continue reading extensions until we get to the one we want + if (movto .lt. extno)go to 10 + end if + end |