snowleopard-ncurses 1.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +515 -0
- data/Changes +53 -0
- data/MANIFEST +28 -0
- data/Makefile +194 -0
- data/README +355 -0
- data/THANKS +15 -0
- data/TODO +15 -0
- data/VERSION +1 -0
- data/examples/LICENSES_for_examples +26 -0
- data/examples/example.rb +129 -0
- data/examples/form.rb +82 -0
- data/examples/form2.rb +184 -0
- data/examples/hello_ncurses.rb +57 -0
- data/examples/rain.rb +219 -0
- data/examples/read_line.rb +67 -0
- data/examples/tclock.rb +227 -0
- data/examples/test_scanw.rb +27 -0
- data/extconf.rb +138 -0
- data/form_wrap.c +1450 -0
- data/form_wrap.h +61 -0
- data/lib/ncurses.rb +344 -0
- data/make_dist.rb +45 -0
- data/menu_wrap.c +1144 -0
- data/menu_wrap.h +49 -0
- data/ncurses_wrap.c +2769 -0
- data/ncurses_wrap.h +101 -0
- data/panel_wrap.c +256 -0
- data/panel_wrap.h +32 -0
- metadata +91 -0
data/Changes
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
ncurses-ruby-1.1
|
2
|
+
* Bugfixes by T. Sutherland in _tracef and _tracedump.
|
3
|
+
|
4
|
+
ncurses-ruby-1.0
|
5
|
+
* Mousemask bugfix from P.Duncan.
|
6
|
+
* Solved timing problems that affected visual smoothness of reactions
|
7
|
+
to user input
|
8
|
+
* Each SCREEN got back its own "halfdelay" and "cbreak" settings
|
9
|
+
|
10
|
+
ncurses-ruby-0.9.2
|
11
|
+
* Preventing getch and wgetch functions from blocking other ruby threads.
|
12
|
+
* Previously ncurses-ruby installed two files named "ncurses.rb" and
|
13
|
+
"ncurses.so". The "ncurses.so" is now renamed to "ncurses_bin.so"
|
14
|
+
to prevent "require 'ncurses'" from accidentally loading only the
|
15
|
+
binary file in case that this is found first in ruby's load path.
|
16
|
+
* Reintroduced ability to "include" Ncurses functions:
|
17
|
+
Use "include Ncurses::Namespace" for that. This is implemented via
|
18
|
+
method_missing, so that ncurses functions (some of which have very
|
19
|
+
common names) will not hide other functions defined in the extended
|
20
|
+
scope. (Any existing method_missing function is properly aliased and
|
21
|
+
called after an unsuccessful lookup.)
|
22
|
+
|
23
|
+
ncurses-ruby-0.9.1
|
24
|
+
* Bugfix in *in*str functions (Hiroshi Sainohira)
|
25
|
+
* Fix linking error on Mac OS X and some other platforms (Andreas Schwarz)
|
26
|
+
|
27
|
+
ncurses-ruby-0.9:
|
28
|
+
* Forms wrapper contributed by Simon Kaczor
|
29
|
+
* ncurses-ruby now also works with ncurses-4.2
|
30
|
+
(an old release from 1998, needed for Zaurus-port)
|
31
|
+
* First binary package for Sharp Zaurus (arm-linux)
|
32
|
+
|
33
|
+
ncurses-ruby-0.8:
|
34
|
+
* Bugfix: Calls into the ncurses library prior to calling
|
35
|
+
Ncurses::initscr or Ncurses::newterm had previously crashed
|
36
|
+
the Ruby interpreter.
|
37
|
+
Fixed by delaying the binding of most Ncurses functions
|
38
|
+
until after Ncurses::initscr or Ncurses::newterm have been
|
39
|
+
called.
|
40
|
+
* Replaced module functions with singleton functions. This
|
41
|
+
means that
|
42
|
+
include Ncurses
|
43
|
+
initscr
|
44
|
+
is no longer possible. Instead, use
|
45
|
+
Ncurses.initscr
|
46
|
+
Reasons: - Consistency. The shortcut has never been possible
|
47
|
+
with all ncurses functions.
|
48
|
+
- Namespace pollution. Some ncurses functions have
|
49
|
+
too common names.
|
50
|
+
|
51
|
+
ncurses-ruby-0.7.2:
|
52
|
+
* reintroduced Ncurses::pechochar and Ncurses::redrawwin in the ncurses build.
|
53
|
+
These had been removed by mistake because they did not work with PDCurses.
|
data/MANIFEST
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Changes
|
2
|
+
COPYING
|
3
|
+
MANIFEST
|
4
|
+
README
|
5
|
+
THANKS
|
6
|
+
TODO
|
7
|
+
VERSION
|
8
|
+
examples/example.rb
|
9
|
+
examples/form.rb
|
10
|
+
examples/form2.rb
|
11
|
+
examples/hello_ncurses.rb
|
12
|
+
examples/LICENSES_for_examples
|
13
|
+
examples/rain.rb
|
14
|
+
examples/tclock.rb
|
15
|
+
examples/read_line.rb
|
16
|
+
examples/test_scanw.rb
|
17
|
+
extconf.rb
|
18
|
+
form_wrap.c
|
19
|
+
form_wrap.h
|
20
|
+
make_dist.rb
|
21
|
+
ncurses_wrap.c
|
22
|
+
ncurses_wrap.h
|
23
|
+
lib/ncurses.rb
|
24
|
+
panel_wrap.c
|
25
|
+
panel_wrap.h
|
26
|
+
menu_wrap.c
|
27
|
+
menu_wrap.h
|
28
|
+
|
data/Makefile
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
|
2
|
+
SHELL = /bin/sh
|
3
|
+
|
4
|
+
#### Start of system configuration section. ####
|
5
|
+
|
6
|
+
srcdir = .
|
7
|
+
topdir = /Users/rahul/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1
|
8
|
+
hdrdir = /Users/rahul/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1
|
9
|
+
arch_hdrdir = /Users/rahul/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/$(arch)
|
10
|
+
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
|
11
|
+
prefix = $(DESTDIR)/Users/rahul/.rvm/rubies/ruby-1.9.2-head
|
12
|
+
rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
|
13
|
+
exec_prefix = $(prefix)
|
14
|
+
vendorhdrdir = $(rubyhdrdir)/vendor_ruby
|
15
|
+
sitehdrdir = $(rubyhdrdir)/site_ruby
|
16
|
+
rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)
|
17
|
+
vendordir = $(rubylibprefix)/vendor_ruby
|
18
|
+
sitedir = $(rubylibprefix)/site_ruby
|
19
|
+
ridir = $(datarootdir)/$(RI_BASE_NAME)
|
20
|
+
mandir = $(datarootdir)/man
|
21
|
+
localedir = $(datarootdir)/locale
|
22
|
+
libdir = $(exec_prefix)/lib
|
23
|
+
psdir = $(docdir)
|
24
|
+
pdfdir = $(docdir)
|
25
|
+
dvidir = $(docdir)
|
26
|
+
htmldir = $(docdir)
|
27
|
+
infodir = $(datarootdir)/info
|
28
|
+
docdir = $(datarootdir)/doc/$(PACKAGE)
|
29
|
+
oldincludedir = $(DESTDIR)/usr/include
|
30
|
+
includedir = $(prefix)/include
|
31
|
+
localstatedir = $(prefix)/var
|
32
|
+
sharedstatedir = $(prefix)/com
|
33
|
+
sysconfdir = $(prefix)/etc
|
34
|
+
datadir = $(datarootdir)
|
35
|
+
datarootdir = $(prefix)/share
|
36
|
+
libexecdir = $(exec_prefix)/libexec
|
37
|
+
sbindir = $(exec_prefix)/sbin
|
38
|
+
bindir = $(exec_prefix)/bin
|
39
|
+
rubylibdir = $(rubylibprefix)/$(ruby_version)
|
40
|
+
archdir = $(rubylibdir)/$(arch)
|
41
|
+
sitelibdir = $(sitedir)/$(ruby_version)
|
42
|
+
sitearchdir = $(sitelibdir)/$(sitearch)
|
43
|
+
vendorlibdir = $(vendordir)/$(ruby_version)
|
44
|
+
vendorarchdir = $(vendorlibdir)/$(sitearch)
|
45
|
+
|
46
|
+
CC = gcc
|
47
|
+
CXX = g++
|
48
|
+
LIBRUBY = $(LIBRUBY_SO)
|
49
|
+
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
50
|
+
LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
|
51
|
+
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
|
52
|
+
OUTFLAG = -o
|
53
|
+
COUTFLAG = -o
|
54
|
+
|
55
|
+
RUBY_EXTCONF_H =
|
56
|
+
cflags = $(optflags) $(debugflags) $(warnflags)
|
57
|
+
optflags = -O3
|
58
|
+
debugflags = -ggdb
|
59
|
+
warnflags = -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long
|
60
|
+
CFLAGS = -fno-common $(cflags) -fno-common -pipe -g -DNCURSES_OPAQUE=0
|
61
|
+
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
|
62
|
+
DEFS =
|
63
|
+
CPPFLAGS = -DHAVE_UNISTD_H -DHAVE_LOCALE_H -DHAVE_NCURSES_H -DHAVE_NEWSCR -DHAVE_TABSIZE -DHAVE_ESCDELAY -DHAVE_KEYBOUND -DHAVE_CURSES_VERSION -DHAVE_TIGETSTR -DHAVE_GETWIN -DHAVE_PUTWIN -DHAVE_UNGETMOUSE -DHAVE_MOUSEMASK -DHAVE_WENCLOSE -DHAVE_MOUSEINTERVAL -DHAVE_WMOUSE_TRAFO -DHAVE_MCPRINT -DHAVE_HAS_KEY -DHAVE_DELSCREEN -DHAVE_DEFINE_KEY -DHAVE_KEYOK -DHAVE_RESIZETERM -DHAVE_USE_DEFAULT_COLORS -DHAVE_USE_EXTENDED_NAMES -DHAVE_WRESIZE -DHAVE_ATTR_ON -DHAVE_ATTR_OFF -DHAVE_ATTR_SET -DHAVE_CHGAT -DHAVE_COLOR_SET -DHAVE_FILTER -DHAVE_INTRFLUSH -DHAVE_MVCHGAT -DHAVE_MVHLINE -DHAVE_MVVLINE -DHAVE_MVWCHGAT -DHAVE_MVWHLINE -DHAVE_MVWVLINE -DHAVE_NOQIFLUSH -DHAVE_PUTP -DHAVE_QIFLUSH -DHAVE_SCR_DUMP -DHAVE_SCR_INIT -DHAVE_SCR_RESTORE -DHAVE_SCR_SET -DHAVE_SLK_ATTR_OFF -DHAVE_SLK_ATTR_ON -DHAVE_SLK_ATTR -DHAVE_SLK_ATTR_SET -DHAVE_SLK_COLOR -DHAVE_TIGETFLAG -DHAVE_TIGETNUM -DHAVE_USE_ENV -DHAVE_VIDATTR -DHAVE_VID_ATTR -DHAVE_WATTR_ON -DHAVE_WATTR_OFF -DHAVE_WATTR_SET -DHAVE_WCHGAT -DHAVE_WCOLOR_SET -DHAVE_GETATTRS -DHAVE_ASSUME_DEFAULT_COLORS -DHAVE_ATTR_GET -DHAVE_PANEL_H -DHAVE_FORM_H -DHAVE_MENU_H -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags)
|
64
|
+
CXXFLAGS = $(CFLAGS) $(cxxflags)
|
65
|
+
ldflags = -L.
|
66
|
+
dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace
|
67
|
+
ARCH_FLAG =
|
68
|
+
DLDFLAGS = $(ldflags) $(dldflags)
|
69
|
+
LDSHARED = $(CC) -dynamic -bundle
|
70
|
+
LDSHAREDXX = $(CXX) -dynamic -bundle
|
71
|
+
AR = ar
|
72
|
+
EXEEXT =
|
73
|
+
|
74
|
+
RUBY_BASE_NAME = ruby
|
75
|
+
RUBY_INSTALL_NAME = ruby
|
76
|
+
RUBY_SO_NAME = ruby.1.9.1
|
77
|
+
arch = x86_64-darwin10
|
78
|
+
sitearch = $(arch)
|
79
|
+
ruby_version = 1.9.1
|
80
|
+
ruby = /Users/rahul/.rvm/rubies/ruby-1.9.2-head/bin/ruby
|
81
|
+
RUBY = $(ruby)
|
82
|
+
RM = rm -f
|
83
|
+
RM_RF = $(RUBY) -run -e rm -- -rf
|
84
|
+
RMDIRS = $(RUBY) -run -e rmdir -- -p
|
85
|
+
MAKEDIRS = /opt/local/bin/gmkdir -p
|
86
|
+
INSTALL = /opt/local/bin/ginstall -c
|
87
|
+
INSTALL_PROG = $(INSTALL) -m 0755
|
88
|
+
INSTALL_DATA = $(INSTALL) -m 644
|
89
|
+
COPY = cp
|
90
|
+
|
91
|
+
#### End of system configuration section. ####
|
92
|
+
|
93
|
+
preload =
|
94
|
+
|
95
|
+
libpath = . $(libdir)
|
96
|
+
LIBPATH = -L. -L$(libdir)
|
97
|
+
DEFFILE =
|
98
|
+
|
99
|
+
CLEANFILES = mkmf.log
|
100
|
+
DISTCLEANFILES =
|
101
|
+
DISTCLEANDIRS =
|
102
|
+
|
103
|
+
extout =
|
104
|
+
extout_prefix =
|
105
|
+
target_prefix =
|
106
|
+
LOCAL_LIBS =
|
107
|
+
LIBS = $(LIBRUBYARG_SHARED) -lmenu -lform -lpanel -lncurses -lpthread -ldl -lobjc
|
108
|
+
SRCS = form_wrap.c menu_wrap.c ncurses_wrap.c panel_wrap.c
|
109
|
+
OBJS = form_wrap.o menu_wrap.o ncurses_wrap.o panel_wrap.o
|
110
|
+
TARGET = ncurses_bin
|
111
|
+
DLLIB = $(TARGET).bundle
|
112
|
+
EXTSTATIC =
|
113
|
+
STATIC_LIB =
|
114
|
+
|
115
|
+
BINDIR = $(bindir)
|
116
|
+
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
|
117
|
+
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
|
118
|
+
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
119
|
+
HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
|
120
|
+
ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
|
121
|
+
|
122
|
+
TARGET_SO = $(DLLIB)
|
123
|
+
CLEANLIBS = $(TARGET).bundle
|
124
|
+
CLEANOBJS = *.o *.bak
|
125
|
+
|
126
|
+
all: $(DLLIB)
|
127
|
+
static: $(STATIC_LIB)
|
128
|
+
.PHONY: all install static install-so install-rb
|
129
|
+
.PHONY: clean clean-so clean-rb
|
130
|
+
|
131
|
+
clean-rb-default::
|
132
|
+
clean-rb::
|
133
|
+
clean-so::
|
134
|
+
clean: clean-so clean-rb-default clean-rb
|
135
|
+
@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
|
136
|
+
|
137
|
+
distclean-rb-default::
|
138
|
+
distclean-rb::
|
139
|
+
distclean-so::
|
140
|
+
distclean: clean distclean-so distclean-rb-default distclean-rb
|
141
|
+
@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
|
142
|
+
@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
|
143
|
+
@-$(RMDIRS) $(DISTCLEANDIRS)
|
144
|
+
|
145
|
+
realclean: distclean
|
146
|
+
install: install-so install-rb
|
147
|
+
|
148
|
+
install-so: $(RUBYARCHDIR)
|
149
|
+
install-so: $(RUBYARCHDIR)/$(DLLIB)
|
150
|
+
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
|
151
|
+
@-$(MAKEDIRS) $(@D)
|
152
|
+
$(INSTALL_PROG) $(DLLIB) $(@D)
|
153
|
+
install-rb: pre-install-rb install-rb-default
|
154
|
+
install-rb-default: pre-install-rb-default
|
155
|
+
pre-install-rb: Makefile
|
156
|
+
pre-install-rb-default: Makefile
|
157
|
+
pre-install-rb-default: $(RUBYLIBDIR)
|
158
|
+
install-rb-default: $(RUBYLIBDIR)/ncurses.rb
|
159
|
+
$(RUBYLIBDIR)/ncurses.rb: $(srcdir)/lib/ncurses.rb
|
160
|
+
@-$(MAKEDIRS) $(@D)
|
161
|
+
$(INSTALL_DATA) $(srcdir)/lib/ncurses.rb $(@D)
|
162
|
+
$(RUBYARCHDIR):
|
163
|
+
$(MAKEDIRS) $@
|
164
|
+
$(RUBYLIBDIR):
|
165
|
+
$(MAKEDIRS) $@
|
166
|
+
|
167
|
+
site-install: site-install-so site-install-rb
|
168
|
+
site-install-so: install-so
|
169
|
+
site-install-rb: install-rb
|
170
|
+
|
171
|
+
.SUFFIXES: .c .m .cc .cxx .cpp .C .o
|
172
|
+
|
173
|
+
.cc.o:
|
174
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
175
|
+
|
176
|
+
.cxx.o:
|
177
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
178
|
+
|
179
|
+
.cpp.o:
|
180
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
181
|
+
|
182
|
+
.C.o:
|
183
|
+
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
|
184
|
+
|
185
|
+
.c.o:
|
186
|
+
$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
|
187
|
+
|
188
|
+
$(DLLIB): $(OBJS) Makefile
|
189
|
+
@-$(RM) $(@)
|
190
|
+
$(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
$(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h
|
data/README
ADDED
@@ -0,0 +1,355 @@
|
|
1
|
+
$Id: README,v 1.16 2009/05/03 14:13:27 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
|
+
(C) 2005 2006 Tobias Herzke <t-peters@users.berlios.de>
|
8
|
+
|
9
|
+
This module is free software; you can redistribute it and/or
|
10
|
+
modify it under the terms of the GNU Lesser General Public
|
11
|
+
License as published by the Free Software Foundation; either
|
12
|
+
version 2 of the License, or (at your option) any later version.
|
13
|
+
|
14
|
+
This module is distributed in the hope that it will be useful,
|
15
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
|
+
Lesser General Public License for more details.
|
18
|
+
|
19
|
+
You should have received a copy of the GNU Lesser General Public
|
20
|
+
License along with this module; if not, write to the Free Software
|
21
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
22
|
+
------------------------------------------------------------------------
|
23
|
+
|
24
|
+
Overview
|
25
|
+
========
|
26
|
+
|
27
|
+
This README file explains how to use the ncurses ruby interface. It is
|
28
|
+
assumed that the reader has a rough understanding of what the ncurses
|
29
|
+
library is and how to use it from the C language. It then goes into
|
30
|
+
detail, explaining what is covered by the ruby interface, and the
|
31
|
+
rules that were followed in translating the C interface into a ruby
|
32
|
+
interface.
|
33
|
+
|
34
|
+
This ncurses interface provides access to the functions, macros,
|
35
|
+
global variables and constants of the ncurses library. These are
|
36
|
+
mapped to a Ruby Module named "Ncurses": Functions and external
|
37
|
+
variables are implemented as singleton functions of the Module
|
38
|
+
Ncurses.
|
39
|
+
|
40
|
+
This README is organized into the following parts:
|
41
|
+
- Overview
|
42
|
+
- Installation and Usage
|
43
|
+
- External Variables
|
44
|
+
- Constants
|
45
|
+
- Functions (and their Interfaces)
|
46
|
+
- Module / Class Hierarchie
|
47
|
+
- The WINDOW class
|
48
|
+
- The panel Library
|
49
|
+
- The form Library
|
50
|
+
- The menu Library
|
51
|
+
- Locale handling
|
52
|
+
- Ncurses and Ruby Threads
|
53
|
+
- Example programs
|
54
|
+
|
55
|
+
General Ncurses Literature
|
56
|
+
--------------------------
|
57
|
+
|
58
|
+
If you don't know how to use ncurses from C, then please read an
|
59
|
+
introduction to ncurses before continuing with this README. Eric
|
60
|
+
Raymond has written an introduction that should be part of the ncurses
|
61
|
+
development package installed on your computer.
|
62
|
+
If you'd like a gentler introduction, then you have two options:
|
63
|
+
(1) there is a part of a chapter in "The Linux Programmer's Guide" dealing
|
64
|
+
with ncurses, available from www.tldp.org. It is quite old by now,
|
65
|
+
but the ncurses interface has not changed since then, regarding the
|
66
|
+
scope of covered functions, so it is still a very good read.
|
67
|
+
(2) There is also an up-to-date "NCURSES-Programming-HOWTO" in the HOWTO
|
68
|
+
collection of the Linux Documentation Project, also available at
|
69
|
+
www.tldp.org, which is worth a read.
|
70
|
+
|
71
|
+
You will also appreciate the extensive man-pages of ncurses, a useful
|
72
|
+
reference while coding.
|
73
|
+
|
74
|
+
|
75
|
+
Installation and Usage
|
76
|
+
======================
|
77
|
+
|
78
|
+
ruby extconf.rb
|
79
|
+
make
|
80
|
+
make install
|
81
|
+
|
82
|
+
In your programs:
|
83
|
+
require "ncurses.rb"
|
84
|
+
|
85
|
+
If your programs use the scanw functions (most unlikely) you will have to
|
86
|
+
install the scanf library for ruby (http://www.rubyhacker.com/code/scanf).
|
87
|
+
|
88
|
+
Most ncurses functions are only available after either Ncurses.initscr or
|
89
|
+
Ncurses.newterm has returned successfully.
|
90
|
+
|
91
|
+
External Variables
|
92
|
+
==================
|
93
|
+
|
94
|
+
External variables are accessed read-only, by module functions taking no
|
95
|
+
arguments. They are spelled exactly like their C counterparts. Sometimes, this
|
96
|
+
leads to module functions beginning with an uppercase letter (e.g.
|
97
|
+
Ncurses.LINES).
|
98
|
+
|
99
|
+
One of these external variables, ESCDELAY, is also settable with a ruby method
|
100
|
+
(Ncurses.ESCDELAY=).
|
101
|
+
|
102
|
+
Another external variable, Ncurses.RESIZEDELAY is introduced by this wrapper.
|
103
|
+
It contains the maximum milliseconds delay with which terminal resizesings are
|
104
|
+
recognized.
|
105
|
+
|
106
|
+
Constants
|
107
|
+
=========
|
108
|
+
(static C Preprocessor macros)
|
109
|
+
|
110
|
+
Constants are implemented as module constants in the Ncurses module, if
|
111
|
+
possible. Ruby constants can not start with an underscore, so these constants
|
112
|
+
have been renamed (they lost the leading underscore). There are,however,
|
113
|
+
module functions with the same name as these constants, that also return
|
114
|
+
the constant's value, when invoked (e.g. "Ncurses._ENDLINE" returns the value
|
115
|
+
of the constant "Ncurses::ENDLINE", which has the same value as the C constant
|
116
|
+
"_ENDLINE").
|
117
|
+
|
118
|
+
Note: The ncurses macros starting with ACS_ are not constants, their value
|
119
|
+
depends on the terminal in use. Nevertheless, they are implemented as
|
120
|
+
constants of the Ncurses module, but since they depend on the terminal, they
|
121
|
+
are not initialized before initscr() has been called. If you need more than
|
122
|
+
one terminal in a single program, you can access the ACS_ values through member
|
123
|
+
functions of class SCREEN.
|
124
|
+
|
125
|
+
|
126
|
+
Functions (and their Interfaces)
|
127
|
+
================================
|
128
|
+
|
129
|
+
Functions (also those only implemented by macros in C) can be accessed
|
130
|
+
as module functions of the Module Ncurses. They take exactly the same
|
131
|
+
arguments as their C counterparts. Some of the C functions return additional
|
132
|
+
arguments through pointer arguments. These are implemented as follows:
|
133
|
+
|
134
|
+
|
135
|
+
Functions expecting pointers to integer types
|
136
|
+
---------------------------------------------
|
137
|
+
|
138
|
+
When the C-function expects a pointer to int, short, chtype, or attr_type,
|
139
|
+
You should use a variable containing an empty array as the argument to the ruby
|
140
|
+
function. This is because ruby passes these types (ints) "by value" instead of
|
141
|
+
"by reference"; but arrays are passed by reference, so that you can see the
|
142
|
+
changes to them.
|
143
|
+
Attention: some macro-only functions like getsyx accept variables of type int,
|
144
|
+
but, being macros, they write values to their arguments. Thus, they also need
|
145
|
+
empty array arguments when called from ruby.
|
146
|
+
Example:
|
147
|
+
color_pair_number = 4
|
148
|
+
foreground_color = []
|
149
|
+
background_color = []
|
150
|
+
if (Ncurses.pair_content(color_pair_number, foreground_color,
|
151
|
+
background_color) != Ncurses::ERR)
|
152
|
+
"color pair number #{color_pair_number} contains color number " +
|
153
|
+
"#{foreground_color[0]} as the foreground color, and color " +
|
154
|
+
"number #{background_color[0]} as the background color")
|
155
|
+
end
|
156
|
+
|
157
|
+
There are 2 functions that read a value from the location pointed to by a
|
158
|
+
pointer to int, and store another value at those locations. These functions are
|
159
|
+
mouse_trafo and wmouse_trafo. When calling these functions, you have to provide
|
160
|
+
2 arrays, each filled with exacly one Integer. The values contained in these
|
161
|
+
arrays will then be changed by the ruby module function.
|
162
|
+
|
163
|
+
|
164
|
+
Functions expecting (non-const) pointers to char
|
165
|
+
------------------------------------------------
|
166
|
+
|
167
|
+
When the C-function expects a pointer to char, you should use a variable
|
168
|
+
containing an empty string as the argument to the ruby function.
|
169
|
+
Example:
|
170
|
+
line2 = ""
|
171
|
+
if (Ncurses.mvwinnstr(Ncurses.stdscr, y=2, x=0, line2,
|
172
|
+
Ncurses.getmaxx(Ncurses.stdscr)) == Ncurses::ERR)
|
173
|
+
raise "could not scan 3rd line"
|
174
|
+
else
|
175
|
+
Ncurses.beep if line2.index("|")
|
176
|
+
end
|
177
|
+
The string that the C function would store at the pointer-to-char location
|
178
|
+
will be appended to the given string.
|
179
|
+
|
180
|
+
Functions expecting const pointers to char do not modify the string they
|
181
|
+
receive, you can pass any string to them.
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
Functions expecting pointers to structs
|
186
|
+
---------------------------------------------------
|
187
|
+
|
188
|
+
When the C-function expects a pointer to WINDOW, SCREEN, MEVENT,
|
189
|
+
PANEL, FORM, FIELD or FIELDTYPE then simply pass it the corresponding,
|
190
|
+
already existing ruby object.
|
191
|
+
|
192
|
+
|
193
|
+
scanf style functions expecting various pointers
|
194
|
+
---------------------------------------------------
|
195
|
+
|
196
|
+
namely scanw, mvscanw, wscanw, mvwscanw. Use an array after the format string.
|
197
|
+
The scanned values will be placed there. Remember, you need scanf for ruby
|
198
|
+
installed for these functions to work.
|
199
|
+
|
200
|
+
Module / Class Hierarchie
|
201
|
+
=========================
|
202
|
+
|
203
|
+
module Ncurses
|
204
|
+
class WINDOW; end
|
205
|
+
class SCREEN; end
|
206
|
+
class MEVENT; end
|
207
|
+
module Panel
|
208
|
+
class PANEL; end
|
209
|
+
end
|
210
|
+
module Form
|
211
|
+
class FORM; end
|
212
|
+
class FIELD; end
|
213
|
+
class FIELDTYPE; end
|
214
|
+
end
|
215
|
+
module Menu
|
216
|
+
class MENU; end
|
217
|
+
class ITEM; end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
|
222
|
+
The WINDOW class
|
223
|
+
================
|
224
|
+
|
225
|
+
The class WINDOW implements method_missing and tries to map invoked
|
226
|
+
methods to Ncurses module functions using a simple heuristic:
|
227
|
+
|
228
|
+
If the method name starts with "mv", it looks for a Ncurses module
|
229
|
+
function that starts with "mvw", and if it exists, adds itself to the
|
230
|
+
argument list and calls this function.
|
231
|
+
If no such module function exists, or the name of the invoked method
|
232
|
+
does not start with "mv", it looks if there is a module function with
|
233
|
+
the name "w" + methodname, and if it exists, adds itself again to the
|
234
|
+
argument list and calls this function.
|
235
|
+
If this module function did not exist either, then, as a last step, it
|
236
|
+
invokes a module function with the same name as the method, adding
|
237
|
+
itself to the argument list.
|
238
|
+
|
239
|
+
Example: If you invoke win.mvaddch(y,x,ch) on an Ncurses::WINDOW
|
240
|
+
object, it will delegate the method call to
|
241
|
+
Ncurses.mvwaddch(win,y,x,ch).
|
242
|
+
|
243
|
+
Other examples:
|
244
|
+
|
245
|
+
win.printw("hello") => Ncurses.wprintw(win, "hello")
|
246
|
+
|
247
|
+
win.getmaxyx(y=[],
|
248
|
+
x=[]) => Ncurses.getmaxyx(win,y,x)
|
249
|
+
|
250
|
+
win.delwin() => Ncurses.delwin(win) # win cannot be used
|
251
|
+
# after this call
|
252
|
+
|
253
|
+
|
254
|
+
The panel Library
|
255
|
+
=================
|
256
|
+
|
257
|
+
The panel library has also been wrapped. All panel functions are
|
258
|
+
implemented as module functions of the module Ncurses::Panel.
|
259
|
+
|
260
|
+
Most of these functions are also implemented as methods of class
|
261
|
+
Ncurses::Panel::PANEL, once with their original name and once with the
|
262
|
+
subword "panel" and an adjacent underscore removed.
|
263
|
+
|
264
|
+
The form Library
|
265
|
+
================
|
266
|
+
|
267
|
+
The form library was wrapped inside the Ncurses:Form module. All
|
268
|
+
form functions are implemented as module functions on the module
|
269
|
+
Ncurses::Form. In addition, all function for which the first
|
270
|
+
parameter is one of the objects are also implemented as an instance
|
271
|
+
method of the respective class. For example, instead of calling
|
272
|
+
post_form(form), you can use form.post_form().
|
273
|
+
|
274
|
+
Three objects are defined in the Ncurses:Form module:
|
275
|
+
1. FORM
|
276
|
+
2. FIELD
|
277
|
+
3. FIELDTYPE
|
278
|
+
|
279
|
+
They are wrapping actual ncurses pointers and should be use whenever a
|
280
|
+
pointer to one of these types is expected in function calls.
|
281
|
+
|
282
|
+
All form constants are defined in the module as Ruby constants with
|
283
|
+
the same name as the curses constants.
|
284
|
+
|
285
|
+
Constructors for FORM, FIELD and FIELDTYPE objects are also provided,
|
286
|
+
and they expect the same parameters as new_form, new_field and
|
287
|
+
new_fieldtype curses functions.
|
288
|
+
|
289
|
+
Field validation is implemented using Ruby Proc objects. You must
|
290
|
+
provide a Ruby block whenever a function pointer is expected in curses
|
291
|
+
function arguments. See the example form2.rb for more details.
|
292
|
+
|
293
|
+
The functions form_userptr and field_userptr are not supported. Use
|
294
|
+
form.user_object and field.user_object to store Ruby objects instead.
|
295
|
+
|
296
|
+
The menu Library
|
297
|
+
================
|
298
|
+
|
299
|
+
The menu library was wrapped inside the Ncurses:Menu module. All
|
300
|
+
menu functions are implemented as module functions in the module
|
301
|
+
Ncurses::Menu. In addition, all functions for which the first
|
302
|
+
parameter is one of the objects are also implemented as an instance
|
303
|
+
method of the respective class. For example, instead of calling
|
304
|
+
post_menu(menu), you can use menu.post_menu().
|
305
|
+
|
306
|
+
Two objects are defined in the Ncurses:Menu module:
|
307
|
+
1. MENU
|
308
|
+
2. ITEM
|
309
|
+
|
310
|
+
They are wrapping actual ncurses pointers and should be use whenever a
|
311
|
+
pointer to one of these types is expected in function calls.
|
312
|
+
|
313
|
+
All menu constants are defined in the module as Ruby constants with
|
314
|
+
the same name as the curses constants.
|
315
|
+
|
316
|
+
Constructors for MENU and ITEM objects are also provided, and they
|
317
|
+
expect the same parameters as new_menu and new_item curses functions.
|
318
|
+
|
319
|
+
You must provide a Ruby block whenever a function pointer is expected
|
320
|
+
in curses function arguments.
|
321
|
+
|
322
|
+
The functions menu_userptr and item_userptr are not supported. Use
|
323
|
+
menu.user_object and item.user_object to store Ruby objects instead.
|
324
|
+
|
325
|
+
Locale handling
|
326
|
+
===============
|
327
|
+
|
328
|
+
The C library function setlocale is not technically an Ncurses function.
|
329
|
+
However, it is used by many ncurses programs, and for this purpose,
|
330
|
+
a wrapper for this function is also included in ncurses-ruby.
|
331
|
+
|
332
|
+
The function is implemented as a module function Ncurses.ruby, and
|
333
|
+
expects two arguments, an Integer and a String. It returns a string.
|
334
|
+
The constants that can be used as the Integer argument are also wrapped
|
335
|
+
as constants in the Ncurses module. See the manual page for setlocale
|
336
|
+
for documentation of this function.
|
337
|
+
|
338
|
+
Ncurses and Ruby Threads
|
339
|
+
========================
|
340
|
+
|
341
|
+
The ncurses library is not thread-safe. Your application must properly
|
342
|
+
serialize calls into ncurses.
|
343
|
+
|
344
|
+
Prior to release 0.9.2, the getch and wgetch calls used to block the
|
345
|
+
complete ruby interpreter, all threads. This is no longer so. Other
|
346
|
+
threads should now continue to run during blocking calls to getch and
|
347
|
+
wgetch.
|
348
|
+
|
349
|
+
Example programs
|
350
|
+
================
|
351
|
+
|
352
|
+
Directory "examples" contains a few example programs demonstrating how
|
353
|
+
to use the ncurses library with ruby. Be sure to read the file
|
354
|
+
"examples/LICENSES_for_examples".
|
355
|
+
|