win32console 1.2.0-x86-mswin32-60 → 1.3.0.beta1-x86-mswin32-60

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/History.txt ADDED
@@ -0,0 +1,119 @@
1
+ === 1.3.0.beta
2
+
3
+ * Enhancements
4
+ * Usage of Hoe and rake-compiler to ease releasing and extension
5
+ compilation.
6
+
7
+ * Bugfixes:
8
+ * Works with Ruby 1.9
9
+
10
+ * Known issues:
11
+ * win32console no longer automatically translate encoding to the console
12
+ output enconding. Please use Iconv to convert from your encoding (eg. UTF8)
13
+ to current console output:
14
+
15
+ current_cp = Win32::Console::OutputCP()
16
+ Iconv.iconv("cp#{current_cp}", "utf-8", utf_string)
17
+
18
+ A working example can be seen here: http://gist.github.com/265593
19
+
20
+ === 1.2.0 / 2008-11-22
21
+
22
+ * Enhancements
23
+ * Better code organization and clenaup
24
+
25
+ * Bugfixes:
26
+ * Removed license conflicting ANSI Term code and functionality.
27
+
28
+ === 1.1.0 / 2008-03-17
29
+
30
+ * Enhancements:
31
+ * Added Kernel#putc
32
+ Redefined Kernel#putc to wrap Win32::Console::ANSI::IO#putc
33
+
34
+ * Added #putc to Win32::Console::ANSI::IO
35
+ This putc buffers escape sequences so that they will be handled properly
36
+
37
+ * Added #redirected? to Win32::Console::ANSI::IO
38
+ Checks the mode of the console to see if IO is being redirected or not
39
+
40
+ * Added Win32::Console::API#WriteFile
41
+ to both the Ruby and compiled versions
42
+
43
+ * Added Win32::Console#WriteFile
44
+ This is a wrapper around Win32::Console::API#WriteFile
45
+
46
+ * Split Win32::Console::Constants and Win32::Console::API out into
47
+ seperate files. These two classes were in 'Win32/Console.rb'
48
+ I moved them into 'Win32/Console/constants.rb' and 'Win32/Console/api.rb'
49
+ respectively.
50
+
51
+ * Cleaned up indentation
52
+ indentations was a mixture of tabs and spaces. I made everything indented
53
+ with 2 spaces.
54
+
55
+ * Bugfixes:
56
+ * Fixed "Invalid Handle" error in compiled version of GetConsoleMode
57
+ I'm actually not sure of the source of this error.
58
+ It may be expected behavior when output is being redirected.
59
+ I worked around it by rescuing the exception in Win32::Console#Mode and
60
+ returning 9999. I picked that arbitrary value, because it is
61
+ higher than 31, which is what I think is the highest value Mode would
62
+ return if output isn't being redirected.
63
+ [Gordon Thiesfeld]
64
+
65
+ * Modified Win32::Console::ANSI::IO#write to check for redirection.
66
+ If output is redirected, it uses WriteFile instead of WriteConosle.
67
+ It also skips the parsing step, and passes the escape sequences through.
68
+ [Gordon Thiesfeld]
69
+
70
+ * Modified Win32::Console::ANSI::IO#_PrintString
71
+ Didn't change behavior, just tried to make it more idiomatic ruby.
72
+ I didn't make all of the changes I wanted to, because I wasn't sure
73
+ how to test them all.
74
+ [Gordon Thiesfeld]
75
+
76
+ * Modified all Win32::Console::API methods
77
+ [Gordon Thiesfeld]
78
+
79
+ It was assigning Win32API functions to class variables. I switched them to instance variables. I also changed the idiom it was using to instantiate the objects.
80
+ For instance, instead of:
81
+
82
+ if @@m_AllocConsole == nil
83
+ @@m_AllocConsole = Win32API.new( "kernel32", "AllocConsole",
84
+ [], 'l' )
85
+
86
+ It is now:
87
+
88
+ @AllocConsole ||= Win32API.new( "kernel32", "AllocConsole", [], 'l' )
89
+
90
+ * Non-string arguments passed to Win32::Console::ANSI#write caused error
91
+ fix by Ivan Evtuhovich (evtuhovich at gmail dot com).
92
+
93
+ === 1.0.8 / 2006-06-05
94
+
95
+ * New features:
96
+ * First public release of win32console gem by Justin Bailey.
97
+
98
+ === 1.0
99
+
100
+ * New features:
101
+ * Added .dup to _printString function to avoid mangling outside
102
+ string references. Removed the other (later) .dup call.
103
+
104
+ * Bugfixes:
105
+ * Turned of some exceptions that were conflicting with using the module
106
+ with pipes or redirections.
107
+
108
+ === 0.8
109
+
110
+ * Enhancements:
111
+ * Added ruby docs, and sample test suite.
112
+
113
+ * Bugfixes:
114
+ * Fixed bugs in reading routines,
115
+
116
+ === 0.5
117
+
118
+ New features:
119
+ * First public release.
data/Manifest.txt ADDED
@@ -0,0 +1,22 @@
1
+ History.txt
2
+ Manifest.txt
3
+ Rakefile
4
+ README.txt
5
+ ext/Console_ext/Console.c
6
+ ext/Console_ext/extconf.rb
7
+ extra/Console.rdoc
8
+ extra/Console_ANSI.rdoc
9
+ lib/win32console.rb
10
+ lib/Win32/Console.rb
11
+ lib/Win32/Console/ANSI.rb
12
+ lib/Win32/Console/api.rb
13
+ lib/Win32/Console/constants.rb
14
+ tasks/gem.rake
15
+ tasks/native.rake
16
+ test/test_cursor.rb
17
+ test/test_mouse.rb
18
+ test/test_readinput.rb
19
+ test/test_readoutput.rb
20
+ test/test_sendevent.rb
21
+ test/test_title.rb
22
+ test/test_write.rb
data/README.txt CHANGED
@@ -1,25 +1,63 @@
1
-
2
- This file implements a port of Perl's Win32::Console
3
- and Win32::Console::ANSI modules.
4
-
5
- Win32::Console allows controling the windows command line terminal
6
- thru an OO-interface. This allows you to query the terminal (find
7
- its size, characters, attributes, etc). The interface and functionality
8
- should be identical to Perl's.
9
-
10
- Win32::Console consists of a Ruby .rb interface.
11
- For best performance, this library has been also ported to C.
12
- If you lack a C compiler, you can still use the class thru the ruby
13
- interface. If you can compile it, then the ruby interface is not
14
- used and the C functions are called instead.
15
-
16
- Win32::Console::ANSI is a class derived from IO that seamlessly
17
- translates ANSI Esc control character codes into Windows' command.exe
18
- or cmd.exe equivalents.
19
-
20
- These modules allow you to develop command-line tools that can take
21
- advantage of the unix terminal functions while still being portable.
22
- One of the most common uses for this is to allow to color your
23
- output.
24
- The modules are disted with Term/ansicolor.rb, too, as it is a nice
25
- thing to verify it is working properly.
1
+ = Win32::Console
2
+
3
+ * http://rubyforge.org/projects/winconsole
4
+ * http://github.com/luislavena/win32console
5
+ * http://rdoc.info/projects/luislavena/win32console
6
+
7
+ == DESCRIPTION
8
+
9
+ Win32::Console allows controling the windows command line terminal
10
+ thru an OO-interface. This allows you to query the terminal (find
11
+ its size, characters, attributes, etc). The interface and functionality
12
+ should be identical to Perl's counterpart.
13
+
14
+ A port of Perl's Win32::Console and Win32::Console::ANSI modules.
15
+
16
+ This gem packages Gonzalo Garramuno's Win32::Console project, and includes
17
+ a compiled binary for speed. The Win32::Console project's home can be
18
+ found at:
19
+
20
+ http://rubyforge.org/projects/win32console
21
+
22
+ == FEATURES
23
+
24
+ Win32::Console::ANSI is a class derived from IO that seamlessly
25
+ translates ANSI Esc control character codes into Windows' command.exe
26
+ or cmd.exe equivalents.
27
+
28
+ To ease usage, you can use in combination with term-ansicolor gem and avoid
29
+ writing ANSI codes manually.
30
+
31
+ == EXAMPLES
32
+
33
+ To output a simple bolded string, try this script:
34
+
35
+ require 'rubygems'
36
+ require 'win32console'
37
+ include Win32::Console::ANSI
38
+ include Term::ANSIColor
39
+
40
+ puts bold << "bolded text" << clear << " and no longer bold."
41
+
42
+ == INSTALL
43
+
44
+ gem install win32console
45
+
46
+ == DEVELOPERS:
47
+
48
+ After checking out the source, run:
49
+
50
+ $ rake newb
51
+
52
+ This task will install any missing dependencies, run the tests/specs,
53
+ and generate the RDoc.
54
+
55
+ == LICENSE
56
+
57
+ This program is FREE; you can redistribute, modify, disassemble, or even
58
+ reverse engineer this software at your will. Keep in mind, however, that
59
+ NOTHING IS GUARANTEED to work and everything you do is AT YOUR OWN RISK - I
60
+ will not take responsibility for any damage, loss of money and/or health
61
+ that may arise from the use of this program!
62
+
63
+ This is distributed under the terms of Larry Wall's Artistic License.
data/Rakefile CHANGED
@@ -1,12 +1,17 @@
1
+ #
2
+ # NOTE: Keep this file clean.
3
+ # Add your customizations inside tasks directory.
4
+ # Thank You.
5
+ #
6
+
7
+ # load rakefile extensions (tasks)
8
+ Dir['tasks/*.rake'].sort.each { |f| load f }
9
+
10
+ =begin
1
11
  require 'rubygems'
