ncurses 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/Changes ADDED
@@ -0,0 +1,27 @@
1
+ ncurses-ruby-0.9:
2
+ * Forms wrapper contributed by Simon Kaczor
3
+ * ncurses-ruby now also works with ncurses-4.2
4
+ (an old release from 1998, needed for Zaurus-port)
5
+ * First binary package for Sharp Zaurus (arm-linux)
6
+
7
+ ncurses-ruby-0.8:
8
+ * Bugfix: Calls into the ncurses library prior to calling
9
+ Ncurses::initscr or Ncurses::newterm had previously crashed
10
+ the Ruby interpreter.
11
+ Fixed by delaying the binding of most Ncurses functions
12
+ until after Ncurses::initscr or Ncurses::newterm have been
13
+ called.
14
+ * Replaced module functions with singleton functions. This
15
+ means that
16
+ include Ncurses
17
+ initscr
18
+ is no longer possible. Instead, use
19
+ Ncurses.initscr
20
+ Reasons: - Consistency. The shortcut has never been possible
21
+ with all ncurses functions.
22
+ - Namespace pollution. Some ncurses functions have
23
+ too common names.
24
+
25
+ ncurses-ruby-0.7.2:
26
+ * reintroduced Ncurses::pechochar and Ncurses::redrawwin in the ncurses build.
27
+ These had been removed by mistake because they did not work with PDCurses.
@@ -0,0 +1,27 @@
1
+ Changes
2
+ COPYING
3
+ MANIFEST
4
+ README
5
+ README.windows
6
+ THANKS
7
+ TODO
8
+ VERSION
9
+ examples/example.rb
10
+ examples/form.rb
11
+ examples/form2.rb
12
+ examples/hello_ncurses.rb
13
+ examples/LICENSES_for_examples
14
+ examples/rain.rb
15
+ examples/tclock.rb
16
+ examples/read_line.rb
17
+ examples/test_scanw.rb
18
+ extconf.rb
19
+ form_wrap.c
20
+ form_wrap.h
21
+ make_dist.rb
22
+ ncurses_wrap.c
23
+ ncurses_wrap.h
24
+ lib/ncurses.rb
25
+ panel_wrap.c
26
+ panel_wrap.h
27
+
data/README ADDED
@@ -0,0 +1,273 @@
1
+ $Id: README,v 1.10 2004/05/13 21:54:41 t-peters Exp $
2
+ ------------------------------------------------------------------------
3
+ This directory contains a ruby module for accessing the FSF's ncurses
4
+ library.
5
+ (C) 2002, 2003, 2004 Tobias Peters <t-peters@users.berlios.de>
6
+ (C) 2004 Simon Kaczor <skaczor@cox.net>
7
+
8
+ This module is free software; you can redistribute it and/or
9
+ modify it under the terms of the GNU Lesser General Public
10
+ License as published by the Free Software Foundation; either
11
+ version 2 of the License, or (at your option) any later version.
12
+
13
+ This module is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ Lesser General Public License for more details.
17
+
18
+ You should have received a copy of the GNU Lesser General Public
19
+ License along with this module; if not, write to the Free Software
20
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+ ------------------------------------------------------------------------
22
+
23
+ This wrapper provides access to the functions, macros, global variables and
24
+ constants of the ncurses library. These are mapped to a Ruby Module named
25
+ "Ncurses": Functions and external variables are implemented as singleton
26
+ functions of the Module Ncurses.
27
+
28
+ This wrapper can also be used to access the PDCurses library
29
+ (http://pdcurses.sourceforge.net/). See README.windows for details.
30
+
31
+ If you don't know how to use ncurses from C, then stop reading here, and read
32
+ an introduction to ncurses. Eric Raymond has written an introduction that
33
+ should be part of the ncurses development package installed on your computer.
34
+ If you need a gentler introduction, then you have two options:
35
+ (1) there is a part of a chapter in "The Linux Programmer's Guide" dealing with
36
+ ncurses, available from www.tldp.org. It is quite old by now,
37
+ but the ncurses interface has not changed since then, regarding the scope
38
+ of covered functions, so it is still a very good read.
39
+ (2) There is also an up-to-date "NCURSES-Programming-HOWTO" in the HOWTO
40
+ collection of the Linux Documentation Project, also available at
41
+ www.tldp.org, which is worth a read.
42
+
43
+ You will also appreciate the extensive man-pages of ncurses.
44
+
45
+
46
+ Installation and Usage
47
+ ======================
48
+
49
+ ruby extconf.rb
50
+ make
51
+ make install
52
+
53
+ In your programs:
54
+ require "ncurses.rb"
55
+
56
+ If your programs use the scanw functions (most unlikely) you will have to
57
+ install the scanf library for ruby (http://www.rubyhacker.com/code/scanf).
58
+
59
+ Most ncurses functions are only available after either Ncurses.initscr or
60
+ Ncurses.newterm has returned successfully.
61
+
62
+ External Variables
63
+ ==================
64
+
65
+ External variables are accessed read-only, by module functions taking no
66
+ arguments. They are spelled exactly like their C counterparts. Sometimes, this
67
+ leads to module functions beginning with an uppercase letter (e.g.
68
+ Ncurses.LINES).
69
+
70
+ One of these external variables, ESCDELAY, is also settable with a ruby method
71
+ (Ncurses.ESCDELAY=).
72
+
73
+
74
+ Constants
75
+ =========
76
+ (static C Preprocessor macros)
77
+
78
+ Constants are implemented as module constants in the Ncurses module, if
79
+ possible. Ruby constants can not start with an underscore, so these constants
80
+ have been renamed (they lost the leading underscore). There are,however,
81
+ module functions with the same name as these constants, that also return
82
+ the constant's value, when invoked (e.g. "Ncurses._ENDLINE" returns the value
83
+ of the constant "Ncurses::ENDLINE", which has the same value as the C constant
84
+ "_ENDLINE").
85
+
86
+ Note: The ncurses macros starting with ACS_ are not constants, their value
87
+ depends on the terminal in use. Nevertheless, they are implemented as
88
+ constants of the Ncurses module, but since they depend on the terminal, they
89
+ are not initialized before initscr() has been called. If you need more than
90
+ one terminal in a single program, you can access the ACS_ values through member
91
+ functions of class SCREEN.
92
+
93
+
94
+ Functions
95
+ =========
96
+
97
+ Functions (also those only implemented by macros in C) can also be accessed
98
+ through module functions of the Module Ncurses. They take exactly the same
99
+ arguments as their C counterparts. Some of the C functions return additional
100
+ arguments through pointer arguments. These are implemented as follows:
101
+
102
+
103
+ Functions expecting pointers to integer types
104
+ ---------------------------------------------
105
+
106
+ When the C-function expects a pointer to int, short, chtype, or attr_type,
107
+ You should use a variable containing an empty array as the argument to the ruby
108
+ function. This is because ruby passes these types (ints) "by value" instead of
109
+ "by reference"; but arrays are passed by reference, so that you can see the
110
+ changes to them.
111
+ Attention: some macro-only functions like getsyx accept variables of type int,
112
+ but, being macros, they write values to their arguments. Thus, they also need
113
+ empty array arguments when called from ruby.
114
+ Example:
115
+ color_pair_number = 4
116
+ foreground_color = []
117
+ background_color = []
118
+ if (Ncurses.pair_content(color_pair_number, foreground_color,
119
+ background_color) != Ncurses::ERR)
120
+ "color pair number #{color_pair_number} contains color number " +
121
+ "#{foreground_color[0]} as the foreground color, and color " +
122
+ "number #{background_color[0]} as the background color")
123
+ end
124
+
125
+ There are 2 functions that read a value from the location pointed to by a
126
+ pointer to int, and store another value at those locations. These functions are
127
+ mouse_trafo and wmouse_trafo. When calling these functions, you have to provide
128
+ 2 arrays, each filled with exacly one Integer. The values contained in these
129
+ arrays will then be changed by the ruby module function.
130
+
131
+
132
+ Functions expecting (non-const) pointers to char
133
+ ------------------------------------------------
134
+
135
+ When the C-function expects a pointer to char, you should use a variable
136
+ containing an empty string as the argument to the ruby function.
137
+ Example:
138
+ line2 = ""
139
+ if (Ncurses.mvwinnstr(Ncurses.stdscr, y=2, x=0, line2,
140
+ Ncurses.getmaxx(Ncurses.stdscr)) == Ncurses::ERR)
141
+ raise "could not scan 3rd line"
142
+ else
143
+ Ncurses.beep if line2.index("|")
144
+ end
145
+ The string that the C function would store at the pointer-to-char location
146
+ will be appended to the given string.
147
+
148
+ Functions expecting const pointers to char do not modify the string they
149
+ receive, you can pass any string to them.
150
+
151
+
152
+
153
+ Functions expecting pointers to structs
154
+ ---------------------------------------------------
155
+
156
+ When the C-function expects a pointer to WINDOW, SCREEN, MEVENT,
157
+ PANEL, FORM, FIELD or FIELDTYPE then simply pass it the corresponding,
158
+ already existing ruby object.
159
+
160
+
161
+ scanf style functions expecting various pointers
162
+ ---------------------------------------------------
163
+
164
+ namely scanw, mvscanw, wscanw, mvwscanw. Use an array after the format string.
165
+ The scanned values will be placed there. Remember, you need scanf for ruby
166
+ installed for these functions to work.
167
+
168
+ Module / Class Hierarchie
169
+ =========================
170
+
171
+ module Ncurses
172
+ class WINDOW; end
173
+ class SCREEN; end
174
+ class MEVENT; end
175
+ module Panel
176
+ class PANEL; end
177
+ end
178
+ module Form
179
+ class FORM; end
180
+ class FIELD; end
181
+ class FIELDTYPE; end
182
+ end
183
+ end
184
+
185
+
186
+ Where to find the functions
187
+ ===========================
188
+
189
+ As stated, all ncurses functions are implemented as module functions in the
190
+ module Ncurses. If you know how an ncurses function is named in C (example:
191
+ "mvaddch"), then call the corresponding module functions with the
192
+ same number of arguments (example: "Ncurses.mvaddch(y,x,ch)")
193
+
194
+ The class window implements method_missing and tries to map invoked methods
195
+ to Ncurses module functions using a simple heuristic:
196
+ If the method name starts with "mv", it looks for a Ncurses module function
197
+ that starts with "mvw", and if it exists, adds itself to the argument list
198
+ and calls this function.
199
+ If no such module function exists, or the name of the invoked method does not
200
+ start with "mv", it looks if there is a module function with the name "w" +
201
+ methodname, and if it exists, adds itself again to the argument list and calls
202
+ this function.
203
+ If this module function did not exist either, then, as a last step, it invokes
204
+ a module function with the same name as the method, adding itself to the
205
+ argument list.
206
+
207
+ Example: If you invoke win.mvaddch(y,x,ch) on an Ncurses::WINDOW object, it
208
+ will delegate the method call to Ncurses.mvwaddch(win,y,x,ch).
209
+
210
+ Other examples:
211
+ win.delwin() => Ncurses.delwin(win) # win cannot be used
212
+ # after this call
213
+ win.printw("hello") => Ncurses.wprintw(win, "hello")
214
+ win.getmaxyx(y=[],
215
+ x=[]) => Ncurses.getmaxyx(win,y,x)
216
+
217
+
218
+ Example programs
219
+ ================
220
+
221
+ Directory "examples" contains a few example programs demonstrating how to use
222
+ the library with ruby. Be sure to read the file
223
+ "examples/LICENSES_for_examples".
224
+
225
+
226
+ Applications using ncurses-ruby
227
+ ===============================
228
+
229
+ aeditor - Pair programming editor, http://metaeditor.sourceforge.net/
230
+ raggle - RSS aggregator, http://www.raggle.org/about/
231
+
232
+ The panel library
233
+ =================
234
+
235
+ The panel library has also been wrapped. All panel functions are implemented
236
+ as module functions of the module Ncurses::Panel.
237
+
238
+ Most of these functions are also implemented as methods of class
239
+ Ncurses::Panel::PANEL, once with their original name and once with the subword
240
+ "panel" and an adjacent underscore removed.
241
+
242
+ The form library
243
+ ================
244
+
245
+ The form library was wrapped inside the Ncurses:Form module. All
246
+ form functions are implemented as module functions on the module
247
+ Ncurses::Form. In addition, all function for which the first
248
+ parameter is one of the objects are also implemented as an instance
249
+ method of that object. For example, instead of calling
250
+ post_form(form), you can use form.post_form().
251
+
252
+ Three objects are defined in the Ncurses:Form module:
253
+ 1. FORM
254
+ 2. FIELD
255
+ 3. FIELDTYPE
256
+
257
+ They are wrapping actual ncurses pointers and should be use whenever a
258
+ pointer to one of these types is expected in function calls.
259
+
260
+ All form constants are defined in the module as Ruby constants with
261
+ the same name as the curses constants.
262
+
263
+ Constructors for FORM, FIELD and FIELDTYPE objects are also provided,
264
+ and they expect the same parameters as new_form, new_field and
265
+ new_fieldtype curses functions.
266
+
267
+ Field validation is implemented using Ruby Proc objects. You must
268
+ provide a Ruby block whenever a function pointer is expected in curses
269
+ function arguments. See the example form2.rb for more details.
270
+
271
+ The functions form_userptr and field_userptr are not supported. Use
272
+ form.user_object and field.user_object to store Ruby objects instead.
273
+
@@ -0,0 +1,35 @@
1
+ $Id: README.windows,v 1.2 2003/03/22 20:00:59 t-peters Exp $
2
+ ------------------------------------------------------------------------
3
+
4
+ Ncurses has been ported to the cygwin environment. If you are using the
5
+ cygwin version of ruby on windows, you can simply use this version of
6
+ ncurses.
7
+
8
+ Instead, if you are using a native windows version of Ruby (compiled with
9
+ mingw, visual c++, borland c++), then you can use this wrapper with the
10
+ PDCurses library (http://pdcurses.sourceforge.net/). In this case,
11
+ ncurses-ruby wraps the subset of curses features that are common to ncurses
12
+ and PDCurses.
13
+
14
+ Here's how to compile ncurses-ruby on windows using PDCurses and MinGW:
15
+ (For those not familiar enough with the mingw compiler, you can get a
16
+ precompiled mingw ruby from
17
+ http://www.ruby-lang.org/~eban/ruby/binaries/mingw/, and a precompiled
18
+ ncurses-ruby version from this project's download area
19
+ http://developer.berlios.de/project/filelist.php?group_id=273)
20
+
21
+ - compile ruby with mingw 2.0 and install it somewhere. remember to set up
22
+ the PATH environment correctly.
23
+
24
+ - get the sources for PDCurses and compile them using the provided Makefile
25
+ "win32/mingwin32.mak"
26
+
27
+ - next, move the pdcurses header files ("curses.h", "panel.h") into mingw's
28
+ include directory. Also, move the generated libraries ("pdcurses.a",
29
+ "panel.a") into mingw's lib directory, while renaming these libraries to
30
+ "libpdcurses.a" and "libpanel.a"
31
+
32
+ - compile and install ncurses-ruby using the commands "ruby extconf.rb",
33
+ "make", "make install"
34
+
35
+ - try out the examples
data/THANKS ADDED
@@ -0,0 +1,11 @@
1
+ $Id: THANKS,v 1.5 2004/07/31 08:34:17 t-peters Exp $
2
+
3
+ A list of people that helped me with ncurses-ruby
4
+
5
+ Akinori MUSHA (knu at idaemons dot org)
6
+ Jan Becvar (jan dot becvar at solnet dot cz)
7
+ Juergen Daubert
8
+ Doug Kearns
9
+ Simon Kaczor (skaczor at cox dut net)
10
+ Hiroshi Sainohira
11
+ Andreas Schwarz
data/TODO ADDED
@@ -0,0 +1,15 @@
1
+ $Id: TODO,v 1.6 2003/03/22 22:55:27 t-peters Exp $
2
+
3
+ This is the complete list of functions present in ncurses that have not yet
4
+ been wrapped by ncurses-ruby:
5
+
6
+ terminfo functions: setupterm, setterm, set_curterm, del_curterm, restartterm,
7
+ tparm, tputs, vidputs
8
+
9
+ termcap fuctions: tgetent, tgetflag, tgetnum, tgetstr, tgoto
10
+
11
+ ncurses
12
+ kernel functions: ripoffline
13
+
14
+ No sense in
15
+ wrapping these: vw_printw, vwprintw, vwscanw
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.9.1
@@ -0,0 +1,26 @@
1
+ $Id: LICENSES_for_examples,v 1.6 2004/05/13 21:55:17 t-peters Exp $
2
+
3
+ Ideally, an example program on how to use a library should be in the public
4
+ domain.
5
+
6
+ Some of the example programs contained in this dircectory have not been put in
7
+ the public domain, however.
8
+
9
+ The reason is because I did not write all programs completely myself -- I've
10
+ adapted the following example programs from ncurses programs in other
11
+ programming languages, or I have included example programs contributed by
12
+ other authors, and I have to respect their original licenses:
13
+ - rain.rb is adapted from rain.c from the ncurses library distribution.
14
+ - example.rb is adapted from an example program for the python ncurses binding.
15
+ - tclock.rb is adapted from tclock.c from the ncurses library distribution.
16
+ - form.rb anf form2.rb have been written by Simon Kaczor, who has adapted them
17
+ from sample code from the NCurses Programming HOWTO.
18
+
19
+ See the comments in the source files for restrictions imposed on copying and
20
+ modifying these.
21
+
22
+ That said, I suppose you may still look at their source code and learn how
23
+ ncurses programs generally work, as long as you dont start your own programs
24
+ by loading the example program into your editor and modify it to your needs.
25
+
26
+ Tobias Peters <t-peters@users.berlios.de>
@@ -0,0 +1,129 @@
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 "ncurses"
63
+
64
+ def moving(scr)
65
+ scr.clear() # clear screen
66
+ scr.move(5,5) # move cursor
67
+ scr.addstr("move(5,5)")
68
+ scr.refresh() # update screen
69
+ sleep(2)
70
+ scr.move(2,2)
71
+ scr.addstr("move(2,2)")
72
+ scr.refresh()
73
+ sleep(2)
74
+ scr.move(10, 2)
75
+ scr.addstr("Press a key to continue")
76
+ scr.getch()
77
+ end
78
+
79
+ def border(scr)
80
+ scr.clear()
81
+ scr.border(*([0]*8)) # calls WINDOW#border(0, 0, 0, 0, 0, 0, 0, 0)
82
+ scr.move(3,3)
83
+ scr.addstr("Press a key to continue")
84
+ scr.getch()
85
+ end
86
+
87
+ def two_borders()
88
+ # make a new window as tall as the screen and half as wide, in the left half
89
+ # of the screen
90
+ one = Ncurses::WINDOW.new(0, Ncurses.COLS() / 2, 0, 0)
91
+ # make one for the right half
92
+ two = Ncurses::WINDOW.new(0, Ncurses.COLS() - (Ncurses.COLS() / 2),
93
+ 0, Ncurses.COLS() / 2)
94
+ one.border(*([0]*8))
95
+ two.border(*([0]*8))
96
+ one.move(3,3)
97
+ two.move(2,5)
98
+ one.addstr("move(3,3)")
99
+ two.addstr("move(2,5)")
100
+ two.move(5,3)
101
+ two.addstr("Press a key to continue")
102
+ one.noutrefresh() # copy window to virtual screen, don't update real screen
103
+ two.noutrefresh()
104
+ Ncurses.doupdate() # update read screen
105
+ two.getch()
106
+ end
107
+
108
+ begin
109
+ # initialize ncurses
110
+ Ncurses.initscr
111
+ Ncurses.cbreak # provide unbuffered input
112
+ Ncurses.noecho # turn off input echoing
113
+ Ncurses.nonl # turn off newline translation
114
+ Ncurses.stdscr.intrflush(false) # turn off flush-on-interrupt
115
+ Ncurses.stdscr.keypad(true) # turn on keypad mode
116
+
117
+ Ncurses.stdscr.addstr("Press a key to continue") # output string
118
+ Ncurses.stdscr.getch # get a charachter
119
+
120
+ moving(Ncurses.stdscr) # demo of moving cursor
121
+ border(Ncurses.stdscr) # demo of borders
122
+ two_borders() # demo of two windows with borders
123
+
124
+ ensure
125
+ Ncurses.echo
126
+ Ncurses.nocbreak
127
+ Ncurses.nl
128
+ Ncurses.endwin
129
+ end