---- Original message from Bill Kelly  on 8/9/2005 10:25 AM:

>From: "Bill Atkins" <batkins57 / gmail.com>
>  
>
>>How can I determine if there's input waiting on STDIN before
>>calling gets?
>>    
>>
>I use:
>
>if WINDOWS_VERSION
>  require 'dl'
>  $win32_console_kbhit = Win32API.new("msvcrt", "_kbhit", [], 'I')
>  def console_input_ready?
>    $win32_console_kbhit.call != 0
>  end
>else
>  def console_input_ready?
>    select([$stdin], nil, nil, 0) != nil
>  end
>end
>
>Note that if you do a gets() when console_input_ready?
>is true, you'll still block until the user hits <enter>.
>
>BTW, I was using:
>
>WINDOWS_VERSION = (RUBY_PLATFORM =~ /win32/) != nil
>
>  
>
You can also define '_getch' to allow you to get the character right 
away and not have to wait for the user to press the <enter> key.

  require 'Win32API'

  $win32_console_kbhit = Win32API.new("msvcrt", "_kbhit", [], 'I')
  $win32_console_cputs = Win32API.new("msvcrt", "_cputs", ['P'], 'I')
  $win32_console_getch = Win32API.new("msvcrt", "_getch", [], 'I')

  def console_input_ready?
    $win32_console_kbhit.call != 0
  end

  def console_input
    $win32_console_getch.call
  end

  def console_output( str )
    $win32_console_cputs.call( str )
  end

  while true
    if console_input_ready? then
        ch = console_input
        print "ch: <#{ch.chr}>\n"
        break
    else
        console_output( "." )
        sleep 0.5
    end
  end