pro read_bin,sct,outname

;this version will read the pct now

head_text_out=strcompress(outname+'.txt',/remove_all)
head_sav_out=strcompress(outname+'.sav',/remove_all)
openw,13,head_text_out
openw,14,'pct_test.txt'

c=0           ;2
a=0L          ;3 - idl size(a) 0 3 1pwd
aa=0.0        ;4
b=0D          ;5

;instead, define variables directly
te='12345678'                           ;8
td=strcompress(te+te,/remove_all)       ;16
tc=strcompress(td+td,/remove_all)       ;32  
tb=strcompress(tc+tc,/remove_all)       ;64
ta=strcompress(tb+tb,/remove_all)       ;128
tf=strcompress(ta+ta+ta+ta,/remove_all) ;512

;REVIEW- A is integer, not floating point - consider aa
rxt=make_array(8,32,value=a) ;rx antenna type descriptors
rxd=make_array(3,32,value=a) ;array for rx position and direction
rxa=make_array(3,value=a)  ;for tx vector
dba=make_array(2,64,value=a) ;drive band bounds
dbb=make_array(64,value=a)
bda=make_array(1024,value=a) ;data and cal baud
ba=make_array(8192,value=a)  ;base table
pa=make_array(256,value=a)  ;pulse pattern
rxm=make_array(16,value=a)  ;rx map
ca=make_array(160,value=a)  ;coefficients
ma=make_array(8,value=a)    ;monitor vars

;sct.header
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
readu,11,a
sct.header.magic=a
printf,13,'magic ',a
readu,11,a
sct.header.sounding_table_size=a
printf,13,'sounding table size ',a
readu,11,a
sct.header.pulse_table_size=a
printf,13,'pulse table size ',a
readu,11,a
sct.header.raw_data_size=a
;printf,13,'raw data size ',a

readu,11,aa 
sct.header.struct_version=aa
;printf,13,'structure version ',aa ;a

readu,11,a
sct.header.start_year=a
printf,13,'start year ',a
readu,11,a
sct.header.start_daynumber=a
printf,13,'start daynumber ',a
readu,11,a
sct.header.start_month=a
;printf,13,'start month ',a
readu,11,a
sct.header.start_day=a
printf,13,'start day ',a
readu,11,a
sct.header.start_hour=a
printf,13,'start hour ',a
readu,11,a
sct.header.start_minute=a
printf,13,'start minute ',a
readu,11,a
sct.header.start_second=a
printf,13,' start second ',a
readu,11,a
sct.header.start_epoch=a
;printf,13,'start epoch ',a

taa=ta    
readu,11,taa
sct.header.readme=taa
;printf,13,'readme crap ',taa
readu,11,a
sct.header.decimation_method=a
;printf,13,'decimation method ',a
readu,11,a
sct.header.decimation_threshold=a
;printf,13,'decimation thresh hold ',a
taa=ta 
readu,11,taa
sct.header.user=taa
;printf,13,'user string ',taa 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;that is all for sct

;read sct.station
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tbb=tb
readu,11,tbb
sct.station.file_id=tbb
;printf,13,'file id ',tbb
tee=te
readu,11,tee
sct.station.ursi_id=tee
;printf,13,'ursi id ',tee
tcc=tc
readu,11,tcc
sct.station.rx_name=tcc
;printf,13,'rx name ',tcc
readu,11,aa
sct.station.rx_latitude=aa
;printf,13,'rx latitude ',aa
readu,11,aa
sct.station.rx_longitude=aa
;printf,13,'rx longitutde ',aa
readu,11,aa
sct.station.rx_altitude=aa
;printf,13,'rx altitude ',aa
readu,11,a
sct.station.rx_count=a
;printf,13,'rx count ',a


for l=1,32 do begin
tcc=tc
readu,11,tcc

  if (l le 8) then begin
  ;printf,13,'rx antenna type ',l,' is ',tcc  ;rxt -doesn't work tc=32char
  endif
  sct.station.rx_antenna_type[l-1]=tcc
endfor

