mrd_hread.pro
来自「basic median filter simulation」· PRO 代码 · 共 97 行
PRO
97 行
pro mrd_hread, unit, header, status, SILENT = silent, FIRSTBLOCK = firstblock;+; NAME: ; MRD_HREAD;; PURPOSE: ; Reads a FITS header from an opened disk file or Unix pipe; EXPLANATION:; Like FXHREAD but also works with compressed Unix files;; CALLING SEQUENCE: ; MRD_HREAD, UNIT, HEADER [, STATUS, /SILENT ]; INPUTS: ; UNIT = Logical unit number of an open FITS file; OUTPUTS: ; HEADER = String array containing the FITS header.; OPT. OUTPUTS: ; STATUS = Condition code giving the status of the read. Normally, this; is zero, but is set to -1 if an error occurs, or if the; first byte of the header is zero (ASCII null).; OPTIONAL KEYWORD INPUT:; /SILENT - If set, then warning messages about any invalid characters in; the header are suppressed.; /FIRSTBLOCK - If set, then only the first block (36 lines or less) of ; the FITS header are read into the output variable. If only; size information (e.g. BITPIX, NAXIS) is needed from the; header, then the use of this keyword can save time. The ; file pointer is still positioned at the end of the header,; even if the /FIRSTBLOCK keyword is supplied.; RESTRICTIONS: ; The file must already be positioned at the start of the header. It; must be a proper FITS file.; SIDE EFFECTS: ; The file ends by being positioned at the end of the FITS header, unless; an error occurs.; REVISION HISTORY:; Written, Thomas McGlynn August 1995; Modified, Thomas McGlynn January 1996; Changed MRD_HREAD to handle Headers which have null characters; A warning message is printed out but the program continues.; Previously MRD_HREAD would fail if the null characters were; not in the last 2880 byte block of the header. Note that; such characters are illegal in the header but frequently; are produced by poor FITS writers.; Converted to IDL V5.0 W. Landsman September 1997; Added /SILENT keyword W. Landsman December 2000; Added /FIRSTBLOCK keyword W. Landsman February 2003;- block = string(replicate(32b, 80, 36)) w = [-1] nblock = 0 while w[0] eq -1 do begin ; Shouldn't get eof in middle of header. if eof(unit) then begin free_lun, unit status = -1 return endif on_ioerror, error_return readu, unit, block on_ioerror, null ; Check that there aren't improper null characters ; in strings that are causing them to be truncated. ; Issue a warning but continue if problems are found. w = where(strlen(block) ne 80) if (w[0] ne -1) then begin if not keyword_set(SILENT) then message, /INF, $ 'Warning-Invalid characters in header' block[w] = string(replicate(32b, 80)) endif w = where(strmid(block, 0, 8) eq 'END ') if nblock EQ 0 then begin if w[0] eq -1 then header = block $ else header = [block[0:w[0]]] nblock = nblock + 1 endif else begin if not keyword_set(firstblock) then begin if w[0] eq -1 then header = [header, block] $ else header = [header, block[0:w[0]]] endif endelse endwhile status = 0 returnerror_return: status = -1 returnend
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?