Source code for fxposit.pro:

        FUNCTION FXPOSIT, XFILE, EXT_NO, readonly=readonly, COMPRESS=COMPRESS, $
                 SILENT = Silent 
;+
; NAME:
;     FXPOSIT
; PURPOSE:
;     Return the unit number of a FITS file positioned at specified extension
; EXPLANATION:
;     The FITS file will be ready to be read at the beginning of the 
;     specified extension.
;
; CALLING SEQUENCE:
;     unit=FXPOSIT(FILE, EXT_NO, /READONLY, COMPRESS=program, /SILENT)
;
; INPUT PARAMETERS:
;     FILE    = FITS file name, scalar string
;     EXT_NO  = Extension to be moved to, scalar nonnegative integer
;
; RETURNS:
;     Unit number of file or -1 if an error is detected.
;
; OPTIONAL KEYWORD PARAMETER:
;     /READONLY - If this keyword is set and non-zero, then OPENR rather 
;                than OPENU will be used to open the FITS file.
;     COMPRESS - If this keyword is set and non-zero, then then treat
;                the file as compressed.  If 1 assume a gzipped file.
;                and use IDLs internal decompression facility.    For Unix 
;                compressed or bzip2 compressed files spawn off a process to 
;                decompress and use its output as the FITS stream.  If the 
;                keyword is not 1, then use its value as a string giving the 
;                command needed for decompression.
;     /SILENT    If set, then suppress any messages about invalid characters
;                in the FITS file.
;
; COMMON BLOCKS:
;      None.
; SIDE EFFECTS:
;      Opens and returns the descriptor of a file.
; PROCEDURE:
;      Open the appropriate file, or spawn a command and intercept
;      the output.
;      Call FXMOVE to get to the appropriate extension.
; PROCEDURE CALLS:
;      EXPAND_TILDE() (pre V5.5 Unix only), FXPAR(), FXMOVE(), REPSTR()
; MODIFICATION HISTORY:
;      Derived from William Thompson's FXFINDEND routine.
;      Modified by T.McGlynn, 5-October-1994.
;       Modified by T.McGlynn, 25-Feb-1995 to handle compressed
;          files.  Pipes cannot be accessed using FXHREAD so
;          MRD_HREAD was written.
;       W. Landsman 23-Apr-1997    Force the /bin/sh shell when uncompressing 
;       W. Landsman 26-May-1997    Non-unix is not just VMS
;       T. McGlynn  22-Apr-1999    Add /binary modifier needed for Windows
;       T. McGlynn  03-June-1999   Use /noshell option to get rid of processes left by spawn.
;                                  Use findfile to retain ability to use wildcards
;       W. Landsman 03-Aug-1999    Use EXPAND_TILDE under Unix to find file
;       T. McGlynn  04-Apr-2000    Put reading code into FXMOVE,
;                                  additional support for compression from D.Palmer.
;       W. Landsman/D.Zarro 04-Jul-2000    Added test for !VERSION.OS EQ 'Win32' (WinNT)
;       W. Landsman    12-Dec-2000 Added /SILENT keyword
;       W. Landsman April 2002     Use FILE_SEARCH for V5.5 or later
;       W. Landsman Feb 2004       Assume since V5.3 (OPENR,/COMPRESS available)
;       W. Landsman,W. Thompson, 2-Mar-2004, Add support for BZIP2 
;       W. Landsman                Don't leave open file if an error occurs
;-
;
        ON_ERROR,2
        compile_opt idl2   ;For pre-V5.5 compatibility
;
;  Check the number of parameters.
;
        IF N_PARAMS() LT 2 THEN BEGIN 
            PRINT,'SYNTAX:  UNIT = FXPOSIT(FILE, EXT_NO, /Readonly, compress=prog)'
            RETURN,-1
        ENDIF

        IF !VERSION.RELEASE GE '5.5' THEN $
           FILE = FILE_SEARCH(XFILE, COUNT=COUNT) ELSE BEGIN

; Expand wildcards in name.    Compensate that FINDFILE doesn't recognize
; the meaning of the Unix tilde.

        IF !VERSION.OS_FAMILY EQ 'unix' THEN BEGIN
	    IF STRPOS(XFILE,'~') NE -1 THEN XFILE = EXPAND_TILDE(XFILE)
	    FILE = FINDFILE(REPSTR(XFILE," ","\ "), COUNT=COUNT)
	ENDIF ELSE FILE = FINDFILE(XFILE, COUNT=COUNT)
        ENDELSE

        IF COUNT EQ 0 THEN BEGIN
            RETURN, -1   ; Don't print anything out, just report an error
        ENDIF
        
        FILE = FILE[0]
;
;  Check if this is a compressed file.
;
        UNIT = -1

        UCMPRS = ' '
	IF KEYWORD_SET(compress) THEN BEGIN
	    IF strcompress(string(compress),/remo) eq '1' THEN BEGIN
	        compress = 'gunzip'
	    ENDIF
	    UCMPRS = compress;
	ENDIF ELSE BEGIN
        
            LEN = STRLEN(FILE)
            IF LEN GT 3 THEN $
	        TAIL = STRLOWCASE(STRMID(FILE, LEN-3, 3))  $
	    ELSE TAIL = ' '
	    
            IF STRMID(TAIL,1,2) EQ '.z'  THEN $
                UCMPRS = 'uncompress'   $
	    ELSE IF TAIL EQ '.gz'  THEN $
	        UCMPRS = 'gunzip'       $
	    ELSE IF TAIL EQ 'bz2' THEN $
	        UCMPRS = 'bunzip2'
	    
	ENDELSE
                
;  Handle compressed files.

	IF UCMPRS EQ 'gunzip' THEN BEGIN
	        
                IF KEYWORD_SET(READONLY) THEN BEGIN
                    OPENR, UNIT, FILE, /COMPRESS, /GET_LUN, /BLOCK, /BINARY, ERROR = ERROR
                ENDIF ELSE BEGIN
                    OPENU, UNIT, FILE, /COMPRESS, /GET_LUN, /BLOCK, /BINARY, ERROR = ERROR
                ENDELSE

	ENDIF ELSE IF UCMPRS NE ' ' THEN BEGIN
		
                IF (!VERSION.OS_FAMILY EQ 'unix') THEN BEGIN
                        SPAWN, [UCMPRS,'-c',FILE], UNIT=UNIT, /NOSHELL
                ENDIF ELSE BEGIN
                        PRINT, 'MRDFITS: Only Unix IDL supports piped spawns'
                        PRINT, '         File must be uncompressed manually'
                        RETURN, -1                      
                ENDELSE
                
        ENDIF ELSE BEGIN
;
;  Go to the start of the file.
;
                IF KEYWORD_SET(READONLY) THEN BEGIN
                        OPENR, UNIT, FILE, /GET_LUN, /BLOCK, /BINARY, ERROR = ERROR
                ENDIF ELSE BEGIN
                        OPENU, UNIT, FILE, /GET_LUN, /BLOCK, /BINARY, ERROR = ERROR
                ENDELSE
                IF ERROR NE 0 THEN BEGIN
                        PRINT,!ERROR_STATE.MSG
                        RETURN,-1
                ENDIF
        ENDELSE
        IF EXT_NO LE 0 THEN RETURN, UNIT
	STAT = FXMOVE(UNIT, EXT_NO, SILENT = Silent)
	IF STAT LT 0 THEN BEGIN
            FREE_LUN, UNIT
	    RETURN, STAT
	ENDIF ELSE BEGIN
	    RETURN, UNIT
	ENDELSE
END



Return to the shapelets web page or the code help menu.





Valid HTML 4.01!

Valid CSS!