;position
;printf,13,'Rx Position X Y Z'
for l=1,32 do begin
aax=aa
aay=aa
aaz=aa
readu,11,aax
readu,11,aay
readu,11,aaz
  if (l le 8) then begin
    ;printf,13,aax,' ',aay,' ',aaz
  endif
sct.station.rx_position[0,l-1]=aax
sct.station.rx_position[1,l-1]=aay
sct.station.rx_position[2,l-1]=aaz  
endfor

;direction
;printf,13,'Rx Direction X Y Z'
for l=1,32 do begin
aax=aa
aay=aa
aaz=aa
readu,11,aax
readu,11,aay
readu,11,aaz
  if (l le 8) then begin
  ;printf,13,aax,' ',aay,' ',aaz
  endif
sct.station.rx_direction[0,l-1]=aax
sct.station.rx_direction[1,l-1]=aay
sct.station.rx_direction[2,l-1]=aaz
endfor

;rx height
;printf,13,'Rx Height'
for l=1,32 do begin
readu,11,aa
  if (l le 8) then begin
   ;printf,13,aa
endif
sct.station.rx_height[l-1]=aa
endfor

;printf,13,'Rx Cable Length'
for l=1,32 do begin
readu,11,aa
  if (l le 8) then begin
    ;printf,13,aa
 endif
sct.station.rx_cable_length[l-1]=aa
endfor

;;;
readu,11,aa
sct.station.frontend_atten=aa
;printf,13,'frontend attenuation ',aa
tcc=tc
readu,11,tcc
sct.station.tx_name=tcc
;printf,13,'tx name ',tcc
readu,11,aa
sct.station.tx_latitude=aa
;printf,13,'tx latitude ',aa
readu,11,aa
sct.station.tx_longitude=aa
;printf,13,'tx longitude ',aa
readu,11,aa
sct.station.tx_altitude=aa
;printf,13,'tx altitude ',aa
tcc=tc
readu,11,tcc 
sct.station.tx_antenna_type=tcc 
;printf,13,'tx antenna type ',tcc

readu,11,aa 
sct.station.tx_vector[0]=aa 
;printf,13,'tx vector X ',aa 
readu,11,aa 
sct.station.tx_vector[1]=aa
;printf,13,'tx vector Y ',aa
readu,11,aa 
sct.station.tx_vector[2]=aa
;printf,13,'tx vector Z ',aa
;;;;;;;;;;;;;;

readu,11,aa
sct.station.tx_height=aa
;printf,13,'tx height ',aa
readu,11,aa
sct.station.tx_cable_length=aa
;printf,13,'tx cable length ',aa
;;;;;;;;;;;;;;;;

readu,11,a
sct.station.drive_band_count=a
;printf,13,'drive band count ',a

;printf,13,'Drive Band Bounds 1'

for l=0,63 do begin
readu,11,aa 

sct.station.drive_band_bounds[0,l-1]=aa
readu,11,aa
sct.station.drive_band_bounds[1,l-1]=aa

endfor

;drive band atten
for l=0,63 do begin
readu,11,aa
sct.station.drive_band_atten[l-1]=aa
endfor

readu,11,a
sct.station.rf_control=a
;printf,13,'rf control ',a

tcc=tc
readu,11,tcc
;printf,13,'reference type ',tcc
sct.station.ref_type=tcc

tcc=tc
readu,11,tcc
;printf,13,'clock type ',tcc
sct.station.clock_type=tcc

taa=ta
readu,11,taa
sct.station.user=taa
;printf,13,'user ',taa;sa

;timing

tbb=tb
readu,11,tbb ;sb
sct.timing.file_id=tbb
;printf,13,'file id ',tbb

readu,11,aa
sct.timing.pri=aa
;printf,13,'sct timing pri ',aa
readu,11,a
sct.timing.pri_count=a
;printf,13,'pri count ',a
readu,11,a
sct.timing.ionogram_count=a
;printf,13,'ionogram count ',a
readu,11,aa
sct.timing.holdoff=aa
;printf,13,'holdoff ',aa
readu,11,aa
sct.timing.range_gate_offset=aa
;printf,13,'range gate offset ',aa
readu,11,a

