From: Colin Bartlett Date: 2009-05-17T11:05:23+09:00 Subject: Re: Console output > Yeah I tried with this clear method, with the unsafe system('cls') > however, but if i clear and redraw every second, it flickers very much. Using "cls" had also occurred to me, but I (literally) see what you mean about the flickering: 50.times do | k | k = k.to_s system( "cls" ) 30.times do | n | n = ' *' + k + '=' + n.to_s puts n * 10 end end Not very pleasant visually, and it looks as though it would be very difficult to actually see any information properly. > I have asked several people and I got the answer about using > ncurses/curses, however I haven't found any that works > both on win32 and linux, which I need. That suggests to me that you've tried using "curses" on Win32 and Linux and that it didn't do what you wanted. Is that right? I'm gettting the distinct impression that you and Shot know a lot more about this than I do, which makes me a bit reluctant to post the code below, because I suspect you may have already tried something like it, and it didn't do what you want. But since it's something which I might use in the future, I'll post it, because that will fix it more firmly in my mind. (And now I *really* know why GNU wget uses a single line progress bar: it's simpler just to use print 13.chr + "text".) (Assuming this doesn't do what you want on Linux (or Win32), I'd be interested in a few details of what problems you've found trying to get something to work on both Win32 and Linux.) This is based on the "hello.rb" example in the following place on my Win32 Ruby installation: C:/ruby/src/ruby-1.8.6-p111/ext/curses require "curses" include Curses init_screen puts '##### screen size(?): lines, cols:', lines, cols puts 'about to display text' sleep 2 begin crmode setpos( 8, 13 ) addstr("display text which we will partly over-write later") refresh sleep 2 setpos( 3, 40 ) ; addstr("display some text") ; refresh setpos( 8, 40 ) ; addstr("PARTLY") ; refresh setpos( 8, 32 ) ; addstr("W") ; refresh 20000.times do | k | setpos( 8, 13 ) ; addstr( k.to_s + " ") ; refresh end ensure close_screen end This seems to work reasonably fast on Win32. (And it reminds me that I did once know something about moving stuff about on screens using DOS: in the 1980s I got so fed up with reinventing wheels every time I wanted input in BASIC programs that I wrote a parameter file driven program to generate input screens. Somewhat to my surprise, it worked quite well!)