PRO listbcs_event, event                         ;event driver routine

common listbcs,base,labelw,textw,printb,listing,bcs_cat,vms

widget_control,printb,sensitive=0

WIDGET_CONTROL, event.id, GET_UVALUE = USERVALUE

if (n_elements(uservalue) eq 0) then uservalue=''
name=strmid(tag_names(event,/structure_name),7,1000)

if (name eq  'BUTTON') and (event.select eq 1) then begin
 butt=strupcase(strtrim(uservalue,2))
 if vms then home='sys$login' else home='~'
 dmpfile=concat_dir(home,'listbcs.dmp')

 case butt of
  'QUIT' : begin 
       ;     xbackregister,'flash_bck',event.top,/unregister
            WIDGET_CONTROL, event.top, /destroy,/clear_events
            return
           end
  'DATE' : begin
            twidget,sdate,group_leader=base,error=error   ;-- get search date
            if error then return
            if sdate.year le 1979 then yy='' else $
             yy='"/"'+strmid(string(sdate.year,'(i4.2)'),2,2)
            if sdate.month le 0 then mm='' else mm='"/"'+string(sdate.month,'(i2.2)')
            if sdate.day le 0 then dd='' else dd='" "'+string(sdate.day,'(i2.2)')+'"/"'
            fdate=''
            if dd ne '' then fdate=dd
            if mm ne '' then begin
             if fdate ne '' then fdate=fdate+','+mm else fdate=mm
            endif
            if yy ne '' then begin
             if fdate ne '' then fdate=fdate+','+yy else fdate=yy
            endif
            widget_control,labelw,set_value='SEARCHING BCS FLARE CATALOG, PLEASE STAND BY...'
            widget_control,textw,set_value=''
            widget_control,base,sensitive=0
            if vms then begin             ;-- vms search
             if fdate eq '' then spawn,'type/nopage '+bcs_cat,output else begin
              s1='search '+bcs_cat+' CALCIUM'
              s2='search '+bcs_cat+' START'
              command='search '+bcs_cat+'  '+fdate+' /match=and'
              spawn,s1,h1
              spawn,s2,h2
              spawn,command,output
             endelse
            endif else begin              ;-- unix grep
             if fdate eq '' then spawn,'cat '+bcs_cat,output else begin
              s1='grep CALCIUM '+bcs_cat
              s2='grep START '+bcs_cat
              str=[yy,mm,dd]
              clook=where(str ne '',count)
              str=str(clook)
              cmd='grep '+str(0)+' '+bcs_cat
              if count gt 1 then begin
               for i=1,count-1 do cmd=cmd+' | grep '+str(i)
              endif
              spawn,s1,h1
              spawn,s2,h2
              spawn,cmd,output
             endelse
            endelse
            widget_control,base,sensitive=1
            no_match=0
            if vms then begin
             if (strpos(output(0),'MATCH') gt -1) then no_match=1
            endif else begin
             if strtrim(output(0),2) eq '' then no_match=1
            endelse
            if no_match then $
             listing='NO BCS EVENTS CATALOGED FOR SPECIFIED DATE' else begin
              if fdate eq '' then listing=output else listing=[h1(0),h2(0),output]
             endelse
            widget_control,textw,set_value=listing
            if not no_match then widget_control,printb,sensitive=1
            widget_control,set_value='PRESS DATE BUTTON FOR ANOTHER SELECTION',labelw
           end
  'PRINT': begin
            if listing(0) ne '' then begin
             widget_control,labelw,set_value='PRINTING CATALOG LISTING...'
             widget_control,base,sensitive=0
             openw,lun,dmpfile,/get_lun
             printf,lun,listing
             close,lun & free_lun,lun
             if vms then begin
              spawn,'print/nofeed '+dmpfile
              spawn,'delete/nolog/noconfirm '+dmpfile+';*'
             endif else begin
              spawn,'lpr '+dmpfile 
              spawn,'rm -f '+dmpfile 
             endelse
             widget_control,base,sensitive=1
            endif
            return
           end
  else:    begin 
            widget_control,labelw,set_value='INVALID BUTTON, TRY AGAIN'
            return
           end
 endcase
endif

return & end

;--------------------------------------------------------------------------

PRO listbcs,group_leader=group,just_reg=just_reg

common listbcs,base,labelw,textw,printb,listing,bcs_cat,vms

set_plot,'X'
if (!d.flags and 65536) eq 0 then $
 message,'widgets are unavailable on this device'

if (n_elements(group) eq 0) and (not keyword_set(just_reg)) then begin
 widget_control,/reset,/clear_events
endif else begin
 if xregistered('listbcs') then begin
  !quiet=0
  message,'LISTBCS already registered',/contin
  return
 endif
endelse

;-- where is BCS catalog? Usually defined by logical BCS_CAT

if not keyword_set(just_reg) then begin
 bcs_cat=loc_file('BCS_CAT',count=count)
 if count eq 0 then begin
  message,'BCS CATALOG UNAVAILABLE',/contin
  return
 endif 
endif
listing=''

;-- autosize screen

device,get_screen_size=sc
fspace=.0146*sc(0)
fxpad=.0117*sc(0)
fypad=.0146*sc(1)
scx=.0625*sc(0) & scy=.0122*sc(1)
vms=(!version.os eq 'vms')

;-- parent widget

welcome='PRESS DATE BUTTON TO START SELECTION'
base=widget_base(title='XRP-BCS FLARE CATALOG',/column,xpad=fxpad,ypad=fypad,space=fspace)
row1=widget_base(base,/row,xpad=fxpad,ypad=fypad,space=fspace,/frame)

dateb=widget_button(row1,value='Select Date',uvalue='DATE',/no_release)
printb=widget_button(row1,value='Print Listing',uvalue='PRINT',/no_release)
widget_control,printb,sensitive=0
doneb=widget_button(row1,value='Quit',uvalue='QUIT',/no_release)
row2=widget_base(base,/column,space=fspace,xpad=fxpad,ypad=fypad)   
temp=widget_base(row2,/column,space=fspace,xpad=fxpad,ypad=fypad)   
labelw=widget_label(temp,value=welcome,uvalue='BACKGROUND',/frame)
textw=widget_text(temp,ysize=2.*scy,/frame,xsize=scx,/scroll)
widget_control,set_value=welcome,labelw

;-- realize main widget

widget_control,base,/realize
;if xregistered('flash_bck') then xbackregister,'flash_bck',base,/unregister
xmanager,'listbcs',base,group_leader=group,just_reg=just_rg
if not keyword_set(just_reg) then xmanager

return & end