;printf,13,'gate count ',a
sct.timing.gate_count=a
readu,11,aa
sct.timing.gate_start=aa
;printf,13,'gate start ',aa
readu,11,aa
sct.timing.gate_end=aa
;printf,13,'gate end ',aa
readu,11,aa
sct.timing.gate_step=aa
;printf,13,'gate step ',aa
readu,11,aa
sct.timing.data_start=aa
;printf,13,'data start ',aa
readu,11,aa
sct.timing.data_width=aa
;printf,13,'data width ',aa
readu,11,a
sct.timing.data_baud_count=a
;printf,13,'data baud count ',a

tbb=tb
readu,11,tbb
sct.timing.data_wave_file=tbb
;printf,13,'data wave file ',tbb

for l=1,1024 do begin
readu,11,aa
sct.timing.data_baud[0,l-1]=aa ;re part
readu,11,aa
sct.timing.data_baud[1,l-1]=aa ;im part
endfor

readu,11,a
sct.timing.data_pairs=a
;printf,13,'data pairs ',a

readu,11,aa
sct.timing.cal_start=aa
;printf,13,'cal start ',aa
readu,11,aa
sct.timing.cal_width=aa
;printf,13,'cal width ',aa

readu,11,a
sct.timing.cal_baud_count=a
;printf,13,'cal baud count ',a

tbb=tb
readu,11,tbb
sct.timing.cal_wave_file=tbb
;printf,13,'cal wave file ',tbb

for l=1,1024 do begin
readu,11,aa
sct.timing.cal_baud[0,l-1]=aa
readu,11,aa
sct.timing.cal_baud[1,l-1]=aa
endfor

readu,11,a
sct.timing.cal_pairs=a
;printf,13,'cal pairs ',a

taa=ta
readu,11,taa
sct.timing.user=taa
;printf,13,'timing user ',taa

;sct.frequency
;;;;;;;;;;;;;;;;;;;;;
tbb=tb
readu,11,tbb
sct.frequency.file_id=tbb  
;printf,13,'file id ',tbb

readu,11,aa
sct.frequency.base_start=aa
;printf,13,'base start ',aa
readu,11,aa
sct.frequency.base_end=aa
;printf,13,'base end ',aa
readu,11,a
sct.frequency.base_steps=a
;printf,13,'base steps ',a
readu,11,a
sct.frequency.tune_type=a
;printf,13,'tune type ',a

;*******************************************
;this index should be pulled from the header
;*******************************************
for l=1,8192 do begin
readu,11,aa
sct.frequency.base_table[l-1]=aa
  if (aa ne 0.0) then begin
  ;printf,13,'base table ',l,' ',aa
  endif
endfor

readu,11,aa
sct.frequency.linear_step=aa
;printf,13,'linear step ',aa
readu,11,aa
sct.frequency.log_step=aa
;printf,13,'log step ',aa

tbb=tb
readu,11,tbb
sct.frequency.freq_table_id=tbb  
;printf,13,'freq table id ',tbb

readu,11,a
sct.frequency.tune_steps=a
;printf,13,'tune steps ',a

readu,11,a
sct.frequency.pulse_count=a
;printf,13,'pulse count ',a
 for l=1,256 do begin
  readu,11,a
  sct.frequency.pulse_pattern=a
  if (a ne 0) then begin
  ;printf,13,'pulse_pattern ',l,' ',a
  endif
 endfor
readu,11,aa
sct.frequency.pulse_offset=aa
;printf,13,'pulse offset ',aa
readu,11,a
sct.frequency.ramp_steps=a
;printf,13,'ramp steps ',a
readu,11,a
sct.frequency.ramp_repeats=a
;printf,13,'ramp repeats ',a

for l=1,8192 do begin
readu,11,aa
sct.frequency.drive_table=aa
endfor

taa=ta
readu,11,taa
sct.frequency.user=taa
;printf,13,'user ',taa

;sct.receiver 
;;;;;;;;;;;;;;;;;;;;;
tbb=tb
readu,11,tbb
sct.rx.file_id=tbb 
;printf,13,'file id ',tbb

