[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

ruby-ncurses related problems

Stanislaw Halik

11/8/2006 2:37:00 AM

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?

2 Answers

Michael W. Ryder

11/8/2006 6:47:00 AM

0

Stanislaw Halik wrote:
> 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)?


> 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

11/8/2006 7:18:00 AM

0

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?