pro rd_bsd, infil, dset_arr, rec_head, datab, datac, chan, roadmap, $
	header, wave
;+
;	NAME:
;		rd_bsd
;
;	PURPOSE:
;		Read the data sections of BSD files
;
;	INPUT:
;		infil	file name
;
;		dset_arr	data set indices to extract
;
;		chan	BCS channel 1 to 4
;
;		roadmap		roadmp array for channel
;
;		header		bsd file header structure
;
;	OUTPUT:
;		rec_head	record header structure
;
;		datab	bin arrays
;
;		datac	count arrays
;
;		wave	wavelength arrays
;
;	HISTORY:
;		JTM: (25 Oct 91)
;-

bsd_struct

get_lun, lun
openr, lun, infil, /block

n1 = n_elements(dset_arr)
n2 = header.numchn(chan-1)
numdat = min(n1, n2)
rec_head = replicate({bsd_r_h}, numdat)
datab = fltarr(256, numdat)
datac = fltarr(256, numdat)

temph = {bsd_r_h}
for i = 0, numdat-1 do begin
	idset = dset_arr(i) - 1
	point_lun, lun, (roadmap(idset)-1)*64L
	readu, lun, temph
	rec_head(idset) = temph
	nrec = rec_head(idset).nbinssp/16
	tdat = fltarr(nrec*16)
	readu, lun, tdat
	datab(0:rec_head(idset).nbinssp-1, idset) $
		 = tdat(0:rec_head(idset).nbinssp-1)
	readu, lun, tdat
	datac(0:rec_head(idset).nbinssp-1, idset) $
		 = tdat(0:rec_head(idset).nbinssp-1)
endfor
;
; Trim the arrays *** assume they are all the same ***
;
	datab = datab(0:rec_head(0).nbinssp-1, *)
	datac = datac(0:rec_head(0).nbinssp-1, *)
;
; Generate wavelengths
;
	wave = datab
	for i = 0, numdat-1 do begin
		wave(*, i) = datab(*, i)*rec_head(i).dw + $
			rec_head(i).wo
	endfor

close, lun
free_lun, lun

end
