ffi-ncurses 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ == 0.3.2 / 2009-02-16
2
+
3
+ * Bug fix:
4
+ * Reversed regression in 0.3.1 which broke getmaxx, etc. for Mac
5
+
1
6
  == 0.3.1 / 2009-02-16
2
7
 
3
8
  * Bug fix:
data/Rakefile CHANGED
@@ -13,6 +13,10 @@ rescue LoadError
13
13
  end
14
14
  end
15
15
 
16
+ if File.exist?('local/config.rb')
17
+ load 'local/config.rb'
18
+ end
19
+
16
20
  ensure_in_path 'lib'
17
21
  require 'ffi-ncurses'
18
22
 
@@ -25,7 +29,7 @@ PROJ.authors = ["Sean O'Halpin"]
25
29
  PROJ.email = 'sean.ohalpin@gmail.com'
26
30
  PROJ.url = 'http://github.com/seanohalpin/ffi-ncurses'
27
31
  PROJ.summary = "FFI wrapper for ncurses"
28
- PROJ.version = "0.3.1"
32
+ PROJ.version = FFI::NCurses::VERSION
29
33
  PROJ.rubyforge.name = 'ffi-ncurses'
30
34
 
31
35
  PROJ.description = <<EOT
@@ -0,0 +1,197 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # $Id: example.rb,v 1.4 2002/03/04 13:24:29 t-peters Exp $
4
+
5
+ # This file provides an example for the usage of the ncurses-ruby module.
6
+ # Copyright (C) 2002 Tobias Peters <t-peters@users.berlios.de>
7
+ #
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.
11
+ #
12
+ # Permission is hereby granted, free of charge, to any person
13
+ # obtaining a copy of this file
14
+ # (the "Software"), to deal in the Software without restriction,
15
+ # including without limitation the rights to use, copy, modify, merge,
16
+ # publish, distribute, sublicense, and/or sell copies of the Software,
17
+ # and to permit persons to whom the Software is furnished to do so,
18
+ # subject to the following conditions:
19
+ #
20
+ # The above copyright notice and this permission notice shall be
21
+ # included in all copies or substantial portions of the Software.
22
+ #
23
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27
+ # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28
+ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ # SOFTWARE.
31
+
32
+
33
+
34
+ # this file is adapted from an example of the python ncurses binding
35
+ # pyncurses (http://pyncurses.sf.net/), which has the following copyright
36
+ # statement:
37
+
38
+ # Copyright (c) 2000 by Harry Henry Gebel
39
+ #
40
+ # Permission is hereby granted, free of charge, to any person
41
+ # obtaining a copy of this software and associated documentation files
42
+ # (the "Software"), to deal in the Software without restriction,
43
+ # including without limitation the rights to use, copy, modify, merge,
44
+ # publish, distribute, sublicense, and/or sell copies of the Software,
45
+ # and to permit persons to whom the Software is furnished to do so,
46
+ # subject to the following conditions:
47
+ #
48
+ # The above copyright notice and this permission notice shall be
49
+ # included in all copies or substantial portions of the Software.
50
+ #
51
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
52
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
55
+ # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
56
+ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
57
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
58
+ # SOFTWARE.
59
+
60
+
61
+
62
+ require "ffi-ncurses"
63
+
64
+ module NcursesExtension
65
+ def method_missing(method, *args, &block)
66
+ FFI::NCurses.send(method, self.win, *args, &block)
67
+ end
68
+ end
69
+
70
+ module Ncurses
71
+ FALSE = 0
72
+ TRUE = 1
73
+ module NCX
74
+ def COLS
75
+ FFI::NCurses.getmaxx(FFI::NCurses.stdscr)
76
+ end
77
+ end
78
+ include NCX
79
+ extend NCX
80
+ class WINDOW
81
+ attr_accessor :win
82
+ def initialize(*args, &block)
83
+ if block_given?
84
+ @win = args.first
85
+ else
86
+ @win = FFI::NCurses.newwin(*args)
87
+ end
88
+ end
89
+ def method_missing(name, *args)
90
+ name = name.to_s
91
+ if (name[0,2] == "mv")
92
+ test_name = name.dup
93
+ test_name[2,0] = "w" # insert "w" after"mv"
94
+ if (FFI::NCurses.respond_to?(test_name))
95
+ return FFI::NCurses.send(test_name, @win, *args)
96
+ end
97
+ end
98
+ test_name = "w" + name
99
+ if (FFI::NCurses.respond_to?(test_name))
100
+ return FFI::NCurses.send(test_name, @win, *args)
101
+ end
102
+ FFI::NCurses.send(name, @win, *args)
103
+ end
104
+ def respond_to?(name)
105
+ name = name.to_s
106
+ if (name[0,2] == "mv" && FFI::NCurses.respond_to?("mvw" + name[2..-1]))
107
+ return true
108
+ end
109
+ FFI::NCurses.respond_to?("w" + name) || FFI::NCurses.respond_to?(name)
110
+ end
111
+ def del
112
+ FFI::NCurses.delwin(@win)
113
+ end
114
+ alias delete del
115
+ end
116
+ def self.initscr
117
+ @stdscr = Ncurses::WINDOW.new(FFI::NCurses.initscr) { }
118
+ end
119
+ def self.stdscr
120
+ @stdscr
121
+ end
122
+ class << self
123
+ def method_missing(method, *args, &block)
124
+ FFI::NCurses.send(method, *args, &block)
125
+ end
126
+ end
127
+ end
128
+
129
+ def moving(scr)
130
+ scr.clear() # clear screen
131
+ scr.move(5,5) # move cursor
132
+ scr.addstr("move(5,5)")
133
+ scr.refresh() # update screen
134
+ sleep(2)
135
+ scr.move(2,2)
136
+ scr.addstr("move(2,2)")
137
+ scr.refresh()
138
+ sleep(2)
139
+ scr.move(10, 2)
140
+ scr.addstr("Press a key to continue")
141
+ scr.getch()
142
+ end
143
+
144
+ def border(scr)
145
+ scr.clear()
146
+ scr.border(*([0]*8)) # calls WINDOW#border(0, 0, 0, 0, 0, 0, 0, 0)
147
+ scr.move(3,3)
148
+ scr.addstr("Press a key to continue")
149
+ scr.getch()
150
+ end
151
+
152
+ def two_borders()
153
+ # make a new window as tall as the screen and half as wide, in the left half
154
+ # of the screen
155
+ one = Ncurses::WINDOW.new(0, Ncurses.COLS() / 2, 0, 0)
156
+ # make one for the right half
157
+ two = Ncurses::WINDOW.new(0, Ncurses.COLS() - (Ncurses.COLS() / 2),
158
+ 0, Ncurses.COLS() / 2)
159
+ one.border(*([0]*8))
160
+ two.border(*([0]*8))
161
+ one.move(3,3)
162
+ two.move(2,5)
163
+ one.addstr("move(3,3)")
164
+ two.addstr("move(2,5)")
165
+ two.move(5,3)
166
+ two.addstr("Press a key to continue")
167
+ one.noutrefresh() # copy window to virtual screen, don't update real screen
168
+ two.noutrefresh()
169
+ Ncurses.doupdate() # update read screen
170
+ two.getch()
171
+ end
172
+
173
+ begin
174
+ # initialize ncurses
175
+ Ncurses.initscr
176
+ Ncurses.cbreak # provide unbuffered input
177
+ Ncurses.noecho # turn off input echoing
178
+ Ncurses.nonl # turn off newline translation
179
+ # Ncurses.stdscr.intrflush(false) # turn off flush-on-interrupt
180
+ # Ncurses.stdscr.keypad(true) # turn on keypad mode
181
+ # Ncurses.stdscr.addstr("Press a key to continue") # output string
182
+ # Ncurses.stdscr.getch # get a charachter
183
+ Ncurses.stdscr.intrflush(Ncurses::FALSE) # turn off flush-on-interrupt
184
+ Ncurses.stdscr.keypad(Ncurses::TRUE) # turn on keypad mode
185
+ Ncurses.addstr("Press a key to continue") # output string
186
+ Ncurses.getch() # get a charachter
187
+
188
+ moving(Ncurses.stdscr) # demo of moving cursor
189
+ border(Ncurses.stdscr) # demo of borders
190
+ two_borders() # demo of two windows with borders
191
+
192
+ ensure
193
+ Ncurses.echo
194
+ Ncurses.nocbreak
195
+ Ncurses.nl
196
+ Ncurses.endwin
197
+ end
@@ -15,6 +15,7 @@ require 'ffi'
15
15
 
16
16
  module FFI
17
17
  module NCurses
18
+ VERSION = "0.3.2"
18
19
  extend FFI::Library
19
20
 
20
21
  # use RUBY_FFI_NCURSES_LIB to specify exactly which lib you want, e.g. ncursesw, XCurses (from PDCurses)
@@ -1,6 +1,8 @@
1
1
  module FFI
2
2
  module NCurses
3
3
  module Darwin
4
+ include FFI::NCurses::WinStruct
5
+
4
6
  # translated from Mac OSX 10.4 ('Tiger') /usr/include/ncurses.h
5
7
  def getattrs(win)
6
8
  win_st = WinSt.new(win)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-ncurses
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean O'Halpin
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-16 00:00:00 +00:00
12
+ date: 2009-02-22 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -51,6 +51,7 @@ files:
51
51
  - examples/example-stdscr.rb
52
52
  - examples/example-windows.rb
53
53
  - examples/example.rb
54
+ - examples/ncurses-example.rb
54
55
  - ffi-ncurses.gemspec
55
56
  - lib/ffi-ncurses.rb
56
57
  - lib/ffi-ncurses/darwin.rb