Hi,

At Thu, 28 Nov 2002 08:36:49 +0900,
Lyle Johnson wrote:
> > I'm attempting to map output of a 'system' call
> > directly in to an FXText window.
> 
> <snip>
> 
> You might want to take a look at the inputs.rb example program that
> comes with FXRuby, although I'm not sure how well it's going to work
> on Windows. There is a (non-FXRuby related) problem with doing
> non-blocking file I/O on Windows and I'm not sure that it has been
> resolved yet.

Sorry, but not yet.

# IO multiplexing on pipes doesn't work under Windows since
# select() in WinSock nor WaitFor*Object(s) don't support
# pipes.  Now I wonder there's no other way except for native
# threads...


At Thu, 28 Nov 2002 07:21:23 +0900,
Jason Persampieri wrote:
> I've been looking for ways to change $stdout or
> something so that whatever the seperate app generates,
> it actually just goes straight to the window.

You may be possible to take "tail -f" approach.

  # NOTE: untested
  require 'tempfile'
  # redirect to a temporary file
  begin
    tmp = Tempfile.new('foo')
    saveout = STDOUT.dup
    STDOUT.reopen(tmp)
    f = IO.popen('foo.exe', 'w')	# system cannot run child
				   	# process asynchronously.
  ensure
    STDOUT.reopen(saveout)
    saveout.close
  end
  Thread.new do
    begin
      # read output while the process is running
      until Process.waitpid(f.pid, Process::WNOHANG)
        sleep 1
        myTextBox.appendText(tmp.read)	# read new data all
        foo.seek(0, IO::SEEK_CUR)	# clear EOF flag
      end
    ensure
      tmp.close(true)
    end
  end

> textBoxStream = IO.new($stdout.fileno,"w")
> def textBoxStream.putc(char)
>   myTextBox.appendText(char)
> end

Overridden #putc doesn't work as event callback.

-- 
Nobu Nakada