ffi-ncurses 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +22 -0
- data/README.rdoc +220 -0
- data/Rakefile +50 -0
- data/examples/doc-eg1.rb +14 -0
- data/examples/doc-eg2.rb +23 -0
- data/examples/example-attributes.rb +40 -0
- data/examples/example-colour.rb +62 -0
- data/examples/example-cursor.rb +22 -0
- data/examples/example-getsetsyx.rb +55 -0
- data/examples/example-hello.rb +24 -0
- data/examples/example-jruby.rb +14 -0
- data/examples/example-keys.rb +25 -0
- data/examples/example-mouse.rb +50 -0
- data/examples/example-printw-variadic.rb +15 -0
- data/examples/example-softkeys.rb +22 -0
- data/examples/example-stdscr.rb +18 -0
- data/examples/example-windows.rb +24 -0
- data/examples/example.rb +108 -0
- data/ffi-ncurses.gemspec +37 -0
- data/lib/ffi-ncurses.rb +584 -0
- data/lib/ffi-ncurses/darwin.rb +215 -0
- data/lib/ffi-ncurses/keydefs.rb +106 -0
- data/lib/ffi-ncurses/mouse.rb +146 -0
- data/lib/ffi-ncurses/winstruct.rb +177 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +50 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +300 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- metadata +109 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
|
7
|
+
# translated from "Programmer's Guide to NCurses", Gookin, p. 292
|
8
|
+
|
9
|
+
begin
|
10
|
+
include FFI::NCurses
|
11
|
+
initscr
|
12
|
+
noecho
|
13
|
+
win = newwin(5, 20, 10, 30)
|
14
|
+
box(win, 0, 0)
|
15
|
+
waddstr(win, "This is 'win'")
|
16
|
+
wrefresh(win)
|
17
|
+
wgetch(win)
|
18
|
+
|
19
|
+
winy, winx = getyx(win)
|
20
|
+
stdy, stdx = getyx(stdscr)
|
21
|
+
vy, vx = getsyx
|
22
|
+
printw(" win: %d, %d\n", :int, winy, :int, winx)
|
23
|
+
printw(" stdscr: %d, %d\n", :int, stdy, :int, stdx)
|
24
|
+
printw("virtual: %d, %d\n", :int, vy, :int, vx)
|
25
|
+
refresh
|
26
|
+
getch
|
27
|
+
|
28
|
+
vy, vx = getsyx
|
29
|
+
printw("virtual: %d, %d\n", :int, vy, :int, vx)
|
30
|
+
refresh
|
31
|
+
getch
|
32
|
+
|
33
|
+
leaveok(win, FFI::NCurses::TRUE)
|
34
|
+
wrefresh(win)
|
35
|
+
winy, winx = getyx(win)
|
36
|
+
vy, vx = getsyx
|
37
|
+
printw(" win: %d, %d\n", :int, winy, :int, winx)
|
38
|
+
printw("virtual: %d, %d\n", :int, vy, :int, vx)
|
39
|
+
refresh
|
40
|
+
getch
|
41
|
+
|
42
|
+
setsyx(3, 3)
|
43
|
+
wrefresh(newscr)
|
44
|
+
getch
|
45
|
+
vy, vx = getsyx
|
46
|
+
printw("virtual: %d, %d\n", :int, vy, :int, vx)
|
47
|
+
refresh
|
48
|
+
getch
|
49
|
+
|
50
|
+
rescue Object => e
|
51
|
+
FFI::NCurses.endwin
|
52
|
+
raise
|
53
|
+
ensure
|
54
|
+
FFI::NCurses.endwin
|
55
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
include FFI::NCurses
|
7
|
+
begin
|
8
|
+
greeting = ARGV.shift || "World"
|
9
|
+
stdscr = initscr
|
10
|
+
raw
|
11
|
+
keypad stdscr, 1
|
12
|
+
noecho
|
13
|
+
curs_set 0
|
14
|
+
printw "Hello %s", :string, greeting
|
15
|
+
move 3, 0
|
16
|
+
addstr "Press any key to continue"
|
17
|
+
refresh
|
18
|
+
ch = getch
|
19
|
+
printw "\nYou pressed %c (%d)", :char, ch, :int, ch
|
20
|
+
refresh
|
21
|
+
sleep 1
|
22
|
+
ensure
|
23
|
+
endwin
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
include FFI::NCurses
|
7
|
+
begin
|
8
|
+
initscr
|
9
|
+
raw
|
10
|
+
keypad stdscr, 1
|
11
|
+
noecho
|
12
|
+
curs_set 0
|
13
|
+
ch = 0
|
14
|
+
name = "none"
|
15
|
+
while ch != 27
|
16
|
+
clear
|
17
|
+
addstr "Press any key (Escape to exit): "
|
18
|
+
printw "name: %s dec: %d char: [%c]", :string, name, :int, ch, :int, ch
|
19
|
+
refresh
|
20
|
+
ch = getch
|
21
|
+
name = keyname(ch)
|
22
|
+
end
|
23
|
+
ensure
|
24
|
+
endwin
|
25
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
require 'ffi-ncurses/mouse'
|
7
|
+
|
8
|
+
include FFI::NCurses
|
9
|
+
|
10
|
+
begin
|
11
|
+
initscr
|
12
|
+
clear
|
13
|
+
noecho
|
14
|
+
cbreak
|
15
|
+
keypad stdscr, FFI::NCurses::TRUE
|
16
|
+
|
17
|
+
# Get all the mouse events
|
18
|
+
mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, nil)
|
19
|
+
mouse_event = MEVENT.new
|
20
|
+
ch = 0
|
21
|
+
addstr "Click mouse buttons anywhere on the screen. q to quit\n"
|
22
|
+
until ch == ?q do
|
23
|
+
ch = getch
|
24
|
+
case ch
|
25
|
+
when KEY_MOUSE
|
26
|
+
if getmouse(mouse_event) == OK
|
27
|
+
if FFI::NCurses::BUTTON_CLICK(mouse_event[:bstate], 1) > 0
|
28
|
+
addstr "Button 1 pressed (%d, %d, %x)" % [mouse_event[:y], mouse_event[:x], mouse_event[:bstate]]
|
29
|
+
elsif FFI::NCurses::BUTTON_CLICK(mouse_event[:bstate], 2) > 0
|
30
|
+
addstr "Button 2 pressed (%d, %d, %x)" % [mouse_event[:y], mouse_event[:x], mouse_event[:bstate]]
|
31
|
+
elsif FFI::NCurses::BUTTON_CLICK(mouse_event[:bstate], 3) > 0
|
32
|
+
addstr "Button 3 pressed (%d, %d, %x)" % [mouse_event[:y], mouse_event[:x], mouse_event[:bstate]]
|
33
|
+
else
|
34
|
+
addstr "Other mouse event %x" % mouse_event[:bstate]
|
35
|
+
end
|
36
|
+
row = getcury(stdscr) + 1
|
37
|
+
move row, 0
|
38
|
+
move mouse_event[:y], mouse_event[:x]
|
39
|
+
addch " "[0] | WA_STANDOUT
|
40
|
+
move row, 0
|
41
|
+
end
|
42
|
+
else
|
43
|
+
printw "other event (%lu)", :ulong, ch
|
44
|
+
addstr "\n"
|
45
|
+
end
|
46
|
+
refresh
|
47
|
+
end
|
48
|
+
ensure
|
49
|
+
endwin
|
50
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# shows how to call variadic functions
|
3
|
+
#
|
4
|
+
# Sean O'Halpin, 2009-02-15
|
5
|
+
#
|
6
|
+
require 'ffi-ncurses'
|
7
|
+
begin
|
8
|
+
FFI::NCurses.initscr
|
9
|
+
FFI::NCurses.clear
|
10
|
+
FFI::NCurses.printw("Hello %s! There are %d arguments to this variadic function!", :string, "world", :int, 2)
|
11
|
+
FFI::NCurses.refresh
|
12
|
+
FFI::NCurses.getch
|
13
|
+
ensure
|
14
|
+
FFI::NCurses.endwin
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
include FFI::NCurses
|
7
|
+
begin
|
8
|
+
slk_init(0)
|
9
|
+
initscr
|
10
|
+
slk_set(1, "Mabelode", 1)
|
11
|
+
slk_set(2, "Xiombarg", 1)
|
12
|
+
slk_set(3, "Arioch", 1)
|
13
|
+
slk_set(4, "Chaos", 1)
|
14
|
+
slk_set(5, "Law", 1)
|
15
|
+
slk_set(6, "Corum", 1)
|
16
|
+
slk_set(7, "Jhaelen", 1)
|
17
|
+
slk_set(8, "Irsei", 1)
|
18
|
+
slk_refresh
|
19
|
+
getch
|
20
|
+
ensure
|
21
|
+
endwin
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-01-31
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
begin
|
7
|
+
scr = FFI::NCurses.initscr
|
8
|
+
FFI::NCurses.box(FFI::NCurses.stdscr, 0, 0)
|
9
|
+
FFI::NCurses.mvaddstr 1, 1, "#{[scr, FFI::NCurses.stdscr].inspect}"
|
10
|
+
FFI::NCurses.refresh
|
11
|
+
FFI::NCurses.getch
|
12
|
+
|
13
|
+
rescue Object => e
|
14
|
+
FFI::NCurses.endwin
|
15
|
+
raise
|
16
|
+
ensure
|
17
|
+
FFI::NCurses.endwin
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Sean O'Halpin, 2009-02-15
|
4
|
+
#
|
5
|
+
require 'ffi-ncurses'
|
6
|
+
include FFI::NCurses
|
7
|
+
|
8
|
+
begin
|
9
|
+
initscr
|
10
|
+
curs_set 0
|
11
|
+
win = newwin(6, 12, 15, 15)
|
12
|
+
box(win, 0, 0)
|
13
|
+
inner_win = newwin(4, 10, 16, 16)
|
14
|
+
waddstr(inner_win, (["Hello window!"] * 5).join(' '))
|
15
|
+
wrefresh(win)
|
16
|
+
wrefresh(inner_win)
|
17
|
+
ch = wgetch(inner_win)
|
18
|
+
|
19
|
+
rescue Object => e
|
20
|
+
endwin
|
21
|
+
puts e
|
22
|
+
ensure
|
23
|
+
endwin
|
24
|
+
end
|
data/examples/example.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file exercises a mish-mash of different features.
|
4
|
+
#
|
5
|
+
# Sean O'Halpin, 2009-01-18
|
6
|
+
#
|
7
|
+
require 'ffi-ncurses'
|
8
|
+
begin
|
9
|
+
# the methods can be called as module methods
|
10
|
+
FFI::NCurses.initscr
|
11
|
+
FFI::NCurses.clear
|
12
|
+
FFI::NCurses.printw("Hello world!")
|
13
|
+
FFI::NCurses.refresh
|
14
|
+
FFI::NCurses.getch
|
15
|
+
FFI::NCurses.endwin
|
16
|
+
|
17
|
+
# or as included methods
|
18
|
+
include FFI::NCurses
|
19
|
+
initscr
|
20
|
+
start_color
|
21
|
+
curs_set 0
|
22
|
+
raw
|
23
|
+
cbreak
|
24
|
+
noecho
|
25
|
+
clear
|
26
|
+
move 10, 10
|
27
|
+
standout
|
28
|
+
# hmmm.. you have to jump through some hoops to avoid temporary variables
|
29
|
+
#
|
30
|
+
printw("Hi! maxyx %d %d\n", *([:int, :int].zip(getmaxyx(FFI::NCurses.stdscr)).flatten))
|
31
|
+
# easier to do this
|
32
|
+
#addstr(sprintf("paryx %d %d\n", *getparyx(FFI::NCurses.stdscr)))
|
33
|
+
standend
|
34
|
+
|
35
|
+
init_pair(1, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::BLACK)
|
36
|
+
init_pair(2, FFI::NCurses::Colour::RED, FFI::NCurses::Colour::BLACK)
|
37
|
+
init_pair(3, FFI::NCurses::Colour::GREEN, FFI::NCurses::Colour::BLACK)
|
38
|
+
init_pair(4, FFI::NCurses::Colour::YELLOW, FFI::NCurses::Colour::BLACK)
|
39
|
+
init_pair(5, FFI::NCurses::Colour::BLUE, FFI::NCurses::Colour::BLACK)
|
40
|
+
init_pair(6, FFI::NCurses::Colour::MAGENTA, FFI::NCurses::Colour::BLACK)
|
41
|
+
init_pair(7, FFI::NCurses::Colour::CYAN, FFI::NCurses::Colour::BLACK)
|
42
|
+
init_pair(8, FFI::NCurses::Colour::WHITE, FFI::NCurses::Colour::BLACK)
|
43
|
+
|
44
|
+
init_pair(9, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::BLACK)
|
45
|
+
init_pair(10, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::RED)
|
46
|
+
init_pair(11, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::GREEN)
|
47
|
+
init_pair(12, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::YELLOW)
|
48
|
+
init_pair(13, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::BLUE)
|
49
|
+
init_pair(14, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::MAGENTA)
|
50
|
+
init_pair(15, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::CYAN)
|
51
|
+
init_pair(16, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::WHITE)
|
52
|
+
|
53
|
+
1.upto(16) do |i|
|
54
|
+
attr_set FFI::NCurses::A_NORMAL, i, nil
|
55
|
+
addch(?A - 1 + i)
|
56
|
+
end
|
57
|
+
attr_set FFI::NCurses::A_HORIZONTAL, 0, nil
|
58
|
+
addch(?Z | COLOR_PAIR(3))
|
59
|
+
attr_set A_BOLD, 2, nil
|
60
|
+
addch ?S
|
61
|
+
|
62
|
+
refresh
|
63
|
+
ch = getch
|
64
|
+
endwin
|
65
|
+
|
66
|
+
initscr
|
67
|
+
curs_set 0
|
68
|
+
raw
|
69
|
+
cbreak
|
70
|
+
noecho
|
71
|
+
win = newwin(12, 22, 15, 15)
|
72
|
+
box(win, 0, 0)
|
73
|
+
|
74
|
+
# inner_win = newwin(10, 20, 16, 16)
|
75
|
+
|
76
|
+
# note: you can cause a bus error if subwindow parameters exceed
|
77
|
+
# parent boundaries
|
78
|
+
|
79
|
+
# inner_win = subwin(win, 8, 18, 18, 18)
|
80
|
+
inner_win = derwin(win, 8, 18, 1, 2)
|
81
|
+
waddstr(inner_win, sprintf("begyx %d %d\n", *getbegyx(inner_win)))
|
82
|
+
waddstr(inner_win, sprintf("maxyx %d %d\n", *getmaxyx(inner_win)))
|
83
|
+
waddstr(inner_win, sprintf("paryx %d %d\n", *getparyx(inner_win)))
|
84
|
+
waddstr(inner_win, (["Hello window!"] * 5).join(' '))
|
85
|
+
|
86
|
+
wrefresh(win)
|
87
|
+
wrefresh(inner_win)
|
88
|
+
ch = wgetch(win)
|
89
|
+
wclear(inner_win)
|
90
|
+
# note: you must clear up subwindows in reverse order
|
91
|
+
delwin(inner_win)
|
92
|
+
wmove(win, 1, 2)
|
93
|
+
waddstr(win, "Bye bye!")
|
94
|
+
wrefresh(win)
|
95
|
+
ch = wgetch(win)
|
96
|
+
delwin(win)
|
97
|
+
|
98
|
+
rescue Object => e
|
99
|
+
FFI::NCurses.endwin
|
100
|
+
raise
|
101
|
+
ensure
|
102
|
+
FFI::NCurses.endwin
|
103
|
+
# FFI::NCurses.class_eval {
|
104
|
+
# require 'pp'
|
105
|
+
# pp @unattached_functions
|
106
|
+
|
107
|
+
# }
|
108
|
+
end
|
data/ffi-ncurses.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{ffi-ncurses}
|
5
|
+
s.version = "0.3.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Sean O'Halpin"]
|
9
|
+
s.date = %q{2009-02-15}
|
10
|
+
s.description = %q{}
|
11
|
+
s.email = %q{sean.ohalpin@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["History.txt", "README.rdoc"]
|
13
|
+
s.files = ["History.txt", "README.rdoc", "Rakefile", "examples/doc-eg1.rb", "examples/doc-eg2.rb", "examples/example-attributes.rb", "examples/example-colour.rb", "examples/example-cursor.rb", "examples/example-getsetsyx.rb", "examples/example-hello.rb", "examples/example-jruby.rb", "examples/example-keys.rb", "examples/example-mouse.rb", "examples/example-printw-variadic.rb", "examples/example-softkeys.rb", "examples/example-stdscr.rb", "examples/example-windows.rb", "examples/example.rb", "ffi-ncurses.gemspec", "lib/ffi-ncurses.rb", "lib/ffi-ncurses/darwin.rb", "lib/ffi-ncurses/keydefs.rb", "lib/ffi-ncurses/mouse.rb", "lib/ffi-ncurses/winstruct.rb"]
|
14
|
+
s.has_rdoc = true
|
15
|
+
s.homepage = %q{http://github.com/seanohalpin/ffi-ncurses}
|
16
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = %q{ffi-ncurses}
|
19
|
+
s.rubygems_version = %q{1.3.1}
|
20
|
+
s.summary = %q{FFI wrapper for ncurses}
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 2
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_runtime_dependency(%q<ffi>, [">= 0.2.0"])
|
28
|
+
s.add_development_dependency(%q<bones>, [">= 2.4.0"])
|
29
|
+
else
|
30
|
+
s.add_dependency(%q<ffi>, [">= 0.2.0"])
|
31
|
+
s.add_dependency(%q<bones>, [">= 2.4.0"])
|
32
|
+
end
|
33
|
+
else
|
34
|
+
s.add_dependency(%q<ffi>, [">= 0.2.0"])
|
35
|
+
s.add_dependency(%q<bones>, [">= 2.4.0"])
|
36
|
+
end
|
37
|
+
end
|
data/lib/ffi-ncurses.rb
ADDED
@@ -0,0 +1,584 @@
|
|
1
|
+
# ruby-ffi wrapper for ncurses
|
2
|
+
# Sean O'Halpin
|
3
|
+
# version 0.1.0 - 2008-12-04
|
4
|
+
# version 0.2.0 - 2009-01-18
|
5
|
+
# version 0.3.0 - 2009-01-31
|
6
|
+
# - added stdscr, newscr, curscr
|
7
|
+
# requires ruby-ffi >= 0.2.0 or jruby >= 1.1.6
|
8
|
+
# tested with ruby 1.8.6, jruby 1.1.6 on Ubuntu 8.04, Mac OS X 10.4
|
9
|
+
# ncurses 5.x
|
10
|
+
|
11
|
+
require 'ffi'
|
12
|
+
|
13
|
+
# would like to check FFI version here rather than use gem but there
|
14
|
+
# doesn't appear to be a version specified in the ffi lib
|
15
|
+
|
16
|
+
module FFI
|
17
|
+
module NCurses
|
18
|
+
extend FFI::Library
|
19
|
+
|
20
|
+
# use RUBY_FFI_NCURSES_LIB to specify exactly which lib you want, e.g. ncursesw, XCurses (from PDCurses)
|
21
|
+
if ENV["RUBY_FFI_NCURSES_LIB"].to_s != ""
|
22
|
+
LIB_HANDLE = ffi_lib( ENV["RUBY_FFI_NCURSES_LIB"] ).first
|
23
|
+
else
|
24
|
+
LIB_HANDLE = ffi_lib( 'ncurses', 'libncurses.so.5', 'XCurses' ).first
|
25
|
+
end
|
26
|
+
|
27
|
+
begin
|
28
|
+
|
29
|
+
if LIB_HANDLE.respond_to?(:find_symbol)
|
30
|
+
# these symbols are defined in ncurses.h
|
31
|
+
symbols = [ "stdscr", "curscr", "newscr" ]
|
32
|
+
SYMBOLS = Hash[*symbols.map { |sym| [sym, LIB_HANDLE.find_symbol(sym)]}.compact.flatten ]
|
33
|
+
SYMBOLS.keys.each do |sym|
|
34
|
+
# note that the symbol table entry in a dll for an exported
|
35
|
+
# variable contains a ~pointer to the address~ of the variable
|
36
|
+
# which will be initialized in the process's bss (uninitialized)
|
37
|
+
# data segment when the process is initialized
|
38
|
+
|
39
|
+
# this is unlike methods, where the symbol table entry points to
|
40
|
+
# the entry point of the method itself
|
41
|
+
|
42
|
+
# variables need another level of indirection because they are
|
43
|
+
# ~not~ shared between process instances - the sharing is of
|
44
|
+
# code only
|
45
|
+
# p SYMBOLS[sym]
|
46
|
+
define_method sym do
|
47
|
+
SYMBOLS[sym].read_pointer
|
48
|
+
end
|
49
|
+
module_function sym
|
50
|
+
end
|
51
|
+
else
|
52
|
+
end
|
53
|
+
rescue Object => e
|
54
|
+
end
|
55
|
+
|
56
|
+
# this list of function signatures was generated by the file
|
57
|
+
# generate-ffi-ncurses-function-signatures.rb and inserted here by hand
|
58
|
+
# then edited a bit :)
|
59
|
+
functions =
|
60
|
+
[
|
61
|
+
[:COLOR_PAIR, [:int], :int],
|
62
|
+
[:PAIR_NUMBER, [:int], :int],
|
63
|
+
# these functions are only in the debug version of ncurses
|
64
|
+
# [:_nc_tracebits, [], :string],
|
65
|
+
# [:_nc_visbuf, [:string], :string],
|
66
|
+
# [:_traceattr2, [:int, :uint], :string],
|
67
|
+
# [:_traceattr, [:uint], :string],
|
68
|
+
# [:_tracecchar_t2, [:int, :pointer], :string],
|
69
|
+
# [:_tracecchar_t, [:pointer], :string],
|
70
|
+
# [:_tracechar, [:int], :string],
|
71
|
+
# [:_tracechtype2, [:int, :uint], :string],
|
72
|
+
# [:_tracechtype, [:uint], :string],
|
73
|
+
# [:_tracedump, [:string, :pointer], :void],
|
74
|
+
# [:_tracef, [:string, :varargs], :void],
|
75
|
+
# [:_tracemouse, [:pointer], :string],
|
76
|
+
[:add_wchnstr, [:pointer, :int], :int],
|
77
|
+
[:add_wch, [:pointer], :int],
|
78
|
+
[:add_wchstr, [:pointer], :int],
|
79
|
+
[:addchnstr, [:pointer, :int], :int],
|
80
|
+
[:addchstr, [:pointer], :int],
|
81
|
+
[:addch, [:uint], :int],
|
82
|
+
[:addnstr, [:string, :int], :int],
|
83
|
+
[:addstr, [:string], :int],
|
84
|
+
[:assume_default_colors, [:int, :int], :int],
|
85
|
+
[:attr_get, [:pointer, :pointer, :pointer], :int],
|
86
|
+
[:attr_off, [:uint, :pointer], :int],
|
87
|
+
[:attr_on, [:uint, :pointer], :int],
|
88
|
+
[:attr_set, [:uint, :short, :pointer], :int],
|
89
|
+
[:attroff, [:uint], :int],
|
90
|
+
[:attron, [:uint], :int],
|
91
|
+
[:attrset, [:uint], :int],
|
92
|
+
[:baudrate, [], :int],
|
93
|
+
[:beep, [], :int],
|
94
|
+
[:bkgdset, [:uint], :void],
|
95
|
+
[:bkgd, [:uint], :int],
|
96
|
+
[:bkgrnd, [:pointer], :int],
|
97
|
+
[:bkgrndset, [:pointer], :void],
|
98
|
+
[:border_set, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :int],
|
99
|
+
[:border, [:uint, :uint, :uint, :uint, :uint, :uint, :uint, :uint], :int],
|
100
|
+
[:box_set, [:pointer, :pointer, :pointer], :int],
|
101
|
+
[:box, [:pointer, :uint, :uint], :int],
|
102
|
+
[:can_change_color, [], :int],
|
103
|
+
[:cbreak, [], :int],
|
104
|
+
[:chgat, [:int, :uint, :short, :pointer], :int],
|
105
|
+
[:clear, [], :int],
|
106
|
+
[:clearok, [:pointer, :int], :int],
|
107
|
+
[:clrtobot, [], :int],
|
108
|
+
[:clrtoeol, [], :int],
|
109
|
+
[:color_content, [:short, :pointer, :pointer, :pointer], :int],
|
110
|
+
[:color_set, [:short, :pointer], :int],
|
111
|
+
[:copywin, [:pointer, :pointer, :int, :int, :int, :int, :int, :int, :int], :int],
|
112
|
+
[:curs_set, [:int], :int],
|
113
|
+
[:curses_version, [], :string],
|
114
|
+
[:def_prog_mode, [], :int],
|
115
|
+
[:def_shell_mode, [], :int],
|
116
|
+
[:define_key, [:string, :int], :int],
|
117
|
+
[:delay_output, [:int], :int],
|
118
|
+
[:delch, [], :int],
|
119
|
+
[:deleteln, [], :int],
|
120
|
+
[:delscreen, [:pointer], :void],
|
121
|
+
[:delwin, [:pointer], :int],
|
122
|
+
[:derwin, [:pointer, :int, :int, :int, :int], :pointer],
|
123
|
+
[:doupdate, [], :int],
|
124
|
+
[:dupwin, [:pointer], :pointer],
|
125
|
+
[:echo_wchar, [:pointer], :int],
|
126
|
+
[:echochar, [:uint], :int],
|
127
|
+
[:echo, [], :int],
|
128
|
+
[:endwin, [], :int],
|
129
|
+
[:erasechar, [], :char],
|
130
|
+
[:erase, [], :int],
|
131
|
+
[:filter, [], :void],
|
132
|
+
[:flash, [], :int],
|
133
|
+
[:flushinp, [], :int],
|
134
|
+
[:getbkgd, [:pointer], :uint],
|
135
|
+
[:getbkgrnd, [:pointer], :int],
|
136
|
+
[:getch, [], :int],
|
137
|
+
|
138
|
+
[:getattrs, [:pointer], :int],
|
139
|
+
[:getcurx, [:pointer], :int],
|
140
|
+
[:getcury, [:pointer], :int],
|
141
|
+
[:getbegx, [:pointer], :int],
|
142
|
+
[:getbegy, [:pointer], :int],
|
143
|
+
[:getmaxx, [:pointer], :int],
|
144
|
+
[:getmaxy, [:pointer], :int],
|
145
|
+
[:getparx, [:pointer], :int],
|
146
|
+
[:getpary, [:pointer], :int],
|
147
|
+
|
148
|
+
# this is defined in mouse.rb
|
149
|
+
# [:getmouse, [:pointer], :int],
|
150
|
+
[:getnstr, [:string, :int], :int],
|
151
|
+
[:getstr, [:string], :int],
|
152
|
+
[:getwin, [:pointer], :pointer],
|
153
|
+
[:halfdelay, [:int], :int],
|
154
|
+
[:has_colors, [], :int],
|
155
|
+
[:has_ic, [], :int],
|
156
|
+
[:has_il, [], :int],
|
157
|
+
[:has_key, [:int], :int],
|
158
|
+
[:hline_set, [:pointer, :int], :int],
|
159
|
+
[:hline, [:uint, :int], :int],
|
160
|
+
[:idcok, [:pointer, :int], :void],
|
161
|
+
[:idlok, [:pointer, :int], :int],
|
162
|
+
[:immedok, [:pointer, :int], :void],
|
163
|
+
[:in_wchnstr, [:pointer, :int], :int],
|
164
|
+
[:in_wch, [:pointer], :int],
|
165
|
+
[:in_wchstr, [:pointer], :int],
|
166
|
+
[:inchnstr, [:pointer, :int], :int],
|
167
|
+
[:inchstr, [:pointer], :int],
|
168
|
+
[:inch, [], :uint],
|
169
|
+
[:init_color, [:short, :short, :short, :short], :int],
|
170
|
+
[:init_pair, [:short, :short, :short], :int],
|
171
|
+
# need to intercept this to get stdscr for JRuby (for the moment)
|
172
|
+
["_initscr", :initscr, [], :pointer],
|
173
|
+
[:innstr, [:string, :int], :int],
|
174
|
+
[:ins_wch, [:pointer], :int],
|
175
|
+
[:insch, [:uint], :int],
|
176
|
+
[:insdelln, [:int], :int],
|
177
|
+
[:insertln, [], :int],
|
178
|
+
[:insnstr, [:string, :int], :int],
|
179
|
+
[:insstr, [:string], :int],
|
180
|
+
[:instr, [:string], :int],
|
181
|
+
[:intrflush, [:pointer, :int], :int],
|
182
|
+
[:is_linetouched, [:pointer, :int], :int],
|
183
|
+
[:is_term_resized, [:int, :int], :int],
|
184
|
+
[:is_wintouched, [:pointer], :int],
|
185
|
+
[:isendwin, [], :int],
|
186
|
+
[:key_defined, [:string], :int],
|
187
|
+
[:keybound, [:int, :int], :string],
|
188
|
+
[:keyname, [:int], :string],
|
189
|
+
[:keyok, [:int, :int], :int],
|
190
|
+
[:keypad, [:pointer, :int], :int],
|
191
|
+
[:killchar, [], :char],
|
192
|
+
[:leaveok, [:pointer, :int], :int],
|
193
|
+
[:longname, [], :string],
|
194
|
+
[:mcprint, [:string, :int], :int],
|
195
|
+
[:meta, [:pointer, :int], :int],
|
196
|
+
[:mouse_trafo, [:pointer, :pointer, :int], :int],
|
197
|
+
[:mouseinterval, [:int], :int],
|
198
|
+
[:mousemask, [:uint, :pointer], :uint],
|
199
|
+
[:move, [:int, :int], :int],
|
200
|
+
[:mvadd_wch, [:int, :int, :pointer], :int],
|
201
|
+
[:mvadd_wchnstr, [:int, :int, :pointer, :int], :int],
|
202
|
+
[:mvadd_wchstr, [:int, :int, :pointer], :int],
|
203
|
+
[:mvaddch, [:int, :int, :uint], :int],
|
204
|
+
[:mvaddchnstr, [:int, :int, :pointer, :int], :int],
|
205
|
+
[:mvaddchstr, [:int, :int, :pointer], :int],
|
206
|
+
[:mvaddnstr, [:int, :int, :string, :int], :int],
|
207
|
+
[:mvaddstr, [:int, :int, :string], :int],
|
208
|
+
[:mvchgat, [:int, :int, :int, :uint, :short, :pointer], :int],
|
209
|
+
[:mvcur, [:int, :int, :int, :int], :int],
|
210
|
+
[:mvdelch, [:int, :int], :int],
|
211
|
+
[:mvderwin, [:pointer, :int, :int], :int],
|
212
|
+
[:mvgetch, [:int, :int], :int],
|
213
|
+
[:mvgetnstr, [:int, :int, :string, :int], :int],
|
214
|
+
[:mvgetstr, [:int, :int, :string], :int],
|
215
|
+
[:mvhline_set, [:int, :int, :pointer, :int], :int],
|
216
|
+
[:mvhline, [:int, :int, :uint, :int], :int],
|
217
|
+
[:mvin_wch, [:int, :int, :pointer], :int],
|
218
|
+
[:mvin_wchnstr, [:int, :int, :pointer, :int], :int],
|
219
|
+
[:mvin_wchstr, [:int, :int, :pointer], :int],
|
220
|
+
[:mvinch, [:int, :int], :uint],
|
221
|
+
[:mvinchnstr, [:int, :int, :pointer, :int], :int],
|
222
|
+
[:mvinchstr, [:int, :int, :pointer], :int],
|
223
|
+
[:mvinnstr, [:int, :int, :string, :int], :int],
|
224
|
+
[:mvins_wch, [:int, :int, :pointer], :int],
|
225
|
+
[:mvinsch, [:int, :int, :uint], :int],
|
226
|
+
[:mvinsnstr, [:int, :int, :string, :int], :int],
|
227
|
+
[:mvinsstr, [:int, :int, :string], :int],
|
228
|
+
[:mvinstr, [:int, :int, :string], :int],
|
229
|
+
[:mvprintw, [:int, :int, :string, :varargs], :int],
|
230
|
+
[:mvscanw, [:int, :int, :string, :varargs], :int],
|
231
|
+
[:mvvline_set, [:int, :int, :pointer, :int], :int],
|
232
|
+
[:mvvline, [:int, :int, :uint, :int], :int],
|
233
|
+
[:mvwadd_wchnstr, [:pointer, :int, :int, :pointer, :int], :int],
|
234
|
+
[:mvwadd_wch, [:pointer, :int, :int, :pointer], :int],
|
235
|
+
[:mvwadd_wchstr, [:pointer, :int, :int, :pointer], :int],
|
236
|
+
[:mvwaddchnstr, [:pointer, :int, :int, :pointer, :int], :int],
|
237
|
+
[:mvwaddch, [:pointer, :int, :int, :uint], :int],
|
238
|
+
[:mvwaddchstr, [:pointer, :int, :int, :pointer], :int],
|
239
|
+
[:mvwaddnstr, [:pointer, :int, :int, :string, :int], :int],
|
240
|
+
[:mvwaddstr, [:pointer, :int, :int, :string], :int],
|
241
|
+
[:mvwchgat, [:pointer, :int, :int, :int, :uint, :short, :pointer], :int],
|
242
|
+
[:mvwdelch, [:pointer, :int, :int], :int],
|
243
|
+
[:mvwgetch, [:pointer, :int, :int], :int],
|
244
|
+
[:mvwgetnstr, [:pointer, :int, :int, :string, :int], :int],
|
245
|
+
[:mvwgetstr, [:pointer, :int, :int, :string], :int],
|
246
|
+
[:mvwhline_set, [:pointer, :int, :int, :pointer, :int], :int],
|
247
|
+
[:mvwhline, [:pointer, :int, :int, :uint, :int], :int],
|
248
|
+
[:mvwin_wchnstr, [:pointer, :int, :int, :pointer, :int], :int],
|
249
|
+
[:mvwin_wch, [:pointer, :int, :int, :pointer], :int],
|
250
|
+
[:mvwin_wchstr, [:pointer, :int, :int, :pointer], :int],
|
251
|
+
[:mvwinchnstr, [:pointer, :int, :int, :pointer, :int], :int],
|
252
|
+
[:mvwinch, [:pointer, :int, :int], :uint],
|
253
|
+
[:mvwinchstr, [:pointer, :int, :int, :pointer], :int],
|
254
|
+
[:mvwinnstr, [:pointer, :int, :int, :string, :int], :int],
|
255
|
+
[:mvwin, [:pointer, :int, :int], :int],
|
256
|
+
[:mvwins_wch, [:pointer, :int, :int, :pointer], :int],
|
257
|
+
[:mvwinsch, [:pointer, :int, :int, :uint], :int],
|
258
|
+
[:mvwinsnstr, [:pointer, :int, :int, :string, :int], :int],
|
259
|
+
[:mvwinsstr, [:pointer, :int, :int, :string], :int],
|
260
|
+
[:mvwinstr, [:pointer, :int, :int, :string], :int],
|
261
|
+
[:mvwprintw, [:pointer, :int, :int, :string, :varargs], :int],
|
262
|
+
[:mvwscanw, [:pointer, :int, :int, :string, :varargs], :int],
|
263
|
+
[:mvwvline_set, [:pointer, :int, :int, :pointer, :int], :int],
|
264
|
+
[:mvwvline, [:pointer, :int, :int, :uint, :int], :int],
|
265
|
+
[:napms, [:int], :int],
|
266
|
+
[:newpad, [:int, :int], :pointer],
|
267
|
+
[:newterm, [:string, :pointer, :pointer], :pointer],
|
268
|
+
[:newwin, [:int, :int, :int, :int], :pointer],
|
269
|
+
[:nl, [], :int],
|
270
|
+
[:nocbreak, [], :int],
|
271
|
+
[:nodelay, [:pointer, :int], :int],
|
272
|
+
[:noecho, [], :int],
|
273
|
+
[:nonl, [], :int],
|
274
|
+
[:noqiflush, [], :void],
|
275
|
+
[:noraw, [], :int],
|
276
|
+
[:notimeout, [:pointer, :int], :int],
|
277
|
+
[:overlay, [:pointer, :pointer], :int],
|
278
|
+
[:overwrite, [:pointer, :pointer], :int],
|
279
|
+
[:pair_content, [:short, :pointer, :pointer], :int],
|
280
|
+
[:pecho_wchar, [:pointer, :pointer], :int],
|
281
|
+
[:pechochar, [:pointer, :uint], :int],
|
282
|
+
[:pnoutrefresh, [:pointer, :int, :int, :int, :int, :int, :int], :int],
|
283
|
+
[:prefresh, [:pointer, :int, :int, :int, :int, :int, :int], :int],
|
284
|
+
[:printw, [:string, :varargs], :int],
|
285
|
+
[:putp, [:string], :int],
|
286
|
+
[:putwin, [:pointer, :pointer], :int],
|
287
|
+
[:qiflush, [], :void],
|
288
|
+
[:raw, [], :int],
|
289
|
+
[:redrawwin, [:pointer], :int],
|
290
|
+
[:refresh, [], :int],
|
291
|
+
[:reset_prog_mode, [], :int],
|
292
|
+
[:reset_shell_mode, [], :int],
|
293
|
+
[:resetty, [], :int],
|
294
|
+
[:resize_term, [:int, :int], :int],
|
295
|
+
[:resizeterm, [:int, :int], :int],
|
296
|
+
[:ripoffline, [:int, :pointer], :int],
|
297
|
+
[:savetty, [], :int],
|
298
|
+
[:scanw, [:string, :varargs], :int],
|
299
|
+
[:scr_dump, [:string], :int],
|
300
|
+
[:scr_init, [:string], :int],
|
301
|
+
[:scr_restore, [:string], :int],
|
302
|
+
[:scr_set, [:string], :int],
|
303
|
+
[:scrl, [:int], :int],
|
304
|
+
[:scrollok, [:pointer, :int], :int],
|
305
|
+
[:scroll, [:pointer], :int],
|
306
|
+
[:set_term, [:pointer], :pointer],
|
307
|
+
[:setscrreg, [:int, :int], :int],
|
308
|
+
[:slk_attr_off, [:uint, :pointer], :int],
|
309
|
+
[:slk_attr_on, [:uint, :pointer], :int],
|
310
|
+
[:slk_attr_set, [:uint, :short, :pointer], :int],
|
311
|
+
[:slk_attroff, [:uint], :int],
|
312
|
+
[:slk_attron, [:uint], :int],
|
313
|
+
[:slk_attrset, [:uint], :int],
|
314
|
+
[:slk_attr, [], :uint],
|
315
|
+
[:slk_clear, [], :int],
|
316
|
+
[:slk_color, [:short], :int],
|
317
|
+
[:slk_init, [:int], :int],
|
318
|
+
[:slk_label, [:int], :string],
|
319
|
+
[:slk_noutrefresh, [], :int],
|
320
|
+
[:slk_refresh, [], :int],
|
321
|
+
[:slk_restore, [], :int],
|
322
|
+
[:slk_set, [:int, :string, :int], :int],
|
323
|
+
[:slk_touch, [], :int],
|
324
|
+
[:standend, [], :int],
|
325
|
+
[:standout, [], :int],
|
326
|
+
[:start_color, [], :int],
|
327
|
+
[:subpad, [:pointer, :int, :int, :int, :int], :pointer],
|
328
|
+
[:subwin, [:pointer, :int, :int, :int, :int], :pointer],
|
329
|
+
[:syncok, [:pointer, :int], :int],
|
330
|
+
[:term_attrs, [], :uint],
|
331
|
+
[:termattrs, [], :uint],
|
332
|
+
[:termname, [], :string],
|
333
|
+
[:tigetflag, [:string], :int],
|
334
|
+
[:tigetnum, [:string], :int],
|
335
|
+
[:tigetstr, [:string], :string],
|
336
|
+
[:timeout, [:int], :void],
|
337
|
+
[:touchline, [:pointer, :int, :int], :int],
|
338
|
+
[:touchwin, [:pointer], :int],
|
339
|
+
[:tparm, [:string, :varargs], :string],
|
340
|
+
# [:trace, [:uint], :void],
|
341
|
+
[:typeahead, [:int], :int],
|
342
|
+
[:ungetch, [:int], :int],
|
343
|
+
# moved into mouse
|
344
|
+
# [:ungetmouse, [:pointer], :int],
|
345
|
+
[:untouchwin, [:pointer], :int],
|
346
|
+
[:use_default_colors, [], :int],
|
347
|
+
[:use_env, [:int], :void],
|
348
|
+
[:use_extended_names, [:int], :int],
|
349
|
+
[:vid_attr, [:uint, :short, :pointer], :int],
|
350
|
+
[:vid_puts, [:uint, :short, :pointer, :pointer], :int],
|
351
|
+
[:vidattr, [:uint], :int],
|
352
|
+
[:vidputs, [:uint, :pointer], :int],
|
353
|
+
[:vline_set, [:pointer, :int], :int],
|
354
|
+
[:vline, [:uint, :int], :int],
|
355
|
+
[:wadd_wchnstr, [:pointer, :pointer, :int], :int],
|
356
|
+
[:wadd_wch, [:pointer, :pointer], :int],
|
357
|
+
[:wadd_wchstr, [:pointer, :pointer], :int],
|
358
|
+
[:waddchnstr, [:pointer, :pointer, :int], :int],
|
359
|
+
[:waddch, [:pointer, :uint], :int],
|
360
|
+
[:waddchstr, [:pointer, :pointer], :int],
|
361
|
+
[:waddnstr, [:pointer, :string, :int], :int],
|
362
|
+
[:waddstr, [:pointer, :string], :int],
|
363
|
+
[:wattr_get, [:pointer, :pointer, :pointer, :pointer], :int],
|
364
|
+
[:wattr_off, [:pointer, :uint, :pointer], :int],
|
365
|
+
[:wattr_on, [:pointer, :uint, :pointer], :int],
|
366
|
+
[:wattr_set, [:pointer, :uint, :short, :pointer], :int],
|
367
|
+
[:wattroff, [:pointer, :int], :int],
|
368
|
+
[:wattron, [:pointer, :int], :int],
|
369
|
+
[:wattrset, [:pointer, :int], :int],
|
370
|
+
[:wbkgd, [:pointer, :uint], :int],
|
371
|
+
[:wbkgdset, [:pointer, :uint], :void],
|
372
|
+
[:wbkgrnd, [:pointer, :pointer], :int],
|
373
|
+
[:wbkgrndset, [:pointer, :pointer], :void],
|
374
|
+
[:wborder_set, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :int],
|
375
|
+
[:wborder, [:pointer, :uint, :uint, :uint, :uint, :uint, :uint, :uint, :uint], :int],
|
376
|
+
[:wchgat, [:pointer, :int, :uint, :short, :pointer], :int],
|
377
|
+
[:wclear, [:pointer], :int],
|
378
|
+
[:wclrtobot, [:pointer], :int],
|
379
|
+
[:wclrtoeol, [:pointer], :int],
|
380
|
+
[:wcolor_set, [:pointer, :short, :pointer], :int],
|
381
|
+
[:wcursyncup, [:pointer], :void],
|
382
|
+
[:wdelch, [:pointer], :int],
|
383
|
+
[:wdeleteln, [:pointer], :int],
|
384
|
+
[:wecho_wchar, [:pointer, :pointer], :int],
|
385
|
+
[:wechochar, [:pointer, :uint], :int],
|
386
|
+
[:wenclose, [:pointer, :int, :int], :int],
|
387
|
+
[:werase, [:pointer], :int],
|
388
|
+
[:wgetbkgrnd, [:pointer, :pointer], :int],
|
389
|
+
[:wgetch, [:pointer], :int],
|
390
|
+
[:wgetnstr, [:pointer, :string, :int], :int],
|
391
|
+
[:wgetstr, [:pointer, :string], :int],
|
392
|
+
[:whline_set, [:pointer, :pointer, :int], :int],
|
393
|
+
[:whline, [:pointer, :uint, :int], :int],
|
394
|
+
[:win_wchnstr, [:pointer, :pointer, :int], :int],
|
395
|
+
[:win_wch, [:pointer, :pointer], :int],
|
396
|
+
[:win_wchstr, [:pointer, :pointer], :int],
|
397
|
+
[:winchnstr, [:pointer, :pointer, :int], :int],
|
398
|
+
[:winch, [:pointer], :uint],
|
399
|
+
[:winchstr, [:pointer, :pointer], :int],
|
400
|
+
[:winnstr, [:pointer, :string, :int], :int],
|
401
|
+
[:wins_wch, [:pointer, :pointer], :int],
|
402
|
+
[:winsch, [:pointer, :uint], :int],
|
403
|
+
[:winsdelln, [:pointer, :int], :int],
|
404
|
+
[:winsertln, [:pointer], :int],
|
405
|
+
[:winsnstr, [:pointer, :string, :int], :int],
|
406
|
+
[:winsstr, [:pointer, :string], :int],
|
407
|
+
[:winstr, [:pointer, :string], :int],
|
408
|
+
[:wmove, [:pointer, :int, :int], :int],
|
409
|
+
[:wnoutrefresh, [:pointer], :int],
|
410
|
+
[:wprintw, [:pointer, :string, :varargs], :int],
|
411
|
+
[:wredrawln, [:pointer, :int, :int], :int],
|
412
|
+
[:wrefresh, [:pointer], :int],
|
413
|
+
[:wresize, [:pointer, :int, :int], :int],
|
414
|
+
[:wscanw, [:pointer, :string, :varargs], :int],
|
415
|
+
[:wscrl, [:pointer, :int], :int],
|
416
|
+
[:wsetscrreg, [:pointer, :int, :int], :int],
|
417
|
+
[:wstandend, [:pointer], :int],
|
418
|
+
[:wstandout, [:pointer], :int],
|
419
|
+
[:wsyncdown, [:pointer], :void],
|
420
|
+
[:wsyncup, [:pointer], :void],
|
421
|
+
[:wtimeout, [:pointer, :int], :void],
|
422
|
+
[:wtouchln, [:pointer, :int, :int, :int], :int],
|
423
|
+
[:wvline_set, [:pointer, :pointer, :int], :int],
|
424
|
+
[:wvline, [:pointer, :uint, :int], :int]
|
425
|
+
]
|
426
|
+
# end of autogenerated function list
|
427
|
+
|
428
|
+
@unattached_functions = []
|
429
|
+
class << self
|
430
|
+
def unattached_functions
|
431
|
+
@unattached_functions
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
# attach functions
|
436
|
+
functions.each do |func|
|
437
|
+
begin
|
438
|
+
attach_function(*func)
|
439
|
+
rescue Object => e
|
440
|
+
# for debugging
|
441
|
+
unattached_functions << func[0]
|
442
|
+
end
|
443
|
+
end
|
444
|
+
|
445
|
+
module Colour
|
446
|
+
COLOR_BLACK = BLACK = 0
|
447
|
+
COLOR_RED = RED = 1
|
448
|
+
COLOR_GREEN = GREEN = 2
|
449
|
+
COLOR_YELLOW = YELLOW = 3
|
450
|
+
COLOR_BLUE = BLUE = 4
|
451
|
+
COLOR_MAGENTA = MAGENTA = 5
|
452
|
+
COLOR_CYAN = CYAN = 6
|
453
|
+
COLOR_WHITE = WHITE = 7
|
454
|
+
end
|
455
|
+
Color = Colour
|
456
|
+
include Colour
|
457
|
+
|
458
|
+
# FIXME: remove this code when JRuby gets find_sym
|
459
|
+
# fixup for JRuby 1.1.6 - doesn't have find_sym
|
460
|
+
# can hack for stdscr but not curscr or newscr (no methods return them)
|
461
|
+
# this will all be removed when JRuby 1.1.7 is released
|
462
|
+
module FixupInitscr
|
463
|
+
if !NCurses.respond_to?(:stdscr)
|
464
|
+
def initscr
|
465
|
+
@stdscr = NCurses._initscr
|
466
|
+
end
|
467
|
+
def stdscr
|
468
|
+
@stdscr
|
469
|
+
end
|
470
|
+
else
|
471
|
+
def initscr
|
472
|
+
NCurses._initscr
|
473
|
+
end
|
474
|
+
end
|
475
|
+
end
|
476
|
+
include FixupInitscr
|
477
|
+
|
478
|
+
module Attributes
|
479
|
+
# following definitions have been copied (almost verbatim) from ncurses.h
|
480
|
+
NCURSES_ATTR_SHIFT = 8
|
481
|
+
def self.NCURSES_BITS(mask, shift)
|
482
|
+
((mask) << ((shift) + NCURSES_ATTR_SHIFT))
|
483
|
+
end
|
484
|
+
|
485
|
+
WA_NORMAL = A_NORMAL = (1 - 1)
|
486
|
+
WA_ATTRIBUTES = A_ATTRIBUTES = NCURSES_BITS(~(1 - 1),0)
|
487
|
+
WA_CHARTEXT = A_CHARTEXT = (NCURSES_BITS(1,0) - 1)
|
488
|
+
WA_COLOR = A_COLOR = NCURSES_BITS(((1) << 8) - 1,0)
|
489
|
+
WA_STANDOUT = A_STANDOUT = NCURSES_BITS(1,8) # best highlighting mode available
|
490
|
+
WA_UNDERLINE = A_UNDERLINE = NCURSES_BITS(1,9) # underlined text
|
491
|
+
WA_REVERSE = A_REVERSE = NCURSES_BITS(1,10) # reverse video
|
492
|
+
WA_BLINK = A_BLINK = NCURSES_BITS(1,11) # blinking text
|
493
|
+
WA_DIM = A_DIM = NCURSES_BITS(1,12) # half-bright text
|
494
|
+
WA_BOLD = A_BOLD = NCURSES_BITS(1,13) # extra bright or bold text
|
495
|
+
WA_ALTCHARSET = A_ALTCHARSET = NCURSES_BITS(1,14)
|
496
|
+
WA_INVIS = A_INVIS = NCURSES_BITS(1,15)
|
497
|
+
WA_PROTECT = A_PROTECT = NCURSES_BITS(1,16)
|
498
|
+
WA_HORIZONTAL = A_HORIZONTAL = NCURSES_BITS(1,17)
|
499
|
+
WA_LEFT = A_LEFT = NCURSES_BITS(1,18)
|
500
|
+
WA_LOW = A_LOW = NCURSES_BITS(1,19)
|
501
|
+
WA_RIGHT = A_RIGHT = NCURSES_BITS(1,20)
|
502
|
+
WA_TOP = A_TOP = NCURSES_BITS(1,21)
|
503
|
+
WA_VERTICAL = A_VERTICAL = NCURSES_BITS(1,22)
|
504
|
+
end
|
505
|
+
include Attributes
|
506
|
+
|
507
|
+
module Constants
|
508
|
+
FALSE = 0
|
509
|
+
TRUE = 1
|
510
|
+
|
511
|
+
ERR = -1
|
512
|
+
OK = 0
|
513
|
+
end
|
514
|
+
include Constants
|
515
|
+
|
516
|
+
require 'ffi-ncurses/winstruct'
|
517
|
+
include WinStruct
|
518
|
+
|
519
|
+
module EmulatedFunctions
|
520
|
+
|
521
|
+
# these 'functions' are implemented as macros in ncurses
|
522
|
+
|
523
|
+
# I'm departing from the NCurses API here - makes no sense to
|
524
|
+
# force people to use pointer return values when these are
|
525
|
+
# implemented as macros to make them easy to use in C when we have
|
526
|
+
# multiple return values in Ruby for that exact same purpose
|
527
|
+
def getyx(win)
|
528
|
+
[NCurses.getcury(win), NCurses.getcurx(win)]
|
529
|
+
end
|
530
|
+
def getbegyx(win)
|
531
|
+
[NCurses.getbegy(win), NCurses.getbegx(win)]
|
532
|
+
end
|
533
|
+
def getparyx(win)
|
534
|
+
[NCurses.getpary(win), NCurses.getparx(win)]
|
535
|
+
end
|
536
|
+
def getmaxyx(win)
|
537
|
+
[NCurses.getmaxy(win), NCurses.getmaxx(win)]
|
538
|
+
end
|
539
|
+
|
540
|
+
# transliterated from ncurses.h
|
541
|
+
# note: had to spell out NCurses::TRUE - will look into this
|
542
|
+
def getsyx
|
543
|
+
if (is_leaveok(newscr) == NCurses::TRUE)
|
544
|
+
[-1, -1]
|
545
|
+
else
|
546
|
+
getyx(newscr)
|
547
|
+
end
|
548
|
+
end
|
549
|
+
def setsyx(y, x)
|
550
|
+
if y == -1 && x == -1
|
551
|
+
leaveok(newscr, NCurses::TRUE)
|
552
|
+
else
|
553
|
+
leaveok(newscr, NCurses::FALSE)
|
554
|
+
wmove(newscr, y, x)
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
558
|
+
def self.fixup(function, &block)
|
559
|
+
if NCurses.unattached_functions.include?(function)
|
560
|
+
block.call
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
564
|
+
# hack for XCurses (PDCurses 3.3) - many more to come I suspect :)
|
565
|
+
fixup :getch do
|
566
|
+
def getch
|
567
|
+
wgetch(stdscr)
|
568
|
+
end
|
569
|
+
end
|
570
|
+
end
|
571
|
+
include EmulatedFunctions
|
572
|
+
|
573
|
+
# fixes for Mac OS X (mostly macros directly referencing the WINDOW struct)
|
574
|
+
if ::FFI::Platform::OS == "darwin"
|
575
|
+
require 'ffi-ncurses/darwin'
|
576
|
+
include NCurses::Darwin
|
577
|
+
end
|
578
|
+
|
579
|
+
# make all those instance methods module methods too
|
580
|
+
extend self
|
581
|
+
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|