conio 1.0 → 1.1.0
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/LICENSE +1 -1
- data/README +51 -33
- data/Rakefile +40 -40
- data/ext/libconio.c +1009 -0
- data/lib/conio.rb +392 -407
- data/lib/libconio.so +0 -0
- data/test/test.rb +31 -283
- metadata +10 -5
data/LICENSE
CHANGED
data/README
CHANGED
@@ -1,18 +1,19 @@
|
|
1
|
-
= Ruby Conio 1.0
|
1
|
+
= Ruby Conio 1.1.0
|
2
2
|
|
3
3
|
Author: Gabriele Secci
|
4
4
|
|
5
5
|
* http://rubyforge.org/projects/conio
|
6
|
+
* http://rubygems.org/gems/conio
|
6
7
|
* http://google.code.com/p/rubyconio
|
7
8
|
|
8
9
|
== DESCRIPTION
|
9
10
|
|
10
|
-
Ruby Conio 1.0 is a wrapper for Turbo C conio, used to create text user interfaces developed by Gabriele Secci.
|
11
|
+
Ruby Conio 1.1.0 is a wrapper for Turbo C conio, used to create text user interfaces developed by Gabriele Secci.
|
11
12
|
|
12
13
|
The functions of "libconio.so" are implemented in C ANSI using the "libconio.a" library and "conio.h" header, available from the site: "http://conio.sourceforge.net".
|
13
|
-
Module "libconio.so"
|
14
|
+
Module "libconio.so" is compiled with mingw32-gcc.
|
14
15
|
|
15
|
-
For the bug or various problem,
|
16
|
+
For the bug or various problem, please send me E-mail at:</i> mailto:ragnettosoftware@gmail.com
|
16
17
|
|
17
18
|
== INSTALL
|
18
19
|
|
@@ -22,43 +23,60 @@ GEM File:
|
|
22
23
|
EXE File:
|
23
24
|
* Double click in the exe file and follow the installation instruction.
|
24
25
|
|
25
|
-
ZIP File:
|
26
|
-
* Extract the content from zip file and copy it in the gems folder of your Ruby interpreter.
|
27
|
-
|
28
26
|
== EXAMPLE
|
29
27
|
|
30
28
|
This is a simple example of conio module.
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
30
|
+
require "conio"
|
31
|
+
|
32
|
+
# Set the console title
|
33
|
+
Conio.settitle("Ruby Conio 1.1.0 [test.rb]")
|
34
|
+
|
35
|
+
# Set the console window and buffer size
|
36
|
+
Conio.resize(80, 30)
|
37
|
+
|
38
|
+
# Hide cursor
|
39
|
+
Conio.setcursortype(Conio::CURSOR_HIDE)
|
40
|
+
|
41
|
+
# Put name module
|
42
|
+
Conio.write("Ruby Conio 1.1.0", 1, 0)
|
43
|
+
|
44
|
+
# Put name script
|
45
|
+
Conio.write("test.rb", 72, 0)
|
46
|
+
|
47
|
+
# Select cursor position
|
48
|
+
Conio.gotoxy(20, 29)
|
49
|
+
|
50
|
+
# Put copyright
|
51
|
+
print("Copyright \xa9 2010 RAGNETTO \xb8 Software")
|
52
|
+
|
53
|
+
# Put text attribute
|
54
|
+
Conio.fillattr(Conio::COLOR_WHITE, Conio::COLOR_RED, 80, 0, 0)
|
55
|
+
Conio.fillattr(Conio::COLOR_WHITE, Conio::COLOR_RED, 80, 0, 29)
|
56
|
+
|
57
|
+
# Print message
|
58
|
+
Conio.write("Press F1 to exit...", 1, 3)
|
59
|
+
|
60
|
+
# Stop program while users press F1...
|
61
|
+
while Conio.getkey() != Conio::KEY_F1
|
62
|
+
# nil
|
63
|
+
Conio.getkey()
|
64
|
+
end
|
65
|
+
|
66
|
+
# Count exit time
|
67
|
+
for index in (-4..-1) do
|
68
|
+
# Print message
|
69
|
+
Conio.write("Program exit in 4 seconds: #{index}", 1, 27)
|
70
|
+
|
71
|
+
# Exit before 4 seconds
|
72
|
+
Conio.sleep(1)
|
73
|
+
end
|
56
74
|
|
57
|
-
|
75
|
+
Show this code in test folder [test.rb]
|
58
76
|
|
59
77
|
== DEVELOPER
|
60
78
|
|
61
|
-
* Author: Gabriele Secci
|
79
|
+
* Author: Gabriele Secci - RAGNETTO Software
|
62
80
|
* Web: http://www.ragnetto.altervista.org
|
63
81
|
* E-mail: mailto:ragnettosoftware@gmail.com
|
64
82
|
|
data/Rakefile
CHANGED
@@ -1,40 +1,40 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.
|
17
|
-
s.
|
18
|
-
s.files = %w(LICENSE README Rakefile) + Dir.glob("{lib,test}/**/*")
|
19
|
-
s.require_path = "lib"
|
20
|
-
s.bindir = "bin"
|
21
|
-
end
|
22
|
-
|
23
|
-
Rake::GemPackageTask.new(spec) do |p|
|
24
|
-
p.gem_spec = spec
|
25
|
-
p.need_tar =
|
26
|
-
p.need_zip = true
|
27
|
-
end
|
28
|
-
|
29
|
-
Rake::RDocTask.new do |rdoc|
|
30
|
-
files =[
|
31
|
-
rdoc.rdoc_files.add(files)
|
32
|
-
rdoc.main = "README"
|
33
|
-
rdoc.title = "Ruby Conio"
|
34
|
-
rdoc.rdoc_dir =
|
35
|
-
rdoc.options <<
|
36
|
-
end
|
37
|
-
|
38
|
-
Rake::TestTask.new do |t|
|
39
|
-
t.test_files = FileList[
|
40
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/gempackagetask'
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
require 'rake/testtask'
|
7
|
+
|
8
|
+
spec = Gem::Specification.new do |s|
|
9
|
+
s.name = 'conio'
|
10
|
+
s.version = '1.1.0'
|
11
|
+
s.has_rdoc = true
|
12
|
+
s.extra_rdoc_files = ['README', 'LICENSE', 'ext/libconio.c']
|
13
|
+
s.summary = 'Ruby Conio is a wrapper for Turbo C conio.'
|
14
|
+
s.description = s.summary
|
15
|
+
s.author = 'Gabriele Secci'
|
16
|
+
s.email = 'ragnettosoftware@gmail.com'
|
17
|
+
# s.executables = ['your_executable_here']
|
18
|
+
s.files = %w(LICENSE README Rakefile) + Dir.glob("{ext,lib,test}/**/*")
|
19
|
+
s.require_path = "lib"
|
20
|
+
# s.bindir = "bin"
|
21
|
+
end
|
22
|
+
|
23
|
+
Rake::GemPackageTask.new(spec) do |p|
|
24
|
+
p.gem_spec = spec
|
25
|
+
p.need_tar = true
|
26
|
+
p.need_zip = true
|
27
|
+
end
|
28
|
+
|
29
|
+
Rake::RDocTask.new do |rdoc|
|
30
|
+
files =['README', 'LICENSE', 'lib/conio.rb', 'ext/libconio.c']
|
31
|
+
rdoc.rdoc_files.add(files)
|
32
|
+
rdoc.main = "README"
|
33
|
+
rdoc.title = "Ruby Conio 1.1.0"
|
34
|
+
rdoc.rdoc_dir = 'doc'
|
35
|
+
rdoc.options << '--line-numbers'
|
36
|
+
end
|
37
|
+
|
38
|
+
Rake::TestTask.new do |t|
|
39
|
+
t.test_files = FileList['test/test.rb']
|
40
|
+
end
|
data/ext/libconio.c
ADDED
@@ -0,0 +1,1009 @@
|
|
1
|
+
/*
|
2
|
+
*******************************************************
|
3
|
+
* Conio *
|
4
|
+
*******************************************************
|
5
|
+
* Library Console I/O for Ruby *
|
6
|
+
*******************************************************
|
7
|
+
* Title: Conio *
|
8
|
+
* Version: 1.0 *
|
9
|
+
* Language: C *
|
10
|
+
* Source: libconio.c *
|
11
|
+
*******************************************************
|
12
|
+
* Author: Gabriele Secci *
|
13
|
+
* Company: RAGNETTO (R) Software *
|
14
|
+
* E-mail: ragnettosoftware@gmail.com *
|
15
|
+
* Web: www.ragnetto.altervista.org *
|
16
|
+
*******************************************************
|
17
|
+
* Copyright (C) 2010 RAGNETTO Software *
|
18
|
+
*******************************************************
|
19
|
+
*/
|
20
|
+
|
21
|
+
// C Headers
|
22
|
+
#include <conio.h>
|
23
|
+
#include <stdio.h>
|
24
|
+
|
25
|
+
// Ruby headers
|
26
|
+
#include "ruby.h"
|
27
|
+
|
28
|
+
// declaration of Libconio Library
|
29
|
+
VALUE Libconio = Qnil;
|
30
|
+
|
31
|
+
// ***************************
|
32
|
+
// * Conio Library Functions *
|
33
|
+
// ***************************
|
34
|
+
|
35
|
+
/*
|
36
|
+
* call-seq:
|
37
|
+
* clreol() -> nil
|
38
|
+
*
|
39
|
+
* Clears all characters from the cursor position to the end of the
|
40
|
+
* line within the string length, in the location string.
|
41
|
+
*/
|
42
|
+
VALUE method_clreol(VALUE self)
|
43
|
+
{
|
44
|
+
// Native function clreol()
|
45
|
+
clreol();
|
46
|
+
|
47
|
+
// Return NULL value
|
48
|
+
return Qnil;
|
49
|
+
}
|
50
|
+
|
51
|
+
/*
|
52
|
+
* call-seq:
|
53
|
+
* clrscr() -> nil
|
54
|
+
*
|
55
|
+
* Clears the current text window and places the cursor in the
|
56
|
+
* upper left hand corner at position 1, 1.
|
57
|
+
*/
|
58
|
+
VALUE method_clrscr(VALUE self)
|
59
|
+
{
|
60
|
+
// Native function clrscr()
|
61
|
+
clrscr();
|
62
|
+
|
63
|
+
// Return NULL value
|
64
|
+
return Qnil;
|
65
|
+
}
|
66
|
+
|
67
|
+
/*
|
68
|
+
* call-seq:
|
69
|
+
* cputs(text) -> string
|
70
|
+
*
|
71
|
+
* Writes the null-terminated string text to the current text window.
|
72
|
+
*/
|
73
|
+
VALUE method_cputs(VALUE self, VALUE string_text)
|
74
|
+
{
|
75
|
+
// Ruby conversion string
|
76
|
+
const char * text = StringValuePtr(string_text);
|
77
|
+
|
78
|
+
// Native function cputs()
|
79
|
+
cputs(text);
|
80
|
+
|
81
|
+
// Return value text
|
82
|
+
return rb_str_new2(text);
|
83
|
+
}
|
84
|
+
|
85
|
+
/*
|
86
|
+
* call-seq:
|
87
|
+
* crop() -> nil
|
88
|
+
*
|
89
|
+
* Crop the window console buffer size.
|
90
|
+
*/
|
91
|
+
VALUE method_crop(VALUE self)
|
92
|
+
{
|
93
|
+
// Native function crop()
|
94
|
+
con_crop();
|
95
|
+
|
96
|
+
// Return NULL value
|
97
|
+
return Qnil;
|
98
|
+
}
|
99
|
+
|
100
|
+
/*
|
101
|
+
* call-seq:
|
102
|
+
* delay(milliseconds) -> nil
|
103
|
+
*
|
104
|
+
* The time interval for which execution is to be suspended, in milliseconds.
|
105
|
+
*/
|
106
|
+
VALUE method_delay(VALUE self, VALUE int_milliseconds)
|
107
|
+
{
|
108
|
+
// Ruby conversion long
|
109
|
+
int milliseconds = NUM2LONG(int_milliseconds);
|
110
|
+
|
111
|
+
// Native function delay()
|
112
|
+
delay(milliseconds);
|
113
|
+
|
114
|
+
// Return NULL value
|
115
|
+
return Qnil;
|
116
|
+
}
|
117
|
+
|
118
|
+
/*
|
119
|
+
* call-seq:
|
120
|
+
* delline() -> nil
|
121
|
+
*
|
122
|
+
* Deletes the line containing the cursor and moves all lines below it a line up.
|
123
|
+
*/
|
124
|
+
VALUE method_delline(VALUE self)
|
125
|
+
{
|
126
|
+
// Native function delline()
|
127
|
+
delline();
|
128
|
+
|
129
|
+
// Return NULL value
|
130
|
+
return Qnil;
|
131
|
+
}
|
132
|
+
|
133
|
+
/*
|
134
|
+
* call-seq:
|
135
|
+
* fill(character, forecolor, backcolor, number, x, y) -> nil
|
136
|
+
*
|
137
|
+
* Write the specified number of consecutive characters, beginning at
|
138
|
+
* X and Y coordinates, with the value specified attribute.
|
139
|
+
*/
|
140
|
+
VALUE method_fill(VALUE self, VALUE int_character, VALUE int_forecolor, VALUE int_backcolor, VALUE int_number, VALUE int_x, VALUE int_y)
|
141
|
+
{
|
142
|
+
// Ruby conversion integer
|
143
|
+
int character = NUM2INT(int_character);
|
144
|
+
int forecolor = NUM2INT(int_forecolor);
|
145
|
+
int backcolor = NUM2INT(int_backcolor);
|
146
|
+
int number = NUM2INT(int_number);
|
147
|
+
int x = NUM2INT(int_x);
|
148
|
+
int y = NUM2INT(int_y);
|
149
|
+
|
150
|
+
// Native function fill()
|
151
|
+
con_fill(character, forecolor, backcolor, number, x, y);
|
152
|
+
|
153
|
+
// Return NULL value
|
154
|
+
return Qnil;
|
155
|
+
}
|
156
|
+
|
157
|
+
/*
|
158
|
+
* call-seq:
|
159
|
+
* fillattr(forecolor, backcolor, number, x, y) -> nil
|
160
|
+
*
|
161
|
+
* Fills the specified number of consecutive attributes, beginning at
|
162
|
+
* X and Y coordinates, with the value specified attribute.
|
163
|
+
*/
|
164
|
+
VALUE method_fillattr(VALUE self, VALUE int_forecolor, VALUE int_backcolor, VALUE int_number, VALUE int_x, VALUE int_y)
|
165
|
+
{
|
166
|
+
// Ruby conversion integer
|
167
|
+
int forecolor = NUM2INT(int_forecolor);
|
168
|
+
int backcolor = NUM2INT(int_backcolor);
|
169
|
+
int number = NUM2INT(int_number);
|
170
|
+
int x = NUM2INT(int_x);
|
171
|
+
int y = NUM2INT(int_y);
|
172
|
+
|
173
|
+
// Native function fillattr()
|
174
|
+
con_fillattr(forecolor, backcolor, number, x, y);
|
175
|
+
|
176
|
+
// Return NULL value
|
177
|
+
return Qnil;
|
178
|
+
}
|
179
|
+
|
180
|
+
/*
|
181
|
+
* call-seq:
|
182
|
+
* fillchar(character, number, x, y) -> nil
|
183
|
+
*
|
184
|
+
* Write the specified number of consecutive characters, beginning at X and Y coordinates.
|
185
|
+
*/
|
186
|
+
VALUE method_fillchar(VALUE self, VALUE int_character, VALUE int_number, VALUE int_x, VALUE int_y)
|
187
|
+
{
|
188
|
+
// Ruby conversion integer
|
189
|
+
int character = NUM2INT(int_character);
|
190
|
+
int number = NUM2INT(int_number);
|
191
|
+
int x = NUM2INT(int_x);
|
192
|
+
int y = NUM2INT(int_y);
|
193
|
+
|
194
|
+
// Native function fillchar()
|
195
|
+
con_fillchar(character, number, x, y);
|
196
|
+
|
197
|
+
// Return NULL value
|
198
|
+
return Qnil;
|
199
|
+
}
|
200
|
+
|
201
|
+
/*
|
202
|
+
* call-seq:
|
203
|
+
* fillcr(character, number, x, y) -> nil
|
204
|
+
*
|
205
|
+
* Write the specified number of consecutive characters, beginning at X and Y coordinates.
|
206
|
+
*/
|
207
|
+
VALUE method_fillcr(VALUE self, VALUE int_character, VALUE int_number, VALUE int_x, VALUE int_y)
|
208
|
+
{
|
209
|
+
// Ruby conversion integer
|
210
|
+
int character = NUM2INT(int_character);
|
211
|
+
int number = NUM2INT(int_number);
|
212
|
+
int x = NUM2INT(int_x);
|
213
|
+
int y = NUM2INT(int_y);
|
214
|
+
|
215
|
+
// Native function fillcr()
|
216
|
+
con_fillcr(character, number, x, y);
|
217
|
+
|
218
|
+
// Return NULL value
|
219
|
+
return Qnil;
|
220
|
+
}
|
221
|
+
|
222
|
+
/*
|
223
|
+
* call-seq:
|
224
|
+
* get(left, top, right, bottom, buffer) -> nil
|
225
|
+
*
|
226
|
+
* Get the contents with attributes of the memory area source out to the
|
227
|
+
* onscreen rectangle defined by left, top, right and bottom.
|
228
|
+
*/
|
229
|
+
VALUE method_get(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
230
|
+
{
|
231
|
+
// Ruby conversion integer
|
232
|
+
int left = NUM2INT(int_left);
|
233
|
+
int top = NUM2INT(int_top);
|
234
|
+
int right = NUM2INT(int_right);
|
235
|
+
int bottom = NUM2INT(int_bottom);
|
236
|
+
int buffer = NUM2INT(int_buffer);
|
237
|
+
|
238
|
+
// Declare variable dimension
|
239
|
+
int dimension[buffer];
|
240
|
+
|
241
|
+
// Native function get()
|
242
|
+
con_get(left, top, right, bottom, dimension);
|
243
|
+
|
244
|
+
// Return NULL value
|
245
|
+
return Qnil;
|
246
|
+
}
|
247
|
+
|
248
|
+
/*
|
249
|
+
* call-seq:
|
250
|
+
* getattrs(left, top, right, bottom, buffer) -> nil
|
251
|
+
*
|
252
|
+
* Get the attributes of the memory area source out to the onscreen
|
253
|
+
* rectangle defined by left, top, right and bottom.
|
254
|
+
*/
|
255
|
+
VALUE method_getattrs(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
256
|
+
{
|
257
|
+
// Ruby conversion integer
|
258
|
+
int left = NUM2INT(int_left);
|
259
|
+
int top = NUM2INT(int_top);
|
260
|
+
int right = NUM2INT(int_right);
|
261
|
+
int bottom = NUM2INT(int_bottom);
|
262
|
+
int buffer = NUM2INT(int_buffer);
|
263
|
+
|
264
|
+
// Declare variable dimension
|
265
|
+
int dimension[buffer];
|
266
|
+
|
267
|
+
// Native function getattrs()
|
268
|
+
con_getattrs(left, top, right, bottom, dimension);
|
269
|
+
|
270
|
+
// Return NULL value
|
271
|
+
return Qnil;
|
272
|
+
}
|
273
|
+
|
274
|
+
/*
|
275
|
+
* call-seq:
|
276
|
+
* getch() -> number
|
277
|
+
*
|
278
|
+
* Reads a single character directly from the keyboard, without echoing to the screen.
|
279
|
+
*/
|
280
|
+
VALUE method_getch(VALUE self)
|
281
|
+
{
|
282
|
+
// Native function getch()
|
283
|
+
int character = getch();
|
284
|
+
|
285
|
+
// Return value character
|
286
|
+
return INT2NUM(character);
|
287
|
+
}
|
288
|
+
|
289
|
+
/*
|
290
|
+
* call-seq:
|
291
|
+
* getchars(left, top, right, bottom, buffer) -> nil
|
292
|
+
*
|
293
|
+
* Get the contents of the memory area source out to the onscreen rectangle defined by left, top, right and bottom.
|
294
|
+
*/
|
295
|
+
VALUE method_getchars(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
296
|
+
{
|
297
|
+
// Ruby conversion integer
|
298
|
+
int left = NUM2INT(int_left);
|
299
|
+
int top = NUM2INT(int_top);
|
300
|
+
int right = NUM2INT(int_right);
|
301
|
+
int bottom = NUM2INT(int_bottom);
|
302
|
+
int buffer = NUM2INT(int_buffer);
|
303
|
+
|
304
|
+
// Declare variable dimension
|
305
|
+
char dimension[buffer];
|
306
|
+
|
307
|
+
// Native function getchars()
|
308
|
+
con_getchars(left, top, right, bottom, dimension);
|
309
|
+
|
310
|
+
// Return NULL value
|
311
|
+
return Qnil;
|
312
|
+
}
|
313
|
+
|
314
|
+
/*
|
315
|
+
* call-seq:
|
316
|
+
* getche() -> number
|
317
|
+
*
|
318
|
+
* Reads a single character from the keyboard and echoes it to the current text windows.
|
319
|
+
*/
|
320
|
+
VALUE method_getche(VALUE self)
|
321
|
+
{
|
322
|
+
// Native function getche()
|
323
|
+
int character = getche();
|
324
|
+
|
325
|
+
// Return value character
|
326
|
+
return INT2NUM(character);
|
327
|
+
}
|
328
|
+
|
329
|
+
/*
|
330
|
+
* call-seq:
|
331
|
+
* getinfo() -> array
|
332
|
+
*
|
333
|
+
* Gets console information.
|
334
|
+
*/
|
335
|
+
VALUE method_getinfo(VALUE self)
|
336
|
+
{
|
337
|
+
// Declare struct info
|
338
|
+
con_info info;
|
339
|
+
|
340
|
+
// Native function getinfo()
|
341
|
+
con_getinfo(& info);
|
342
|
+
|
343
|
+
// Set value info
|
344
|
+
int attr = info.attr;
|
345
|
+
int cx = info.cx;
|
346
|
+
int cy = info.cy;
|
347
|
+
int top = info.top;
|
348
|
+
int left = info.left;
|
349
|
+
int right = info.right;
|
350
|
+
int bottom = info.bottom;
|
351
|
+
int width = info.width;
|
352
|
+
int height = info.height;
|
353
|
+
int maxwidth = info.maxwidth;
|
354
|
+
int maxheight = info.maxheight;
|
355
|
+
int totalwidth = info.totalwidth;
|
356
|
+
int totalheight = info.totalheight;
|
357
|
+
|
358
|
+
// Create new Ruby hash
|
359
|
+
VALUE array = rb_ary_new();
|
360
|
+
|
361
|
+
// Populate Ruby hash
|
362
|
+
rb_ary_push(array, INT2NUM(attr));
|
363
|
+
rb_ary_push(array, INT2NUM(cx));
|
364
|
+
rb_ary_push(array, INT2NUM(cy));
|
365
|
+
rb_ary_push(array, INT2NUM(top));
|
366
|
+
rb_ary_push(array, INT2NUM(left));
|
367
|
+
rb_ary_push(array, INT2NUM(right));
|
368
|
+
rb_ary_push(array, INT2NUM(bottom));
|
369
|
+
rb_ary_push(array, INT2NUM(width));
|
370
|
+
rb_ary_push(array, INT2NUM(height));
|
371
|
+
rb_ary_push(array, INT2NUM(maxwidth));
|
372
|
+
rb_ary_push(array, INT2NUM(maxheight));
|
373
|
+
rb_ary_push(array, INT2NUM(totalwidth));
|
374
|
+
rb_ary_push(array, INT2NUM(totalheight));
|
375
|
+
|
376
|
+
// Return value hash
|
377
|
+
return array;
|
378
|
+
}
|
379
|
+
|
380
|
+
/*
|
381
|
+
* call-seq:
|
382
|
+
* gettext(left, top, right, bottom, buffer) -> nil
|
383
|
+
*
|
384
|
+
* Get the text of the memory area source out to the onscreen rectangle
|
385
|
+
* defined by left, top, right and bottom.
|
386
|
+
*/
|
387
|
+
VALUE method_gettext(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
388
|
+
{
|
389
|
+
// Ruby conversion integer
|
390
|
+
int left = NUM2INT(int_left);
|
391
|
+
int top = NUM2INT(int_top);
|
392
|
+
int right = NUM2INT(int_right);
|
393
|
+
int bottom = NUM2INT(int_bottom);
|
394
|
+
int buffer = NUM2INT(int_buffer);
|
395
|
+
|
396
|
+
// Declare variable dimension
|
397
|
+
char dimension[buffer];
|
398
|
+
|
399
|
+
// Native function gettext()
|
400
|
+
gettext(left, top, right, bottom, dimension);
|
401
|
+
|
402
|
+
// Return NULL value
|
403
|
+
return Qnil;
|
404
|
+
}
|
405
|
+
|
406
|
+
/*
|
407
|
+
* call-seq:
|
408
|
+
* gettextinfo() -> array
|
409
|
+
*
|
410
|
+
* Gets text mode video information.
|
411
|
+
*/
|
412
|
+
VALUE method_gettextinfo(VALUE self)
|
413
|
+
{
|
414
|
+
// Declare struct info
|
415
|
+
text_info info;
|
416
|
+
|
417
|
+
// Native function gettextinfo()
|
418
|
+
gettextinfo(& info);
|
419
|
+
|
420
|
+
// Set value info
|
421
|
+
int attribute = info.attribute;
|
422
|
+
int normattr = info.normattr;
|
423
|
+
int currmode = info.currmode;
|
424
|
+
int curx = info.curx;
|
425
|
+
int cury = info.cury;
|
426
|
+
int screenwidth = info.screenwidth;
|
427
|
+
int screenheight = info.screenheight;
|
428
|
+
int winleft = info.winleft;
|
429
|
+
int wintop = info.wintop;
|
430
|
+
int winright = info.winright;
|
431
|
+
int winbottom = info.winbottom;
|
432
|
+
|
433
|
+
// Create new Ruby hash
|
434
|
+
VALUE array = rb_ary_new();
|
435
|
+
|
436
|
+
// Populate Ruby hash
|
437
|
+
rb_ary_push(array, INT2NUM(attribute));
|
438
|
+
rb_ary_push(array, INT2NUM(normattr));
|
439
|
+
rb_ary_push(array, INT2NUM(currmode));
|
440
|
+
rb_ary_push(array, INT2NUM(curx));
|
441
|
+
rb_ary_push(array, INT2NUM(cury));
|
442
|
+
rb_ary_push(array, INT2NUM(screenwidth));
|
443
|
+
rb_ary_push(array, INT2NUM(screenheight));
|
444
|
+
rb_ary_push(array, INT2NUM(winleft));
|
445
|
+
rb_ary_push(array, INT2NUM(wintop));
|
446
|
+
rb_ary_push(array, INT2NUM(winright));
|
447
|
+
rb_ary_push(array, INT2NUM(winbottom));
|
448
|
+
|
449
|
+
// Return value hash
|
450
|
+
return array;
|
451
|
+
}
|
452
|
+
|
453
|
+
/*
|
454
|
+
* call-seq:
|
455
|
+
* gotoxy(x, y) -> nil
|
456
|
+
*
|
457
|
+
* Moves the cursor to the given position in the current text window.
|
458
|
+
*/
|
459
|
+
VALUE method_gotoxy(VALUE self, VALUE int_x, VALUE int_y)
|
460
|
+
{
|
461
|
+
// Ruby conversion integer
|
462
|
+
int x = NUM2INT(int_x);
|
463
|
+
int y = NUM2INT(int_y);
|
464
|
+
|
465
|
+
// Native function gotoxy()
|
466
|
+
gotoxy(x + 1, y + 1);
|
467
|
+
|
468
|
+
// Return NULL value
|
469
|
+
return Qnil;
|
470
|
+
}
|
471
|
+
|
472
|
+
/*
|
473
|
+
* call-seq:
|
474
|
+
* insline() -> nil
|
475
|
+
*
|
476
|
+
* Inserts an empty line in the text window at the cursor
|
477
|
+
* position using the current text background color.
|
478
|
+
*/
|
479
|
+
VALUE method_insline(VALUE self)
|
480
|
+
{
|
481
|
+
// Native function insline()
|
482
|
+
insline();
|
483
|
+
|
484
|
+
// Return NULL value
|
485
|
+
return Qnil;
|
486
|
+
}
|
487
|
+
|
488
|
+
/*
|
489
|
+
* call-seq:
|
490
|
+
* kbhit() -> number
|
491
|
+
*
|
492
|
+
* Checks to see if a keystroke is currently available.
|
493
|
+
*/
|
494
|
+
VALUE method_kbhit(VALUE self)
|
495
|
+
{
|
496
|
+
// Native function kbhit()
|
497
|
+
int key = kbhit();
|
498
|
+
|
499
|
+
// Return value key
|
500
|
+
return INT2NUM(key);
|
501
|
+
}
|
502
|
+
|
503
|
+
/*
|
504
|
+
* call-seq:
|
505
|
+
* movetext(left, top, right, bottom, newleft, newtop) -> nil
|
506
|
+
*
|
507
|
+
* Copies the contents of the onscreen rectangle defined by left, top, right, and bottom
|
508
|
+
* to a new rectangle of the same dimensions.
|
509
|
+
*/
|
510
|
+
VALUE method_movetext(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_newleft, VALUE int_newtop)
|
511
|
+
{
|
512
|
+
// Ruby conversion integer
|
513
|
+
int left = NUM2INT(int_left);
|
514
|
+
int top = NUM2INT(int_top);
|
515
|
+
int right = NUM2INT(int_right);
|
516
|
+
int bottom = NUM2INT(int_bottom);
|
517
|
+
int newleft = NUM2INT(int_newleft);
|
518
|
+
int newtop = NUM2INT(int_newtop);
|
519
|
+
|
520
|
+
// Native function movetext()
|
521
|
+
movetext(left, top, right, bottom, newleft, newtop);
|
522
|
+
|
523
|
+
// Return NULL value
|
524
|
+
return Qnil;
|
525
|
+
}
|
526
|
+
|
527
|
+
/*
|
528
|
+
* call-seq:
|
529
|
+
* put(left, top, right, bottom, buffer) -> nil
|
530
|
+
*
|
531
|
+
* Put the contents with attributes of the memory area source out to the onscreen
|
532
|
+
* rectangle defined by left, top, right and bottom.
|
533
|
+
*/
|
534
|
+
VALUE method_put(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
535
|
+
{
|
536
|
+
// Ruby conversion integer
|
537
|
+
int left = NUM2INT(int_left);
|
538
|
+
int top = NUM2INT(int_top);
|
539
|
+
int right = NUM2INT(int_right);
|
540
|
+
int bottom = NUM2INT(int_bottom);
|
541
|
+
int buffer = NUM2INT(int_buffer);
|
542
|
+
|
543
|
+
// Declare variable dimension
|
544
|
+
int dimension[buffer];
|
545
|
+
|
546
|
+
// Native function put()
|
547
|
+
con_put(left, top, right, bottom, dimension);
|
548
|
+
|
549
|
+
// Return NULL value
|
550
|
+
return Qnil;
|
551
|
+
}
|
552
|
+
|
553
|
+
/*
|
554
|
+
* call-seq:
|
555
|
+
* putattrs(left, top, right, bottom, buffer) -> nil
|
556
|
+
*
|
557
|
+
* Put the attributes of the memory area source out to the onscreen
|
558
|
+
* rectangle defined by left, top, right and bottom.
|
559
|
+
*/
|
560
|
+
VALUE method_putattrs(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
561
|
+
{
|
562
|
+
// Ruby conversion integer
|
563
|
+
int left = NUM2INT(int_left);
|
564
|
+
int top = NUM2INT(int_top);
|
565
|
+
int right = NUM2INT(int_right);
|
566
|
+
int bottom = NUM2INT(int_bottom);
|
567
|
+
int buffer = NUM2INT(int_buffer);
|
568
|
+
|
569
|
+
// Declare variable dimension
|
570
|
+
int dimension[buffer];
|
571
|
+
|
572
|
+
// Native function putattrs()
|
573
|
+
con_putattrs(left, top, right, bottom, dimension);
|
574
|
+
|
575
|
+
// Return NULL value
|
576
|
+
return Qnil;
|
577
|
+
}
|
578
|
+
|
579
|
+
/*
|
580
|
+
* call-seq:
|
581
|
+
* putch(character) -> number
|
582
|
+
*
|
583
|
+
* Outputs the character c to the current text window.
|
584
|
+
* It is a text-mode function that performs direct video output to the console.
|
585
|
+
*/
|
586
|
+
VALUE method_putch(VALUE self, VALUE int_character)
|
587
|
+
{
|
588
|
+
// Ruby conversion integer
|
589
|
+
int character = NUM2INT(int_character);
|
590
|
+
|
591
|
+
// Native function putch()
|
592
|
+
int value = putchar(character);
|
593
|
+
|
594
|
+
// Return value character
|
595
|
+
return INT2NUM(value);
|
596
|
+
}
|
597
|
+
|
598
|
+
/*
|
599
|
+
* call-seq:
|
600
|
+
* putchars(left, top, right, bottom, buffer) -> nil
|
601
|
+
*
|
602
|
+
* Put the contents of the memory area source out to the onscreen
|
603
|
+
* rectangle defined by left, top, right and bottom.
|
604
|
+
*/
|
605
|
+
VALUE method_putchars(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
606
|
+
{
|
607
|
+
// Ruby conversion integer
|
608
|
+
int left = NUM2INT(int_left);
|
609
|
+
int top = NUM2INT(int_top);
|
610
|
+
int right = NUM2INT(int_right);
|
611
|
+
int bottom = NUM2INT(int_bottom);
|
612
|
+
int buffer = NUM2INT(int_buffer);
|
613
|
+
|
614
|
+
// Declare variable dimension
|
615
|
+
char dimension[buffer];
|
616
|
+
|
617
|
+
// Native function getattrs()
|
618
|
+
con_putchars(left, top, right, bottom, dimension);
|
619
|
+
|
620
|
+
// Return NULL value
|
621
|
+
return Qnil;
|
622
|
+
}
|
623
|
+
|
624
|
+
/*
|
625
|
+
* call-seq:
|
626
|
+
* puttext(left, top, right, bottom, buffer) -> nil
|
627
|
+
*
|
628
|
+
* Put the text of the memory area source out to the onscreen
|
629
|
+
* rectangle defined by left, top, right and bottom.
|
630
|
+
*/
|
631
|
+
VALUE method_puttext(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_buffer)
|
632
|
+
{
|
633
|
+
// Ruby conversion integer
|
634
|
+
int left = NUM2INT(int_left);
|
635
|
+
int top = NUM2INT(int_top);
|
636
|
+
int right = NUM2INT(int_right);
|
637
|
+
int bottom = NUM2INT(int_bottom);
|
638
|
+
int buffer = NUM2INT(int_buffer);
|
639
|
+
|
640
|
+
// Declare variable dimension
|
641
|
+
char dimension[buffer];
|
642
|
+
|
643
|
+
// Native function puttext()
|
644
|
+
puttext(left, top, right, bottom, dimension);
|
645
|
+
|
646
|
+
// Return NULL value
|
647
|
+
return Qnil;
|
648
|
+
}
|
649
|
+
|
650
|
+
/*
|
651
|
+
* call-seq:
|
652
|
+
* resize(width, height) -> nil
|
653
|
+
*
|
654
|
+
* Resize buffer and window size.
|
655
|
+
*/
|
656
|
+
VALUE method_resize(VALUE self, VALUE int_width, VALUE int_height)
|
657
|
+
{
|
658
|
+
// Ruby conversion integer
|
659
|
+
int width = NUM2INT(int_width);
|
660
|
+
int height = NUM2INT(int_height);
|
661
|
+
|
662
|
+
// Native function resize()
|
663
|
+
con_resize(width, height);
|
664
|
+
|
665
|
+
// Return NULL value
|
666
|
+
return Qnil;
|
667
|
+
}
|
668
|
+
|
669
|
+
/*
|
670
|
+
* call-seq:
|
671
|
+
* scroll(left, top, right, bottom, newleft, newtop) -> nil
|
672
|
+
*
|
673
|
+
* The console window displays a portion of the active screen buffer.
|
674
|
+
*/
|
675
|
+
VALUE method_scroll(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom, VALUE int_newleft, VALUE int_newtop)
|
676
|
+
{
|
677
|
+
// Ruby conversion integer
|
678
|
+
int left = NUM2INT(int_left);
|
679
|
+
int top = NUM2INT(int_top);
|
680
|
+
int right = NUM2INT(int_right);
|
681
|
+
int bottom = NUM2INT(int_bottom);
|
682
|
+
int newleft = NUM2INT(int_newleft);
|
683
|
+
int newtop = NUM2INT(int_newtop);
|
684
|
+
|
685
|
+
// Native function scroll()
|
686
|
+
con_scroll(left, top, right, bottom, newleft, newtop);
|
687
|
+
|
688
|
+
// Return NULL value
|
689
|
+
return Qnil;
|
690
|
+
}
|
691
|
+
|
692
|
+
/*
|
693
|
+
* call-seq:
|
694
|
+
* scrollup(left, top, right, bottom) -> nil
|
695
|
+
*
|
696
|
+
* Scroll up the text in current window text.
|
697
|
+
*/
|
698
|
+
VALUE method_scrollup(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom)
|
699
|
+
{
|
700
|
+
// Ruby conversion integer
|
701
|
+
int left = NUM2INT(int_left);
|
702
|
+
int top = NUM2INT(int_top);
|
703
|
+
int right = NUM2INT(int_right);
|
704
|
+
int bottom = NUM2INT(int_bottom);
|
705
|
+
|
706
|
+
// Native function scrollup()
|
707
|
+
con_scrollup(left, top, right, bottom);
|
708
|
+
|
709
|
+
// Return NULL value
|
710
|
+
return Qnil;
|
711
|
+
}
|
712
|
+
|
713
|
+
/*
|
714
|
+
* call-seq:
|
715
|
+
* scrolldown(left, top, right, bottom) -> nil
|
716
|
+
*
|
717
|
+
* Scroll down the text in current window text.
|
718
|
+
*/
|
719
|
+
VALUE method_scrolldown(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom)
|
720
|
+
{
|
721
|
+
// Ruby conversion integer
|
722
|
+
int left = NUM2INT(int_left);
|
723
|
+
int top = NUM2INT(int_top);
|
724
|
+
int right = NUM2INT(int_right);
|
725
|
+
int bottom = NUM2INT(int_bottom);
|
726
|
+
|
727
|
+
// Native function scrolldown()
|
728
|
+
con_scrolldown(left, top, right, bottom);
|
729
|
+
|
730
|
+
// Return NULL value
|
731
|
+
return Qnil;
|
732
|
+
}
|
733
|
+
|
734
|
+
/*
|
735
|
+
* call-seq:
|
736
|
+
* scrollleft(left, top, right, bottom) -> nil
|
737
|
+
*
|
738
|
+
* Scroll left the text in current window text.
|
739
|
+
*/
|
740
|
+
VALUE method_scrollleft(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom)
|
741
|
+
{
|
742
|
+
// Ruby conversion integer
|
743
|
+
int left = NUM2INT(int_left);
|
744
|
+
int top = NUM2INT(int_top);
|
745
|
+
int right = NUM2INT(int_right);
|
746
|
+
int bottom = NUM2INT(int_bottom);
|
747
|
+
|
748
|
+
// Native function scrollleft()
|
749
|
+
con_scrollleft(left, top, right, bottom);
|
750
|
+
|
751
|
+
// Return NULL value
|
752
|
+
return Qnil;
|
753
|
+
}
|
754
|
+
|
755
|
+
/*
|
756
|
+
* call-seq:
|
757
|
+
* scrollright(left, top, right, bottom) -> nil
|
758
|
+
*
|
759
|
+
* Scroll right the text in current window text.
|
760
|
+
*/
|
761
|
+
VALUE method_scrollright(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom)
|
762
|
+
{
|
763
|
+
// Ruby conversion integer
|
764
|
+
int left = NUM2INT(int_left);
|
765
|
+
int top = NUM2INT(int_top);
|
766
|
+
int right = NUM2INT(int_right);
|
767
|
+
int bottom = NUM2INT(int_bottom);
|
768
|
+
|
769
|
+
// Native function scrollright()
|
770
|
+
con_scrollright(left, top, right, bottom);
|
771
|
+
|
772
|
+
// Return NULL value
|
773
|
+
return Qnil;
|
774
|
+
}
|
775
|
+
|
776
|
+
/*
|
777
|
+
* call-seq:
|
778
|
+
* setbuffer(width, height) -> nil
|
779
|
+
*
|
780
|
+
* Define a window buffer size.
|
781
|
+
*/
|
782
|
+
VALUE method_setbuffer(VALUE self, VALUE int_width, VALUE int_height)
|
783
|
+
{
|
784
|
+
// Ruby conversion integer
|
785
|
+
int width = NUM2INT(int_width);
|
786
|
+
int height = NUM2INT(int_height);
|
787
|
+
|
788
|
+
// Native function setbuffer()
|
789
|
+
con_setbuffer(width, height);
|
790
|
+
|
791
|
+
// Return NULL value
|
792
|
+
return Qnil;
|
793
|
+
}
|
794
|
+
|
795
|
+
/*
|
796
|
+
* call-seq:
|
797
|
+
* setcursortype(cursor) -> nil
|
798
|
+
*
|
799
|
+
* Sets the cursor type in range 0 (hide cursor) to 100 (solid block cursor).
|
800
|
+
*/
|
801
|
+
VALUE method_setcursortype(VALUE self, VALUE int_cursor)
|
802
|
+
{
|
803
|
+
// Ruby conversion integer
|
804
|
+
int cursor = NUM2INT(int_cursor);
|
805
|
+
|
806
|
+
// Native function setcursortype()
|
807
|
+
_setcursortype(cursor);
|
808
|
+
|
809
|
+
// Return NULL value
|
810
|
+
return Qnil;
|
811
|
+
}
|
812
|
+
|
813
|
+
/*
|
814
|
+
* call-seq:
|
815
|
+
* settitle(title) -> nil
|
816
|
+
*
|
817
|
+
* Change the console window title.
|
818
|
+
*/
|
819
|
+
VALUE method_settitle(VALUE self, VALUE string_title)
|
820
|
+
{
|
821
|
+
// Ruby conversion string
|
822
|
+
const char * title = StringValuePtr(string_title);
|
823
|
+
|
824
|
+
// Native function settitle()
|
825
|
+
con_settitle(title);
|
826
|
+
|
827
|
+
// Return NULL value
|
828
|
+
return Qnil;
|
829
|
+
}
|
830
|
+
|
831
|
+
/*
|
832
|
+
* call-seq:
|
833
|
+
* setwindow(left, top, right, bottom) -> nil
|
834
|
+
*
|
835
|
+
* Defines a text window onscreen. If the coordinates are in
|
836
|
+
* any way invalid, the call to window is ignored.
|
837
|
+
*/
|
838
|
+
VALUE method_setwindow(VALUE self, VALUE int_left, VALUE int_top, VALUE int_right, VALUE int_bottom)
|
839
|
+
{
|
840
|
+
// Ruby conversion integer
|
841
|
+
int left = NUM2INT(int_left);
|
842
|
+
int top = NUM2INT(int_top);
|
843
|
+
int right = NUM2INT(int_right);
|
844
|
+
int bottom = NUM2INT(int_bottom);
|
845
|
+
|
846
|
+
// Native function setwindow()
|
847
|
+
con_setwindow(left, top, right, bottom);
|
848
|
+
|
849
|
+
// Return NULL value
|
850
|
+
return Qnil;
|
851
|
+
}
|
852
|
+
|
853
|
+
/*
|
854
|
+
* call-seq:
|
855
|
+
* sleep(seconds) -> nil
|
856
|
+
*
|
857
|
+
* The time interval for which execution is to be suspended, in seconds.
|
858
|
+
*/
|
859
|
+
VALUE method_sleep(VALUE self, VALUE int_seconds)
|
860
|
+
{
|
861
|
+
// Ruby conversion integer
|
862
|
+
int seconds = NUM2INT(int_seconds);
|
863
|
+
|
864
|
+
// Native function sleep()
|
865
|
+
sleep(seconds);
|
866
|
+
|
867
|
+
// Return NULL value
|
868
|
+
return Qnil;
|
869
|
+
}
|
870
|
+
|
871
|
+
/*
|
872
|
+
* call-seq:
|
873
|
+
* textbackground(color) -> nil
|
874
|
+
*
|
875
|
+
* Selects the background character color.
|
876
|
+
*/
|
877
|
+
VALUE method_textbackground(VALUE self, VALUE int_color)
|
878
|
+
{
|
879
|
+
// Ruby conversion integer
|
880
|
+
int color = NUM2INT(int_color);
|
881
|
+
|
882
|
+
// Native function textbackground()
|
883
|
+
textbackground(color);
|
884
|
+
|
885
|
+
// Return NULL value
|
886
|
+
return Qnil;
|
887
|
+
}
|
888
|
+
|
889
|
+
/*
|
890
|
+
* call-seq:
|
891
|
+
* textcolor(color) -> nil
|
892
|
+
*
|
893
|
+
* Selects the foreground character color.
|
894
|
+
*/
|
895
|
+
VALUE method_textcolor(VALUE self, VALUE int_color)
|
896
|
+
{
|
897
|
+
// Ruby conversion integer
|
898
|
+
int color = NUM2INT(int_color);
|
899
|
+
|
900
|
+
// Native function textcolor()
|
901
|
+
textcolor(color);
|
902
|
+
|
903
|
+
// Return NULL value
|
904
|
+
return Qnil;
|
905
|
+
}
|
906
|
+
|
907
|
+
/*
|
908
|
+
* call-seq:
|
909
|
+
* ungetch(character) -> number
|
910
|
+
*
|
911
|
+
* Pushes the character ch back to the console, causing ch to be the next character read.
|
912
|
+
*/
|
913
|
+
VALUE method_ungetch(VALUE self, VALUE int_character)
|
914
|
+
{
|
915
|
+
// Ruby conversion integer
|
916
|
+
int character = NUM2INT(int_character);
|
917
|
+
|
918
|
+
// Native function ungetch()
|
919
|
+
int value = ungetch(character);
|
920
|
+
|
921
|
+
// Return value character
|
922
|
+
return INT2NUM(value);
|
923
|
+
}
|
924
|
+
|
925
|
+
/*
|
926
|
+
* call-seq:
|
927
|
+
* wherex() -> number
|
928
|
+
*
|
929
|
+
* Gets the X coordinate of the current cursor position (within the current text window).
|
930
|
+
*/
|
931
|
+
VALUE method_wherex(VALUE self)
|
932
|
+
{
|
933
|
+
|
934
|
+
// Native function wherex()
|
935
|
+
int position = wherex() - 1;
|
936
|
+
|
937
|
+
// Return NULL value
|
938
|
+
return INT2NUM(position);
|
939
|
+
}
|
940
|
+
|
941
|
+
/*
|
942
|
+
* call-seq:
|
943
|
+
* wherey() -> number
|
944
|
+
*
|
945
|
+
* Gets the Y coordinate of the current cursor position (within the current text window).
|
946
|
+
*/
|
947
|
+
VALUE method_wherey(VALUE self)
|
948
|
+
{
|
949
|
+
|
950
|
+
// Native function wherex()
|
951
|
+
int position = wherey() - 1;
|
952
|
+
|
953
|
+
// Return NULL value
|
954
|
+
return INT2NUM(position);
|
955
|
+
}
|
956
|
+
|
957
|
+
// *************************
|
958
|
+
// * Conio Library Methods *
|
959
|
+
// *************************
|
960
|
+
|
961
|
+
void Init_libconio()
|
962
|
+
{
|
963
|
+
// Libconio Library
|
964
|
+
Libconio = rb_define_module("Libconio");
|
965
|
+
|
966
|
+
// Libconio Methods
|
967
|
+
rb_define_method(Libconio, "clreol", method_clreol, 0);
|
968
|
+
rb_define_method(Libconio, "clrscr", method_clrscr, 0);
|
969
|
+
rb_define_method(Libconio, "cputs", method_cputs, 1);
|
970
|
+
rb_define_method(Libconio, "crop", method_crop, 0);
|
971
|
+
rb_define_method(Libconio, "delay", method_delay, 1);
|
972
|
+
rb_define_method(Libconio, "delline", method_delline, 0);
|
973
|
+
rb_define_method(Libconio, "fill", method_fill, 6);
|
974
|
+
rb_define_method(Libconio, "fillattr", method_fillattr, 5);
|
975
|
+
rb_define_method(Libconio, "fillchar", method_fillchar, 4);
|
976
|
+
rb_define_method(Libconio, "fillcr", method_fillcr, 4);
|
977
|
+
rb_define_method(Libconio, "get", method_get, 5);
|
978
|
+
rb_define_method(Libconio, "getattrs", method_getattrs, 5);
|
979
|
+
rb_define_method(Libconio, "getch", method_getch, 0);
|
980
|
+
rb_define_method(Libconio, "getchars", method_getchars, 5);
|
981
|
+
rb_define_method(Libconio, "getche", method_getche, 0);
|
982
|
+
rb_define_method(Libconio, "getinfo", method_getinfo, 0);
|
983
|
+
rb_define_method(Libconio, "gettext", method_gettext, 5);
|
984
|
+
rb_define_method(Libconio, "gettextinfo", method_gettextinfo, 0);
|
985
|
+
rb_define_method(Libconio, "gotoxy", method_gotoxy, 2);
|
986
|
+
rb_define_method(Libconio, "insline", method_insline, 0);
|
987
|
+
rb_define_method(Libconio, "movetext", method_movetext, 6);
|
988
|
+
rb_define_method(Libconio, "put", method_put, 5);
|
989
|
+
rb_define_method(Libconio, "putattrs", method_putattrs, 5);
|
990
|
+
rb_define_method(Libconio, "putch", method_putch, 1);
|
991
|
+
rb_define_method(Libconio, "putchars", method_putchars, 5);
|
992
|
+
rb_define_method(Libconio, "puttext", method_puttext, 5);
|
993
|
+
rb_define_method(Libconio, "resize", method_resize, 2);
|
994
|
+
rb_define_method(Libconio, "scroll", method_scroll, 6);
|
995
|
+
rb_define_method(Libconio, "scrollup", method_scrollup, 4);
|
996
|
+
rb_define_method(Libconio, "scrolldown", method_scrolldown, 4);
|
997
|
+
rb_define_method(Libconio, "scrollleft", method_scrollleft, 4);
|
998
|
+
rb_define_method(Libconio, "scrollright", method_scrollright, 4);
|
999
|
+
rb_define_method(Libconio, "setbuffer", method_setbuffer, 2);
|
1000
|
+
rb_define_method(Libconio, "setcursortype", method_setcursortype, 1);
|
1001
|
+
rb_define_method(Libconio, "settitle", method_settitle, 1);
|
1002
|
+
rb_define_method(Libconio, "setwindow", method_setwindow, 4);
|
1003
|
+
rb_define_method(Libconio, "sleep", method_sleep, 1);
|
1004
|
+
rb_define_method(Libconio, "textbackground", method_textbackground, 1);
|
1005
|
+
rb_define_method(Libconio, "textcolor", method_textcolor, 1);
|
1006
|
+
rb_define_method(Libconio, "ungetch", method_ungetch, 1);
|
1007
|
+
rb_define_method(Libconio, "wherex", method_wherex, 0);
|
1008
|
+
rb_define_method(Libconio, "wherey", method_wherey, 0);
|
1009
|
+
}
|