Ruby-ncurses related problems

Heya,

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.

Now i’m out of luck. There’s no support contact listed on ruby-ncurses
project’s site and the Curses module seems obsolete - it doesn’t
implement w*printw()-related functions which i like using much.

Is there some other ncurses module that actually works?

Stanislaw Halik wrote:

Ncurses.noecho

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)?

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:

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?