function getsd, sd, index, desc=desc 
;
;+
;   Name: getsd
;
;   Purpose: return data saved in saved_data widgets
;
;   Input Parameters:
;      sd - widget id for saved data
;   Optional parameters:
;      index - direct access subscript 
;      desc=desc - use string match for selection 
;      
;-
;
widget_control, get_uvalue=sdstructure, sd
;
buttons=sdstructure.buttons
;
if keyword_set (desc) then begin
   select=where(strupcase(desc) eq strupcase(sdstructure.dsets))
   button_number = buttons(0,select>0) 
   if select(0) lt 0 then print,'no match, returning first data set'
endif else begin
   case n_elements(index) of
      0:button_number=buttons(0,sdstructure.index) 	;use queue pointer
      1:button_number=buttons(0,index)		   	;1d index	
      2:button_number=buttons(index(0),index(1))	;2d index
   endcase
endelse
;
widget_control, get_uvalue=uvalue, button_number(0)	; get uvalue
;
return,uvalue
end