2
12
  require 'rake/clean'
3
13
  require 'rake/gempackagetask'
4
- require './tasks/ext_helper'
5
-
6
- # House-keeping
7
- CLEAN.include '**/*.o', '**/*.so', '**/*.bundle', '**/*.a',
8
- '**/*.log', '{ext,lib}/*.{bundle,so,obj,pdb,lib,def,exp}',
9
- 'ext/Makefile', '**/*.db'
14
+ require 'rake/extensiontask'
10
15
 
11
16
  spec = Gem::Specification.new do |s|
12
17
  s.name = 'win32console'
@@ -31,7 +36,7 @@ The gem project can be found at
31
36
  EOS
32
37
 
33
38
  s.require_path = 'lib'
34
- s.extensions = %w[ ext/extconf.rb ]
39
+ s.extensions = %w[ ext/Console/extconf.rb ]
35
40
  s.files = FileList[ '{doc,ext,lib,test}/**/*.{rdoc,c,cpp,rb}', 'Rakefile', *s.extra_rdoc_files ]
36
41
 
37
42
  s.rdoc_options << '--title' << 'Win32Console Gem -- Gem for Win32::Console Project' <<
@@ -44,6 +49,6 @@ Rake::GemPackageTask.new(spec) do |pkg|
44
49
  pkg.gem_spec = spec
45
50
  end
46
51
 
