ffi-ncurses 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,23 @@
1
+ == 0.3.3 / 2010-08-24
2
+
3
+ * Depends on ffi again (>= 0.6.3)
4
+ * Now compatible with ffi-0.6.3
5
+ - thanks and apologies to all those who requested this change months
6
+ ago
7
+ * Included keydefs.rb by default
8
+ * Examples have been tested with:
9
+ - jruby-1.5.1
10
+ - rbx-1.0.0-20100514
11
+ - ree-1.8.7-2010.02
12
+ - ruby-1.8.6-p399
13
+ Note: the examples require "ffi-ncurses/ord-shim" to add
14
+ Integer#ord
15
+ - ruby-1.8.7-p299
16
+ - ruby-1.9.2-p0
17
+ * Removed attempt to load XCurses (PDCurses)
18
+ * Removed dependency on bones
19
+ - no Rakefile any more - just use gem build ffi-ncurses.gemspec
20
+
1
21
  == 0.3.2 / 2009-02-16
2
22
 
3
23
  * Bug fix:
@@ -1,9 +1,10 @@
1
- = ffi-ncurses
1
+ = ffi-ncurses
2
2
 
3
3
  Author: Sean O'Halpin
4
4
 
5
- A wrapper for ncurses 5.x. Tested on Mac OS X 10.4 (Tiger) and Ubuntu
6
- 8.04 with ruby 1.8.6 using ruby-ffi (>= 0.2.0) and JRuby 1.1.6.
5
+ A wrapper for ncurses 5.x. Tested on Ubuntu 8.04 to 10.04 and Mac OS X
6
+ 10.4 (Tiger) with ruby 1.8.6, 1.8.7 and 1.9.x using ffi (>= 0.6.3) and
7
+ JRuby 1.5.1.
7
8
 
8
9
  The API is a transliteration of the C API rather than an attempt to
9
10
  provide an idiomatic Ruby object-oriented API. The intent is to
@@ -20,13 +21,13 @@ directory for real working examples.
20
21
 
21
22
  == Install
22
23
 
23
- ruby 1.8.6:
24
+ ruby 1.8.x:
24
25
 
25
- $ sudo gem install ffi ffi-ncurses
26
+ $ sudo gem install ffi-ncurses
26
27
 
27
- jruby 1.1.6:
28
+ jruby 1.5.1:
28
29
 
29
- $ jruby -S gem install ffi-ncurses
30
+ $ jruby -S gem install ffi-ncurses
30
31
 
31
32
  == Usage
32
33
 
@@ -71,9 +72,9 @@ or as included methods:
71
72
  == Set up screen
72
73
 
73
74
  require 'ffi-ncurses'
74
-
75
+
75
76
  FFI::NCurses.initscr
76
- begin
77
+ begin
77
78
  ...
78
79
  ensure
79
80
  FFI::NCurses.endwin
@@ -90,12 +91,12 @@ or as included methods:
90
91
  FFI::NCurses.keypad(stdscr, true)
91
92
 
92
93
  == Colours
93
-
94
+
94
95
  start_color
95
96
  init_pair(1, FFI::NCurses::COLOR_BLACK, FFI::NCurses::COLOR_RED)
96
97
  attr_set FFI::NCurses::A_NORMAL, 1, nil
97
- addch(?A)
98
- addch(?Z | COLOR_PAIR(1))
98
+ addch("A"[0].ord) # works in both 1.8.x and 1.9.x
99
+ addch("Z"[0].ord | COLOR_PAIR(1))
99
100
 
100
101
  == Cursor
101
102
 
@@ -179,7 +180,7 @@ You can specify which variant of curses you want to use by setting the
179
180
  environment variable +RUBY_FFI_NCURSES_LIB+ to the one you want. For
180
181
  example, to use PDCurses X11 curses lib, use:
181
182
 
182
- RUBY_FFI_NCURSES_LIB=XCurses ruby examples/hello.rb
183
+ RUBY_FFI_NCURSES_LIB=XCurses ruby examples/hello.rb
183
184
 
184
185
  You can use this to specify +ncursesw+ for example. Please note that
185
186
  only the bog standard ncurses lib has been in any way tested as of
