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?