Stanislaw Halik
11/8/2006 7:18:00 AM
On Wed, Nov 08, 2006, Michael W. Ryder wrote:
>> I'm trying to learn the Ncurses module. However, nonblocking getch()
>> doesn't work. A simple test case:
>> -->--
>> #!/usr/bin/env ruby
>> require 'ncurses'
>> Ncurses.initscr
>> Ncurses.start_color
>> Ncurses.noecho
>> Ncurses.cbreak
>> Ncurses.noraw
>> Ncurses.stdscr.nodelay(true)
>> Ncurses.stdscr.keypad(true)
>> Ncurses.refresh
>> while ch = Ncurses.getch
>> Ncurses.printw ch.to_s
>> Ncurses.refresh
>> end
>> --<--
>> prints '10' every time no characters are in the buffer. There's no
>> constant defined to be a '10' in both ncurses.h and the Ruby wrapper.
>> According to getch(3), it's supposed to return an 'ERR' constant, being
>> '-1'. It, however, returns '10' for some reason.
> Isn't 10 an ASCII CR (or is it LF)?
It is. However, the Return key isn't pressed at the time.
Besides, I found a bug in the standard Curses module: macro wrapping the
return value of getch() treats it as an unsigned integer.
/* def getch */
static VALUE
curses_getch(obj)
VALUE obj;
{
rb_read_check(stdin);
curses_stdscr();
return UINT2NUM(getch());
~~~~~~~~
}
For the value of EOF (-1, as present in ncurses), it wraps around. Where
should I report it?