pro loadallhdf, filenames=filenames, vdataname=vdataname, data=data, $
masterfile=masterfile, time_range=time_range, hdfnames=hdfnames, $
tagnames=tagnames,indexfile=indexfile,environvar=environvar
if not keyword_set(filenames) then begin
if not keyword_set(masterfile) then begin
if not keyword_set(environvar) then $
environvar = 'CDF_INDEX_DIR'
dir = getenv(environvar)
if not keyword_set(dir) then message,$
'Environment variable '+environvar+$
' is not defined!',/info
if not keyword_set(indexfile) then masterfile = pickfile(path=dir) $
else masterfile = filepath(indexfile,root_dir=dir)
endif
get_file_names,filenames,masterfile=masterfile,time_range=time_range,$
nfiles=nfiles
if nfiles eq 0 then begin
data=0
print,'LOADALLHDF: No data files valid for given time range'
return
endif
endif
data = 0
for fileindex=0,n_elements(filenames)-1 do begin
hdf_fp = hdf_open(filenames[fileindex],/read)
if (hdf_fp eq -1) then begin
print, 'HDF_OPEN: could not open file ', filenames[fileindex]
return
endif else print,'Loading ',filenames[fileindex]
vdata_ref = hdf_vd_find(hdf_fp,vdataname)
if (vdata_ref eq 0) then begin
print, 'HDF_VD_FIND: could not find Vdata ', vdataname
return
endif
vdata_id = hdf_vd_attach(hdf_fp, vdata_ref, /read)
if (vdata_id eq 0) then begin
print, 'HDF_VD_ATTACH: could attach Vdata ', vdataname
return
endif
hdf_vd_get,vdata_id,class=class,count=count,fields=fields,$
interlace=interlace,name=name,nfields=nfields,ref=ref,$
size=size,tag=tag
if count eq 0 then begin
print, 'No records found in file ',filename[fileindex]
return
endif
counter = 0
if n_elements(hdfnames) gt 0 then begin
if n_elements(tagnames) gt 0 then $
if n_elements(tagnames) ne n_elements(hdfnames) then begin
print,'LOADALLHDF: Number of tagnames and hdfnames not equal'
return
endif
filehdfnames = strsplit(fields,',',/extract)
foo_index = where(strupcase(hdfnames[0]) eq strupcase(filehdfnames),$
name_count)
if name_count eq 0 then begin
print,'LOADALLHDF: Variable '+hdfnames[0]+' not found'
return
endif
foo = filehdfnames[foo_index]
name_index = foo_index
for i = 1,n_elements(hdfnames)-1 do begin
foo_index = where(strupcase(hdfnames[i]) eq $
strupcase(filehdfnames),name_count)
if name_count eq 0 then begin
print,'LOADALLHDF: Variable '+hdfnames[i]+' not found'
return
endif
foo = foo+','+filehdfnames[foo_index]
name_index = [name_index,foo_index[0]]
endfor
fieldnames = foo[0]
endif
if n_elements(hdfnames) eq 0 then begin
fieldnames = fields
name_index = lindgen(nfields)
filehdfnames = strsplit(fields,',',/extract)
hdfnames = filehdfnames
endif
read_result = hdf_vd_read(vdata_id,rawdata,fields=fieldnames,/no_interlace)
if read_result eq 0 then begin
printf,'LOADALLHDF: No data found in file '+filenames[fileindex]
endif
for i=0,n_elements(name_index)-1 do begin
hdf_vd_getinfo,vdata_id,name_index[i],name=name,order=order,size=size,$
type=type
this_element = call_function(type,rawdata,counter,count)
if n_elements(tagnames) gt 0 then name = tagnames(i)
if fileindex eq 0 then $
str_element,data,name,this_element,/add $
else begin
str_element,data,name,old_element
append_array,old_element,this_element
str_element,data,name,old_element,/add
endelse
counter = counter + count*size
endfor
endfor
return
end