#!/usr/bin/env ruby

#
# http://rakuto.blogspot.jp/2006/09/rubyexpectrb.html
#



env='/usr/bin/env'
dclcmdopt="sw_ldump=.true. sw_iposx=50 sw_iposy=50 sw_lwait=.false. sw_lwait1=.false. sw_lwnd=.false."
dclcmd="#{env} DCLENVCHAR=_ #{dclcmdopt}"

#bin=ARGV[0]
bin="hop"

require 'pty'
require 'expect'

module Expect
  def spawn(cmd)
    puts "CMD: #{cmd}" if $expect_verbose
    PTY.spawn(cmd) do |r,w,pid|
      @input_stream = r
      @output_stream = w
      @child_pid = pid
    end
  end

  def expect(pat, timeout=10)
    ret = @input_stream.expect(pat, timeout) do |match|
      raise "expect %s timeout " % (pat.kind_of?(Regexp)? pat.source : pat) unless match
      put_cmd(yield(match))
    end
  end

  private
  def put_cmd(cmd)
    @output_stream.puts(cmd)
  end
end

def draw(dclcmd, bin)
  include Expect
  spawn("#{dclcmd} sw_fname=#{bin} ./#{bin}") do
    expect(/\$$/) {|match| "#{dclcmd} sw_fname=#{bin} ./#{bin}"}
    expect(/^  WORKSTATION IS (I) ? ;\n 1:X, 2:PS, 3:Tek, 4:Gtk ;\n/) {|match| "4"}
  end
end

draw(dclcmd, bin)
