ruby-ncurses related problems

  • Thread starter Stanislaw Halik
  • Start date
S

Stanislaw Halik

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

Michael W. Ryder

Stanislaw said:
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.

Isn't 10 an ASCII CR (or is it LF)?
 
S

Stanislaw Halik

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?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,024
Latest member
ARDU_PROgrammER

Latest Threads

Top