pro xnet_file_diff_event,event
  widget_control,event.top,get_uvalue=all
  case strtrim(event_name(event),2) of
     "BUTTON":begin
          case strupcase(get_wvalue(event.id)) of 
  	     "QUIT":begin
		spawn,'rm ~/xnet_file_diff.*'
		widget_control,event.top,/destroy
	      end
	     "COPY":begin
		widget_control,all.one_dir,get_value=info
  		if info(0) eq '' then begin
		   widget_control,all.all_dir,get_value=info
		endif
                widget_control,all.filename,get_value=info2
		for i=0,n_elements(info)-1 do begin
		  widget_control,all.output,set_value=info(i)+info2,/append
	        endfor 
	   end
 	     "COMPARE THE TWO":begin
		widget_control,all.diff_nodes,get_value=mnem
		widget_control,all.filename,get_value=info
		if (n_elements(mnem) eq 2) and (info(0) ne '') then begin
		  cmd='dxdiff ~/xnet_file_diff.'+mnem(0)+'_'+info(0)+ $
		  ' ~/xnet_file_diff.'+mnem(1)+'_'+info(0)
		  if (all.font ne '') then begin
		     cmd='dxdiff ~/xnet_file_diff.'+mnem(0)+'_'+info(0)+ $
		  ' ~/xnet_file_diff.'+mnem(1)+'_'+info(0)+' -fn '+all.font
		  endif
   	 	  cmd2='gdiff ~/xnet_file_diff.'+mnem(0)+'_'+info(0)+ $
		  ' ~/xnet_file_diff.'+mnem(1)+'_'+info(0)
		  if !VERSION.OS ne 'sgi' then spawn,cmd else spawn,cmd2
		endif
  	      end
	     "SELECT NODES FROM LIST":begin
		list=['QUAKE','MDIBBS','MDISAS','UMBRA','SXT','SXT3']
		ss = xmenu_sel(list, group=event.top)
		mnem=''
		if (ss(0) ne -1) then begin
                    mnem = strlowcase( strmid(list(ss), 0, 8) )
		endif
		if (mnem(0) ne '') then begin
		  if n_elements(mnem) eq 1 then temp_mnem=[mnem(0)] else begin
		    temp_mnem=[mnem(0),mnem(1)]
		  endelse
		  widget_control,all.node_list,set_value=mnem,/append
		  widget_control,all.copy_to,set_value=mnem,/append	
		  widget_control,all.diff_nodes,set_value=temp_mnem
		  widget_control,all.editable,get_value=edit_info
  		  if edit_info(0) eq '' then widget_control,all.editable,set_value=mnem(0)
		endif
	     end
	     "GET FILES":begin
		widget_control,all.command,set_value=''
		spawn,'ls ~/xnet_file_diff*',check
		if check(0) ne '' then spawn,'rm ~/xnet_file_diff*'
		widget_control,all.node_list,get_value=node_names
		widget_control,all.one_dir,get_value=info
  		if info(0) eq '' then begin
		   widget_control,all.all_dir,get_value=info
		endif
		j=0
		widget_control,all.filename,get_value=info2
	      if (node_names(0) ne '') and (info(0) ne '') and (info2(0) ne '') then begin
		for i=0,n_elements(node_names)-1 do begin
		  if n_elements(info) ne 1 then j=i
                  cmd= 'rcp -p '+node_names(i)+':'+concat_dir(info(j),info2(0))  $
                   +' ~/xnet_file_diff.'+node_names(i)+'_'+info2(0)
		  widget_control,all.command,set_value=cmd,/append
		  spawn,cmd
		  widget_control,all.command,set_value='done',/append
		endfor
	      endif
		spawn,'ls -l ~/xnet_file_diff*',ls_info
		widget_control,all.output,set_value=ls_info
	     end
	    "SELECT TWO NODES TO COMPARE":begin
		widget_control,all.node_list,get_value=list
		ss = xmenu_sel(list, group=event.top)
		if (ss(0) ne -1) then begin
                    mnem = strlowcase( strmid(list(ss), 0, 8) )
		    widget_control,all.diff_nodes,set_value=mnem
		endif
	    end
	    "EDIT FILE":begin
		widget_control,all.editable,get_value=mnem
		widget_control,all.filename,get_value=info
		if (mnem(0) ne '') and (info(0) ne '') then begin
		    cmd='xedit ~/xnet_file_diff.'+mnem(0)+'_'+info(0)
		spawn,cmd 
		endif
	    end
	    "SELECT FILE TO EDIT OR COPY": begin
		widget_control,all.node_list,get_value=list
		ss = xmenu_sel(list, group=event.top)
		if (ss(0) ne -1) then begin
                    mnem = strlowcase( strmid(list(ss), 0, 8) )
		    widget_control,all.editable,set_value=mnem
		endif	
	   end
	    "MSPUT":begin
		widget_control,all.filename,get_value=file
		widget_control,all.one_dir,get_value=direct
		if direct eq '' then widget_control,all.all_dir,get_value=direct
	   end
	    "CLEAN":begin
		spawn,'rm ~/xnet_file_diff.*'
	   end
	    "COPY FILE TO NODE(S)":begin
		widget_control,all.command,set_value=''
		widget_control,all.filename,get_value=file
		widget_control,all.copy_to,get_value=node_name
		widget_control,all.editable,get_value=node_to_copy
		widget_control,all.one_dir,get_value=direct
		if direct(0) eq '' then begin
		    widget_control,all.all_dir,get_value=all_direct
		    widget_control,all.node_list,get_value=temp_dir
		    value=where(temp_dir eq node_name)
		    direct=all_direct(value)
		endif
		for i=0,n_elements(node_name)-1 do begin
		  if n_elements(direct) eq 1 then j=0 else j=i
	          cmd='rcp -p ~/xnet_file_diff.'+node_to_copy(0)+'_'+file(0)$
	          +' '+node_name(i)+':'+concat_dir(direct(j),file) 
		widget_control,all.command,set_value=cmd,/append
	        spawn,cmd
		widget_control,all.command,set_value='done',/append
		endfor
	   end
	   "SELECT NODES TO COPY FILE TO":begin
		widget_control,all.node_list,get_value=list
		ss = xmenu_sel(list, group=event.top)
		if (ss(0) ne -1) then begin
                    mnem = strlowcase( strmid(list(ss), 0, 8) )
		    widget_control,all.copy_to,set_value=mnem
		endif
	     end
          endcase
     end
     "TEXT_CH":begin
	case event.id of
            all.one_dir: begin
                        end
	    all.all_dir: begin
			end
	    all.output: begin
			end
	    all.filename: begin
			end
	    all.own_nodes: begin
			widget_control,all.own_nodes,get_value=info
		        widget_control,all.node_list,set_value=info(n_elements(info)-1),/append
			widget_control,all.copy_to,set_value=info(n_elements(info)-1),/append
			widget_control,all.editable,get_value=edit_stuff
			if edit_stuff(0) eq '' then widget_control,all.editable,set_value=info
			widget_control,all.diff_nodes,get_value=diff_info
			if n_elements(diff_info) eq 1 then widget_control,all.diff_nodes,set_value=info,/append
			end
	    all.node_list: begin
			end
	    all.copy_to: begin
			end
	    all.diff_nodes: begin
			end
	    all.editable: begin
		end
	    all.command: begin
		end
         endcase
     
     endcase
   endcase
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