@@ -193,15 +194,6 @@ There are some macros in darwin ncurses.h which I haven't
193
194
  implemented yet. I'm working on it but if there are any you
194
195
  desperately need let me know.
195
196
 
196
- == +curscr+ and +newscr+ for JRuby
197
-
198
- These global variables are not often used but are required for certain
199
- situations (e.g. doing a wrefresh after shelling out and for the
200
- get/setsyx macros).
201
-
202
- This requires the implementation of +find_sym+ in JRuby (expected in
203
- JRuby 1.1.7).
204
-
205
197
  == Tests
206
198
 
207
199
  This is tricky - I'm not sure exactly how to properly test a wrapper
@@ -7,23 +7,23 @@ include FFI::NCurses
7
7
  initscr
8
8
  begin
9
9
  attributes = %w[
10
- A_BLINK
11
- A_BOLD
10
+ A_BLINK
11
+ A_BOLD
12
12
  A_DIM
13
13
  A_NORMAL
14
- A_REVERSE
15
- A_STANDOUT
16
- A_UNDERLINE
14
+ A_REVERSE
15
+ A_STANDOUT
16
+ A_UNDERLINE
17
17
  ]
18
18
  alt_attributes = %w[
19
19
  A_ALTCHARSET
20
20
  A_HORIZONTAL
21
- A_INVIS
22
- A_LEFT
23
- A_LOW
24
- A_PROTECT
25
- A_RIGHT
26
- A_TOP
21
+ A_INVIS
22
+ A_LEFT
23
+ A_LOW
24
+ A_PROTECT
25
+ A_RIGHT
26
+ A_TOP
27
27
  A_VERTICAL
28
28
  ]
29
29
 
@@ -3,6 +3,7 @@
3
3
  # Sean O'Halpin, 2009-02-15
4
4
  #
5
5
  require 'ffi-ncurses'
6
+ require 'ffi-ncurses/ord-shim' # for 1.8.6 compatibility
6
7
  include FFI::NCurses
7
8
 
8
9
  initscr
@@ -12,7 +13,7 @@ begin
12
13
 
13
14
  # initialize colour
14
15
  start_color
15
-
16
+
16
17
  # set up colour pairs
17
18
  # Background Foreground
18
19
  init_pair(0, Colour::BLACK, Colour::BLACK)
@@ -32,26 +33,26 @@ begin
32
33
  init_pair(13, Colour::BLACK, Colour::MAGENTA)
33
34
  init_pair(14, Colour::BLACK, Colour::CYAN)
34
35
  init_pair(15, Colour::BLACK, Colour::WHITE)
35
-
36
+
36
37
  0.upto(15) do |i|
37
38
  attr_set A_NORMAL, i, nil
38
- addch(?A + i)
39
+ addch("A"[0].ord + i)
39
40
  end
40
-
41
+
41
42
  # add character and attribute together
42
- addch(?Z | COLOR_PAIR(1)) # red
43
+ addch("Z"[0].ord | COLOR_PAIR(1)) # red
43
44
 
44
45
  # reset attribute and colour to default
45
46
  attr_set A_NORMAL, 0, nil
46
-
47
+
47
48
  # start new line
48
49
  addstr "\n"
49
-
50
+
50
51
  # how to add a single space
51
- addch(' '[0])
52
+ addch(' '[0].ord)
52
53
  # or
53
54
  addstr(" ")
54
-
55
+
55
56
  addstr "Press any key"
56
57
 
57
58
  # display and pause for key press
@@ -12,7 +12,7 @@ begin
12
12
  curs_set 0
13
13
  ch = 0
14
14
  name = "none"
15
- while ch != 27
15
+ while ch != 27 # Escape
16
16
  clear
17
17
  addstr "Press any key (Escape to exit): "
18
18
  printw "name: %s dec: %d char: [%c]", :string, name, :int, ch, :int, ch
@@ -4,6 +4,7 @@
4
4
  #
5
5
  require 'ffi-ncurses'
6
6
  require 'ffi-ncurses/mouse'
7
+ require 'ffi-ncurses/ord-shim' # for 1.8.6 compatibility
7
8
 