readu,11,a
sct.rx.rx_chan=a
;printf,13,'rx channel ',a

for l=1,16 do begin
readu,11,a
sct.rx.rx_map[l-1]=a
;printf,13,'rx map ',l,' ',a
endfor

readu,11,a
sct.rx.word_format=a
;printf,13,'word format ',a
readu,11,a
sct.rx.cic2_dec=a
;printf,13,'cic2 dec ',a
readu,11,a
sct.rx.cic2_interp=a
;printf,13,'cic2 interp ',a
readu,11,a
sct.rx.cic2_scale=a
;printf,13,'cic2 scale ',a
readu,11,a
sct.rx.cic5_dec=a
;printf,13,'cic5 dec ',a
readu,11,a
sct.rx.cic5_scale=a
;printf,13,'cic5 scale ',a

tcc=tc  
readu,11,tcc
sct.rx.rcf_type=tcc
;printf,13,'rcf type ',tcc

readu,11,a
sct.rx.rcf_dec=a
;printf,13,'rcf dec ',a
readu,11,a
sct.rx.rcf_taps=a
;printf,13,'rcf taps ',a

for l=1,160 do begin
readu,11,a
sct.rx.coefficients[l-1]=a
;printf,13,'receiver coefficients ',l,' ',a
endfor

readu,11,aa
sct.rx.analog_delay=aa
;printf,13,'analog delay ',aa

taa=ta
readu,11,taa
sct.rx.user=taa
;printf,13,'reciever user ',taa

;sct.exciter
;;;;;;;;;;;;;;;;;;;;;
tbb=tb
readu,11,tbb
sct.ex.file_id=tb
;printf,13,'file id ',tbb

readu,11,a
sct.ex.cic_scale=a
;printf,13,'exciter cic scale ',a
readu,11,a
sct.ex.cic2_dec=a
;printf,13,'cic2 dec ',a
readu,11,a
sct.ex.cic2_interp=a
;printf,13,'cic2 interp ',a
readu,11,a
sct.ex.cic5_interp=a
;printf,13,'cic5 interp ',a

tcc=tc
readu,11,tcc
sct.ex.rcf_type=tcc
;printf,13,'rcf type ',tcc

readu,11,a
sct.ex.rcf_taps=a
;printf,13,'tcf taps ',a
readu,11,a
sct.ex.rcf_taps_phase=a
;printf,13,'rcf taps phase ',a

for l=1,256 do begin
readu,11,a
sct.ex.coefficients[l-1]=a
if(a ne 0) then begin
;printf,13,'exciter coefficients ',l,' ',a
endif
endfor

readu,11,aa
sct.ex.analog_delay=aa
;printf,13,'analog delay ',aa

taa=ta
readu,11,taa
sct.ex.user=taa
;printf,13,'exciter user ',taa

;sct.monitor
;;;;;;;;;;;;;;;;;;;;;
for l=1,8 do begin
readu,11,a
sct.monitor.balun_currents[l-1]=a
;printf,13,'balun current ',l,' ',a
endfor
for l=1,8 do begin
readu,11,a
sct.monitor.balun_status[l-1]=a
;printf,13,'balun status ',l,' ',a
endfor
for l=1,8 do begin
readu,11,a
sct.monitor.front_end_status[l-1]=a
;printf,13,'front end status ',l,' ',a
endfor
for l=1,8 do begin
readu,11,a
sct.monitor.receiver_status[l-1]=a
;printf,13,'receiver status ',l,' ',a
endfor
readu,11,a
;printf,13,'exciter status 1 ',a
sct.monitor.exciter_status[0]=a
readu,11,a
;printf,13,'exciter status 2 ',a
sct.monitor.exciter_status[1]=a

tff=tf
readu,11,tff
sct.monitor.user=tff
;printf,13,'monitor user ',tff


;PULSE LOOP WILL BE HERE!
ngates=sct.timing.gate_count ;pct.proc_range_count
;print,'there are ',ngates,' rangegates '
nrx=sct.rx.rx_chan

