;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; NAME:
;		RFITS
; PURPOSE:
;		Read FITS data files
; CATEGORY:
;
; CALLING SEQUENCE:
;		RFITS, filename,header,data
; INPUTS:
;		filename	: name of disk file in FITS Format
; OUTPUTS:
;		header		: some basic header information 
;				  retrieved from the FITS header
;		data		: data array as in the FITS file
; RESTRICTIONS:
;		i) to 1D and 2D data (may be easily expanded)
;		ii) to bitpix values of 8,16,32 and -32,-64
;		iii) does not read table FITS or the like.
; NOTES:
;
; EXAMPLES:
;
; MODIFICATION HISTORY:
;		written 1991 by Reinhold Kroll
;		last update 1.Apr.92 rkr
;
;-----------------------------------------------------------------------
;
pro rfits,file,header,data
;
;  read a 1 or 2 dimensional fits file (may be easily expanded for n dim.)
;  Reinhold Kroll
;  written 1991 by Reinhold Kroll
;  Last Update 20.Feb.92 Reinhold Kroll
;
on_error,2	;  return to caller if error
hd=bytarr(80,36)
header={fitsheader,simple:'F',bitpix:8,naxis:lonarr(3),origin:' ', $
                   bscale:1.,bzero:0.,crval:fltarr(3),crpix:fltarr(3), $
                   cdelt:fltarr(3),object:' ',date:' ',  $ 
		   history:strarr(200) }
get_lun,lun
openr,lun,file
ihist=0
header.bscale=1.
header.bzero=0.
	WHILE eof(lun) NE 1 DO BEGIN
	readu,lun,hd
		for j=0,35 do BEGIN
		key=string(hd(0:7,j))
                value=string(hd(10:29,j))
			case key of
			"SIMPLE  ": header.simple=string(hd(29,j))
			"BITPIX  ": header.bitpix=fix(value)
			"NAXIS   ": header.naxis(0)=long(value)
			"NAXIS1  ": header.naxis(1)=long(value)
			"NAXIS2  ": header.naxis(2)=long(value)
			"BSCALE  ": header.bscale=float(value)
			"BZERO   ": header.bzero=float(value)
			"ORIGIN  ": header.origin=string(value)
			"OBJECT  ": header.object=string(value)
			"DATE    ": header.date=string(value)
			"CRVAL1  ": header.crval(1)=float(value)
			"CRVAL2  ": header.crval(2)=float(value)
			"CRPIX1  ": header.crpix(1)=float(value)
			"CRPIX2  ": header.crpix(2)=float(value)
			"CDELT1  ": header.cdelt(1)=float(value)
			"CDELT2  ": header.cdelt(2)=float(value)
			"HISTORY ": BEGIN
				    header.history(ihist)=string(hd(8:79,j))
				    ihist=ihist+1
				    END
			"END     ": goto, data
			ELSE:
			ENDCASE
		ENDFOR
	ENDWHILE
data:
CASE header.naxis(0) OF

1: BEGIN  				; one dimensional case
	data=fltarr(header.naxis(1))    ; define data array
		CASE header.bitpix OF
		 8: idata=bytarr(header.naxis(1))
		16: idata=intarr(header.naxis(1))
		32: idata=lonarr(header.naxis(1))
               -32: idata=fltarr(header.naxis(1))
               -64: idata=dblarr(header.naxis(1))
		ENDCASE
   END

2: BEGIN				;  twodimensional case
	data=fltarr(header.naxis(1),header.naxis(2))  ; define data array
		CASE header.bitpix OF
		 8: idata=bytarr(header.naxis(1),header.naxis(2))
		16: idata=intarr(header.naxis(1),header.naxis(2))
		32: idata=lonarr(header.naxis(1),header.naxis(2))
	       -32: idata=fltarr(header.naxis(1),header.naxis(2))
	       -64: idata=dblarr(header.naxis(1),header.naxis(2))
		ENDCASE
   END
ENDCASE

readu,lun,idata
close,lun
free_lun,lun
data = idata * header.bscale + header.bzero

end