📄 fxfindend.pro
字号:
PRO FXFINDEND,UNIT, EXTENSION;+; NAME: ; FXFINDEND; Purpose : ; Find the end of a FITS file.; Explanation : ; This routine finds the end of the last logical record in a FITS file,; which may be different from that of the physical end of the file. Each; FITS header is read in and parsed, and the file pointer is moved to; where the next FITS extension header would be if there is one, or to; the end of the file if not.; Use : ; FXFINDEND, UNIT [, EXTENSION]; Inputs : ; UNIT = Logical unit number for the opened file.; Opt. Inputs : ; None.; Outputs : ; None.; Opt. Outputs: ; EXTENSION = The extension number that a new extension would; have if placed at the end of the file.; Keywords : ; None.; Calls : ; FXHREAD, FXPAR; Common : ; None.; Restrictions: ; The file must have been opened for block I/O. There must not be any; FITS "special records" at the end of the file.; Side effects: ; None.; Category : ; Data Handling, I/O, FITS, Generic.; Prev. Hist. : ; William Thompson, Feb. 1992.; Written : ; William Thompson, GSFC, February 1992.; Modified : ; Version 1, William Thompson, GSFC, 12 April 1993.; Incorporated into CDS library.; Version : ; Version 1, 12 April 1993.; Converted to IDL V5.0 W. Landsman September 1997; Added EXTENSION parameter, CM 1999 Nov 18; Allow for possible 64bit integer number of bytes W. Landsman Nov 2007; make Ndata a long64 to deal with large files. E. Hivon Mar 2008;-; ON_ERROR,2;; Check the number of parameters.; IF N_PARAMS() EQ 0 THEN MESSAGE,'Syntax: FXFINDEND, UNIT [,EXTENSION]';; Go to the start of the file.; POINT_LUN,UNIT,0 EXTENSION = 0L;; Read the next header, and get the number of bytes taken up by the data.;NEXT_EXT: FXHREAD,UNIT,HEADER,STATUS IF STATUS NE 0 THEN GOTO, DONE BITPIX = FXPAR(HEADER,'BITPIX') NAXIS = FXPAR(HEADER,'NAXIS') GCOUNT = FXPAR(HEADER,'GCOUNT') & IF GCOUNT EQ 0 THEN GCOUNT = 1 PCOUNT = FXPAR(HEADER,'PCOUNT') IF NAXIS GT 0 THEN BEGIN DIMS = FXPAR(HEADER,'NAXIS*') ;Read dimensions NDATA = long64(DIMS[0]) IF NAXIS GT 1 THEN FOR I=2,NAXIS DO NDATA = NDATA*DIMS[I-1] ENDIF ELSE NDATA = 0 NBYTES = LONG64(ABS(BITPIX) / 8) * GCOUNT * (PCOUNT + NDATA);; Move to the next extension header in the file.; NREC = (NBYTES + 2879) / 2880 POINT_LUN, -UNIT, POINTLUN ;Current position POINT_LUN, UNIT, POINTLUN + NREC*2880L ;Next FITS extension EXTENSION = EXTENSION + 1L IF NOT EOF(UNIT) THEN GOTO, NEXT_EXT;; When done, make sure that the pointer is positioned at the first byte after; the last data set.;DONE: POINT_LUN, UNIT, POINTLUN + NREC*2880L RETURN END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -