rubysl-curses 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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