;+
; smei_sequence::vmain
;	Put a value into a top-level variable.
;
; Usage:
;	seqref -> vmain, value[, name]
;
; Arguments:
;	value	input	any	The value to be sent up to the main
;				program level
;	name	input	string	The name of the variable to use.
;
;
; Keywords:
;	default_name	input	string	A default value for the
;					variable name
;	group		input	long	The widget ID of a calling
;					widget.
;
; Notes:
;	If the name argument is not given, then the user is prompted
;	for a name (possibly with a default).
;	If the group keyword is given, then the prompt is via a widget
;	interface, otherwise it is via the command line.
;
; History:
;	Original: 13/7/01; SJT
;	Add ability to send to a file: 19/12/02; SJT
;	Move to smei_sequence method as save-to-file is detail specific:
;	6/1/02; SJT
;-
pro print_ht, file, values
openw, ilu, /get, file
printf, ilu, '    Start          Stop         Long ' + $
  '   Lat     RA     Dec       ' + $
  'Value       P   Elong     PA   Flag' + $
  '       UT  SClong  SClat    X    Y'
for j = 0, n_elements(values)-1 do printf, ilu, $
  values[j], format = $
  "(2F15.6,F8.2,f7.2,2f7.2,g14.4,f7.3,f7.2,f8.2,z5.3," $
  +"f9.6,f8.2,f7.2,2i5)"
free_lun, ilu
end

pro ss_vmain_event, event

sbase = widget_info(event.top, /child)
widget_control, event.id, get_uvalue = mbut
widget_control, sbase, get_uvalue = state

case mbut of
    'DO': begin
        if event.value eq 'DO' then $
          (scope_varfetch(state.name, level = 1, /enter)) = $
          *state.value $
;           junk = routine_names(state.name, *state.value, $
;                                store = 1) $
            else if event.value eq 'FILE' then begin
            file = dialog_pickfile(dialog_parent = event.top, $
                                   title = 'File for points list', $
                                   file = 'points.txt', $
                                   filter = "*.txt")
            if file ne '' then print_ht, file, *state.value $
            else return
        endif

        ptr_free, state.value
        widget_control, event.top, /destroy
    end
    'NAME': begin
        state.name = event.value
        widget_control, state.doid, sensitive =  state.name ne ''
    end
endcase

if widget_info(/valid, event.top) then $
  widget_control, sbase, set_uvalue = state

end

pro smei_sequence::vmain, value, name, default_name = default_name, $
                          group = group

if n_params() eq 1 then begin
    if keyword_set(default_name) then dn = default_name $
    else dn = ''

    if keyword_set(group) then begin
        

        base = widget_base(/column, $
                           title = "Top-level name", $
                           /modal, $
                           group = group)

        label = widget_label(base, $
                             value = "Save value to $MAIN$")
        junk = widget_label(base, $
                            value = "or to file")

        junk = cw_ffield(base, $
                         label = "Name:", $
                         uvalue = 'NAME', $
                         /text, $
                         xsize = 10, $
                         /all_events, $
                         value = dn)

        junk = cw_bgroup(base, $
                         /row, $
                         ['To $MAIN$', 'To File', 'Cancel'], $
                         button_uvalue = ['DO', 'FILE', 'DONT'], $
                         uvalue = 'DO', $
                         ids = bids)
        widget_control, bids[1], sensitive = dn ne ''


        state = {ss_vmain_state, $
                 doid: bids[1], $
                 name: dn, $
                 value: ptr_new(value)}

        widget_control, label, set_uvalue = state
        widget_control, base, /real

        xmanager, 'ss_vmain', base

    endif else begin
        name = ''
        read, "Enter variable name (space for file or to cancel) ["+ $
              dn+"] :_", name
        if name eq '' then name = dn
        
        if name ne ' ' then (scope_varfetch(name, level = 1, /enter)) $
          = value $
; junk = routine_names(name, value, $
;                                                  store = 1) $
            else begin
            read, "Enter file name (space to cancel) :_", name
            if name eq ' ' then return
            print_ht, name, *state.value
            
        endelse
    endelse

endif else if n_params() eq 2 then (scope_varfetch(name, level = 1, $
                                                   /enter)) $ 
  = value 
; junk = routine_names(name, value, $ 
;                                                         store = 1) 
end