pro xnet_file_diff,font=font

  if n_elements(font) eq 0 then begin
    def_font = get_xfont(closest=13,/only_one)
    if (getenv('MDI_DEF_FONT') ne "") then def_font = getenv('MDI_DEF_FONT')
    font=''
  endif  
  if (font ne '') then def_font=font
  widget_control, default_font=def_font
  device, font=def_font
  base=widget_base(/column,title='XNET_FILE_DIFF')
  xmenu,['Quit','Get Files','Compare the two',$
	'Edit file','Clean','Copy file to node(s)'],base,/row


  base2=widget_base(base,/row,/frame)

  base3=widget_base(base2,/column,/frame)
  xx=widget_label(base3,value='Enter own nodes')
  spec_nodes=widget_text(base3,/editable,xsize=12,ysize=5)
  xx=widget_label(base3,value='or')
  xmenu,['Select Nodes from list'],base3,/row
  base3=widget_base(base3,/column)
  xx=widget_label(base3,value=' Selected Nodes:')
  nodes1 = widget_text(base3 ,xsize=12, ysize=5,/scroll)

  base3=widget_base(base2,/column,/frame)
  xx=widget_label(base3,value='Specify same directory for all')
  nodes2 = widget_text(base3, /editable, xsize=12, ysize=1)
  xx=widget_label(base3,value='or')
  xx=widget_label(base3,value='Specify directory for each node,')
  xx=widget_label(base3,value='one per line, in order of ')
  xx=widget_label(base3,value='appearance under selected nodes')
  base3=widget_base(base3,/column)
  nodes6=widget_text(base3,/editable,xsize=12,ysize=8)
  xx=widget_label(base3,value='Filename:')
  nodes4 = widget_text(base3, /editable, xsize=20, ysize=1)

  base3=widget_base(base2,/column)
  xx=widget_label(base3,value='Be sure to get the')
  xx=widget_label(base3,value='files before comparing them')
  xmenu,['Select two nodes to compare'],base3,/row
  nodes7=widget_text(base3,xsize=12,ysize=2)
  xmenu,['Select file to edit or copy'],base3,/row
  edit_file=widget_text(base3,xsize=12,ysize=1)
  xx=widget_label(base3,value='')
  xx=widget_label(base3,value='')
 ; base3=widget_base(base2,/column)
  xmenu,['Select nodes to copy file to'],base3,/row
  copy_nodes=widget_text(base3,xsize=12,ysize=5,/scroll)


  base4=widget_base(base,/row,/frame)
  base5=widget_base(base4,/column)
  xx=widget_label(base5,value='Output')
  nodes5=widget_text(base5,xsize=75,ysize=5,/scroll)

  base4=widget_base(base,/row,/frame)
  base5=widget_base(base4,/column)
  xx=widget_label(base5,value='Command progress')
  com_node=widget_text(base5,xsize=75,ysize=5,/scroll)
  


all={node_list:nodes1,one_dir:nodes2, filename:nodes4, $
    output:nodes5,all_dir:nodes6,diff_nodes:nodes7,editable:edit_file $
    ,copy_to:copy_nodes,own_nodes:spec_nodes, command:com_node,font:font}
widget_control,set_uvalue=all,base
widget_control,/realize,base
xmanager,'xnet_file_diff',base

end

