FUNCTION STRUCT2FITS_HDR, hdr_struct, image

COMMON LASCO_HDR_STR_COMMON, lasco_hdr_str

   IF (DATATYPE(lasco_hdr_str) EQ 'UND') THEN BEGIN
      telescope_array = ['C1','C2','C3','EIT']
      clear_array  = ['SLOW','FAST']
      port_array = ['A','B','C','D']
      shutter_array = ['OPEN', 'CLOSED']
      lamp_array = ['OFF','OFF1','DOOR','SHUTTER']
      ;*                    0        1           2           3         4
      filter_array = [['CaXV',  'FeX',      'Orange',   'Na',     'FeXIV'],    $;* C1
                      ['Blue',  'H_alpha',  'Deep_Red', 'Orange', 'Lens'],     $;* C2
                      ['Clear', 'Deep_Red', 'Orange',   'IR',     'Blue'],     $;* C3
                      ['ALU 1', 'ALU 2',    'AL/2 INF', 'Clear',  'AL/2 SUP']]  ;* EIT
      ;*                    0        1           2           3         4
      polar_array  = [['Clear', 'H_alpha',  '-60',      '0',      '+60'],     	$;* C1
                      ['Clear', '+60',        '0',    '-60',      'Density'], 	$;* C2
                      ['Clear', 'H_alpha',  '-60',      '0',      '+60'],      $;* C3
                      ['Sector 1', 'Sector 2', 'Sector 3', 'Sector 4', 'Invalid']] ;* EIT
      op_array = [ 'INF_LOOP',                 $;*  0
                'SR',                       $;*  1
                'M1_MSR',           	    $;*  2
                'WOBBLE_IN',                $;*  3
                'WOBBLE_OUT',               $;*  4
                'DARK_IMG',                 $;*  5
                'CC',                       $;*  6
                'CONTINUOUS_IMAGE',         $;*  7
                'FP_SCAN_LINE',     	    $;*  8
                'TAKE_NORM',                $;*  9
                'DUMP_MEM',                 $;* 10
                'GRND_PERIPH_CMNDS',        $;* 11
                'PERIPH_LOADING',   	    $;* 12
                'UPD_DFLT_PARAMS',  	    $;* 13
                'SEQ_PW_AT_FW',     	    $;* 14
                'FP_CAM_COORD',     	    $;* 15
                'CONCURRENT',               $;* 16
                'TAKE_CAL_LAMP',    	    $;* 17
                'GRND_MECH_CMNDS',  	    $;* 18
                'TAKE_SUM',                 $;* 19
                'TAKE_SEQ',                 $;* 20
                'MOVE_M1',          	    $;* 21
                'TRANS_DET' ]                ;* 22

      lasco_hdr_str = {lasco_hdr_str,		$
           telescope_names : telescope_array, 	$
           clear_types : clear_array, 		$
           port_types : port_array, 		$
           shutter_pos : shutter_array, 	$
           lamp_types : lamp_array, 		$
           filter_types : filter_array, 	$
           polar_types : polar_array, 		$
           op_types : op_array  		$
          }
   ENDIF

   ;****************************************************
   ;**   GET A FITS HEADER ARRAY AND FILL WITH DATA   **
   FXADDPAR, hdr, "SIMPLE  ", "T"
   FXADDPAR, hdr, "FILENAME", hdr_struct.filename
   FXADDPAR, hdr, "FILEORIG", hdr_struct.fileorig
   FXADDPAR, hdr, "BITPIX  ",    FIX(16)	;** ??
   FXADDPAR, hdr, "NAXIS   ",     	FIX(2)
   FXADDPAR, hdr, "NAXIS1  ",    	FIX(hdr_struct.blocks_horz)*32
   FXADDPAR, hdr, "NAXIS2  ",    	FIX(hdr_struct.blocks_vert)*32
   GET_DATE, dte
   FXADDPAR, hdr, "DATE    ",      	dte		;** Current Date

   date_str = hdr_struct.date_obs
   FXADDPAR, hdr, "UTC_TIME",  	date_str
   FXADDPAR, hdr, "DATE-OBS",		STRMID(date_str, 0, 10)
   FXADDPAR, hdr, "TIME-OBS",		STRMID(date_str, 11, 12)
   FXADDPAR, hdr, "EXPTIME ",	  	FLOAT(hdr_struct.exp_dur)/32.
   FXADDPAR, hdr, "INSTRUME",  	STRCOMPRESS(STRING(hdr_struct.camera),/REMOVE_ALL)
   FXADDPAR, hdr, "TELESCOP",  	lasco_hdr_str.telescope_names(hdr_struct.camera)
   FXADDPAR, hdr, "P1COL   ",	  	FIX(hdr_struct.p1col)
   FXADDPAR, hdr, "P1ROW   ",	  	FIX(hdr_struct.p1row)
   FXADDPAR, hdr, "P2COL   ",	  	FIX(hdr_struct.p2col)
   FXADDPAR, hdr, "P2ROW   ",	  	FIX(hdr_struct.p2row)
   FXADDPAR, hdr, "SUMCOL  ",	  	FIX(hdr_struct.sumcol)
   FXADDPAR, hdr, "SUMROW  ",	  	FIX(hdr_struct.sumrow)
   FXADDPAR, hdr, "LEBXSUM ",	  	FIX(hdr_struct.lebxsum)
   FXADDPAR, hdr, "LEBYSUM ",	  	FIX(hdr_struct.lebysum)
   FXADDPAR, hdr, "CLRMODE ",	  	lasco_hdr_str.clear_types(hdr_struct.clrmode)
   FXADDPAR, hdr, "NCLEARS ",	  	FIX(hdr_struct.nclears)
   FXADDPAR, hdr, "DATAMAX ",	  	LONG(MAX(image))
   FXADDPAR, hdr, "DATAMIN ",	  	LONG(MIN(image(WHERE(image NE 0) > 0)))
   FXADDPAR, hdr, "READPORT",  	lasco_hdr_str.port_types(hdr_struct.readport)
   FXADDPAR, hdr, "SHUTTER ",    	lasco_hdr_str.shutter_pos(hdr_struct.shutter)
   FXADDPAR, hdr, "LAMP    ",    	lasco_hdr_str.lamp_types(hdr_struct.lamp)
   FXADDPAR, hdr, "FILTER  ",    	lasco_hdr_str.filter_types(hdr_struct.filter,hdr_struct.camera)
   FXADDPAR, hdr, "POLAR   ",    	lasco_hdr_str.polar_types(hdr_struct.polar,hdr_struct.camera)
   FXADDPAR, hdr, "LINESYNC",  	FIX(hdr_struct.line_sync)
   FXADDPAR, hdr, "CAM_ERR ",  	FIX(hdr_struct.camera_err)
   FXADDPAR, hdr, "STRTIME1",  	LONG(hdr_struct.exp_start_time1)
   FXADDPAR, hdr, "STRTIME2",  	LONG(hdr_struct.exp_start_time2)
   FXADDPAR, hdr, "STRTIME3",  	LONG(hdr_struct.exp_start_time3)
   FXADDPAR, hdr, "EXP_CMD ",    	LONG(hdr_struct.exp_cmd)
   FXADDPAR, hdr, "EXP_DUR ",    	LONG(hdr_struct.exp_dur)
   FXADDPAR, hdr, "ROTIME1 ",  	LONG(hdr_struct.read_time)	;** THIS SHOULD BE A LONG ???
   FXADDPAR, hdr, "EXP1    ",  	LONG(hdr_struct.exp1)	;** THIS SHOULD BE A LONG ???
   FXADDPAR, hdr, "EXP2    ",  	LONG(hdr_struct.exp2)	;** THIS SHOULD BE A LONG ???
   FXADDPAR, hdr, "EXP3    ",  	LONG(hdr_struct.exp3)	;** THIS SHOULD BE A LONG ???
   FXADDPAR, hdr, "PROCTIME",  	LONG(hdr_struct.proc_time)	;** THIS SHOULD BE A LONG ???
   FXADDPAR, hdr, "LPULSE  ",  	FIX(hdr_struct.lpulse)
   FXADDPAR, hdr, "OBS_PROG",  	lasco_hdr_str.op_types(hdr_struct.lp_num)
   FXADDPAR, hdr, "OS_NUM  ",  	LONG(hdr_struct.os_num)
   FXADDPAR, hdr, "SEQ_NUM ",  	FIX(hdr_struct.seq_num)
   FXADDPAR, hdr, "NUM_PROC",  	FIX(hdr_struct.num_ip)
   FOR i=0, hdr_struct.num_ip -1 DO BEGIN
      keystr = "PROC"+STRCOMPRESS(STRING(i+1), /REMOVE_ALL)
      FXADDPAR, hdr, keystr, 		FIX(hdr_struct.leb_proc(i))
   ENDFOR
   FXADDPAR, hdr, "IMAGECTR",  	FIX(hdr_struct.image_ctr)
   FXADDPAR, hdr, "IMAGEDAT",  	FIX(hdr_struct.send_data)
   FXADDPAR, hdr, "BLKS_X  ",  	FIX(hdr_struct.blocks_horz)
   FXADDPAR, hdr, "BLKS_Y  ",  	FIX(hdr_struct.blocks_vert)
   FXADDPAR, hdr, "BLKS_TOT",  	FIX(hdr_struct.blocks_total)
   FXADDPAR, hdr, "TRANSIMG",		FIX(hdr_struct.trans_image)
   FXADDPAR, hdr, "TRANSDET",  	FIX(hdr_struct.trans_det)
   FXADDPAR, hdr, "FPUPWL  ",  	FIX(hdr_struct.fp_wl_upl)
   FXADDPAR, hdr, "FPCMDWL ",  	FIX(hdr_struct.fp_wl_cmd)
   FXADDPAR, hdr, "M1_LID  ",  	FIX(hdr_struct.m1_lid)
   FXADDPAR, hdr, "M1_PZ1  ",  	FIX(hdr_struct.m1_pz1)
   FXADDPAR, hdr, "M1_PZ2  ",  	FIX(hdr_struct.m1_pz2)
   FXADDPAR, hdr, "M1_PZ3  ",  	FIX(hdr_struct.m1_pz3)
   FXADDPAR, hdr, "COMP_BPX",  	hdr_struct.comp_bpx
   FXADDPAR, hdr, "COMP_CF ",  	hdr_struct.comp_cf
   FXADDPAR, hdr, "COMMENT ",  	"Header made by READ_LEB_IMAGE.PRO"
   FXADDPAR, hdr, "HISTORY ",  	hdr_struct.history(0)

   RETURN, hdr

END
