snowleopard-ncurses 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/THANKS ADDED
@@ -0,0 +1,15 @@
1
+ $Id: THANKS,v 1.9 2009/05/03 10:37:54 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
12
+ Simon Strandgaard
13
+ Paul Duncan
14
+ Tim Sutherland
15
+ Earle Clubb
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
+ 1.2.4
@@ -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
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/ruby
2
+ # Copyright (c) 2004 by Simon Kaczor <skaczor@cox.net>
3
+ # Example from the NCurses Programming HOWTO
4
+ # This example uses module functions that are documented in the ncurses man page.
5
+ # For a more rubyish approach that uses Ruby objects see form2.rb
6
+ #
7
+ # The original example contained the following copyright:
8
+ # Copyright (c) 2001 by Pradeep Padala. This document may be distributed
9
+ # under the terms set forth in the LDP license at linuxdoc.org/COPYRIGHT.html.
10
+
11
+ require 'ncurses.rb'
12
+
13
+ begin
14
+ scr = Ncurses.initscr()
15
+ Ncurses.cbreak()
16
+ Ncurses.noecho()
17
+ Ncurses.keypad(scr, true)
18
+
19
+ #create some fields
20
+ fields = Array.new
21
+ fields.push(Ncurses::Form.new_field(1,10,4,18,0,0))
22
+ fields.push(Ncurses::Form.new_field(1,10,6,18,0,0))
23
+
24
+ # set field options
25
+ Ncurses::Form.set_field_back(fields[0], Ncurses::A_UNDERLINE)
26
+ Ncurses::Form.field_opts_off(fields[0], Ncurses::Form::O_AUTOSKIP)
27
+
28
+ Ncurses::Form.set_field_back(fields[1], Ncurses::A_UNDERLINE)
29
+ Ncurses::Form.field_opts_off(fields[1], Ncurses::Form::O_AUTOSKIP)
30
+
31
+
32
+ # create a form
33
+ form = Ncurses::Form.new_form(fields)
34
+
35
+ # post the form and refresh the screen
36
+ Ncurses::Form.post_form(form)
37
+ scr.refresh()
38
+
39
+ Ncurses.mvprintw(4, 10, "Value 1:")
40
+ Ncurses.mvprintw(6, 10, "Value 2:")
41
+ scr.refresh()
42
+
43
+ # Loop through to get user requests
44
+ while((ch = scr.getch()) != Ncurses::KEY_F1) do
45
+ case(ch)
46
+ when Ncurses::KEY_DOWN
47
+ # Go to next field
48
+ Ncurses::Form.form_driver(form, Ncurses::Form::REQ_NEXT_FIELD)
49
+ # Go to the end of the present buffer
50
+ # Leaves nicely at the last character
51
+ Ncurses::Form.form_driver(form, Ncurses::Form::REQ_END_LINE)
52
+
53
+ when Ncurses::KEY_UP
54
+ #Go to previous field
55
+ Ncurses::Form.form_driver(form, Ncurses::Form::REQ_PREV_FIELD)
56
+ Ncurses::Form.form_driver(form, Ncurses::Form::REQ_END_LINE);
57
+ else
58
+ # If this is a normal character, it gets Printed
59
+ Ncurses::Form.form_driver(form, ch)
60
+ end
61
+ end
62
+
63
+ # unpost and free form
64
+ Ncurses::Form.unpost_form(form);
65
+ Ncurses::Form.free_form(form)
66
+ Ncurses::Form.free_field(fields[0]);
67
+ Ncurses::Form.free_field(fields[1]);
68
+
69
+
70
+ #using class methods this time
71
+ # form = Ncurses::Form::FORM.new(fields)
72
+ # puts "Created form: #{form.inspect}\n"
73
+ # form.free()
74
+
75
+ ensure
76
+ # put the screen back in its normal state
77
+ Ncurses.echo()
78
+ Ncurses.nocbreak()
79
+ Ncurses.nl()
80
+ Ncurses.endwin()
81
+ end
82
+
@@ -0,0 +1,184 @@
1
+ #!/usr/bin/ruby
2
+ # Copyright (c) 2004 by Simon Kaczor <skaczor@cox.net>
3
+ # Simple example of a form in action, based on the NCURSES Programming HOWTO:
4
+ # http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/
5
+ #
6
+ # All standard field types are created in the form.
7
+ # Additionnally a custom field is created to illustrate
8
+ # custom field validation using Ruby Proc objects, as shown in the example.
9
+ #
10
+ # The original example contained the following copyright:
11
+ # Copyright (c) 2001 by Pradeep Padala. This document may be distributed
12
+ # under the terms set forth in the LDP license at linuxdoc.org/COPYRIGHT.html.
13
+
14
+ require 'ncurses'
15
+
16
+ include Ncurses
17
+ include Ncurses::Form
18
+
19
+ def print_in_middle(win, starty, startx, width, string, color)
20
+
21
+ if(win == nil)
22
+ win = stdscr;
23
+ end
24
+ x = Array.new
25
+ y = Array.new
26
+ Ncurses.getyx(win, y, x);
27
+ if(startx != 0)
28
+ x[0] = startx;
29
+ end
30
+ if(starty != 0)
31
+ y[0] = starty;
32
+ end
33
+ if(width == 0)
34
+ width = 80;
35
+ end
36
+ length = string.length;
37
+ temp = (width - length)/ 2;
38
+ x[0] = startx + temp.floor;
39
+ win.attron(color);
40
+ win.mvprintw(y[0], x[0], "%s", string);
41
+ win.attroff(color);
42
+ Ncurses.refresh();
43
+ end
44
+
45
+ fields = Array.new
46
+
47
+ states = {"MI" => "Michigan",
48
+ "VA" => "Virginia",
49
+ "VE" => "Vermont"}
50
+ fieldcheck = proc { |afield|
51
+ val = afield.field_buffer(0)
52
+ val.strip!
53
+ if (states[val] != nil)
54
+ afield.set_field_buffer(0,states[val])
55
+ return true
56
+ else
57
+ return false
58
+ end
59
+ }
60
+ charcheck = proc { |ch|
61
+ if (('A'..'Z').include?(ch))
62
+ return true
63
+ else
64
+ return false
65
+ end
66
+ }
67
+
68
+ # Initialize curses
69
+ begin
70
+ stdscr = Ncurses.initscr();
71
+ Ncurses.start_color();
72
+ Ncurses.cbreak();
73
+ Ncurses.noecho();
74
+ Ncurses.keypad(stdscr, true);
75
+
76
+ # Initialize few color pairs
77
+ Ncurses.init_pair(1, COLOR_RED, COLOR_BLACK);
78
+ Ncurses.init_pair(2, COLOR_BLACK, COLOR_WHITE);
79
+ Ncurses.init_pair(3, COLOR_BLACK, COLOR_BLUE);
80
+ stdscr.bkgd(Ncurses.COLOR_PAIR(2));
81
+
82
+ # Initialize the fields
83
+ (1..9).each { |i|
84
+ field = FIELD.new(1, 10, i*2, 1, 0, 0)
85
+ field.set_field_back(A_UNDERLINE)
86
+ fields.push(field)
87
+ }
88
+
89
+ customtype = FIELDTYPE.new(fieldcheck, charcheck);
90
+
91
+ fields[1].set_field_type(TYPE_ALNUM, 0);
92
+ fields[2].set_field_type(TYPE_ALPHA, 0);
93
+ fields[3].set_field_type(TYPE_INTEGER, 0, 0, 1000);
94
+ fields[4].set_field_type(TYPE_NUMERIC, 2, 0, 1000);
95
+ fields[5].set_field_type(TYPE_ENUM, ["one","two","three"], false, false);
96
+ fields[6].set_field_type(TYPE_REGEXP, "^ *[0-9]* *$");
97
+ fields[7].set_field_type(TYPE_IPV4);
98
+ fields[8].set_field_type(customtype);
99
+
100
+
101
+ # Create the form and post it
102
+ my_form = FORM.new(fields);
103
+
104
+ my_form.user_object = "My identifier"
105
+
106
+ # Calculate the area required for the form
107
+ rows = Array.new()
108
+ cols = Array.new()
109
+ my_form.scale_form(rows, cols);
110
+
111
+ # Create the window to be associated with the form
112
+ my_form_win = WINDOW.new(rows[0] + 3, cols[0] + 14, 1, 1);
113
+ my_form_win.bkgd(Ncurses.COLOR_PAIR(3));
114
+ my_form_win.keypad(TRUE);
115
+
116
+ # Set main window and sub window
117
+ my_form.set_form_win(my_form_win);
118
+ my_form.set_form_sub(my_form_win.derwin(rows[0], cols[0], 2, 12));
119
+
120
+ # Print a border around the main window and print a title */
121
+ my_form_win.box(0, 0);
122
+ print_in_middle(my_form_win, 1, 0, cols[0] + 14, "My Form", Ncurses.COLOR_PAIR(1));
123
+
124
+ my_form.post_form();
125
+
126
+ # Print field types
127
+ my_form_win.mvaddstr(4, 2, "No Type")
128
+ my_form_win.mvaddstr(6, 2, "Alphanum")
129
+ my_form_win.mvaddstr(8, 2, "Alpha")
130
+ my_form_win.mvaddstr(10, 2, "Integer")
131
+ my_form_win.mvaddstr(12, 2, "Numeric")
132
+ my_form_win.mvaddstr(14, 2, "Enum")
133
+ my_form_win.mvaddstr(16, 2, "Regexp")
134
+ my_form_win.mvaddstr(18, 2, "IP")
135
+ my_form_win.mvaddstr(20, 2, "Custom")
136
+
137
+ my_form_win.wrefresh();
138
+
139
+ stdscr.mvprintw(Ncurses.LINES - 2, 28, "Use UP, DOWN arrow keys to switch between fields");
140
+ stdscr.mvprintw(Ncurses.LINES - 1, 28, "Press F1 to quit");
141
+ stdscr.refresh();
142
+
143
+ # Loop through to get user requests
144
+ while((ch = my_form_win.getch()) != KEY_F1)
145
+ case ch
146
+ when KEY_DOWN
147
+ # Go to next field */
148
+ my_form.form_driver(REQ_VALIDATION);
149
+ my_form.form_driver(REQ_NEXT_FIELD);
150
+ # Go to the end of the present buffer
151
+ # Leaves nicely at the last character
152
+ my_form.form_driver(REQ_END_LINE);
153
+
154
+ when KEY_UP
155
+ # Go to previous field
156
+ my_form.form_driver(REQ_VALIDATION);
157
+ my_form.form_driver(REQ_PREV_FIELD);
158
+ my_form.form_driver(REQ_END_LINE);
159
+
160
+ when KEY_LEFT
161
+ # Go to previous field
162
+ my_form.form_driver(REQ_PREV_CHAR);
163
+
164
+ when KEY_RIGHT
165
+ # Go to previous field
166
+ my_form.form_driver(REQ_NEXT_CHAR);
167
+
168
+ when KEY_BACKSPACE
169
+ my_form.form_driver(REQ_DEL_PREV);
170
+ else
171
+ # If this is a normal character, it gets Printed
172
+ my_form.form_driver(ch);
173
+ end
174
+ end
175
+ # Un post form and free the memory
176
+ my_form.unpost_form();
177
+ my_form.free_form();
178
+ fields.each {|f| f.free_field()}
179
+
180
+
181
+ ensure
182
+ Ncurses.endwin();
183
+ end
184
+