rubysl-curses 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,31 @@
1
+ require 'mkmf'
2
+
3
+ dir_config('curses')
4
+ dir_config('ncurses')
5
+ dir_config('termcap')
6
+
7
+ make=false
8
+ have_library("mytinfo", "tgetent") if /bow/ =~ RUBY_PLATFORM
9
+ have_library("tinfo", "tgetent") or have_library("termcap", "tgetent")
10
+ if have_header(*curses=%w"ncurses.h") and have_library("ncurses", "initscr")
11
+ make=true
12
+ elsif have_header(*curses=%w"ncurses/curses.h") and have_library("ncurses", "initscr")
13
+ make=true
14
+ elsif have_header(*curses=%w"curses_colr/curses.h") and have_library("cur_colr", "initscr")
15
+ curses.unshift("varargs.h")
16
+ make=true
17
+ elsif have_header(*curses=%w"curses.h") and have_library("curses", "initscr")
18
+ make=true
19
+ end
20
+
21
+ if make
22
+ for f in %w(beep bkgd bkgdset curs_set deleteln doupdate flash getbkgd getnstr init isendwin keyname keypad resizeterm scrl set setscrreg ungetch wattroff wattron wattrset wbkgd wbkgdset wdeleteln wgetnstr wresize wscrl wsetscrreg def_prog_mode reset_prog_mode timeout wtimeout nodelay init_color wcolor_set)
23
+ have_func(f) || (have_macro(f, curses) && $defs.push(format("-DHAVE_%s", f.upcase)))
24
+ end
25
+ flag = "-D_XOPEN_SOURCE_EXTENDED"
26
+ src = "int test_var[(sizeof(char*)>sizeof(int))*2-1];"
27
+ if try_compile(cpp_include(%w[stdio.h stdlib.h]+curses)+src , flag)
28
+ $defs << flag
29
+ end
30
+ create_makefile("curses/curses")
31
+ end
data/lib/curses.rb ADDED
@@ -0,0 +1 @@
1
+ require "rubysl/curses"
@@ -0,0 +1,31 @@
1
+ require 'mkmf'
2
+
3
+ dir_config('curses')
4
+ dir_config('ncurses')
5
+ dir_config('termcap')
6
+
7
+ make=false
8
+ have_library("mytinfo", "tgetent") if /bow/ =~ RUBY_PLATFORM
9
+ have_library("tinfo", "tgetent") or have_library("termcap", "tgetent")
10
+ if have_header(*curses=%w"ncurses.h") and have_library("ncurses", "initscr")
11
+ make=true
12
+ elsif have_header(*curses=%w"ncurses/curses.h") and have_library("ncurses", "initscr")
13
+ make=true
14
+ elsif have_header(*curses=%w"curses_colr/curses.h") and have_library("cur_colr", "initscr")
15
+ curses.unshift("varargs.h")
16
+ make=true
17
+ elsif have_header(*curses=%w"curses.h") and have_library("curses", "initscr")
18
+ make=true
19
+ end
20
+
21
+ if make
22
+ for f in %w(beep bkgd bkgdset curs_set deleteln doupdate flash getbkgd getnstr init isendwin keyname keypad resizeterm scrl set setscrreg ungetch wattroff wattron wattrset wbkgd wbkgdset wdeleteln wgetnstr wresize wscrl wsetscrreg def_prog_mode reset_prog_mode timeout wtimeout nodelay init_color wcolor_set)
23
+ have_func(f) || (have_macro(f, curses) && $defs.push(format("-DHAVE_%s", f.upcase)))
24
+ end
25
+ flag = "-D_XOPEN_SOURCE_EXTENDED"
26
+ src = "int test_var[(sizeof(char*)>sizeof(int))*2-1];"
27
+ if try_compile(cpp_include(%w[stdio.h stdlib.h]+curses)+src , flag)
28
+ $defs << flag
29
+ end
30
+ create_makefile("curses")
31
+ end
@@ -0,0 +1,30 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require "curses"
4
+ include Curses
5
+
6
+ def show_message(message)
7
+ width = message.length + 6
8
+ win = Window.new(5, width,
9
+ (lines - 5) / 2, (cols - width) / 2)
10
+ win.box(?|, ?-)
11
+ win.setpos(2, 3)
12
+ win.addstr(message)
13
+ win.refresh
14
+ win.getch
15
+ win.close
16
+ end
17
+
18
+ init_screen
19
+ begin
20
+ crmode
21
+ # show_message("Hit any key")
22
+ setpos((lines - 5) / 2, (cols - 10) / 2)
23
+ addstr("Hit any key")
24
+ refresh
25
+ getch
26
+ show_message("Hello, World!")
27
+ refresh
28
+ ensure
29
+ close_screen
30
+ end
@@ -0,0 +1,53 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require "curses"
4
+ include Curses
5
+
6
+ def show_message(*msgs)
7
+ message = msgs.join
8
+ width = message.length + 6
9
+ win = Window.new(5, width,
10
+ (lines - 5) / 2, (cols - width) / 2)
11
+ win.keypad = true
12
+ win.attron(color_pair(COLOR_RED)){
13
+ win.box(?|, ?-, ?+)
14
+ }
15
+ win.setpos(2, 3)
16
+ win.addstr(message)
17
+ win.refresh
18
+ win.getch
19
+ win.close
20
+ end
21
+
22
+ init_screen
23
+ start_color
24
+ init_pair(COLOR_BLUE,COLOR_BLUE,COLOR_WHITE)
25
+ init_pair(COLOR_RED,COLOR_RED,COLOR_WHITE)
26
+ crmode
27
+ noecho
28
+ stdscr.keypad(true)
29
+
30
+ begin
31
+ mousemask(BUTTON1_CLICKED|BUTTON2_CLICKED|BUTTON3_CLICKED|BUTTON4_CLICKED)
32
+ setpos((lines - 5) / 2, (cols - 10) / 2)
33
+ attron(color_pair(COLOR_BLUE)|A_BOLD){
34
+ addstr("click")
35
+ }
36
+ refresh
37
+ while( true )
38
+ c = getch
39
+ case c
40
+ when KEY_MOUSE
41
+ m = getmouse
42
+ if( m )
43
+ show_message("getch = #{c.inspect}, ",
44
+ "mouse event = #{'0x%x' % m.bstate}, ",
45
+ "axis = (#{m.x},#{m.y},#{m.z})")
46
+ end
47
+ break
48
+ end
49
+ end
50
+ refresh
51
+ ensure
52
+ close_screen
53
+ end
@@ -0,0 +1,76 @@
1
+ #!/usr/local/bin/ruby
2
+ # rain for a curses test
3
+
4
+ require "curses"
5
+ include Curses
6
+
7
+ def onsig(sig)
8
+ close_screen
9
+ exit sig
10
+ end
11
+
12
+ def ranf
13
+ rand(32767).to_f / 32767
14
+ end
15
+
16
+ # main #
17
+ for i in 1 .. 15 # SIGHUP .. SIGTERM
18
+ if trap(i, "SIG_IGN") != 0 then # 0 for SIG_IGN
19
+ trap(i) {|sig| onsig(sig) }
20
+ end
21
+ end
22
+
23
+ init_screen
24
+ nl
25
+ noecho
26
+ srand
27
+
28
+ xpos = {}
29
+ ypos = {}
30
+ r = lines - 4
31
+ c = cols - 4
32
+ for i in 0 .. 4
33
+ xpos[i] = (c * ranf).to_i + 2
34
+ ypos[i] = (r * ranf).to_i + 2
35
+ end
36
+
37
+ i = 0
38
+ while TRUE
39
+ x = (c * ranf).to_i + 2
40
+ y = (r * ranf).to_i + 2
41
+
42
+
43
+ setpos(y, x); addstr(".")
44
+
45
+ setpos(ypos[i], xpos[i]); addstr("o")
46
+
47
+ i = if i == 0 then 4 else i - 1 end
48
+ setpos(ypos[i], xpos[i]); addstr("O")
49
+
50
+ i = if i == 0 then 4 else i - 1 end
51
+ setpos(ypos[i] - 1, xpos[i]); addstr("-")
52
+ setpos(ypos[i], xpos[i] - 1); addstr("|.|")
53
+ setpos(ypos[i] + 1, xpos[i]); addstr("-")
54
+
55
+ i = if i == 0 then 4 else i - 1 end
56
+ setpos(ypos[i] - 2, xpos[i]); addstr("-")
57
+ setpos(ypos[i] - 1, xpos[i] - 1); addstr("/ \\")
58
+ setpos(ypos[i], xpos[i] - 2); addstr("| O |")
59
+ setpos(ypos[i] + 1, xpos[i] - 1); addstr("\\ /")
60
+ setpos(ypos[i] + 2, xpos[i]); addstr("-")
61
+
62
+ i = if i == 0 then 4 else i - 1 end
63
+ setpos(ypos[i] - 2, xpos[i]); addstr(" ")
64
+ setpos(ypos[i] - 1, xpos[i] - 1); addstr(" ")
65
+ setpos(ypos[i], xpos[i] - 2); addstr(" ")
66
+ setpos(ypos[i] + 1, xpos[i] - 1); addstr(" ")
67
+ setpos(ypos[i] + 2, xpos[i]); addstr(" ")
68
+
69
+
70
+ xpos[i] = x
71
+ ypos[i] = y
72
+ refresh
73
+ sleep(0.5)
74
+ end
75
+
76
+ # end of main
@@ -0,0 +1,91 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require "curses"
4
+ include Curses
5
+
6
+ #
7
+ # main
8
+ #
9
+
10
+ if ARGV.size != 1 then
11
+ printf("usage: view file\n");
12
+ exit
13
+ end
14
+ begin
15
+ fp = open(ARGV[0], "r")
16
+ rescue
17
+ raise "cannot open file: #{ARGV[1]}"
18
+ end
19
+
20
+ # signal(SIGINT, finish)
21
+
22
+ init_screen
23
+ #keypad(stdscr, TRUE)
24
+ nonl
25
+ cbreak
26
+ noecho
27
+ #scrollok(stdscr, TRUE)
28
+
29
+ # slurp the file
30
+ data_lines = []
31
+ fp.each_line { |l|
32
+ data_lines.push(l)
33
+ }
34
+ fp.close
35
+
36
+
37
+ lptr = 0
38
+ while TRUE
39
+ i = 0
40
+ while i < lines
41
+ setpos(i, 0)
42
+ #clrtoeol
43
+ addstr(data_lines[lptr + i]) #if data_lines[lptr + i]
44
+ i += 1
45
+ end
46
+ refresh
47
+
48
+ explicit = FALSE
49
+ n = 0
50
+ while TRUE
51
+ c = getch.chr
52
+ if c =~ /[0-9]/
53
+ n = 10 * n + c.to_i
54
+ else
55
+ break
56
+ end
57
+ end
58
+
59
+ n = 1 if !explicit && n == 0
60
+
61
+ case c
62
+ when "n" #when KEY_DOWN
63
+ i = 0
64
+ while i < n
65
+ if lptr + lines < data_lines.size then
66
+ lptr += 1
67
+ else
68
+ break
69
+ end
70
+ i += 1
71
+ end
72
+ #wscrl(i)
73
+
74
+ when "p" #when KEY_UP
75
+ i = 0
76
+ while i < n
77
+ if lptr > 0 then
78
+ lptr -= 1
79
+ else
80
+ break
81
+ end
82
+ i += 1
83
+ end
84
+ #wscrl(-i)
85
+
86
+ when "q"
87
+ break
88
+ end
89
+
90
+ end
91
+ close_screen
@@ -0,0 +1,115 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require "curses"
4
+
5
+ if ARGV.size != 1 then
6
+ printf("usage: view file\n");
7
+ exit
8
+ end
9
+ begin
10
+ fp = open(ARGV[0], "r")
11
+ rescue
12
+ raise "cannot open file: #{ARGV[1]}"
13
+ end
14
+
15
+ # signal(SIGINT, finish)
16
+
17
+ Curses.init_screen
18
+ Curses.nonl
19
+ Curses.cbreak
20
+ Curses.noecho
21
+
22
+ $screen = Curses.stdscr
23
+
24
+ $screen.scrollok(true)
25
+ #$screen.keypad(true)
26
+
27
+ # slurp the file
28
+ $data_lines = []
29
+ fp.each_line { |l|
30
+ $data_lines.push(l.chop)
31
+ }
32
+ fp.close
33
+
34
+ $top = 0
35
+ $data_lines[0..$screen.maxy-1].each_with_index{|line, idx|
36
+ $screen.setpos(idx, 0)
37
+ $screen.addstr(line)
38
+ }
39
+ $screen.setpos(0,0)
40
+ $screen.refresh
41
+
42
+ def scroll_up
43
+ if( $top > 0 )
44
+ $screen.scrl(-1)
45
+ $top -= 1
46
+ str = $data_lines[$top]
47
+ if( str )
48
+ $screen.setpos(0, 0)
49
+ $screen.addstr(str)
50
+ end
51
+ return true
52
+ else
53
+ return false
54
+ end
55
+ end
56
+
57
+ def scroll_down
58
+ if( $top + $screen.maxy < $data_lines.length )
59
+ $screen.scrl(1)
60
+ $top += 1
61
+ str = $data_lines[$top + $screen.maxy - 1]
62
+ if( str )
63
+ $screen.setpos($screen.maxy - 1, 0)
64
+ $screen.addstr(str)
65
+ end
66
+ return true
67
+ else
68
+ return false
69
+ end
70
+ end
71
+
72
+ while true
73
+ result = true
74
+ c = Curses.getch
75
+ case c
76
+ when Curses::KEY_DOWN, Curses::KEY_CTRL_N
77
+ result = scroll_down
78
+ when Curses::KEY_UP, Curses::KEY_CTRL_P
79
+ result = scroll_up
80
+ when Curses::KEY_NPAGE, ?\s # white space
81
+ for i in 0..($screen.maxy - 2)
82
+ if( ! scroll_down )
83
+ if( i == 0 )
84
+ result = false
85
+ end
86
+ break
87
+ end
88
+ end
89
+ when Curses::KEY_PPAGE
90
+ for i in 0..($screen.maxy - 2)
91
+ if( ! scroll_up )
92
+ if( i == 0 )
93
+ result = false
94
+ end
95
+ break
96
+ end
97
+ end
98
+ when Curses::KEY_LEFT, Curses::KEY_CTRL_T
99
+ while( scroll_up )
100
+ end
101
+ when Curses::KEY_RIGHT, Curses::KEY_CTRL_B
102
+ while( scroll_down )
103
+ end
104
+ when ?q
105
+ break
106
+ else
107
+ $screen.setpos(0,0)
108
+ $screen.addstr("[unknown key `#{Curses.keyname(c)}'=#{c}] ")
109
+ end
110
+ if( !result )
111
+ Curses.beep
112
+ end
113
+ $screen.setpos(0,0)
114
+ end
115
+ Curses.close_screen
@@ -0,0 +1,7 @@
1
+ require "rubysl-curses/version"
2
+
3
+ module RubySL
4
+ module Curses
5
+ # Your code goes here...
6
+ end
7
+ end