npulses=sct.timing.pri_count

pcta=make_array(npulses,value=a)
pctb=make_array(npulses,value=b)
pcttb=make_array(npulses,value=tb)

;here is where we must decide to abbreviate I and Q
;for now, we will load full arrays to see how it goes
pulse_i=make_array(npulses,ngates,nrx,value=c) ;pulse,gate,rx
pulse_q=make_array(npulses,ngates,nrx,value=c) ;l      m   n

pct={record_id:pcta,pri_ut:pctb,pri_time_offset:pctb,base_id:pcta,pulse_id:pcta,ramp_id:pcta,repeat_id:pcta,loop_id:pcta,frequency:pcta,nco_tune_word:pcta,drive_attenuation:pcta,pa_flags:pcta,pa_forward_power:pcta,pa_reflected_power:pcta,pa_vswr:pcta,pa_temperature:pcta,proc_range_count:pcta,proc_noise_level:pcta,user:pcttb}

print,'there are ',npulses,' pulses'
for l=1,npulses do begin
on_ioerror,exit
;print,'pulse number ',l

;NOW READ PULSE CONFIGURATION TABLE
readu,11,a
printf,14,'record id ',a
pct.record_id[l-1]=a
readu,11,b
printf,14,'pri ut ',b
pct.pri_ut[l-1]=b
readu,11,b
printf,14,'pri time offset ',b
pct.pri_time_offset[l-1]=b
readu,11,a
printf,14,'base id ',a
pct.base_id[l-1]=a
readu,11,a
printf,14,'pulse id ',a
pct.pulse_id[l-1]=a
readu,11,a
printf,14,'ramp id ',a
pct.ramp_id[l-1]=a
readu,11,a
printf,14,'repeat id ',a
pct.repeat_id[l-1]=a
readu,11,a
printf,14,'loop id ',a
pct.loop_id[l-1]=a
readu,11,aa
printf,14,'frequency ',aa
pct.frequency[l-1]=aa
readu,11,a
printf,14,'tune word ',a
pct.nco_tune_word[l-1]=a
readu,11,aa
printf,14,'drive attenuation ',aa
pct.drive_attenuation[l-1]=aa
readu,11,a
printf,14,'pa flags ',a
pct.pa_flags[l-1]=a
readu,11,aa
printf,14,'pa forward power ',aa
pct.pa_forward_power[l-1]=aa
readu,11,aa
printf,14,'pa reflected power ',aa
pct.pa_reflected_power[l-1]=aa
readu,11,aa
printf,14,'pa vswr ',aa
pct.pa_vswr[l-1]=aa
readu,11,aa
printf,14,'pa temperature ',aa
pct.pa_temperature[l-1]=aa
readu,11,a
printf,14,'proc range count ',a
pct.proc_range_count[l-1]=a
readu,11,aa
printf,14,'proc noise level ',aa
pct.proc_noise_level[l-1]=aa
tbb=tb
readu,11,tbb
printf,14,'user ',tbb
pct.user[l-1]=tbb


;ngates=sct.timing.gate_count ;pct.proc_range_count
;print,'there are ',ngates,' rangegates '
;nrx=sct.rx.rx_chan

for m=1,ngates do begin ;3 do begin
;print,'pulse ',m

  for n=1,nrx do begin

;for m=1,512 do begin ;loop through each range
;gate in pct - NOT CORRECT IN PCT!  value is 512 not 0



readu,11,c
aaa=swap_endian(c)
pulse_i[l-1,m-1,n-1]=aaa
;print,'I ',n,' ',aaa
readu,11,c
aaa=swap_endian(c)
pulse_q[l-1,m-1,n-1]=aaa
;print,'Q ',n,' ',aaa


endfor
endfor

endfor ;end pulse

sct.header.partial_file_flag=0
exit: 
if (sct.header.max_pulse ne sct.timing.pri_count) then begin
sct.header.partial_file_flag=1
endif

sct.header.max_pulse=l-1
save,sct,pct,pulse_i,pulse_q,filename=head_sav_out
return
end