FUNCTION ffo_string, format, value
if strlen( format ) gt 0 then begin
return, string( FORMAT = '(' + format + ')', value )
endif
if size( value, /type ) eq 4 then begin
return, string( FORMAT = '(F13.6)', value )
endif
return, string( value )
end
PRO delete, var
var = 0B
end
FUNCTION reform_strc, astrc
istr=0
namest=tag_names(astrc)
ns_tags=n_tags(astrc)
for k=0, ns_tags-1 do begin
tagname=namest[k]
names=tag_names(astrc.(k))
ntags=n_tags(astrc.(k))
mc=where((names eq 'VAR_NOTES'),nc)
for j=0, ntags-1 do begin
if(names[j] eq 'DAT') then begin
asize=size(astrc.(k).dat)
if(asize[0] gt 0) then newdata=reform(astrc.(k).dat) else $
newdata=astrc.(k).dat
tempa=create_struct('DAT',newdata)
tempb=create_struct(tempb,tempa)
endif else begin
str_p=astrc.(k).(j)
if(j eq 0) then begin
tempb=create_struct(names[j],str_p)
endif else begin
tempa=create_struct(names[j],str_p)
tempb=create_struct(tempb,tempa)
endelse
endelse
endfor
if(mc[0] lt 0) then begin
tempa=create_struct('VAR_NOTES','')
tempb=create_struct(tempb,tempa)
endif
if(istr eq 0) then begin
temp2=create_struct(namest[k],tempb)
b=create_struct(temp2)
endif else begin
temp2=create_struct(namest[k],tempb)
b=create_struct(b,temp2)
endelse
istr=istr+1
endfor
delete, tempa
delete, tempb
delete, temp2
return, b
end
FUNCTION reform_mystruct, astrc
CATCH, err
IF err NE 0 THEN BEGIN
CATCH, /CANCEL
PRINT, !ERROR_STATE.MSG
RETURN,-1
ENDIF
istr=0
namest=tag_names(astrc)
ns_tags=n_tags(astrc)
for k=0, ns_tags-1 do begin
sz=size(astrc.(k).dat)
names=tag_names(astrc.(k))
ntags=n_tags(astrc.(k))
case sz[0] of
3: begin
tagname=namest[k]
newsz=sz(1)*sz(2)
newdata=reform(astrc.(k).dat,newsz,sz(3))
astrc.(k).var_notes='ListImage'
for j=0, ntags-1 do begin
if(names[j] eq 'DAT') then begin
tempa=create_struct('DAT',newdata)
tempb=create_struct(tempb,tempa)
endif else begin
str_p=astrc.(tagname).(j)
if(j eq 0) then begin
tempb=create_struct(names[j],str_p)
endif else begin
tempa=create_struct(names[j],str_p)
tempb=create_struct(tempb,tempa)
endelse
endelse
endfor
temp2=create_struct(namest[k],tempb)
b=create_struct(b,temp2)
end
4: begin
tagname=namest[k]
newsz=sz(1)*sz(2)*sz(3)
newdata=reform(astrc.(k).dat,newsz,sz(4))
astrc.(k).var_notes='ListImage3D'
for j=0, ntags-1 do begin
if(names[j] eq 'DAT') then begin
tempa=create_struct('DAT',newdata)
tempb=create_struct(tempb,tempa)
endif else begin
str_p=astrc.(tagname).(j)
if(j eq 0) then begin
tempb=create_struct(names[j],str_p)
endif else begin
tempa=create_struct(names[j],str_p)
tempb=create_struct(tempb,tempa)
endelse
endelse
endfor
temp2=create_struct(namest[k],tempb)
b=create_struct(b,temp2)
end
else: begin
if(istr eq 0) then begin
b=create_struct(namest[k],astrc.(k))
endif else begin
temp=create_struct(namest[k],astrc.(k))
b=create_struct(b,temp)
endelse
end
endcase
istr=istr+1
endfor
delete, tempa
delete, tempb
delete, temp
return, b
end
FUNCTION ord_mystruct, astrc, vorder, is
vlen=n_elements(vorder)
vmax=max(vorder)
istr=0
names=tag_names(astrc)
nnames=[names[0]]
order=0
for i=1,n_elements(names)-1 do begin
q=where(nnames eq names[i])
if q[0] eq -1 then begin
nnames=[nnames,names[i]]
q=where(names eq names[i])
order=[order,q[0]]
qq=where(tag_names(astrc.(i)) eq 'DELTA_PLUS_VAR')
qqq=where(tag_names(astrc.(i)) eq 'DELTA_MINUS_VAR')
if qq[0] ne -1 and qqq[0] ne -1 then begin
if astrc.(i).delta_plus_var ne '' then begin
q=where(names eq strupcase(astrc.(i).delta_plus_var))
qq=where(nnames eq strupcase(astrc.(i).delta_plus_var))
if (q[0] ne -1 and qq[0] eq -1) then begin
nnames=[nnames,strupcase(astrc.(i).delta_plus_var)]
order=[order,q[0]]
endif
endif
if astrc.(i).delta_minus_var ne '' and $
astrc.(i).delta_minus_var ne astrc.(i).delta_plus_var then begin
q=where(names eq strupcase(astrc.(i).delta_minus_var))
qq=where(nnames eq strupcase(astrc.(i).delta_minus_var))
if (q[0] ne -1 and qq[0] eq -1) then begin
nnames=[nnames,strupcase(astrc.(i).delta_minus_var)]
order=[order,q[0]]
endif
endif
endif
endif
endfor
vorder=vorder(order)
names=names(order)
for k=is, vmax do begin
for i=0, vlen-1 do begin
if(vorder[i] eq k) then begin
if(istr eq 0) then begin
bnew=create_struct(names[i],astrc.(i))
endif else begin
temp=create_struct(names[i],astrc.(order[i]))
bnew=create_struct(bnew,temp)
endelse
istr=istr+1
endif
endfor
endfor
delete, temp
return, bnew
end
FUNCTION dependn_search,a,i,d
catch, error_status
if(error_status ne 0) then begin
print, 'STATUS= Data cannot be listed.'
print, 'ERROR=Error number: ',error_status,' in listing (dependn_search).'
print, 'ERROR=Error Message: ', !ERR_STRING
close, 1
return, -1
endif
depn_values=''
tmp_stuff=''
dependn=''
case d of
1:begin
q=where(tag_names(a.(i)) eq 'DEPEND_1')
if (q[0] ne -1) then dependn=a.(i).depend_1
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_1 ne '') then dependn=a.(i).alt_cdaweb_depend_1
end
2:begin
q=where(tag_names(a.(i)) eq 'DEPEND_2')
if (q[0] ne -1) then dependn=a.(i).depend_2
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_2')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_2 ne '') then dependn=a.(i).alt_cdaweb_depend_2
end
3:begin
q=where(tag_names(a.(i)) eq 'DEPEND_3')
if (q[0] ne -1) then dependn=a.(i).depend_3
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_3')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_3 ne '') then dependn=a.(i).alt_cdaweb_depend_3
end
endcase
if (dependn[0] ne '') then tmp_stuff= a.(dependn).DAT
if (dependn[0] ne '') then dep_fill= a.(dependn).FILLVAL
if string(tmp_stuff[0]) ne '' then begin
size_tmp=size(tmp_stuff)
case size_tmp[0] of
1: begin
depn_values=strtrim(tmp_stuff,2)
end
2: begin
j=0L
test_ts1:
q=where(tmp_stuff[*,j] eq dep_fill)
if q[0] ne -1 then begin
j=j+1L
if j lt size_tmp(2)-1 then goto, test_ts1
endif
ts1=tmp_stuff[*,j]
if j lt size_tmp(2)-1 then j=j+1L
test_ts2:
q=where(tmp_stuff[*,j] eq dep_fill)
if ((q[0] ne -1) and (j lt size_tmp(2)-1)) then begin
j=j+1L
goto, test_ts2
endif
ts2=tmp_stuff[*,j]
tol=5
if (((ts1[0] le ts2[0]+tol) or (ts1[0] ge ts2[0]-tol)) or $
((ts1[1] le ts2[1]+tol) or (ts1[1] ge ts2[1]-tol))) then begin
tmp_stuff=tmp_stuff[*,0]
endif else tmp_stuff=tmp_stuff[*,0]
depn_values="~"+strtrim(tmp_stuff,2)
end
endcase
endif
return, depn_values
end
FUNCTION label_search,a,sz,i,k
catch, error_status
if(error_status ne 0) then begin
print, 'STATUS= Data cannot be listed.'
print, 'ERROR=Error number: ',error_status,' in listing (label_search).'
print, 'ERROR=Error Message: ', !ERR_STRING
close, 1
return, -1
endif
label=''
len=size(a.(i).dat)
lent=size(a.(0).dat)
length=lent(lent[0]+2)
if(sz le 1) then begin
if(length eq 1 and len[0] eq 1 and len(1) gt 1) then begin
if(a.(i).lablaxis ne '') then label=strupcase(a.(i).lablaxis) else $
lab=strupcase(a.(i).labl_ptr_1)
label=lab[k]
endif else begin
if(a.(i).lablaxis eq '') then label=strupcase(a.(i).fieldnam) else $
label=strupcase(a.(i).lablaxis)
endelse
endif
if(sz eq 2) then begin
if(a.(i).var_notes eq 'ListImage' or a.(i).var_notes eq 'ListImage3D') then begin
if(a.(i).lablaxis ne '') then label=a.(i).lablaxis else $
label=a.(i).fieldnam
endif
if(a.(i).var_notes ne 'ListImage') then begin
if (spdf_tagindex('LABLAXIS',tag_names(a.(i))) ne -1) then begin
lab=strupcase(a.(i).lablaxis)
endif
if (spdf_tagindex('LABL_PTR_1',tag_names(a.(i))) ne -1) then begin
if(a.(i).labl_ptr_1(0) ne '') then lab=strupcase(a.(i).labl_ptr_1)
endif
if(lab[0] ne '') then begin
if (n_elements(lab) gt 1) then label=lab[k] else label=lab[0]
endif else begin
depend1=strupcase(a.(i).depend_1)
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_1 ne '') then depend1=a.(i).alt_cdaweb_depend_1
temp_names=tag_names(a)
z=spdf_tagindex(depend1,temp_names)
if(z[0] ne -1) then begin
lab=a.(z[0]).labl_ptr_1
endif else begin
print, depend1, ' not found (ListImage section of spdf_list_mystruct).'
endelse
if(lab[0] eq '') then begin
lab=ffo_string(a.(z[0]).format, a.(z[0]).dat[k])
label=strtrim(lab(0),2)
endif else begin
label=strtrim(lab[k],2)
endelse
endelse
endif
endif
if(sz eq 4) then begin
if(a.(i).lablaxis ne '') then label=a.(i).lablaxis else $
label=a.(i).fieldnam
if (spdf_tagindex('LABLAXIS',tag_names(a.(i))) ne -1) then begin
lab=strupcase(a.(i).lablaxis)
endif
if (spdf_tagindex('LABL_PTR_1',tag_names(a.(i))) ne -1) then begin
if(a.(i).labl_ptr_1(0) ne '') then lab=strupcase(a.(i).labl_ptr_1)
endif
endif
label=strjoin(strsplit(label,/extract),'_')
return, label
end
FUNCTION unit_search,a,sz,i,k
catch, error_status
if(error_status ne 0) then begin
print, 'STATUS= Data cannot be listed.'
print, 'ERROR=Error number: ',error_status,' in listing (unit_search).'
print, 'ERROR=Error Message: ', !ERR_STRING
close, 1
return, -1
endif
units=''
len=size(a.(i).dat)
lent=size(a.(0).dat)
length=lent(lent[0]+2)
if(sz le 1) then begin
if(a.(i).units ne '') then units=a.(i).units else begin
z=spdf_tagindex('unit_ptr',tag_names(a.(i)))
if z[0] ne -1 then unts=a.(i).unit_ptr else unts=''
units=unts[k]
endelse
endif
if(sz eq 2) then begin
if(a.(i).var_notes eq 'ListImage' or a.(i).var_notes eq 'ListImage3D') then begin
if(a.(i).units ne '') then units=a.(i).units
endif
if(a.(i).var_notes ne 'ListImage' and a.(i).var_notes ne 'ListImage3D') then begin
if(a.(i).units ne '') then begin
unts=a.(i).units
endif else begin
z=spdf_tagindex('unit_ptr',tag_names(a.(i)))
if z[0] ne -1 then unts=a.(i).unit_ptr else unts=''
endelse
if (n_elements(unts) gt 1) then units=unts[k] else units=unts[0]
endif
endif
if(sz eq 4) then begin
if(a.(i).units ne '') then begin
unts=a.(i).units
endif else begin
z=spdf_tagindex('unit_ptr',tag_names(a.(i)))
if z[0] ne -1 then unts=a.(i).unit_ptr else unts=''
endelse
units=unts
endif
if strcmp('dd-mm-yyyy',units,10,/fold_case) eq 0 then $
units=strjoin(strsplit(units,/extract),'_')
return, units
end
FUNCTION list_header, a, unit, ntags
catch, error_status
if(error_status ne 0) then begin
print, 'STATUS= Data cannot be listed.'
print, 'ERROR=Error number: ',error_status,' in listing (list_header).'
print, 'ERROR=Error Message: ', !ERR_STRING
close, 1
return, -1
endif
status=0
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x,"**** RECORD VARYING VARIABLES ****")'
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x)'
ii=0
for i=0L, ntags-5 do begin
if (a.(i).var_type eq 'data') or ((a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY')) then begin
ii=ii+1
if(n_elements(a.(i).catdesc) eq 0) then begin
printf,unit, format='("# ",i2,". ",a)', ii, a.(i).fieldnam
endif else begin
if(strlen(a.(i).catdesc) eq 0) then begin
printf,unit, format='("# ",i2,". ",a)', ii, a.(i).fieldnam
endif else begin
printf,unit, format='("# ",i2,". ",a)', ii, a.(i).catdesc
endelse
endelse
if ((a.(i).var_notes ne '') and (a.(i).var_notes ne ' ')) then printf,unit, format='("# NOTES: ",a)', a.(i).var_notes
endif
if(a.(i).var_notes eq 'ListImage' or a.(i).var_notes eq 'ListImage3D') and $
((a.(i).var_type eq 'data') or ((a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY'))) then begin
depend1=a.(i).depend_1
depend2=a.(i).depend_2
if (a.(i).var_notes eq 'ListImage3D') then depend3=a.(i).depend_3
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_1 ne '') then depend1=a.(i).alt_cdaweb_depend_1
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_2')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_2 ne '') then depend2=a.(i).alt_cdaweb_depend_2
if (a.(i).var_notes eq 'ListImage3D') then begin
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_3')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_3 ne '') then depend3=a.(i).alt_cdaweb_depend_3
endif
temp_names=tag_names(a)
z=spdf_tagindex(depend1,temp_names)
if(z[0] ne -1) then dep1=a.(z[0]).dat else dep1=""
if(z[0] ne -1) then frm1=a.(z[0]).format else frm1=""
zz=spdf_tagindex(depend2,temp_names)
if(zz[0] ne -1) then dep2=a.(zz[0]).dat else dep2=""
if(zz[0] ne -1) then frm2=a.(zz[0]).format else frm2=""
if (a.(i).var_notes eq 'ListImage3D') then begin
zz=spdf_tagindex(depend3,temp_names)
if(zz[0] ne -1) then dep3=a.(zz[0]).dat else dep3=""
if(zz[0] ne -1) then frm3=a.(zz[0]).format else frm3=""
endif
len1=string(strlen(dep1[0])+1)
len2=string(strlen(dep2[0])+1)
sz1=size(dep1)
sz2=size(dep2)
ln1=strtrim(sz1(sz1[0]+2),2)
ln2=strtrim(sz2(sz2[0]+2),2)
if (a.(i).var_notes eq 'ListImage3D') then begin
len3=string(strlen(dep3[0])+1)
sz3=size(dep3)
ln3=strtrim(sz3(sz3[0]+2),2)
endif
frm1=ln1+'a'+len1
frm2=ln2+'a'+len2
if (a.(i).var_notes eq 'ListImage3D') then frm3=ln3+'a'+len3
form1='("# depend_1 is ",a,": [",'+frm1+',"]")'
form2='("# depend_2 is ",a,": [",'+frm2+',"]")'
if (a.(i).var_notes eq 'ListImage3D') then form3='("# depend_3 is ",a,": [",'+frm3+',"]")'
printf, unit, format=form1, depend1,dep1
printf, unit, format=form2, depend2,dep2
if (a.(i).var_notes eq 'ListImage3D') then printf, unit, format=form3, depend3,dep3
if (a.(i).var_notes eq 'ListImage3D') then begin
printf, unit, format='("# Order of values for this variable in each row: values at each depend_1 for the 1st depend_2, for the 1st depend_3; values at each depend_1 for the 1st depend_2, for the 2nd depend_3, ..., values at each depend_1 for the each depend_2, for the last depend_3")'
endif else begin
printf, unit, format='("# Order of values for this variable in each row: values at each depend_1 for the 1st depend_2, values at each depend_1 for the 2nd depend_2, ..., values at each depend_1 for the last depend_2")'
endelse
printf,unit,format='("#",14x)'
endif
endfor
printf,unit,format='("#",14x)'
return, status
end
FUNCTION ex_prt, unit, var, var2, slen, k
catch, error_status
if(error_status ne 0) then begin
print, 'STATUS = Data cannot be listed.'
print, 'ERROR=Error number: ',error_status,' in listing (ex_prt).'
print, 'ERROR=Error Message: ', !ERR_STRING
close, 1
return, -1
endif
status=0
icnt=0
output=' '
for i=0L, slen-1 do begin
ch=strmid(var2,i,1)
if(icnt lt 75) then begin
strput,output,ch,icnt
endif else begin
if(ch eq ' ') then begin
if(k eq 0) then begin
printf, unit, format='("#",5x,a,2x,a)', var, output
endif else begin
printf, unit, format='("#",37x,a)', output
endelse
icnt=0
output=' '
endif else strput,output,ch,icnt
endelse
icnt=icnt+1
endfor
if(icnt gt 1) then printf, unit, format='("#",37x,a)', output
return, status
end
FUNCTION wrt_hybd_strct, a, unit, convar, maxrecs, depend0, mega_num
catch, error_status
if(error_status ne 0) then begin
if(error_status eq -96) then $
print, 'STATUS= This amount of data cannot be listed, please request a shorter time range'
if(error_status eq -133) then $
print, 'STATUS= Incompatible variable types. Select variables separately'
if(error_status eq -124) then $
print, 'STATUS= Temporary memory error. Please try again.'
if(error_status eq -350) then $
print, 'STATUS= Please select fewer variables.' $
else print, 'STATUS= Data cannot be listed'
print, 'ERROR=Error number: ',error_status,' in listing (wrt_hybd_strct).'
print, 'ERROR=Error Message: ', !ERR_STRING
return, -1
endif
status=0
names=strupcase(tag_names(a))
ntags=n_tags(a)
blnk='# '
case convar of
0 : begin
if(n_elements(num_data) eq 0) then num_data=0
num_data=num_data+ntags
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
text2='# WARNING: Maxrecs exceeded in Global Attributes; No. Recs. = '
printf, unit,text,maxrecs
printf, unit, format='(a,i)',text1,dif_rec
printf, unit, format='(a)',blnk
status=1
endif
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x,"***** GLOBAL ATTRIBUTES ******")'
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x)'
for i=0L, ntags-1 do begin
var=' '
var1=strtrim(names[i],2)
strput,var,var1,0
tstsz=size(a.(i))
if(tstsz[0] eq 0) then begin
var2=strtrim(a.(i),2)
var2=strjoin(strsplit(var2,string(10B),/extract),' ')
slen=strlen(var2)
if(slen gt 80) then begin
status=ex_prt(unit,var,var2,slen,0)
endif else begin
printf, unit, format='("#",5x,a,2x,a)', var, var2
endelse
endif else begin
for k=0L, tstsz(1)-1 do begin
var2=strtrim(a.(i)[k])
slen=strlen(var2)
if(slen gt 80) then begin
status=ex_prt(unit,var,var2,slen,k)
endif else begin
if(k eq 0) then begin
printf, unit, format='("#",5x,a,2x,a)', var, var2
endif else begin
printf, unit, format='("#",37x,a)', var2
endelse
endelse
endfor
endelse
endfor
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
text2='# WARNING: Maxrecs exceeded in Global Attributes; No. Recs. = '
printf, unit, format='(a)',blnk
printf, unit, text,maxrecs
printf, unit, format='(a,i)',text1,dif_rec
status=1
endif
printf, unit, format='("#",14x)'
if mega_num gt 1 then printf, unit,'# **************************************************************************************'
if mega_num gt 1 then printf, unit,'# ********* There is more than one Epoch for the variables selected **************'
if mega_num gt 1 then printf, unit,'# ********* Please scroll down **************'
if mega_num gt 1 then printf, unit,'# **************************************************************************************'
if mega_num gt 1 then printf, unit, format='("#",14x)'
end
1 : begin
if(n_elements(num_data) eq 0) then num_data=0
len=size(a.(0).dat)
length=len(len[0]+2)
num_data=length
num_data=num_data+4
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
printf, unit, format='(a)',blnk
status=1
length=maxrecs
endif
status=list_header(a,unit,ntags)
labels=''
units=''
inc=0
for i=0L, ntags-5 do begin
if (a.(i).var_type eq 'data') or ((a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY')) then begin
nvar=a.(i).fillval
labels=[labels,label_search(a,1,i,0)]
units=[units,unit_search(a,1,i,0)]
if(names[i] eq depend0) then begin
temp=create_struct(names[i],a.(i).dateph[0])
endif else begin
if(nvar eq 0) then begin
temp=create_struct(names[i],a.(i).dat[0])
endif else begin
temp=create_struct(names[i],a.(i).dat[0:nvar])
endelse
endelse
if(inc eq 0) then begin
b=temp
endif else begin
b=create_struct(b,temp)
endelse
inc=inc+1
endif
endfor
labels=labels[1:*]
units=units[1:*]
delete, temp
printf,unit,format=a.lform,labels
printf,unit,format=a.uform,units
for j=0L, length-1 do begin
inc=0
for i=0L,ntags-5 do begin
if (a.(i).var_type eq 'data') or ((a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY')) then begin
nvar=a.(i).fillval[0]
if(names[i] eq depend0) then begin
b.(inc)=a.(i).dateph[j]
inc=inc+1
endif else begin
if(nvar eq 0) then begin
b.(inc)=a.(i).dat[j]
endif else begin
b.(inc)=a.(i).dat[0:nvar]
endelse
inc=inc+1
endelse
endif
endfor
printf,unit,format=a.dform,b
endfor
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='The maximum number of records allowed to be listed is '
text1='Your request has exceeded this maximum by '
printf, unit, format='(a)',blnk
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
status=1
endif
delete, b
end
2 : begin
if(n_elements(num_data) eq 0) then num_data=0
num_data=num_data+4
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='The maximum number of records allowed to be listed is '
text1='Your request has exceeded this maximum by '
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
printf, unit, format='(a)',blnk
status=1
length=maxrecs
endif
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x,"** NON-RECORD VARYING VARIABLES **")'
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x)'
end
3 : begin
idlsizes = lonarr(ntags-4,10)
for i = 0, ntags-5 do begin
t_size = size(a.(i).dat)
for j = 0, n_elements(t_size)-1 do begin
idlsizes[i,j] = t_size[j]
endfor
endfor
if(n_elements(num_data) eq 0) then num_data=0
len=idlsizes[0,*]
length=len(len[0]+2)
num_data=length
num_data=num_data+4
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
printf, unit, format='(a)',blnk
status=1
length=maxrecs
endif
status=list_header(a,unit,ntags)
num=a.(0).fillval
labels=strarr(num)
units=strarr(num)
dep1_values=''
atags=tag_names(a)
inc=0L
for i=0L, ntags-5 do begin
if (a.(i).var_type eq 'data') or ((a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY')) then begin
st_sz=idlsizes[i,*]
if(st_sz[0] le 1) then begin
if(st_sz[0] eq 1 and st_sz[1] gt 1 and length eq 1) then begin
num_var=st_sz[1]
for k=0L, num_var-1 do begin
labels(inc)=label_search(a,st_sz[0],i,k)
units(inc)=unit_search(a,st_sz[0],i,k)
unique = strtrim(string(inc), 2)
temp=create_struct(atags(i)+unique,a.(i).dat[k,0])
if(inc eq 0) then begin
b=temp
endif else begin
b=create_struct(b,temp)
endelse
inc=inc+1
endfor
endif else begin
labels(inc)=label_search(a,st_sz[0],i,0)
units(inc)=unit_search(a,st_sz[0],i,0)
if(names(i) eq depend0) then begin
temp=create_struct(names(i),a.(i).dateph[0])
endif else begin
temp=create_struct(names(i),a.(i).dat[0])
endelse
if(inc eq 0) then begin
b=temp
endif else begin
b=create_struct(b,temp)
endelse
inc=inc+1
endelse
endif
if(st_sz[0] eq 2) then begin
num_var=st_sz[1]
for k=0L, num_var-1 do begin
labels(inc)=label_search(a,st_sz[0],i,k)
units(inc)=unit_search(a,st_sz[0],i,k)
unique = strtrim(string(inc), 2)
temp=create_struct(atags(i)+unique,a.(i).dat[k,0])
if(inc eq 0) then begin
b=temp
endif else begin
b=create_struct(b,temp)
endelse
inc=inc+1
endfor
endif
dep1=dependn_search(a,i,1)
if (dep1[0] ne '') then begin
depend1=a.(i).depend_1
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_1 ne '') then depend1=a.(i).alt_cdaweb_depend_1
dep1_units=a.(strtrim(depend1,2)).units
dep1=['(@_'+dep1+'_'+dep1_units+')']
endif
dep1_values=[dep1_values,dep1]
endif
endfor
delete, temp
printf,unit,format=a.lform,labels
dep1_values=dep1_values[1:*]
q=where (dep1_values ne '')
if q[0] ne -1 then printf,unit,format=a.dpform,dep1_values
printf,unit,format=a.uform,units
i_ntags = ntags-5
for j=0L, length-1 do begin
inc=0L
for i=0L,i_ntags do begin
if ((a.(i).var_type eq 'data') or (a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY')) then begin
if(names(i) eq depend0) then begin
b.(inc)=a.(i).dateph[j]
inc=inc+1
endif else begin
st_sz = idlsizes[i,*]
if(st_sz[0] le 1) then begin
if(st_sz[0] eq 1 and st_sz[1] gt 1 and length eq 1) then begin
num_var=st_sz[1]
for k=0L,num_var-1 do begin
b.(inc)=a.(i).dat[k,j]
inc=inc+1
endfor
endif else begin
b.(inc)=a.(i).dat[j]
inc=inc+1
endelse
endif
if(st_sz[0] eq 2) then begin
num_var=st_sz[1]
for k=0L,num_var-1 do begin
b.(inc)=a.(i).dat[k,j]
inc=inc+1
endfor
endif
endelse
endif
endfor
printf,unit,format=a.dform,b
endfor
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
printf, unit, format='(a)',blnk
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
status=1
length=maxrecs
endif
delete, b
end
4 : begin
if(n_elements(num_data) eq 0) then num_data=0
len=size(a.(0).dat)
length=len(len[0]+2)
num_data=length
num_data=num_data+4
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
printf, unit, format='(a)',blnk
status=1
length=maxrecs
endif
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x,"**** RECORD VARYING VARIABLES ****")'
printf, unit, format='("#",14x,"************************************")'
printf, unit, format='("#",14x)'
printf,unit, format='("# 1. ",a)', a.epoch.fieldnam
printf,unit, format='("# 2. ",a)', a.index.catdesc
printf,unit, format='("# 3. ",a)', a.qflag.catdesc
printf,unit, format='("# 4. ",a)', a.position.fieldnam
printf,unit, format='("# 5. ",a)', a.vel.fieldnam
printf,unit,format='("#",14x)'
num=7
labels=strarr(num)
units=strarr(num)
inc=0
eplabel=' '
strput,eplabel,a.epoch.fieldnam,0
labels(inc)=eplabel
units(inc)=a.epoch.units
temp=create_struct('EPOCH',a.epoch.dateph[0])
b=temp
inc=inc+1
labels(inc)="Index"
units(inc)=''
inc=inc+1
labels(inc)=a.qflag.lablaxis
units(inc)=a.qflag.units
inc=inc+1
for k=0, 1 do begin
if(k eq 0) then labels(inc)=" geo latitude"
if(k eq 1) then labels(inc)="geo longitude"
units(inc)=a.position.units
inc=inc+1
endfor
for k=0, 1 do begin
if(k eq 0) then labels(inc)=" geo east vel"
if(k eq 1) then labels(inc)="geo north vel"
units(inc)=a.vel.units
inc=inc+1
endfor
farr=fltarr(180)
in=0
for l=0,29 do begin
farr(in)=a.index.dat[0]
in=in+1
farr(in)=a.qflag.dat[l,0]
in=in+1
for k=0, 1 do begin
farr(in)= a.position.dat[k,l,0]
in=in+1
endfor
for k=0, 1 do begin
farr(in)= a.vel.dat[k,l,0]
in=in+1
endfor
endfor
temp=create_struct('DATREC',farr)
b=create_struct(b,temp)
delete, temp
printf,unit,format=a.lform,labels
printf,unit,format=a.uform,units
for j=0L, length-1 do begin
m=0
b.epoch=a.epoch.dateph[j]
for l=0,29 do begin
b.datrec(m)=a.index.dat[l]
m=m+1
b.datrec(m)=a.qflag.dat[l,j]
m=m+1
for k=0,1 do begin
b.datrec(m)=a.position.dat[k,l,j]
m=m+1
endfor
for k=0,1 do begin
b.datrec(m)=a.vel.dat[k,l,j]
m=m+1
endfor
endfor
printf,unit,format=a.dform,b
endfor
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
printf, unit, format='(a)',blnk
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
status=1
length=maxrecs
endif
delete, b
end
5: begin
if(n_elements(num_data) eq 0) then num_data=0
len=size(a.(0).dat)
length=len(len[0]+2)
num_data=length
num_data=num_data+4
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
printf, unit, text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
printf, unit, format='(a)',blnk
status=1
length=maxrecs
endif
status=list_header(a,unit,ntags)
num=a.(0).fillval
final_labels=''
final_units=''
final_dep1_values=''
final_dep2_values=''
final_dep3_values=''
atags=tag_names(a)
inc=0L
for i=0L, ntags-5 do begin
if(a.(i).var_type eq 'data') or ((a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY')) then begin
labels=''
units=''
dep1_values=''
dep2_values=''
dep3_values=''
st_sz=size(a.(i).dat)
if(st_sz[0] le 1) then begin
labels=[labels,label_search(a,st_sz[0],i,0)]
units=[units,unit_search(a,st_sz[0],i,0)]
if(names(i) eq depend0) then begin
temp=create_struct(names(i),a.(i).dateph[0])
endif else begin
temp=create_struct(names(i),a.(i).dat[0])
endelse
if(inc eq 0) then begin
b=temp
endif else begin
b=create_struct(b,temp)
endelse
inc=inc+1L
endif
if(st_sz[0] eq 2) then begin
num_var=st_sz[1]
for k=0L, num_var-1 do begin
labels=[labels,label_search(a,st_sz[0],i,k)]
units=[units,unit_search(a,st_sz[0],i,k)]
unique = strtrim(string(inc), 2)
temp=create_struct(atags(i)+unique,a.(i).dat[k,0])
b=create_struct(b,temp)
inc=inc+1
endfor
endif
delete, temp
labels=labels[1:*]
final_labels=[final_labels,labels]
units=units[1:*]
final_units=[final_units,units]
dep1=dependn_search(a,i,1)
if (dep1[0] ne '') then begin
depend1=a.(i).depend_1
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_1 ne '') then depend1=a.(i).alt_cdaweb_depend_1
dep1_units=a.(strtrim(depend1,2)).units
dep1=['(@_'+dep1+'_'+dep1_units+')']
endif
dep1_values=[dep1_values,dep1]
dep2=dependn_search(a,i,2)
if (dep2[0] ne '') then begin
depend2=a.(i).depend_2
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_2')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_2 ne '') then depend2=a.(i).alt_cdaweb_depend_2
dep2_units=a.(strtrim(depend2,2)).units
dep2=['(@_'+dep2+'_'+dep2_units+')']
endif
dep2_values=[dep2_values,dep2]
dep3=dependn_search(a,i,3)
if (dep3[0] ne '') then begin
depend3=a.(i).depend_3
q=where(tag_names(a.(i)) eq 'ALT_CDAWEB_DEPEND_3')
if (q[0] ne -1) then if (a.(i).alt_cdaweb_depend_3 ne '') then depend3=a.(i).alt_cdaweb_depend_3
dep3_units=a.(strtrim(depend3,2)).units
dep3=['(@_'+dep3+'_'+dep3_units+')']
endif
dep3_values=[dep3_values,dep3]
if (n_elements(dep1_values) gt 1) then begin
tmp_dep1_values=dep1_values[1:*]
while n_elements(dep1_values)-1 le n_elements(labels)-n_elements(tmp_dep1_values) do begin
dep1_values=[dep1_values,tmp_dep1_values]
endwhile
dep1_values=dep1_values[1:*]
final_dep1_values=[final_dep1_values,dep1_values]
endif
if (n_elements(dep2_values) gt 1) then begin
tmp_dep2_values=dep2_values[1:*]
if n_elements(tmp_dep2_values) eq n_elements(labels) then begin
endif else begin
k=0
dep2_values=''
while n_elements(dep2_values)-1 le n_elements(labels)-n_elements(tmp_dep1_values) do begin
for kk=0L,n_elements(tmp_dep1_values)-1 do begin
dep2_values=[dep2_values,tmp_dep2_values[k]]
endfor
k=k+1
if k ge n_elements(tmp_dep2_values) then k=0
endwhile
endelse
if n_elements(dep2_values) gt 1 then dep2_values=dep2_values[1:*]
final_dep2_values=[final_dep2_values,dep2_values]
endif
if (n_elements(dep3_values) gt 1) then begin
tmp_dep3_values=dep3_values[1:*]
if n_elements(tmp_dep3_values) eq n_elements(labels) then begin
endif else begin
k=0
dep3_values=''
while n_elements(dep3_values)-1 le (n_elements(labels)-(n_elements(tmp_dep2_values)*n_elements(tmp_dep1_values))) do begin
for kk=0L,(n_elements(tmp_dep2_values)*n_elements(tmp_dep1_values))-1 do begin
dep3_values=[dep3_values,tmp_dep3_values[k]]
endfor
k=k+1
if k ge n_elements(tmp_dep3_values) then k=0
endwhile
endelse
if n_elements(dep3_values) gt 1 then dep3_values=dep3_values[1:*]
final_dep3_values=[final_dep3_values,dep3_values]
endif
endif
endfor
final_labels=final_labels[1:*]
printf,unit,format=a.lform,final_labels
final_units=final_units[1:*]
if n_elements(final_dep1_values) gt 1 then begin
final_dep1_values=final_dep1_values[1:*]
diff=n_elements(final_labels)-n_elements(final_dep1_values)
for k=1L,diff do begin
formt = "('" + strtrim(strlen(final_labels[k])+1,2)+"'x,a)"
space=string("",format=formt)
final_dep1_values=[space,final_dep1_values]
endfor
q=where (final_dep1_values ne '')
if q[0] ne -1 then printf,unit,format=a.dpform,final_dep1_values
endif
if n_elements(final_dep2_values) gt 1 then begin
final_dep2_values=final_dep2_values[1:*]
diff=n_elements(final_labels)-n_elements(final_dep2_values)
for k=1L,diff do begin
formt = "('" + strtrim(strlen(final_labels[k])+1,2)+"'x,a)"
space=string("",format=formt)
final_dep2_values=[space,final_dep2_values]
endfor
q=where (final_dep2_values ne '')
if q[0] ne -1 then printf,unit,format=a.dpform,final_dep2_values
endif
if n_elements(final_dep3_values) gt 1 then begin
final_dep3_values=final_dep3_values[1:*]
diff=n_elements(final_labels)-n_elements(final_dep3_values)
for k=1L,diff do begin
formt = "('" + strtrim(strlen(final_labels[k])+1,2)+"'x,a)"
space=string("",format=formt)
final_dep3_values=[space,final_dep3_values]
endfor
q=where (final_dep3_values ne '')
if q[0] ne -1 then printf,unit,format=a.dpform,final_dep3_values
endif
printf,unit,format=a.uform,final_units
for j=0L, length-1 do begin
inc=0L
for i=0L,ntags-5 do begin
if (a.(i).var_type eq 'data') or ((a.(i).var_type eq 'support_data') and (a.(i).cdfrecvary ne 'NOVARY')) then begin
if(names(i) eq depend0) then begin
b.(inc)=a.(i).dateph[j]
inc=inc+1L
endif else begin
st_sz=size(a.(i).dat)
if(st_sz[0] eq 1) then begin
b.(inc)=a.(i).dat[j]
inc=inc+1L
endif
if(st_sz[0] eq 2) then begin
num_var=st_sz[1]
for k=0L,num_var-1 do begin
b.(inc)=a.(i).dat[k,j]
inc=inc+1L
endfor
endif
endelse
endif
endfor
printf,unit,format=a.dform,b
endfor
if(num_data gt maxrecs) then begin
dif_rec=num_data-maxrecs
text='# The maximum number of records allowed to be listed is '
text1='# Your request has exceeded this maximum by '
printf, unit, format='(a)',blnk
printf, unit,text,maxrecs
printf, unit, format='(a,i6)',text1,dif_rec
status=1
length=maxrecs
endif
delete, b
end
else : begin
print, 'STATUS= A listing of these data cannot be generated. '
print, "ERROR=Error: Invalid control variable; convar= ",convar
close,1
return, -1
end
endcase
return, status
end
FUNCTION form_bld, col_sz, label, units, dat_len, dep_col_sz, depend1_labels, $
dep2_col_sz, depend2_labels, dep3_col_sz, depend3_labels,form, shft
maxlength=max(strlen(depend1_labels)) > max(strlen(depend2_labels)) > max(strlen(depend3_labels)) > strlen(label)
mintab=fix(dep_col_sz-max(strlen(depend1_labels))) < fix(dep2_col_sz-max(strlen(depend2_labels))) < fix(dep3_col_sz-max(strlen(depend3_labels)))<fix(col_sz-strlen(label))
ltab=strtrim(mintab,2)
lfld=strtrim(maxlength,2)
if(shft eq 0) then begin
if(ltab ne '0') then depv='A'+lfld+','+ltab+'X,1X,' else depv='A'+lfld+',1X,'
endif else begin
if(ltab ne '0') then depv=ltab+'X,A'+lfld+',1X,' else depv='A'+lfld+',1X,'
endelse
if(shft eq 0) then begin
if(ltab ne '0') then labv='A'+lfld+','+ltab+'X,1X,' else labv='A'+lfld+',1X,'
endif else begin
if(ltab ne '0') then labv=ltab+'X,A'+lfld+',1X,' else labv='A'+lfld+',1X,'
endelse
col_sz=maxlength > col_sz
utab=strtrim(fix(col_sz-strlen(units)),2)
ufld=strtrim(strlen(units),2)
if(shft eq 0) then begin
if(utab ne '0') then untv='A'+ufld+','+utab+'X,1X,' else untv='A'+ufld+',1X,'
endif else begin
if(utab ne '0') then untv=utab+'X,A'+ufld+',1X,' else untv='A'+ufld+',1X,'
endelse
dtab=strtrim(fix(col_sz-dat_len),2)
if(dtab ne '0') then datv=dtab+'X,'+form+',1X,' $
else datv=form+',1X,'
sform=create_struct('labv',labv,'untv',untv,'datv',datv,'depv',depv)
return, sform
end
FUNCTION data_len,format,fillval
status=0
if(strlen(format) eq 0) then format='G13.6'
itrip=0
nc=0
new_form=' '
nvar=''
ivar=0
for i=0L, strlen(format)-1 do begin
ch=strupcase(strmid(format,i,1))
if(ch ne '(') and (ch ne 'A') and (ch ne 'F') and (ch ne 'P') and $
(ch ne 'I') and (ch ne 'Z') and (ch ne 'G') and (ch ne 'E') then begin
if(ivar eq 0) then nvar=nvar+ch
endif
if(ch eq 'A') or (ch eq 'F') or (ch eq 'I') or (ch eq 'Z') or (ch eq 'G') $
or (ch eq 'E') then begin
form=ch
itrip=1
ivar=1
endif
if(ch eq 'P') then ch=''
if(ch eq ',') or (ch eq ')') then itrip=0
if(itrip eq 1) then begin
strput,new_form,ch,nc
nc=nc+1
endif
endfor
format=strtrim(new_form,2)
formlen=strlen(format)-1
case form of
'null' : begin
status=-1
return, status
end
'F' : begin
dat_len = 13.6 > strmid(format,1,formlen)
dat_len = strmid(dat_len,6,formlen > 4)
end
'E' : begin
dat_len = 13.6 > strmid(format,1,formlen)
dat_len = strmid(dat_len,6,formlen > 4)
end
'G' : begin
dat_len = 13.6 > strmid(format,1,formlen)
dat_len = strmid(dat_len,6,formlen > 4)
end
'I' : begin
if(n_elements(fillval) eq 0) then dat_len=strmid(format,1,formlen) else $
dat_len=strlen(strtrim(string(fix(fillval)),2)) > strmid(format,1,3)
end
'A' : begin
if(n_elements(fillval) eq 0) then dat_len=strmid(format,1,formlen) $
else begin
if size(fillval,/tname) eq 'DCOMPLEX' then $
dat_len=strlen(strtrim(real_part(fillval),2)) > strmid(format,1,3) else $
dat_len=strlen(strtrim(fillval,2)) > strmid(format,1,3)
endelse
end
else : begin
dat_len=0
end
endcase
if(form eq 'F') or (form eq 'E') then form='G'
if(nvar ne '') then begin
format=nvar+form+strtrim(dat_len,2)
dat_len=fix(nvar)*fix(dat_len)
nvar=fix(nvar)-1
endif else begin
format=form+strtrim(dat_len,2)
dat_len=fix(dat_len)
nvar=0
endelse
frm_st=create_struct('status',status, 'form',format, 'dat_len',dat_len, $
'nvar',nvar)
return, frm_st
end
function ep_conv, b, depd0, HANDLE=handle, sec_of_year=sec_of_year
catch, error_status
if(error_status ne 0) then begin
if(error_status eq -78) then $
print, 'STATUS=Available memory exceeded. Re-select time interval.'
print, 'ERROR=Error number: ',error_status,' in listing (ep_conv).'
print, 'ERROR=Error Message: ', !ERR_STRING
stop
endif
tagnames=tag_names(b)
v1=spdf_tagindex(depd0,tagnames)
if(n_elements(handle) eq 0) then handle=0
if(handle eq 0) then begin
dat=b.(v1[0]).dat
datsz=size(dat)
if(datsz[0] gt 0) then dat=reform(dat)
endif else begin
tmp=b.(v1[0]).HANDLE
handle_value, tmp, dat
datsz=size(dat)
if(datsz[0] gt 0) then dat=reform(dat)
endelse
len=size(dat)
epoch_type = size(dat,/type)
case epoch_type of
9: begin
ep16=1
if keyword_set(sec_of_year) then b.(v1[0]).units="Year____Secs-of-year" else $
b.(v1[0]).units="dd-mm-yyyy hh:mm:ss.mil.mic.nan.pic"
end
14: begin
ep16=0
if keyword_set(sec_of_year) then b.(v1[0]).units="Year____Secs-of-year" else $
b.(v1[0]).units="dd-mm-yyyy hh:mm:ss.mil.mic"
end
else: begin
ep16=0
if keyword_set(sec_of_year) then b.(v1[0]).units="Year____Secs-of-year" else $
b.(v1[0]).units="dd-mm-yyyy hh:mm:ss.ms"
end
endcase
length=long(len(len(0)+2))
dat_eph=strarr(length)
for k=0L, length-1 do begin
if keyword_set(sec_of_year) then begin
CDF_EPOCH,dat[k], yr, mo, dy, hr, mn, sc, milli, micro, /break
yr=long(yr) & mo=long(mo) & dy=long(dy) & hr=long(hr) & mn=long(mn)
sc=long(sc) & hr=long(hr)
ical,yr,doy,mo,dy,/idoy
doy=float(doy-1)
yrsec=double(sc)+double(mn)*60.+double(hr)*3600.+double(doy)*24.*3600.
yrsec=yrsec+double(milli)/1000.+double(micro)/10^6.
endif else begin
if (ep16) then begin
CDF_EPOCH16,dat[k], yr, mo, dy, hr, mn, sc, milli, micro, nano, pico, /break
endif else begin
if (size(dat[k],/type) eq 14) then begin
CDF_EPOCH,dat[k], yr, mo, dy, hr, mn, sc, milli, micro, /break,/tointeger
endif else begin
CDF_EPOCH,dat[k], yr, mo, dy, hr, mn, sc, milli, /break
endelse
endelse
endelse
if(dy lt 10) then dy= '0'+strtrim(dy,2) else dy=strtrim(dy,2)
if(mo lt 10) then mo= '0'+strtrim(mo,2) else mo=strtrim(mo,2)
if(hr lt 10) then hr= '0'+strtrim(hr,2) else hr=strtrim(hr,2)
if(mn lt 10) then mn= '0'+strtrim(mn,2) else mn=strtrim(mn,2)
if(sc lt 10) then sc= '0'+strtrim(sc,2) else sc=strtrim(sc,2)
milli=strmid(strtrim(float(milli)/1000.,2),2,3)
yr=strtrim(yr,2)
if keyword_set(sec_of_year) then begin
yrsec_str=string(yrsec,format='(f15.6)')
dat_eph[k]=yr+' '+yrsec_str
endif else begin
if (ep16) then begin
micro=strmid(strtrim(float(micro)/1000.,2),2,3)
nano=strmid(strtrim(float(nano)/1000.,2),2,3)
pico=strmid(strtrim(float(pico)/1000.,2),2,3)
dat_eph[k]=dy+'-'+mo+'-'+yr+' '+hr+':'+mn+':'+sc+'.'+milli+'.'+micro+'.'+nano+'.'+pico
endif else begin
if (size(dat[k],/type) eq 14) then begin
micro=strmid(strtrim(float(micro)/1000.,2),2,3)
dat_eph[k]=dy+'-'+mo+'-'+yr+' '+hr+':'+mn+':'+sc+'.'+milli +'.'+micro
endif else begin
dat_eph[k]=dy+'-'+mo+'-'+yr+' '+hr+':'+mn+':'+sc+'.'+milli
endelse
endelse
endelse
endfor
eptmp=create_struct('DATEPH',dat_eph)
return, eptmp
end
FUNCTION spdf_list_mystruct, a,NOGATT=nogatt,NOVATT=novatt,NORV=norv,$
NONRV=nonrv,NO2DRV=no2drv,FILENAME=filename,$
TSTART=TSTART,TSTOP=TSTOP, START_msec=start_msec, STOP_msec=stop_msec,$
MAXRECS=maxrecs, SEC_OF_YEAR=sec_of_year, $
REPORT=REPORT,STATUS=STATUS,DEBUG=DEBUG
compile_opt idl2
status=0
reportflag = 0
if(n_elements(nogatt) eq 0) then nogatt=0
if(n_elements(novatt) eq 0) then novatt=0
if(n_elements(norv) eq 0) then norv=1
if(n_elements(nonrv) eq 0) then nonrv=1
if(n_elements(no2drv) eq 0) then no2drv=1
if(n_elements(no3drv) eq 0) then no3drv=1
if(n_elements(no4drv) eq 0) then no4drv=1
if(n_elements(noimg) eq 0) then noimg=1
if(n_elements(filename) eq 0) then filename='cdaweb_listing.asc'
if(n_elements(maxrecs) eq 0) then maxrecs=15000000
if(n_elements(REPORT) eq 0) then report=''
if(n_elements(STATUS) eq 0) then statusflag=1L else statusflag=0L
if(n_elements(DEBUG) eq 0) then debugflag=1L else debugflag=0L
catch, error_status
if(error_status ne 0) then begin
print, 'ERROR=Error number: ',error_status,' in listing (spdf_list_mystruct).'
print, 'ERROR=Error Message: ', !ERR_STRING
if(error_status eq -98) then begin
if reportflag then printf, 1, 'STATUS=Data space too large. Cannot currently list these data.'
print, 'STATUS=Data space too large. Cannot currently list these data.'
endif else begin
if reportflag then printf, 1, 'STATUS= Data cannot be listed. '
print, 'STATUS=Data cannot be listed. '
endelse
close,1
return, -1
endif
if(REPORT) then begin
openw, 1, REPORT, error=err
if(err ne 0) then begin
print, "ERROR=",!ERR_STRING
close, 1 & return, -1
endif
reportFlag = 1
endif
if(keyword_set(DEBUG)) then print, 'Opening output file=', filename
openw, unit, filename, /get_lun,error=err,width=1000
if(n_elements(a) eq 0) then begin
if reportflag then printf, 1, 'STATUS= Data cannot be listed.'
print, 'STATUS=Data cannot be listed.'
print, 'ERROR=Error: Undefined structure'
close, 1
return, -1
endif
str_tst=size(a)
if(str_tst[str_tst[0]+1] ne 8) then begin
v_data='DATASET=UNDEFINED'
v_err='ERROR=Input is not a stucture.'
v_stat='STATUS=Cannot list this data'
print, v_data
print, v_err
print, v_stat
return, 0
endif else begin
atags=tag_names(a)
rflag=spdf_tagindex('DATASET',atags)
if(rflag[0] ne -1) then begin
print, a.DATASET
print, a.STATUS
return, 0
endif
for i=0,n_elements(atags)-1 do begin
if strupcase(a.(i).var_type) eq 'DATA' or $
strupcase(a.(i).var_type) eq 'SUPPORT_DATA' then begin
aatags=tag_names(a.(i))
q=where(aatags eq 'HANDLE')
if q[0] ne -1 then handle_value,a.(i).handle,testarr $
else testarr=a.(i).dat
sz=size(testarr)
if sz[0] eq 3 then begin
if sz[1]*sz[2] gt 32767. then begin
a.(i).var_type = 'ignore_data'
print,'STATUS=3D array too big. Will not list.'
endif
endif
endif
endfor
rflag=''
for i=0,n_elements(atags)-1 do rflag=[rflag,a.(i).var_type]
q=where(strupcase(rflag) eq 'DATA')
if q[0] eq -1 then return,0
endelse
data_set=''
if(data_set eq '') then begin
s=spdf_tagindex('LOGICAL_FILE_ID',tag_names(a.(0)))
if s[0] ne -1 then begin
s=strsplit(a.(0).LOGICAL_FILE_ID,'_',/extract)
if n_elements(s) gt 1 then begin
data_set=s[0]+'_'
for i=1,n_elements(s)-4 do begin
data_set=data_set+s[i]+'_'
endfor
data_set=strupcase(data_set+s[n_elements(s)-3])
endif
endif
endif
if(data_set eq '') then begin
data_set=strtrim(a.(0).LOGICAL_SOURCE,2)
data_set=strupcase(data_set)
endif
if reportflag then printf, 1, 'DATASET=',data_set
print, 'DATASET=',data_set
if reportflag then printf, 1, 'LISTING=',filename
split=strsplit(filename,'/',/extract)
loutdir='/'
for t=0L,n_elements(split)-2 do loutdir=loutdir+split[t]+'/'
print, 'LIST_OUTDIR=',loutdir
fmt='(a10,a'+strtrim(strlen(split[t]),2)+')'
print, 'LONG_LIST=',split[t], format=fmt
if(keyword_set(DEBUG)) then print, 'Reform arrays w/in structure.'
a=reform_strc(a)
mega=parse_mydepend0(a)
depends=tag_names(mega)
for mega_loop=1, mega.num do begin
a=mega.(mega_loop)
depend0=depends[mega_loop]
if(depend0 eq ' ') then continue
ns_tags=n_tags(a)
namest=strupcase(tag_names(a))
if(keyword_set(DEBUG)) then print, 'Find DEPEND_0'
incep=-1
incep=where(namest eq depend0,w)
v1=spdf_tagindex(depend0,namest)
if(v1[0] ne -1) then begin
station=a.(v1[0]).source_name
station=strmid(station,0,4)
v1=spdf_tagindex('delay_time',namest)
if (((station eq "ISIS")or(station eq "ALOU")) and (v1[0] ne -1)) then a.DELAY_TIME.var_type="metadata"
endif else begin
print, 'ERROR= Tag name not found'
return, -1
endelse
incep=incep[0]
if(incep eq -1) then begin
if reportflag then printf, 1, 'STATUS= Data cannot be listed. '
print, 'STATUS= Data cannot be listed. '
print, 'ERROR=Error: No record varying data selected'
close, 1
return, -1
endif
if(keyword_set(DEBUG)) then print, 'Converting handles; Compute size;',$
' Build new structure.'
names=tag_names(a.(incep))
ntags=n_tags(a.(incep))
wh=where(names eq 'HANDLE',whn)
if(whn) then begin
handle_value, a.(incep).HANDLE, dat
datsz=size(dat)
if(datsz[0] gt 0) then dat=reform(dat)
if(namest[incep] eq depend0) then begin
eptmp=ep_conv(a,depend0,/handle,sec_of_year=sec_of_year)
temp=create_struct('DAT',dat)
temp1=create_struct(a.(incep),temp)
temp2=create_struct(temp1,eptmp)
b=create_struct(namest[incep],temp2)
endif else begin
temp=create_struct('DAT',dat)
temp1=create_struct(a.(incep),temp)
b=create_struct(namest[incep],temp1)
endelse
endif else begin
if(namest[incep] eq depend0) then begin
eptmp=ep_conv(a,depend0,sec_of_year=sec_of_year)
tmp=create_struct(a.(incep),eptmp)
b=create_struct(namest[incep],tmp)
endif else begin
b=create_struct(namest[incep],a.(incep))
endelse
endelse
vorder=intarr(ns_tags)
for k=0, ns_tags-1 do begin
if(k ne incep) then begin
names=tag_names(a.(k))
ntags=n_tags(a.(k))
whc=where(names eq 'HANDLE',whn)
if(whn) then begin
handle_value, a.(k).HANDLE, dat
datsz=size(dat)
if(datsz[0] gt 0) then dat=reform(dat)
temp=create_struct('DAT',dat)
temp1=create_struct(a.(k),temp)
temp2=create_struct(namest[k],temp1)
b=create_struct(b,temp2)
endif else begin
temp=create_struct(namest[k],a.(k))
b=create_struct(b,temp)
endelse
endif
st_sz=size(b.(k).DAT)
vorder[k]=st_sz[0]
endfor
delete, a
delete, temp
delete, temp1
delete, temp2
delete, tmp
if(keyword_set(DEBUG)) then print, 'Determine type of listing.'
plist=max(vorder)
if(plist eq 3) then station=strmid(b.(0).source_name,0,4)
if(plist eq 0) then begin
norv=1 & no2drv=1 & nonrv=1 & no3drv=1 & noimg=1
endif
if(plist eq 1) then begin
norv=0 & no2drv=1 & nonrv=1 & no3drv=1 & noimg=1
endif
if(plist eq 2) then begin
norv=1 & no2drv=0 & nonrv=1 & no3drv=1 & noimg=1
endif
if(plist eq 3) then begin
if(station ne "DARN") then begin
norv=1 & no2drv=1 & nonrv=1 & no3drv=1 & noimg=0
endif else begin
norv=1 & no2drv=1 & nonrv=1 & no3drv=0 & noimg=1
endelse
endif
if(plist eq 4) then begin
norv=1 & no2drv=1 & nonrv=1 & no3drv=1 & no4drv=0 & noimg=1
endif
if(plist gt 4) then begin
if reportflag then printf, 1, 'STATUS= Data of 4D or less can be listed. Re-select variables'
print, 'STATUS= Data of 3D or less can be listed. Re-select variables'
close, 1
return, -1
endif
b_tagnames=tag_names(b)
v1=spdf_tagindex(depend0,b_tagnames)
if(v1[0] eq -1) then begin
print, 'ERROR= No tag found for DEPEND0'
return, -1
endif
epsz=size(b.(v1[0]).dat)
if(epsz[0] eq 0) then b=ord_mystruct(b,vorder,0) else $
b=ord_mystruct(b,vorder,1)
if(noimg eq 0 and keyword_set(DEBUG)) then print, 'Reform 3D Image arrays.'
if(noimg eq 0) then b=reform_mystruct(b)
if(no4drv eq 0 and keyword_set(DEBUG)) then print, 'Reform 4D Image arrays.'
if(no4drv eq 0) then b=reform_mystruct(b)
if(keyword_set(DEBUG)) then print, 'Set/Convert tstart and tstop.'
tmpoch=b.(v1[0]).dat
leng=n_elements(tmpoch)
if((n_elements(TSTART) eq 0) or (n_elements(TSTOP) eq 0)) then begin
if(leng gt 1) then begin
TSTART=tmpoch[0]
TSTOP=tmpoch[leng-1]
endif else begin
tmp=tmpoch
tmpoch=fltarr(1)
tmpoch[0]=tmp
TSTART=tmpoch[0]
TSTOP=tmpoch[0]
endelse
endif
start_time = 0.0D0
stop_time = 0.0D0
if keyword_set(TSTART) then begin
b1 = size(TSTART) & c1 = n_elements(b1)
case (b1[c1-2]) of
5: start_time=tstart
9: start_time=tstart
7: begin
case (size(tmpoch[0],/type)) of
'14': begin
start_time=encode_cdfepoch(tstart,/tt2000,msec=start_msec)
end
else: begin
if keyword_set(start_msec) then $
start_time=encode_cdfepoch(tstart,msec=start_msec) else $
start_time=encode_cdfepoch(tstart)
end
endcase
end
else: begin
print,'ERROR=TSTART parameter must be STRING, DOUBLE or DCOMPLEX' & close, 1
return,-1
end
endcase
endif
if keyword_set(TSTOP) then begin
b1 = size(TSTOP) & c1 = n_elements(b1)
case (b1[c1-2]) of
5: stop_time=tstop
9: stop_time=tstop
7: begin
case (size(tmpoch[0],/type)) of
'14': begin
stop_time=encode_cdfepoch(tstop,/tt2000,msec=stop_msec)
end
else: begin
if keyword_set(stop_msec) then $
stop_time=encode_cdfepoch(tstop,msec=stop_msec) else $
stop_time=encode_cdfepoch(tstop)
end
endcase
end
else: begin
print,'ERROR=TSTOP parameter must be STRING, DOUBLE or DCOMPLEX' & close, 1
return,-1
end
endcase
endif
time_dif=stop_time-start_time
time_dif=time_dif/(86400.*1000.)
tnum=n_elements(tmpoch)-1
if(tnum gt 100) then begin
idcs=findgen(99)
idct=findgen(99)+1
difs=tmpoch[idct]-tmpoch[idcs]
mnval=min(difs)
mxval=max(difs)
if(mnval ne mxval) then begin
dif_ep=moment(difs)
endif else begin
dif_ep=dblarr(1)
dif_ep[0]=difs[0]
endelse
if (size(tmpoch[0],/type) eq 14) then $
cdf_epoch,dif_ep[0]*1.D0,y1,mo1,d1,h1,m1,s1,mi1,/break,/tointeger else $
cdf_epoch,dif_ep[0],y1,mo1,d1,h1,m1,s1,mi1,/break
deltime=strtrim(h1,2)+':'+strtrim(m1,2)+':'+strtrim(s1,2)+'.'+strtrim(mi1,2)
endif
for vars = 0, n_tags(b)-1 do begin
dep1=dependn_search(b,vars,1)
if (dep1[0] ne '') then begin
depend1 = b.(vars).depend_1
q=where(tag_names(b.(vars)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (b.(vars).alt_cdaweb_depend_1 ne '') then depend1=b.(vars).alt_cdaweb_depend_1
if (n_elements(dep1_values) eq 0) then dep1_values = depend1 else $
dep1_values=[dep1_values,depend1]
endif
dep2=dependn_search(b,vars,2)
if (dep2[0] ne '') then begin
depend2 = b.(vars).depend_2
q=where(tag_names(b.(vars)) eq 'ALT_CDAWEB_DEPEND_2')
if (q[0] ne -1) then if (b.(vars).alt_cdaweb_depend_2 ne '') then depend2=b.(vars).alt_cdaweb_depend_2
if (n_elements(dep2_values) eq 0) then dep2_values = depend2 else $
dep2_values=[dep2_values,depend2]
endif
dep3=dependn_search(b,vars,3)
if (dep3[0] ne '') then begin
depend3 = b.(vars).depend_3
q=where(tag_names(b.(vars)) eq 'ALT_CDAWEB_DEPEND_3')
if (q[0] ne -1) then if (b.(vars).alt_cdaweb_depend_3 ne '') then depend3=b.(vars).alt_cdaweb_depend_3
if (n_elements(dep3_values) eq 0) then dep3_values = depend3 else $
dep3_values=[dep3_values,depend3]
endif
endfor
if (n_elements(dep1_values) gt 0) then begin
dep1_idx = uniq(dep1_values,sort(dep1_values))
dep1_values = dep1_values[dep1_idx]
endif
if (n_elements(dep2_values) gt 0) then begin
dep2_idx = uniq(dep2_values,sort(dep2_values))
dep2_values = dep2_values[dep2_idx]
endif
if (n_elements(dep3_values) gt 0) then begin
dep3_idx = uniq(dep3_values,sort(dep3_values))
dep3_values = dep3_values[dep3_idx]
endif
cols = 0 & d1cols = 0 & d2cols = 0 & d3cols = 0
b_tagnames=tag_names(b)
idx = spdf_tagindex(depend0,b_tagnames)
var_size = size(b.(idx).dat)
n_recs = var_size[1]
for vars = 0, n_elements(dep1_values)-1 do begin
var_idx = spdf_tagindex(dep1_values[vars],b_tagnames)
if (var_idx ge 0) then begin
var_size = size(b.(var_idx).dat)
if (strupcase(b.(var_idx).var_type) eq 'SUPPORT_DATA') then begin
if (var_size[0] eq 1) then d1cols = d1cols + var_size[1]
if (var_size[0] eq 2) then d1cols = d1cols+ var_size[1]
endif
endif
endfor
for vars = 0, n_elements(dep2_values)-1 do begin
var_idx = spdf_tagindex(dep2_values[vars],b_tagnames)
if (var_idx ge 0) then begin
var_size = size(b.(var_idx).dat)
if (strupcase(b.(var_idx).var_type) eq 'SUPPORT_DATA') then begin
if (var_size[0] eq 1) then d2cols = d2cols + var_size[1]
if (var_size[0] eq 2) then d2cols = d2cols+ var_size[1]
endif
endif
endfor
for vars = 0, n_elements(dep3_values)-1 do begin
var_idx = spdf_tagindex(dep3_values[vars],b_tagnames)
if (var_idx ge 0) then begin
var_size = size(b.(var_idx).dat)
if (strupcase(b.(var_idx).var_type) eq 'SUPPORT_DATA') then begin
if (var_size[0] eq 1) then d3cols = d3cols + var_size[1]
if (var_size[0] eq 2) then d3cols = d3cols+ var_size[1]
endif
endif
endfor
cols = d1cols + d2cols + d3cols
if (cols eq 0) then begin
for vars = 0, n_elements(b_tagnames)-1 do begin
if (strupcase(b.(vars).var_type) eq 'DATA') then begin
var_size = size(b.(vars).dat)
if (var_size[0] eq 1) then cols = cols+ 1
if (var_size[0] eq 2 and var_size[1] lt 10) then cols = cols+ var_size[1]
endif
endfor
endif
stars = '#******************'
if((n_recs gt 15000000 and cols gt 6) or n_recs gt 16000000) then begin
status = '# WARNING: You have requested '+strtrim(string(n_recs),2)+' records of data, the limit is 15,000,000, please reduce the time range and resubmit.'
printf, unit, stars
printf, unit, format='(a)',status
printf, unit, stars
nogatt=0 & norv=1 & nonrv=1 & no2drv=1 & no3drv=1 & no4drv=1 & noimg=1
endif
if (size(tmpoch,/tname) eq 'DCOMPLEX')then begin
tind = lonarr(n_elements(tmpoch))
for i = 0L, n_elements(tmpoch)-1 do begin
tind[i] = ((cdf_epoch_compare(stop_time, tmpoch[i]) ge 0) and $
(cdf_epoch_compare(tmpoch[i], start_time) ge 0))
endfor
tind = where(tind eq 1,w)
endif else begin
tind=where((tmpoch ge start_time) and (tmpoch le stop_time),w)
endelse
if(tind[0] eq -1) then begin
warning='# WARNING: No Data Selected for this Time Period. '
printf, unit, format='(a)',warning
nogatt=0 & norv=1 & nonrv=1 & no2drv=1 & no3drv=1 & no4drv=1 & noimg=1
c=b
endif
if(w eq 1) then begin
warning='# WARNING: Increase time period selected for listing. '
printf, unit, '# ******************************************************* '
printf, unit, format='(a)',warning
printf, unit, '# ******************************************************* '
printf, unit, '# '
w=0
nogatt=0 & norv=1 & nonrv=1 & no2drv=1 & no3drv=1 & no4drv=1 &noimg=1
c=b
endif
itrip=0
irv=0
inrv=0
lab_for='('
unt_for='('
dat_for='('
dep_for='('
ns_tags=n_tags(b)
namest=tag_names(b)
if keyword_set(DEBUG) then print,'Apply time constraints to data structure.'
if(w gt 0) then begin
for i=0, ns_tags-1 do begin
ntags=n_tags(b.(i))
names=tag_names(b.(i))
st_sz=size(b.(i).dat)
if(namest[i] eq depend0) then begin
temp_dat=b.(i).dateph[tind]
temp_dat1=b.(i).dat[tind]
tmp=create_struct('DATEPH',temp_dat)
tmp1=create_struct('DAT',temp_dat1)
for l=0, ntags-1 do begin
if((names[l] eq "DAT") or (names[l] eq "DATEPH")) then begin
if(names[l] eq "DAT") then tmpt=create_struct(tmpt,tmp1)
if(names[l] eq "DATEPH") then tmpt=create_struct(tmpt,tmp)
endif else begin
if(l eq 0) then tmpt=create_struct(names[l],b.(i).(l)) else begin $
tmpt1=create_struct(names[l],b.(i).(l))
tmpt=create_struct(tmpt,tmpt1)
endelse
endelse
endfor
ctmp=create_struct(namest[i],tmpt)
if(i eq 0) then c=ctmp else c=create_struct(c,ctmp)
endif else begin
if(b.(i).var_type eq 'data') then begin
if(st_sz[0] eq 1) then temp_dat1=b.(i).dat[tind]
if(st_sz[0] eq 2) then temp_dat1=b.(i).dat[*,tind]
if(st_sz[0] eq 3) then temp_dat1=b.(i).dat[*,*,tind]
if(st_sz[0] eq 4) then temp_dat1=b.(i).dat[*,*,*,tind]
endif else begin
temp_dat1=b.(i).dat
endelse
tmp1=create_struct('DAT',temp_dat1)
for l=0, ntags-1 do begin
if(names[l] ne "DAT") then begin
if(l eq 0) then tmpt=create_struct(names[l],b.(i).(l)) else begin $
tmpt1=create_struct(names[l],b.(i).(l))
tmpt=create_struct(tmpt,tmpt1)
endelse
endif else begin
tmpt=create_struct(tmpt,tmp1)
endelse
endfor
ctmp=create_struct(namest[i],tmpt)
if(i eq 0) then c=ctmp else c=create_struct(c,ctmp)
endelse
endfor
endif
delete, ctmp
delete, tmp1
delete, tmpt
delete, tmpt1
delete, tmp
delete, b
nvar=0
for i=0,ns_tags-1 do begin
j=0
ntags=n_tags(c.(i))
names=tag_names(c.(i))
shft=1
if(namest[i] eq depend0) then shft=0
if keyword_set(DEBUG) then print,'Build Global Structure.'
while (itrip eq 0) and (j lt ntags) do begin
j=j+1
nc=j
if(names[j] eq 'FIELDNAM') then begin
itrip=1
endif else begin
pair=create_struct(names[j],c.(i).(j))
if(j eq 1) then begin
glbatt=create_struct(pair)
endif else begin
glbatt=create_struct(glbatt,pair)
endelse
endelse
endwhile
if keyword_set(DEBUG) then print,'Determine Format type and data width.'
form=''
if(namest[i] eq depend0) then begin
if keyword_set(sec_of_year) then begin
format='A20'
c.(i).fillval='9999 0.000000'
endif else format='A23'
endif else format=c.(i).format
if (c.(i).cdftype eq 'CDF_EPOCH16') then begin
if keyword_set(sec_of_year) then begin
format='A20'
c.(i).fillval='9999 0.000000'
endif else format='A35'
endif
if (c.(i).cdftype eq 'CDF_TIME_TT2000') then begin
if keyword_set(sec_of_year) then begin
format='A20'
c.(i).fillval='9999 0.000000'
endif else format='A27'
endif
if(c.(i).var_type eq 'data') or $
((c.(i).var_type eq 'support_data') and $
(c.(i).cdfrecvary ne 'NOVARY')) then begin
format=strsplit(format,'%',/extract)
frm_st=data_len(format[0],c.(i).fillval)
status=frm_st.status
if( status ne 0) then begin
if reportflag then printf, 1, 'STATUS= Data cannot be listed. '
print, 'STATUS= Data cannot be listed. '
print, 'ERROR=Error: In function data_len'
close, 1
return, -1
endif
dat_len=frm_st.dat_len
form=frm_st.form
c.(i).fillval=frm_st.nvar
endif
if(form ne '') then begin
if(norv eq 0) then begin
label=label_search(c,1,i,0)
units=unit_search(c,1,i,0)
col_sz=strlen(label) > strlen(units) > dat_len
sform=form_bld(col_sz, label, units, dat_len, col_sz, label, col_sz, label,col_sz, label,form, shft)
lab_for=lab_for + sform.labv
unt_for=unt_for + sform.untv
dat_for=dat_for + sform.datv
dep_for=dep_for + sform.depv
endif
if(no2drv eq 0) then begin
if keyword_set(DEBUG) then print,'Determine formats for 2D-RV.'
if(c.(i).var_type eq 'data') or $
((c.(i).var_type eq 'support_data') and $
(c.(i).cdfrecvary ne 'NOVARY')) then begin
st_sz=size(c.(i).dat)
if(st_sz[0] le 1) then begin
label=label_search(c,1,i,0)
units=unit_search(c,1,i,0)
num_var=1
if(w eq 1 and st_sz[1] gt 1 and st_sz[0] eq 1) then num_var=st_sz[1]
for k=0, num_var-1 do begin
col_sz=strlen(label) > strlen(units) > dat_len
sform=form_bld(col_sz, label, units, dat_len, col_sz,label,col_sz,label,col_sz,label,form, shft)
lab_for=lab_for + sform.labv
unt_for=unt_for + sform.untv
dat_for=dat_for + sform.datv
dep_for=dep_for + sform.depv
nvar=nvar+1
endfor
endif
if(st_sz[0] eq 2) then begin
num_var=st_sz[1]
depend1_labels=dependn_search(c,i,1)
if (depend1_labels[0] ne '') then begin
depend1=c.(i).depend_1
q=where(tag_names(c.(i)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (c.(i).alt_cdaweb_depend_1 ne '') then depend1=c.(i).alt_cdaweb_depend_1
dep1_units=c.(strtrim(depend1,2)).units
depend1_labels=['(@_'+depend1_labels+'_'+dep1_units+')']
endif
depend2_labels=dependn_search(c,i,2)
if (depend2_labels[0] ne '') then begin
depend2=c.(i).depend_2
q=where(tag_names(c.(i)) eq 'ALT_CDAWEB_DEPEND_2')
if (q[0] ne -1) then if (c.(i).alt_cdaweb_depend_2 ne '') then depend2=c.(i).alt_cdaweb_depend_2
dep2_units=c.(strtrim(depend2,2)).units
depend2_labels=['(@_'+depend2_labels+'_'+dep2_units+')']
endif
for kk=0L,st_sz[1]-1 do begin
label0=label_search(c,st_sz[0],i,kk)
if strlen(label0) gt strlen(label) then label=label0
units0=unit_search(c,st_sz[0],i,kk)
if strlen(units0) gt strlen(units) then units=units0
endfor
dep_col_sz=max(strlen(depend1_labels)) > max(strlen(depend2_labels)) >strlen(units) > dat_len
col_sz = strlen(label) > strlen(units) > dat_len
sform=form_bld(col_sz, label, units, dat_len, dep_col_sz, depend1_labels,dep_col_sz, depend2_labels,dep_col_sz, depend2_labels,form, shft)
labv=strtrim(num_var,2)+'('+sform.labv+' '
untv=strtrim(num_var,2)+'('+sform.untv+' '
datv=strtrim(num_var,2)+'('+sform.datv+' '
depv=strtrim(num_var,2)+'('+sform.depv+' '
lend=strlen(labv)-2
uend=strlen(untv)-2
dend=strlen(datv)-2
dpend=max(strlen(depv))-2
strput,labv,'),',lend
strput,untv,'),',uend
strput,datv,'),',dend
strput,depv,'),',dpend
lab_for=lab_for + labv
unt_for=unt_for + untv
dat_for=dat_for + datv
dep_for=dep_for + depv
nvar=nvar+num_var
endif
c.(0).fillval=nvar
endif
endif
endif
if ((noimg eq 0) or (no4drv eq 0)) then begin
if keyword_set(DEBUG) then print,'Determine formats for 3D-RV or 4D-RV images.'
if(i gt 0) then $
if(c.(i).var_type eq 'support_data') then c.(i).var_type="metadata"
if (c.(i).var_type eq 'data') or ((c.(i).var_type eq 'support_data') and (c.(i).cdfrecvary ne 'NOVARY')) then begin
st_sz=size(c.(i).dat)
if(st_sz[0] le 1) then begin
nvar=nvar+1
label=label_search(c,st_sz[0],i,0)
units=unit_search(c,st_sz[0],i,0)
col_sz=strlen(label) > strlen(units) > dat_len
sform=form_bld(col_sz, label, units, dat_len, col_sz, label, col_sz, label,col_sz, label,form, shft)
lab_for=lab_for + sform.labv
unt_for=unt_for + sform.untv
dat_for=dat_for + sform.datv
dep_for=dep_for + sform.depv
endif
if(st_sz[0] eq 2) then begin
depend1_labels=dependn_search(c,i,1)
if (depend1_labels[0] ne '') then begin
depend1=c.(i).depend_1
q=where(tag_names(c.(i)) eq 'ALT_CDAWEB_DEPEND_1')
if (q[0] ne -1) then if (c.(i).alt_cdaweb_depend_1 ne '') then depend1=c.(i).alt_cdaweb_depend_1
dep1_units=c.(strtrim(depend1,2)).units
depend1_labels=['(@_'+depend1_labels+'_'+dep1_units+')']
endif
depend2_labels=dependn_search(c,i,2)
if (depend2_labels[0] ne '') then begin
depend2=c.(i).depend_2
q=where(tag_names(c.(i)) eq 'ALT_CDAWEB_DEPEND_2')
if (q[0] ne -1) then if (c.(i).alt_cdaweb_depend_2 ne '') then depend2=c.(i).alt_cdaweb_depend_2
dep2_units=c.(strtrim(depend2,2)).units
depend2_labels=['(@_'+depend2_labels+'_'+dep2_units+')']
endif
depend3_labels=dependn_search(c,i,3)
if (depend3_labels[0] ne '') then begin
depend3=c.(i).depend_3
q=where(tag_names(c.(i)) eq 'ALT_CDAWEB_DEPEND_3')
if (q[0] ne -1) then if (c.(i).alt_cdaweb_depend_3 ne '') then depend3=c.(i).alt_cdaweb_depend_3
dep3_units=c.(strtrim(depend3,2)).units
depend3_labels=['(@_'+depend3_labels+'_'+dep3_units+')']
endif
label=''
units=''
for kk=0L,st_sz[1]-1 do begin
label0=label_search(c,st_sz[0],i,kk)
if strlen(label0) gt strlen(label) then label=label0
units0=unit_search(c,st_sz[0],i,kk)
if strlen(units0) gt strlen(units) then units=units0
endfor
dep_col_sz=max(strlen(depend1_labels)) > max(strlen(depend2_labels)) > max(strlen(depend3_labels)) >strlen(units) > dat_len
col_sz = strlen(label) > strlen(units) > dat_len
sform=form_bld(col_sz, label, units, dat_len,dep_col_sz,depend1_labels,dep_col_sz,depend2_labels,dep_col_sz,depend3_labels,form, shft)
sform.labv=strmid(sform.labv,0,strlen(sform.labv)-1)
lab_for=lab_for + strtrim((st_sz[1]),2)+'('+sform.labv+'),'
sform.untv=strmid(sform.untv,0,strlen(sform.untv)-1)
unt_for=unt_for + strtrim((st_sz[1]),2)+'('+sform.untv+'),'
sform.depv=strmid(sform.depv,0,strlen(sform.depv)-1)
dep_for=dep_for + strtrim((st_sz[1]),2)+'('+sform.depv+'),'
sform.datv=strmid(sform.datv,0,strlen(sform.datv)-1)
dat_for=dat_for + strtrim((st_sz[1]),2)+'('+sform.datv+'),'
nvar=nvar+1
endif
c.(0).fillval=st_sz[1]
endif
endif
endfor
lend=strlen(lab_for)-1
uend=strlen(unt_for)-1
dend=strlen(dat_for)-1
dpend=max(strlen(dep_for))-1
strput,lab_for,')',lend
strput,unt_for,')',uend
strput,dat_for,')',dend
strput,dep_for,')',dpend
if(no3drv eq 0) then begin
lab_for='(a23,1x,A5,1x,a9,2(1x,a13),2(1x,a13))'
unt_for='(a23,1x,a5,1x,a9,2(7x,a7),2(11x,a3))'
dat_for='(a23,4x,i2,7x,i3,2(1x,g13.5),2(1x,g13.5),/,29(27x,i2,7x,i3,2(1x,g13.5),2(1x,g13.5),/))'
endif
if(norv eq 0) or (no2drv eq 0) or (no3drv eq 0) or (no4drv eq 0) or (noimg eq 0) then $
rvars=create_struct(c,'LFORM',lab_for,'UFORM',unt_for,'DFORM',dat_for,'DPFORM',dep_for)
if(mega_loop gt 1) then begin
nogatt=1
printf, unit, format='("# ")'
endif
delete, c
if keyword_set(DEBUG) then print,'Write out variables.'
if(nogatt eq 0) then status=wrt_hybd_strct(glbatt,unit,0,maxrecs,depend0,mega.num)
if(norv eq 0) then status=wrt_hybd_strct(rvars,unit,1,maxrecs,depend0,mega.num)
if(nonrv eq 0) then status=wrt_hybd_strct(nrvars,unit,2,maxrecs,depend0,mega.num)
if(no2drv eq 0) then status=wrt_hybd_strct(rvars,unit,3,maxrecs,depend0,mega.num)
if(no3drv eq 0) then status=wrt_hybd_strct(rvars,unit,4,maxrecs,depend0,mega.num)
if(noimg eq 0) then status=wrt_hybd_strct(rvars,unit,5,maxrecs,depend0,mega.num)
if(no4drv eq 0) then status=wrt_hybd_strct(rvars,unit,5,maxrecs,depend0,mega.num)
delete, rvars
endfor
time_string=systime()
printf, unit, format='("# ")'
printf, unit, format='("# Key Parameter and Survey data (labels K0,K1,K2) are preliminary browse data.")'
printf, unit, format='("# Generated by CDAWeb on: ",a)',time_string
close,unit
close,1
free_lun, unit
end