8
9
  include FFI::NCurses
9
10
 
@@ -19,7 +20,7 @@ begin
19
20
  mouse_event = MEVENT.new
20
21
  ch = 0
21
22
  addstr "Click mouse buttons anywhere on the screen. q to quit\n"
22
- until ch == ?q do
23
+ until ch == "q"[0].ord do
23
24
  ch = getch
24
25
  case ch
25
26
  when KEY_MOUSE
@@ -36,7 +37,7 @@ begin
36
37
  row = getcury(stdscr) + 1
37
38
  move row, 0
38
39
  move mouse_event[:y], mouse_event[:x]
39
- addch " "[0] | WA_STANDOUT
40
+ addch " "[0].ord | WA_STANDOUT
40
41
  move row, 0
41
42
  end
42
43
  else
@@ -5,7 +5,9 @@
5
5
  # Sean O'Halpin, 2009-01-18
6
6
  #
7
7
  require 'ffi-ncurses'
8
- begin
8
+ require 'ffi-ncurses/ord-shim' # for 1.8.6 compatibility
9
+
10
+ begin
9
11
  # the methods can be called as module methods
10
12
  FFI::NCurses.initscr
11
13
  FFI::NCurses.clear
@@ -26,7 +28,7 @@ begin
26
28
  move 10, 10
27
29
  standout
28
30
  # hmmm.. you have to jump through some hoops to avoid temporary variables
29
- #
31
+ #
30
32
  printw("Hi! maxyx %d %d\n", *([:int, :int].zip(getmaxyx(FFI::NCurses.stdscr)).flatten))
31
33
  # easier to do this
32
34
  #addstr(sprintf("paryx %d %d\n", *getparyx(FFI::NCurses.stdscr)))
@@ -49,15 +51,15 @@ begin
49
51
  init_pair(14, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::MAGENTA)
50
52
  init_pair(15, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::CYAN)
51
53
  init_pair(16, FFI::NCurses::Colour::BLACK, FFI::NCurses::Colour::WHITE)
52
-
54
+
53
55
  1.upto(16) do |i|
54
56
  attr_set FFI::NCurses::A_NORMAL, i, nil
55
- addch(?A - 1 + i)
57
+ addch("A"[0].ord - 1 + i)
56
58
  end
57
59
  attr_set FFI::NCurses::A_HORIZONTAL, 0, nil
58
- addch(?Z | COLOR_PAIR(3))
60
+ addch("Z"[0].ord | COLOR_PAIR(3))
59
61
  attr_set A_BOLD, 2, nil
60
- addch ?S
62
+ addch "S"[0].ord
61
63
 
62
64
  refresh
63
65
  ch = getch
@@ -94,15 +96,10 @@ begin
94
96
  wrefresh(win)
95
97
  ch = wgetch(win)
96
98
  delwin(win)
97
-
99
+
98
100
  rescue Object => e
99
101
  FFI::NCurses.endwin
100
102
  raise
101
103
  ensure
102
104
  FFI::NCurses.endwin
103
- # FFI::NCurses.class_eval {
104
- # require 'pp'
105
- # pp @unattached_functions
106
-
107
- # }
108
105
  end
@@ -6,8 +6,8 @@
6
6
  # Copyright (C) 2002 Tobias Peters <t-peters@users.berlios.de>
7
7
  #
8
8
  # The following license applys only to this file. It is less restrictive
9
- # than the license for the rest of the ncurses-ruby distribution.
10
- # I've adapted this file from someone else, see below.
9
+ # than the license for the rest of the ncurses-ruby distribution.
10
+ # I've adapted this file from someone else, see below.
11
11
  #
12
12
  # Permission is hereby granted, free of charge, to any person
13
13
  # obtaining a copy of this file
@@ -16,10 +16,10 @@
16
16
  # publish, distribute, sublicense, and/or sell copies of the Software,
17
17
  # and to permit persons to whom the Software is furnished to do so,
18
18
  # subject to the following conditions:
19
- #
19
+ #
20
20
  # The above copyright notice and this permission notice shall be
21
21
  # included in all copies or substantial portions of the Software.
