pro wrtSXTMap, lun, fpoint, bytout, fhead, rsiz, init_fhead=init_fhead, $
		shape_sav=shape_sav, ndatabyte=ndatabyte, qdebug=qdebug, $
		roadmap_in = roadmap_in
;+
;
;
;OPTIONAL KEYWORD INPUT:
;	shape_sav - If set, copy the shape_sav values to the roadmap
;		    "shape_cmd" field (instead of the shape_cmd values)
;		    This is needed because the roadmap field "shape_cmd"
;		    is used to figure out the output array size.
;	ndatabyte - If set, it is the number of byte in the data portion.
;		    The older SDL, SLD, SLS, SOT, SXC and SXL files did
;		    not have values written to the INDEX.GEN.NDATABYTES
;		    value
;HISTORY:
;	Written Fall '91 by M.Morrison
;	24-Aug-92 (MDM) - Added /shape_sav
;	12-Jul-93 (MDM) - Added NDATABYTE and QDEBUG options
;	 6-Dec-93 (MDM) - Added ROADMAP_IN option so that the full
;			  roadmap does not have to be re-built when
;			  appending to an existing file.
;      19-Jul-2000 - S.L.Freeland - quieted an historical debug statement
;
;-
ref_struct, ref, dpos1, dpos2, sxtos1, sxtos2, sxtos3, stat1
;
if (keyword_set(init_fhead)) then gen_struct, file_header=fhead
;^^ want to be able to pass in the "fhead" alread defined and just overwrite the relevant values
;
gen_struct, gen_index=gen_index
sxt_struct, sxt_index=sxt_index, sxt_roadmap=sxt_roadmap, sxt_version=sxt_version
;
fpoint.map_section = bytout
rsiz = ref.SXT_Fil_Rec_Siz
maxsamps = 0
nDataSets = 0
;
first_time = 0	;TODO - temporary - should not occur 
first_day  = 0
last_time  = 0
last_day   = 0
;
nn = n_elements(roadmap_in)
if (nn ge 2) then begin
    rdwrt, 'W', lun, bytout, rsiz, roadmap_in(0:nn-2), 1	;write them all except the last one
    ibyt = roadmap_in(nn-1).byteskip				;start reading index at the last one

    nDataSets = nn-1
    first_time = min(gt_time(roadmap_in))
    first_day  = min(gt_day(roadmap_in))
    last_time  = max(gt_time(roadmap_in))
    last_day   = max(gt_day(roadmap_in))
    ;maxsamps will not necessarily be accurate
end else begin
    ibyt = fpoint.data_section
end
;
qdebug = keyword_set(qdebug)
if qdebug then print, 'Now Inside WRTSXTMAP.PRO  Roadmap starts at: ', bytout
;
rd_index, lun, ibyt, index0		;MDM Added 19-Oct-91
index_ref = index0
while (ibyt lt fpoint.map_section) do begin
    ibyt0 = ibyt
    if (qdebug) then print, 'Dset = ', ndatasets+1, '  ibyt = ', ibyt0

    ;rdwrt, 'R', lun, ibyt, rsiz, Gen_Index, 1
    ;rdwrt, 'R', lun, ibyt, rsiz, SXT_Index, 1
    rdwrt, 'R', lun, ibyt, rsiz, index0, 1
    if ((index0.gen.index_version ne index_ref.gen.index_version) or $
		(index0.gen.index_version ne index_ref.gen.index_version)) then begin	;change in index version
	print, 'WRTSXTMAP: Reading a new reference index'
	ibyt = ibyt0	;back to to re-do this dataset
	rd_index, lun, ibyt0, index0
	index_ref = index0
	rdwrt, 'R', lun, ibyt, rsiz, index0, 1		;need to make sure "ibyt" is pointing to the right place
    end
    gen_index = index0.gen
    sxt_index = index0.sxt

    sxt_roadmap.byteSkip		= ibyt0
    sxt_roadmap.time			= gen_index.time
    sxt_roadmap.day			= gen_index.day
    sxt_roadmap.dp_mode			= gen_index.dp_mode
    sxt_roadmap.dp_rate			= gen_index.dp_rate
    sxt_roadmap.pfi_ffi			= sxt_index.pfi_ffi
    sxt_roadmap.periph			= sxt_index.periph
    sxt_roadmap.explevmode		= sxt_index.explevmode
    sxt_roadmap.imgparam		= sxt_index.imgparam
    sxt_roadmap.ObsRegion		= sxt_index.ObsRegion
    sxt_roadmap.Seq_Num			= sxt_index.Seq_Num
    sxt_roadmap.shape_cmd		= sxt_index.shape_cmd
    if (keyword_set(shape_sav)) then sxt_roadmap.shape_cmd = sxt_index.shape_sav	;added 24-Aug-92
    sxt_roadmap.FOV_Center(0)		= sxt_index.FOV_Center(0)
    sxt_roadmap.FOV_Center(1)		= sxt_index.FOV_Center(1)
    sxt_roadmap.Img_Max			= sxt_index.Img_Max
    sxt_roadmap.Img_Avg			= sxt_index.Img_Avg
    sxt_roadmap.Img_Dev			= sxt_index.Img_Dev
    sxt_roadmap.PercentD		= sxt_index.PercentD
    sxt_roadmap.PercentOver		= sxt_index.PercentOver

    sxt_roadmap.Flare_Status		= gen_index.flare_status(0)		;added 11-Dec-91

    sxt_roadmap.serial_num		= sxt_index.serial_num
    sxt_roadmap.aec_status		= sxt_index.aec_status

    sxt_roadmap.seq_tab_serno		= sxt_index.seq_tab_serno

    rdwrt, 'W', lun, bytout, rsiz, SXT_Roadmap, 1

    if (qdebug) then print, 'Time = ', gen_index.time
    if (qdebug) then print, 'GEN_Index.nIndexByte =', GEN_Index.nIndexByte

;   ibyt = ibyt0 + GEN_Index.nIndexByte + Gen_Index.nDataByte
    if (keyword_set(ndatabyte)) then ndata = ndatabyte else ndata = Gen_Index.nDataByte
    ibyt = ibyt0 + GEN_Index.nIndexByte + ndata
    nDataSets = nDataSets + 1

    day  = sxt_roadmap.day
    time  = sxt_roadmap.time
    if (nDataSets eq 1) then begin
	first_day  = day
	first_time = time
	last_day   = day
	last_time  = time
    end else begin
	s_day = 86400
        v = (day-first_day)*s_day + (time-first_time)/1000
        if (v lt 0) then begin  ;found an earlier start time/day
            first_day  = day
            first_time = time
        end
        v = (day-last_day)*s_day + (time-last_time)/1000
        if (v gt 0) then begin  ;found a later end time/day
            last_day  = day
            last_time = time
        end
    end

    ;maxsamps = max([maxSamps, gen_index.nDataByte])
    maxsamps = max([maxSamps, ndata])
end

fpoint.roadmap_version	= sxt_version.roadmap
fpoint.TotBytes		= bytout

fhead.first_Time	= first_time
fhead.first_Day		= first_day
fhead.last_Time		= last_time
fhead.last_Day		= last_day

fhead.nDataSets		= nDataSets
fhead.maxSamps		= maxSamps

end
