From: Shoichi OZAWA Date: 1997-09-02T13:03:23+09:00 Subject: [ruby-list:4043] Re: Curses (Re: document for beginner) ----Next_Part(Tue_Sep__2_12:55:41_1997)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit こんにちは 小澤@日立 です。 From: Kikutani Makoto Subject: [ruby-list:3926] Curses (Re: document for beginner) Date: Fri, 29 Aug 97 13:50:13 +0900 > Fri, Aug 29, 1997 at 12:54:15PM +0900 において > Masaki Suketa さん曰く: > > > >cursesなんかは使いかたがわからないんですけど。 > > 私も使い方わからなかったんで、curses.c ファイルと C の curses > > libraryの説明が載ってた本を元に、試行錯誤しました。 > > 大したことしてないんですけど curses 使う参考になればと思い以下に > > ソース付けます。 わたしも遅ればせながら curses のサンプルを出します。 ncurses-1.9.4 のソースに含まれていた C のサンプルを ruby で書き換えたものです。rain.c と view.c の二つだけです。 ではでは。 -- 小澤 彰一 Keep it simple, stupid. mailto:ozawa@omika.hitachi.co.jp ----Next_Part(Tue_Sep__2_12:55:41_1997)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Description: "rain.rb" #!/usr/local/bin/ruby # rain for a curses test require "curses" include Curses def onsig(sig) close_screen exit sig end def ranf rand(32767).to_f / 32767 end # main # for i in 1 .. 15 # SIGHUP .. SIGTERM if trap(i, "SIG_IGN") != 0 then # 0 for SIG_IGN trap(i) {|sig| onsig(sig) } end end init_screen nl noecho srand xpos = {} ypos = {} r = lines - 4 c = cols - 4 for i in 0 .. 4 xpos[i] = (c * ranf).to_i + 2 ypos[i] = (r * ranf).to_i + 2 end i = 0 while TRUE x = (c * ranf).to_i + 2 y = (r * ranf).to_i + 2 setpos(y, x); addstr(".") setpos(ypos[i], xpos[i]); addstr("o") i = if i == 0 then 4 else i - 1 end setpos(ypos[i], xpos[i]); addstr("O") i = if i == 0 then 4 else i - 1 end setpos(ypos[i] - 1, xpos[i]); addstr("-") setpos(ypos[i], xpos[i] - 1); addstr("|.|") setpos(ypos[i] + 1, xpos[i]); addstr("-") i = if i == 0 then 4 else i - 1 end setpos(ypos[i] - 2, xpos[i]); addstr("-") setpos(ypos[i] - 1, xpos[i] - 1); addstr("/ \\") setpos(ypos[i], xpos[i] - 2); addstr("| O |") setpos(ypos[i] + 1, xpos[i] - 1); addstr("\\ /") setpos(ypos[i] + 2, xpos[i]); addstr("-") i = if i == 0 then 4 else i - 1 end setpos(ypos[i] - 2, xpos[i]); addstr(" ") setpos(ypos[i] - 1, xpos[i] - 1); addstr(" ") setpos(ypos[i], xpos[i] - 2); addstr(" ") setpos(ypos[i] + 1, xpos[i] - 1); addstr(" ") setpos(ypos[i] + 2, xpos[i]); addstr(" ") xpos[i] = x ypos[i] = y refresh sleep(0.5) end # end of main ----Next_Part(Tue_Sep__2_12:55:41_1997)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Description: "view.rb" #!/usr/local/bin/ruby require "curses" include Curses # # main # if ARGV.size != 1 then printf("usage: view file\n"); exit end begin fp = open(ARGV[0], "r") rescue raise "cannot open file: #{ARGV[1]}" end # signal(SIGINT, finish) init_screen #keypad(stdscr, TRUE) nonl cbreak noecho #scrollok(stdscr, TRUE) # slurp the file data_lines = [] fp.each_line { |l| data_lines.push(l) } fp.close lptr = 0 while TRUE i = 0 while i < lines setpos(i, 0) #clrtoeol addstr(data_lines[lptr + i]) #if data_lines[lptr + i] i += 1 end explicit = FALSE n = 0 while TRUE c = getch.chr if c =~ "[0-9]" then n = 10 * n + c.to_i else break end end n = 1 if !explicit && n == 0 case c when "n" #when KEY_DOWN i = 0 while i < n if lptr + lines < data_lines.size then lptr += 1 else break end i += 1 end #wscrl(i) when "p" #when KEY_UP i = 0 while i < n if lptr > 0 then lptr -= 1 else break end i += 1 end #wscrl(-i) when "q" break end end close_screen ----Next_Part(Tue_Sep__2_12:55:41_1997)----