47
- # Use of ext_helper to properly setup compile tasks and native gem generation
48
- # add 'native', 'compile' and some tweaks to gem specifications.
49
- setup_extension 'Console', spec
52
+ Rake::ExtensionTask.new('Console', spec) do |ext|
53
+ end
54
+ =end
@@ -1,11 +1,12 @@
1
-
2
- #include "windows.h"
1
+ #include <windows.h>
3
2
  #include "ruby.h"
4
3
 
5
- #ifdef WIN32
6
- #define CONSOLE_EXPORT __declspec(dllexport)
7
- #else
8
- #error Not compiling on Windows
4
+ /* Workaround deprecated RString accessors */
5
+ #ifndef RSTRING_PTR
6
+ #define RSTRING_PTR(s) (RSTRING(s)->ptr)
7
+ #endif
8
+ #ifndef RSTRING_LEN
9
+ #define RSTRING_LEN(s) (RSTRING(s)->len)
9
10
  #endif
10
11
 
11
12
  VALUE rb_mWin32;
@@ -32,7 +33,6 @@ VALUE rb_mConstants;
32
33
  VALUE
33
34
  rb_getWin32Error()
34
35
  {
35
- DWORD e = GetLastError();
36
36
  LPVOID lpMsgBuf;
37
37
  if (!FormatMessage(
38
38
  FORMAT_MESSAGE_ALLOCATE_BUFFER |
@@ -55,15 +55,12 @@ rb_getWin32Error()
55
55
  LocalFree( lpMsgBuf );
56
56
 
57
57
  // Raise exception
58
- rb_raise(rb_eRuntimeError, RSTRING(t)->ptr);
58
+ rb_raise(rb_eRuntimeError, RSTRING_PTR(t));
59
59
  return Qnil;
60
60
 
61
61
  }
62
62
 
63
63
 
64
- extern "C"
65
- {
66
-
67
64
  static VALUE rb_GetStdHandle(VALUE self, VALUE handle)
68
65
  {
69
66
  unsigned long x;
@@ -205,11 +202,11 @@ static VALUE rb_WriteConsole( VALUE self, VALUE hConsoleOutput,
205
202
  VALUE lpBuffer )
206
203
  {
207
204
  HANDLE handle = ULongToPtr( NUM2ULONG( hConsoleOutput ) );
208
- DWORD nNumberOfCharsToWrite = RSTRING(lpBuffer)->len;
205
+ DWORD nNumberOfCharsToWrite = RSTRING_LEN(lpBuffer);
209
206
 
210
207
  DWORD lpNumberOfCharsWritten;
211
208
 
212
- WriteConsole( handle, RSTRING(lpBuffer)->ptr,
209
+ WriteConsole( handle, RSTRING_PTR(lpBuffer),
213
210
  nNumberOfCharsToWrite,
214
211
  &lpNumberOfCharsWritten, NULL );
215
212
  return UINT2NUM( lpNumberOfCharsWritten );
@@ -219,11 +216,11 @@ static VALUE rb_WriteFile( VALUE self, VALUE hConsoleOutput,
219
216
  VALUE lpBuffer )
220
217
  {
221
218
  HANDLE handle = ULongToPtr( NUM2ULONG( hConsoleOutput ) );
222
- DWORD nNumberOfBytesToWrite = RSTRING(lpBuffer)->len;
219
+ DWORD nNumberOfBytesToWrite = RSTRING_LEN(lpBuffer);
223
220
 
224
221
  DWORD lpNumberOfBytesWritten;
225
222
 
226
- WriteFile( handle, RSTRING(lpBuffer)->ptr,
223
+ WriteFile( handle, RSTRING_PTR(lpBuffer),
227
224
  nNumberOfBytesToWrite,
228
225
  &lpNumberOfBytesWritten, NULL );
229
226
  return UINT2NUM( lpNumberOfBytesWritten );
@@ -255,12 +252,12 @@ static VALUE rb_GetConsoleCursorInfo( VALUE self, VALUE hConsoleOutput )
255
252
  return ret;
256
253
  }
257
254
 
258
- void rb_ParseEvent(VALUE ret, INPUT_RECORD& event )
255
+ void rb_ParseEvent(VALUE ret, INPUT_RECORD *event )
259
256
  {
260
- switch(event.EventType) {
257
+ switch(event->EventType) {
261
258
  case KEY_EVENT:
262
259
  {
263
- KEY_EVENT_RECORD* kevent=(KEY_EVENT_RECORD *)&(event.Event);
260
+ KEY_EVENT_RECORD* kevent=(KEY_EVENT_RECORD *)&(event->Event);
264
261
  rb_ary_push(ret, UINT2NUM(KEY_EVENT));
265
262
  rb_ary_push(ret, UINT2NUM(kevent->bKeyDown));
266
263
  rb_ary_push(ret, UINT2NUM(kevent->wRepeatCount));
@@ -276,7 +273,7 @@ void rb_ParseEvent(VALUE ret, INPUT_RECORD& event )
276
273
  }
277
274
  case MOUSE_EVENT:
278
275
  {
279
- MOUSE_EVENT_RECORD * mevent=(MOUSE_EVENT_RECORD *)&(event.Event);
276
+ MOUSE_EVENT_RECORD * mevent=(MOUSE_EVENT_RECORD *)&(event->Event);
280
277
  rb_ary_push(ret, UINT2NUM(MOUSE_EVENT) );
281
278
  rb_ary_push(ret, UINT2NUM(mevent->dwMousePosition.X) );
282
279
  rb_ary_push(ret, UINT2NUM(mevent->dwMousePosition.Y) );
@@ -288,7 +285,7 @@ void rb_ParseEvent(VALUE ret, INPUT_RECORD& event )
288
285
  case WINDOW_BUFFER_SIZE_EVENT:
289
286
  {
290
287
  WINDOW_BUFFER_SIZE_RECORD* wevent=
291
- (WINDOW_BUFFER_SIZE_RECORD *)&(event.Event);
288
+ (WINDOW_BUFFER_SIZE_RECORD *)&(event->Event);
292
289
  rb_ary_push(ret, UINT2NUM(WINDOW_BUFFER_SIZE_EVENT) );
293
290
  rb_ary_push(ret, UINT2NUM(wevent->dwSize.X) );
294
291
  rb_ary_push(ret, UINT2NUM(wevent->dwSize.Y) );
@@ -296,14 +293,14 @@ void rb_ParseEvent(VALUE ret, INPUT_RECORD& event )
296
293
  break;
297
294
  case MENU_EVENT:
298
295
  {
299
- MENU_EVENT_RECORD* mevent= (MENU_EVENT_RECORD *)&(event.Event);
296
+ MENU_EVENT_RECORD* mevent= (MENU_EVENT_RECORD *)&(event->Event);
300
297
  rb_ary_push(ret, UINT2NUM(MENU_EVENT) );
301
298
  rb_ary_push(ret, UINT2NUM(mevent->dwCommandId) );
302
299
  }
303
300
  break;
304
301
  case FOCUS_EVENT:
305
302
  {
306
- FOCUS_EVENT_RECORD* mevent= (FOCUS_EVENT_RECORD *)&(event.Event);
303
+ FOCUS_EVENT_RECORD* mevent= (FOCUS_EVENT_RECORD *)&(event->Event);
307
304
  rb_ary_push(ret, UINT2NUM(FOCUS_EVENT) );
308
305
  rb_ary_push(ret, UINT2NUM(mevent->bSetFocus) );
309
306
  }
@@ -321,7 +318,7 @@ static VALUE rb_PeekConsoleInput( VALUE self, VALUE hConsoleOutput )
321
318
  return rb_getWin32Error();
322
319
 
323
320
  VALUE ret = rb_ary_new();
324
- rb_ParseEvent( ret, event );
321
+ rb_ParseEvent( ret, &event );
325
322
  return ret;
326
323
  }
327
324
 
@@ -332,9 +329,9 @@ static VALUE rb_ReadConsole( VALUE self, VALUE hConsoleOutput,
332
329
  DWORD nofread;
333
330
  Check_Type( buffer, T_STRING );
334
331
  int to_read = NUM2INT(numread);
335
- if ( RSTRING(buffer)->len > to_read )
332
+ if ( RSTRING_LEN(buffer) > to_read )
336
333
  rb_raise(rb_eArgError, "String is too small to read that many characters.");
337
- if (ReadConsole(handle,(void *)RSTRING(buffer)->ptr, to_read,
334
+ if (ReadConsole(handle,(void *)RSTRING_PTR(buffer), to_read,
338
335
  &nofread,NULL))
339
336
  return UINT2NUM(nofread);
340
337
  return rb_getWin32Error();
@@ -349,7 +346,7 @@ static VALUE rb_ReadConsoleInput( VALUE self, VALUE hConsoleOutput )
349
346
  return rb_getWin32Error();
350
347
 
351
348
  VALUE ret = rb_ary_new();
352
- rb_ParseEvent( ret, event );
349
+ rb_ParseEvent( ret, &event );
353
350
  return ret;
354
351
  }
355
352
 
@@ -365,9 +362,9 @@ static VALUE rb_ReadConsoleOutputCharacter( VALUE self, VALUE hConsoleOutput,
365
362
  coords.X= NUM2UINT( x );
366
363
  coords.Y= NUM2UINT( y );
367
364
  int l = NUM2INT(len);
368
- if ( RSTRING(charbuf)->len < l*sizeof(TCHAR) )
365
+ if ( (unsigned long)RSTRING_LEN(charbuf) < l*sizeof(TCHAR) )
369
366
  rb_raise(rb_eArgError, "String is too small to read that many characters.");
370
- if (ReadConsoleOutputCharacter(handle,RSTRING(charbuf)->ptr,l,
367
+ if (ReadConsoleOutputCharacter(handle,RSTRING_PTR(charbuf),l,
371
368
  coords,&nofread))
372
369
  return UINT2NUM( nofread );
373
370
  return rb_getWin32Error();
@@ -382,12 +379,14 @@ static VALUE rb_ReadConsoleOutputAttribute( VALUE self, VALUE hConsoleOutput,
382
379
  DWORD nofread;
383
380
  unsigned short abuffer[80*999*sizeof(unsigned short)];
384
381
  char cbuffer[80*999];
382
+ unsigned i = 0;
383
+
385
384
  coords.X= NUM2UINT( x );
386
385
  coords.Y= NUM2UINT( y );
387
386
  if (ReadConsoleOutputAttribute(handle, abuffer, NUM2UINT(len),
388
387
  coords,&nofread))
389
388
  {
390
- for(unsigned i=0;i<nofread;++i) {
389
+ for(i=0;i<nofread;++i) {
391
390
  cbuffer[i]=(char)abuffer[i];
392
391
  }
393
392
  return rb_str_new( cbuffer, nofread );
@@ -413,10 +412,10 @@ static VALUE rb_ReadConsoleOutput( VALUE self, VALUE hConsoleOutput,
413
412
  from.Right = NUM2INT( r );
414
413
  from.Bottom = NUM2INT( b );
415
414
  Check_Type( buffer, T_STRING );
416
- if ( RSTRING(buffer)->len < (sizeof(CHAR_INFO)*size.X*size.Y) )
415
+ if ( (unsigned long)RSTRING_LEN(buffer) < (sizeof(CHAR_INFO)*size.X*size.Y) )
417
416
  rb_raise(rb_eArgError, "string buffer is too small for reading that many characters.");
418
417
  HANDLE handle = ULongToPtr( NUM2ULONG( hConsoleOutput ) );
419
- if (!ReadConsoleOutput(handle,(CHAR_INFO *)RSTRING(buffer)->ptr,size,coords,&from))
418
+ if (!ReadConsoleOutput(handle,(CHAR_INFO *)RSTRING_PTR(buffer),size,coords,&from))
420
419
  return rb_getWin32Error();
421
420
 
422
421
  VALUE ret = rb_ary_new();
@@ -739,7 +738,7 @@ not_there:
739
738
  VALUE rb_constant( VALUE self, VALUE name )
740
739
  {
741
740
  Check_Type( name, T_STRING );
742
- return ULONG2NUM( c_constant( RSTRING(name)->ptr ) );
741
+ return ULONG2NUM( c_constant( RSTRING_PTR(name) ) );
743
742
  }
744
743
 
745
744
 
@@ -844,7 +843,7 @@ VALUE
844
843
  rb_SetConsoleTitle( VALUE self, VALUE title )
845
844
  {
846
845
  Check_Type( title, T_STRING );
847
- if (SetConsoleTitle(RSTRING( title )->ptr))
846
+ if (SetConsoleTitle(RSTRING_PTR( title )))
848
847
  return NUM2UINT(1);
849
848
  return rb_getWin32Error();
850
849
  }
@@ -1081,7 +1080,7 @@ rb_WriteConsoleOutput(VALUE self, VALUE h, VALUE buffer,
1081
1080
  to.Top = NUM2INT( t );
1082
1081
  to.Right = NUM2INT( r );
1083
1082
  to.Bottom = NUM2INT( b );
1084
- if (WriteConsoleOutput(handle,(CHAR_INFO *)RSTRING(buffer)->ptr,
1083
+ if (WriteConsoleOutput(handle,(CHAR_INFO *)RSTRING_PTR(buffer),
1085
1084
  size,coords,&to)) {
1086
1085
  VALUE ret = rb_ary_new();
1087
1086
  rb_ary_push( ret, INT2FIX( to.Left ) );
@@ -1104,9 +1103,11 @@ rb_WriteConsoleOutputAttribute(VALUE self, VALUE h, VALUE s,
1104
1103
 
1105
1104
  unsigned short buffer[80*999*sizeof(unsigned short)];
1106
1105
  DWORD written;
1107
- DWORD towrite = RSTRING(s)->len;
1108
- for(unsigned i=0; i<towrite; i++) {
1109
- buffer[i] = (unsigned short)(RSTRING(s)->ptr[i]);
1106
+ DWORD towrite = RSTRING_LEN(s);
1107
+ unsigned i = 0;
1108
+
1109
+ for(i=0; i<towrite; i++) {
1110
+ buffer[i] = (unsigned short)(RSTRING_PTR(s)[i]);
1110
1111
  }
1111
1112
  COORD coords;
1112
1113
  coords.X=NUM2INT( x );
@@ -1131,16 +1132,15 @@ rb_WriteConsoleOutputCharacter(VALUE self, VALUE h, VALUE s,
1131
1132
  COORD coords;
1132
1133
  coords.X=NUM2INT( x );
1133
1134
  coords.Y=NUM2INT( y );
1134
- if (WriteConsoleOutputCharacter(handle,(LPCTSTR)RSTRING(s)->ptr,
1135
- RSTRING(s)->len,coords,&written)) {
1135
+ if (WriteConsoleOutputCharacter(handle,(LPCTSTR)RSTRING_PTR(s),
1136
+ RSTRING_LEN(s),coords,&written)) {
1136
1137
  return UINT2NUM( written );
1137
1138
  }
1138
1139
  return rb_getWin32Error();
1139
1140
  }
1140
1141
 
1141
1142
 
1142
- CONSOLE_EXPORT void
1143
- Init_Console(void)
1143
+ void Init_Console_ext(void)
1144
1144
  {
1145
1145
  rb_mWin32 = rb_define_module("Win32");
1146
1146
  rb_define_const(rb_mKernel, "Win32", rb_mWin32);
@@ -1214,5 +1214,3 @@ Init_Console(void)
1214
1214
  RB_DEF_API_METHOD(WriteConsoleOutputCharacter, 4);
1215
1215
 
1216
1216
  }
1217
-
1218
- }
@@ -15,4 +15,4 @@
15
15
  #
16
16
  ##################################################################
17
17
  require 'mkmf'
18
- create_makefile('Console')
18
+ create_makefile('Console_ext')
File without changes
File without changes
Binary file
Binary file
data/lib/Win32/Console.rb CHANGED
@@ -4,23 +4,13 @@
4
4
  # Original Win32API_Console was:
5
5
  # Copyright (C) 2001 Michael L. Semon (mlsemon@sega.net)
6
6
 
7
+ # support multiple ruby version (fat binaries under windows)
7
8
  begin
8
- # If Console.so is available, use that. Otherwise, we define
9
- # equivalent functions in ruby (a tad slower)
10
- # That dll should define everything in an identical interface
11
- # to all the ruby code that the rescue below defines.
12
-
13
- require "Console.so"
14
- STDERR.print "Using faster, DLL Console.so\n" if $DEBUG
15
-
16
- rescue Exception
17
-
18
- STDERR.print "Using slower, non-DLL Console.rb\n" if $DEBUG
19
-
20
- require 'Win32/Console/constants.rb'
21
- require 'Win32/Console/api.rb'
22
-
23
- end # rescue
9
+ require 'Console_ext'
10
+ rescue LoadError
11
+ RUBY_VERSION =~ /(\d+.\d+)/
12
+ require "#{$1}/Console_ext"
13
+ end
24
14
 
25
15
  module Win32
26
16
  class Console
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  #
2
4
  # Win32::Console::ANSI
3
5
  #
@@ -137,7 +139,7 @@ module Win32
137
139
  def _PrintString(t)
138
140
  s = t.dup.to_s
139
141
  while s != ''
140
- if s.sub!( /([^\e]*)?\e([\[\(])([0-9\;\=]*)([a-zA-Z@])(.*)/s,'\5')
142
+ if s.sub!( /([^\e]*)?\e([\[\(])([0-9\;\=]*)([a-zA-Z@])(.*)/, '\5')
141
143
  @Out.Write((_conv("#$1")))
142
144
  if $2 == '['
143
145
  case $4
@@ -318,20 +320,6 @@ module Win32
318
320
  def _conv(s)
319
321
  if @concealed
320
322
  s.gsub!( /\S/,' ')
321
- elsif @conv
322
- if EncodeOk
323
- from_to(s, cpANSI, cpOEM)
324
- elsif @@cp == 'cp1252cp850' # WinLatin1 --> DOSLatin1
325
- s.tr!("���������������������������������������������������������������������������������������������������ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁��������������������������������������������","???�??????????????????????????��������ρ��݁�����������������������������������������󁨁������ǎ����Ԑ�ҁӁށցׁ؁с������噞����ꚁ��ᅁ���Ƅ�������������Ё������䔁����������")
326
- elsif @@cp == 'cp1252cp437' # WinLatin1 --> DOSLatinUS
327
- s.tr!("���������������������������������������������������������������������������������������������������ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁��������������������������������������������", "??????????????????????????????������?�????������???�����??��?��??��������?��????����?�???????��????�?????�??�ᅁ��?�������������?������?���?�����??�")
328
- elsif @@cp == 'cp1250cp852' # WinLatin2 --> DOSLatin2
329
- s.tr!("���������������������������������������������������������������������������������������������������ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁��������������������������������������������",
330
- "??????????��?��??????????��?������������ρ�?����?��������?����?���???����������񖁾�聵���Ǝ���������Ӂ��ցׁҁс�Ձ��⊙����ށ�뚁�݁�ꁠ��DŽ���������؁���ԁЁ�偢�����������������" )
331
- elsif @@cp == 'cp1251cp855' # WinCyrillic --> DOSCyrillic
332
- s.tr!("���������������������������������������������������������������������������������������������������ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁��������������������������������������������",
333
- "��?�??????�?����?????????�?����������??���?���?��?�??��????������������쁭������􁸁��ǁсӁՁׁ݁���聫�����������������������끬������󁷁��ƁЁҁԁց؁���灪������������������")
334
- end
335
323
  end
336
324
  return s
337
325
  end
data/tasks/gem.rake ADDED
@@ -0,0 +1,31 @@
1
+ require 'hoe'
2
+
3
+ HOE = Hoe.spec 'win32console' do
4
+ self.version = '1.3.0.beta1'
5
+
6
+ developer 'Gonzalo Garramuno', 'ggarra@advancedsl.com.ar'
7
+ developer 'Justin Bailey', 'jgbailey@gmail.com'
8
+ developer 'Luis Lavena', 'luislavena@gmail.com'
9
+
10
+ self.rubyforge_name = 'winconsole'
11
+
12
+ spec_extras[:required_ruby_version] = Gem::Requirement.new('>= 1.8.6')
13
+
14
+ spec_extras[:extensions] = ["ext/Console_ext/extconf.rb"]
15
+
16
+ extra_rdoc_files.push *FileList['extra/*.rdoc']
17
+
18
+ spec_extras[:rdoc_options] = proc do |rdoc_options|
19
+ rdoc_options << "--exclude" << "ext"
20
+ end
21
+
22
+ extra_dev_deps << ['rake-compiler', "~> 0.7.0"]
23
+ end
24
+
25
+ file "#{HOE.spec.name}.gemspec" => ['Rakefile', 'tasks/gem.rake'] do |t|
26
+ puts "Generating #{t.name}"
27
+ File.open(t.name, 'w') { |f| f.puts HOE.spec.to_yaml }
28
+ end
29
+
30
+ desc "Generate or update the standalone gemspec file for the project"
31
+ task :gemspec => ["#{HOE.spec.name}.gemspec"]
data/tasks/native.rake ADDED
@@ -0,0 +1,14 @@
1
+ # use rake-compiler for building the extension
2
+ require 'rake/extensiontask'
3
+
4
+ Rake::ExtensionTask.new('Console_ext', HOE.spec) do |ext|
5
+ # FIXME: enable cross compilation to build fat binaries
6
+ ext.cross_compile = true
7
+ ext.cross_platform = ['i386-mingw32', 'i386-mswin32-60']
8
+
9
+ # place extension binaries inside lib/X.Y
10
+ if RUBY_PLATFORM =~ /mingw|mswin/
11
+ RUBY_VERSION =~ /(\d+.\d+)/
12
+ ext.lib_dir = "lib/#{$1}"
13
+ end
14
+ end
metadata CHANGED
@@ -1,40 +1,82 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: win32console
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0.beta1
5
5
  platform: x86-mswin32-60
6
6
  authors:
7
- - Original Library by Gonzalo Garramuno, Gem by Justin Bailey
7
+ - Gonzalo Garramuno
8
+ - Justin Bailey
9
+ - Luis Lavena
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
13
 
12
- date: 2008-11-22 00:00:00 -02:00
14
+ date: 2009-12-29 00:00:00 -03:00
13
15
  default_executable:
14
- dependencies: []
15
-
16
- description: "This gem packages Gonzalo Garramuno's Win32::Console project, and includes a compiled binary for speed. The Win32::Console project's home can be found at: http://rubyforge.org/projects/win32console The gem project can be found at http://rubyforge.org/projects/winconsole"
17
- email: ggarra @nospam@ advancedsl.com.ar, jgbailey @nospan@ gmail.com
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: rake-compiler
19
+ type: :development
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ~>
24
+ - !ruby/object:Gem::Version
25
+ version: 0.7.0
26
+ version:
27
+ - !ruby/object:Gem::Dependency
28
+ name: hoe
29
+ type: :development
30
+ version_requirement:
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.4.0
36
+ version:
37
+ description: |-
38
+ Win32::Console allows controling the windows command line terminal
39
+ thru an OO-interface. This allows you to query the terminal (find
40
+ its size, characters, attributes, etc). The interface and functionality
41
+ should be identical to Perl's counterpart.
42
+
43
+ A port of Perl's Win32::Console and Win32::Console::ANSI modules.
44
+
45
+ This gem packages Gonzalo Garramuno's Win32::Console project, and includes
46
+ a compiled binary for speed. The Win32::Console project's home can be
47
+ found at:
48
+
49
+ http://rubyforge.org/projects/win32console
50
+ email:
51
+ - ggarra@advancedsl.com.ar
52
+ - jgbailey@gmail.com
53
+ - luislavena@gmail.com
18
54
  executables: []
19
55
 
20
56
  extensions: []
21
57
 
22
58
  extra_rdoc_files:
59
+ - History.txt
60
+ - Manifest.txt
23
61
  - README.txt
24
- - README_GEM.txt
25
- - INSTALL.txt
26
- - HISTORY.txt
27
- - HISTORY_GEM.txt
62
+ - extra/Console.rdoc
63
+ - extra/Console_ANSI.rdoc
28
64
  files:
29
- - doc/Console.rdoc
30
- - doc/Console_ANSI.rdoc
31
- - ext/Console.cpp
32
- - ext/extconf.rb
65
+ - History.txt
66
+ - Manifest.txt
67
+ - Rakefile
68
+ - README.txt
69
+ - ext/Console_ext/Console.c
70
+ - ext/Console_ext/extconf.rb
71
+ - extra/Console.rdoc
72
+ - extra/Console_ANSI.rdoc
73
+ - lib/win32console.rb
74
+ - lib/Win32/Console.rb
33
75
  - lib/Win32/Console/ANSI.rb
34
76
  - lib/Win32/Console/api.rb
35
77
  - lib/Win32/Console/constants.rb
36
- - lib/Win32/Console.rb
37
- - lib/win32console.rb
78
+ - tasks/gem.rake
79
+ - tasks/native.rake
38
80
  - test/test_cursor.rb
39
81
  - test/test_mouse.rb
40
82
  - test/test_readinput.rb
@@ -42,42 +84,45 @@ files:
42
84
  - test/test_sendevent.rb
43
85
  - test/test_title.rb
44
86
  - test/test_write.rb
45
- - Rakefile
46
- - README.txt
47
- - README_GEM.txt
48
- - INSTALL.txt
49
- - HISTORY.txt
50
- - HISTORY_GEM.txt
51
- - lib/Console.so
87
+ - lib/1.8/Console_ext.so
88
+ - lib/1.9/Console_ext.so
52
89
  has_rdoc: true
53
90
  homepage: http://rubyforge.org/projects/winconsole
91
+ licenses: []
92
+
54
93
  post_install_message:
55
94
  rdoc_options:
56
- - --title
57
- - Win32Console Gem -- Gem for Win32::Console Project
58
95
  - --main
59
- - README_GEM.txt
60
- - --line-numbers
96
+ - README.txt
97
+ - --exclude
98
+ - ext
61
99
  require_paths:
62
100
  - lib
101
+ - ext
63
102
  required_ruby_version: !ruby/object:Gem::Requirement
64
103
  requirements:
65
104
  - - ">="
66
105
  - !ruby/object:Gem::Version
67
- version: "0"
106
+ version: 1.8.6
68
107
  version:
69
108
  required_rubygems_version: !ruby/object:Gem::Requirement
70
109
  requirements:
71
- - - ">="
110
+ - - ">"
72
111
  - !ruby/object:Gem::Version
73
- version: "0"
112
+ version: 1.3.1
74
113
  version:
75
114
  requirements: []
76
115
 
77
- rubyforge_project: http://rubyforge.org/projects/winconsole
78
- rubygems_version: 1.3.1
116
+ rubyforge_project: winconsole
117
+ rubygems_version: 1.3.5
79
118
  signing_key:
80
- specification_version: 2
81
- summary: A library giving the Win32 console ANSI escape sequence support.
82
- test_files: []
83
-
119
+ specification_version: 3
120
+ summary: Win32::Console allows controling the windows command line terminal thru an OO-interface
121
+ test_files:
122
+ - test/test_mouse.rb
123
+ - test/test_readoutput.rb
124
+ - test/test_write.rb
125
+ - test/test_readinput.rb
126
+ - test/test_sendevent.rb
127
+ - test/test_title.rb
128
+ - test/test_cursor.rb
data/HISTORY.txt DELETED
@@ -1,7 +0,0 @@
1
- v1.0 - Added .dup to _printString function to avoid mangling outside
2
- string references. Removed the other (later) .dup call.
3
- Turned of some exceptions that were conflicting with using
4
- the module with pipes or redirections.
5
- v0.8 - Fixed bugs in reading routines, added ruby docs, and
6
- sample test suite.
7
- v0.5 - First public release.
data/HISTORY_GEM.txt DELETED
@@ -1,38 +0,0 @@
1
- 1.2.0 - Code corrections integrated from GitHub
2
- * Removed license conflicting ANSI Term code and functionality.
3
- * Better code organization and clenaup
4
-
5
- 1.1.0 - Bug fixes provided by Gordon Thiesfeld (gthiesfeld at gmail dot com).
6
- * added #putc to Win32::Console::ANSI::IO
7
- This putc buffers escape sequences so that they will be handled properly
8
- *added Kernel#putc
9
- Redefined Kernel#putc to wrap Win32::Console::ANSI::IO#putc
10
- *added #redirected? to Win32::Console::ANSI::IO
11
- Checks the mode of the console to see if IO is being redirected or not
12
- * fixed "Invalid Handle" error in compiled version of GetConsoleMode
13
- I'm actually not sure of the source of this error. It may be expected behavior when output is being redirected. I worked around it by rescuing the exception in Win32::Console#Mode and returning 9999. I picked that arbitrary value, because it is higher than 31, which is what I think is the highest value Mode would return if output isn't being redirected.
14
- * modified Win32::Console::ANSI::IO#write
15
- to check for redirection. If output is redirected, it uses WriteFile instead of WriteConosle. It also skips the parsing step, and passes the escape sequences through.
16
- * added Win32::Console::API#WriteFile
17
- to both the Ruby and compiled versions
18
- * added Win32::Console*WriteFile
19
- This is a wrapper around Win32::Console::API#WriteFile
20
- * modified Win32::Console::ANSI::IO#_PrintString
21
- Didn't change behavior, just tried to make it more idiomatic ruby. I didn't make all of the changes I wanted to, because I wasn't sure how to test them all.
22
- * split Win32::Console::Constants and Win32::Console::API out into seperate files.
23
- These two classes were in 'Win32/Console.rb' I moved them into 'Win32/Console/constants.rb' and 'Win32/Console/api.rb' respectively.
24
- * cleaned up indentation
25
- indentations was a mixture of tabs and spaces. I made everything indented with 2 spaces.
26
- * modified all Win32::Console::API methods
27
- It was assigning Win32API functions to class variables. I switched them to instance variables. I also changed the idiom it was using to instantiate the objects.
28
- For instance, instead of:
29
-
30
- if @@m_AllocConsole == nil
31
- @@m_AllocConsole = Win32API.new( "kernel32", "AllocConsole",
32
- [], 'l' )
33
-
34
- It is now:
35
-
36
- @AllocConsole ||= Win32API.new( "kernel32", "AllocConsole", [], 'l' )
37
- * Non-string arguments passed to Win32::Console::ANSI#write caused error - fix by Ivan Evtuhovich (evtuhovich at gmail dot com).
38
- 1.0.8 - First public release of win32console gem by Justin Bailey (jgbailey at gmail dot com).
data/INSTALL.txt DELETED
@@ -1,18 +0,0 @@
1
-
2
- To compile and install:
3
-
4
-
5
- Open a windows console.
6
- > vcvars32.bat # to set up microsoft's compiling environment
7
- # this is located in the bin/ directory of the MSVC compiler
8
- > ruby extconf.rb # to create a Makefile
9
- > nmake # to compile
10
- > nmake install # to install
11
-
12
-
13
- To test:
14
-
15
- > cd test
16
- > dir # to see available samples
17
- > ruby [anysample]
18
-
data/README_GEM.txt DELETED
@@ -1,64 +0,0 @@
1
- = Introduction
2
-
3
- This gem packages Gonzalo Garramuno's Win32::Console project, and includes a compiled binary for speed. The Win32::Console project's home can be found at:
4
-
5
- http://rubyforge.org/projects/win32console
6
-
7
- To use the gem, just put
8
-
9
- require 'win32console'
10
-
11
- At the top of your file.
12
-
13
- = Example
14
-
15
- To output a simple bolded string, try this script:
16
-
17
- require 'rubygems'
18
- require 'win32console'
19
- include Win32::Console::ANSI
20
- include Term::ANSIColor
21
-
22
- puts bold << "bolded text" << clear << " and no longer bold."
23
-
24
- = Formatting Methods Available
25
-
26
- The full list of methods available is found in lib/Term/ansicolor.rb (generated from the @@attributes array):
27
-
28
- clear
29
- reset # synonym for clear
30
- bold
31
- dark
32
- italic # not widely implemented
33
- underline
34
- underscore # synonym for underline
35
- blink
36
- rapid_blink # not widely implemented
37
- negative # no reverse because of String#reverse
38
- concealed
39
- strikethrough # not widely implemented
40
-
41
- # The following will set the foreground color
42
-
43
- black
44
- red
45
- green
46
- yellow
47
- blue
48
- magenta
49
- cyan
50
- white
51
-
52
- # The following will set the background color
53
-
54
- on_black
55
- on_red
56
- on_green
57
- on_yellow
58
- on_blue
59
- on_magenta
60
- on_cyan
61
- on_white
62
-
63
- The methods are fairly sophisticated. If you don't pass an argument, the appropriate escape sequence is returned. If a string is given, it will be outputted with an escape sequence wrapping it to apply the formatting to just that portion. If a block is given, the escape sequence will wrap the output of the block. Finally, if the Term::ANSIColor module is mixed into an object, and that instance supports to_str, tnen the result of to_str will be wrapped in the escape sequence.
64
-
data/lib/Console.so DELETED
Binary file