22
- #
22
+ #
23
23
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
24
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
25
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -36,7 +36,7 @@
36
36
  # statement:
37
37
 
38
38
  # Copyright (c) 2000 by Harry Henry Gebel
39
- #
39
+ #
40
40
  # Permission is hereby granted, free of charge, to any person
41
41
  # obtaining a copy of this software and associated documentation files
42
42
  # (the "Software"), to deal in the Software without restriction,
@@ -44,10 +44,10 @@
44
44
  # publish, distribute, sublicense, and/or sell copies of the Software,
45
45
  # and to permit persons to whom the Software is furnished to do so,
46
46
  # subject to the following conditions:
47
- #
47
+ #
48
48
  # The above copyright notice and this permission notice shall be
49
49
  # included in all copies or substantial portions of the Software.
50
- #
50
+ #
51
51
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
52
52
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53
53
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -57,9 +57,8 @@
57
57
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
58
58
  # SOFTWARE.
59
59
 
60
-
61
-
62
60
  require "ffi-ncurses"
61
+ require 'ffi-ncurses/ord-shim' # for 1.8.6 compatibility
63
62
 
64
63
  module NcursesExtension
65
64
  def method_missing(method, *args, &block)
@@ -2,15 +2,50 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{ffi-ncurses}
5
- s.version = "0.3.0"
6
-
5
+ s.version = "0.3.3"
7
6
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
7
  s.authors = ["Sean O'Halpin"]
9
- s.date = %q{2009-02-15}
10
- s.description = %q{}
8
+ s.date = %q{2009-02-24}
9
+ s.description = <<-EOT
10
+ A wrapper for ncurses 5.x. Tested on Ubuntu 8.04 to 10.04 and Mac OS X
11
+ 10.4 (Tiger) with ruby 1.8.6, 1.8.7 and 1.9.x using ffi (>= 0.6.3) and
12
+ JRuby 1.5.1.
13
+
14
+ The API is a transliteration of the C API rather than an attempt to
15
+ provide an idiomatic Ruby object-oriented API.
16
+
17
+ See the examples directory for real working examples.
18
+ EOT
11
19
  s.email = %q{sean.ohalpin@gmail.com}
12
20
  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"]
21
+ s.files = [
22
+ "History.txt",
23
+ "README.rdoc",
24
+ "examples/doc-eg1.rb",
25
+ "examples/doc-eg2.rb",
26
+ "examples/doc-eg3.rb",
27
+ "examples/example-attributes.rb",
28
+ "examples/example-colour.rb",
29
+ "examples/example-cursor.rb",
30
+ "examples/example-getsetsyx.rb",
31
+ "examples/example-hello.rb",
32
+ "examples/example-jruby.rb",
33
+ "examples/example-keys.rb",
34
+ "examples/example-mouse.rb",
35
+ "examples/example-printw-variadic.rb",
36
+ "examples/example-softkeys.rb",
37
+ "examples/example-stdscr.rb",
38
+ "examples/example-windows.rb",
39
+ "examples/example.rb",
40
+ "examples/ncurses-example.rb",
41
+ "ffi-ncurses.gemspec",
42
+ "lib/ffi-ncurses.rb",
43
+ "lib/ffi-ncurses/darwin.rb",
44
+ "lib/ffi-ncurses/keydefs.rb",
45
+ "lib/ffi-ncurses/mouse.rb",
46
+ "lib/ffi-ncurses/ord-shim.rb",
47
+ "lib/ffi-ncurses/winstruct.rb"
48
+ ]
14
49
  s.has_rdoc = true
15
50
  s.homepage = %q{http://github.com/seanohalpin/ffi-ncurses}
16
51
  s.rdoc_options = ["--main", "README.rdoc"]
@@ -18,20 +53,5 @@ Gem::Specification.new do |s|
18
53
  s.rubyforge_project = %q{ffi-ncurses}
19
54
  s.rubygems_version = %q{1.3.1}
20
55
  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
56
+ s.add_dependency("ffi", ">= 0.6.3")
37
57
  end
@@ -4,9 +4,16 @@
4
4
  # version 0.2.0 - 2009-01-18
5
5
  # version 0.3.0 - 2009-01-31
6
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
7
+ # version 0.3.3 - 2010-08-24
8
+ # - compatible with ffi-0.6.3
9
+ # - example working with ruby 1.9.x (using "q"[0].ord instead of ?q)
10
+ # requires ruby-ffi >= 0.6.3 or jruby >= 1.1.6
11
+ # tested with
12
+ # - ruby 1.8.7, 1.9.x
13
+ # - jruby 1.5.1
14
+ # on
15
+ # - Ubuntu 8.04, 9.04, 9.10, 10.04 (ncurses 5.7)
16
+ # - Mac OS X 10.4 (ncurses 5.4)
10
17
 
11
18
  require 'ffi'
12
19
 
@@ -15,21 +22,20 @@ require 'ffi'
15
22
 
16
23
  module FFI
17
24
  module NCurses
18
- VERSION = "0.3.2"
25
+ VERSION = "0.3.3"
19
26
  extend FFI::Library
20
27
 
21
28
  # use RUBY_FFI_NCURSES_LIB to specify exactly which lib you want, e.g. ncursesw, XCurses (from PDCurses)
22
29
  if ENV["RUBY_FFI_NCURSES_LIB"].to_s != ""
23
30
  LIB_HANDLE = ffi_lib( ENV["RUBY_FFI_NCURSES_LIB"] ).first
24
31
  else
25
- LIB_HANDLE = ffi_lib( 'ncurses', 'libncurses.so.5', 'XCurses' ).first
32
+ LIB_HANDLE = ffi_lib(['ncursesw', 'ncurses']).first
26
33
  end
27
34
 
28
35
  begin
29
-
36
+ symbols = [ "stdscr", "curscr", "newscr" ]
30
37
  if LIB_HANDLE.respond_to?(:find_symbol)
31
38
  # these symbols are defined in ncurses.h
32
- symbols = [ "stdscr", "curscr", "newscr" ]
33
39
  SYMBOLS = Hash[*symbols.map { |sym| [sym, LIB_HANDLE.find_symbol(sym)]}.compact.flatten ]
34
40
  SYMBOLS.keys.each do |sym|
35
41
  # note that the symbol table entry in a dll for an exported
@@ -43,17 +49,17 @@ module FFI
43
49
  # variables need another level of indirection because they are
44
50
  # ~not~ shared between process instances - the sharing is of
45
51
  # code only
46
- # p SYMBOLS[sym]
47
52
  define_method sym do
48
53
  SYMBOLS[sym].read_pointer
49
54
  end
50
55
  module_function sym
51
56
  end
52
57
  else
58
+ warn "#find_symbol not available - #{symbols.inspect} not defined"
53
59
  end
54
60
  rescue Object => e
55
61
  end
56
-
62
+
57
63
  # this list of function signatures was generated by the file
58
64
  # generate-ffi-ncurses-function-signatures.rb and inserted here by hand
59
65
  # then edited a bit :)
@@ -475,7 +481,7 @@ module FFI
475
481
  end
476
482
  end
477
483
  include FixupInitscr
478
-
484
+
479
485
  module Attributes
480
486
  # following definitions have been copied (almost verbatim) from ncurses.h
481
487
  NCURSES_ATTR_SHIFT = 8
@@ -516,11 +522,11 @@ module FFI
516
522
 
517
523
  require 'ffi-ncurses/winstruct'
518
524
  include WinStruct
519
-
525
+
520
526
  module EmulatedFunctions
521
-
527
+
522
528
  # these 'functions' are implemented as macros in ncurses
523
-
529
+
524
530
  # I'm departing from the NCurses API here - makes no sense to
525
531
  # force people to use pointer return values when these are
526
532
  # implemented as macros to make them easy to use in C when we have
@@ -555,7 +561,7 @@ module FFI
555
561
  wmove(newscr, y, x)
556
562
  end
557
563
  end
558
-
564
+
559
565
  def self.fixup(function, &block)
560
566
  if NCurses.unattached_functions.include?(function)
561
567
  block.call
@@ -583,3 +589,4 @@ module FFI
583
589
  end
584
590
  end
585
591
 
592
+ require 'ffi-ncurses/keydefs'