win32console 1.0.8-i386-mswin32

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.
Files changed (119) hide show
  1. data/Console-i386-mswin32.def +2 -0
  2. data/Console.cpp +1203 -0
  3. data/Console.rdoc +690 -0
  4. data/Console_ANSI.rdoc +302 -0
  5. data/HISTORY.txt +7 -0
  6. data/INSTALL.txt +18 -0
  7. data/README.txt +26 -0
  8. data/Rakefile +38 -0
  9. data/doc/classes/Win32.html +115 -0
  10. data/doc/classes/Win32/Console.html +650 -0
  11. data/doc/classes/Win32/Console.src/M000001.html +31 -0
  12. data/doc/classes/Win32/Console.src/M000002.html +23 -0
  13. data/doc/classes/Win32/Console.src/M000003.html +23 -0
  14. data/doc/classes/Win32/Console.src/M000004.html +27 -0
  15. data/doc/classes/Win32/Console.src/M000005.html +23 -0
  16. data/doc/classes/Win32/Console.src/M000006.html +28 -0
  17. data/doc/classes/Win32/Console.src/M000007.html +23 -0
  18. data/doc/classes/Win32/Console.src/M000008.html +24 -0
  19. data/doc/classes/Win32/Console.src/M000009.html +44 -0
  20. data/doc/classes/Win32/Console.src/M000010.html +23 -0
  21. data/doc/classes/Win32/Console.src/M000011.html +33 -0
  22. data/doc/classes/Win32/Console.src/M000012.html +26 -0
  23. data/doc/classes/Win32/Console.src/M000013.html +27 -0
  24. data/doc/classes/Win32/Console.src/M000014.html +28 -0
  25. data/doc/classes/Win32/Console.src/M000015.html +23 -0
  26. data/doc/classes/Win32/Console.src/M000016.html +23 -0
  27. data/doc/classes/Win32/Console.src/M000017.html +23 -0
  28. data/doc/classes/Win32/Console.src/M000018.html +29 -0
  29. data/doc/classes/Win32/Console.src/M000019.html +23 -0
  30. data/doc/classes/Win32/Console.src/M000020.html +23 -0
  31. data/doc/classes/Win32/Console.src/M000021.html +28 -0
  32. data/doc/classes/Win32/Console.src/M000022.html +23 -0
  33. data/doc/classes/Win32/Console.src/M000023.html +28 -0
  34. data/doc/classes/Win32/Console.src/M000024.html +35 -0
  35. data/doc/classes/Win32/Console.src/M000025.html +28 -0
  36. data/doc/classes/Win32/Console.src/M000026.html +28 -0
  37. data/doc/classes/Win32/Console.src/M000027.html +28 -0
  38. data/doc/classes/Win32/Console.src/M000028.html +31 -0
  39. data/doc/classes/Win32/Console.src/M000029.html +23 -0
  40. data/doc/classes/Win32/Console.src/M000030.html +23 -0
  41. data/doc/classes/Win32/Console.src/M000031.html +23 -0
  42. data/doc/classes/Win32/Console.src/M000032.html +27 -0
  43. data/doc/classes/Win32/Console.src/M000033.html +27 -0
  44. data/doc/classes/Win32/Console.src/M000034.html +25 -0
  45. data/doc/classes/Win32/Console/ANSI.html +103 -0
  46. data/doc/classes/Win32/Console/ANSI/IO.html +220 -0
  47. data/doc/classes/Win32/Console/ANSI/IO.src/M000035.html +32 -0
  48. data/doc/classes/Win32/Console/ANSI/IO.src/M000036.html +205 -0
  49. data/doc/classes/Win32/Console/ANSI/IO.src/M000037.html +40 -0
  50. data/doc/classes/Win32/Console/ANSI/IO.src/M000038.html +25 -0
  51. data/doc/classes/Win32/Console/API.html +758 -0
  52. data/doc/classes/Win32/Console/API.src/M000039.html +27 -0
  53. data/doc/classes/Win32/Console/API.src/M000040.html +27 -0
  54. data/doc/classes/Win32/Console/API.src/M000041.html +27 -0
  55. data/doc/classes/Win32/Console/API.src/M000042.html +32 -0
  56. data/doc/classes/Win32/Console/API.src/M000043.html +32 -0
  57. data/doc/classes/Win32/Console/API.src/M000044.html +28 -0
  58. data/doc/classes/Win32/Console/API.src/M000045.html +26 -0
  59. data/doc/classes/Win32/Console/API.src/M000046.html +26 -0
  60. data/doc/classes/Win32/Console/API.src/M000047.html +27 -0
  61. data/doc/classes/Win32/Console/API.src/M000048.html +30 -0
  62. data/doc/classes/Win32/Console/API.src/M000049.html +29 -0
  63. data/doc/classes/Win32/Console/API.src/M000050.html +27 -0
  64. data/doc/classes/Win32/Console/API.src/M000051.html +28 -0
  65. data/doc/classes/Win32/Console/API.src/M000052.html +30 -0
  66. data/doc/classes/Win32/Console/API.src/M000053.html +27 -0
  67. data/doc/classes/Win32/Console/API.src/M000054.html +29 -0
  68. data/doc/classes/Win32/Console/API.src/M000055.html +29 -0
  69. data/doc/classes/Win32/Console/API.src/M000056.html +28 -0
  70. data/doc/classes/Win32/Console/API.src/M000057.html +27 -0
  71. data/doc/classes/Win32/Console/API.src/M000058.html +47 -0
  72. data/doc/classes/Win32/Console/API.src/M000059.html +32 -0
  73. data/doc/classes/Win32/Console/API.src/M000060.html +47 -0
  74. data/doc/classes/Win32/Console/API.src/M000061.html +34 -0
  75. data/doc/classes/Win32/Console/API.src/M000062.html +32 -0
  76. data/doc/classes/Win32/Console/API.src/M000063.html +32 -0
  77. data/doc/classes/Win32/Console/API.src/M000064.html +35 -0
  78. data/doc/classes/Win32/Console/API.src/M000065.html +26 -0
  79. data/doc/classes/Win32/Console/API.src/M000066.html +27 -0
  80. data/doc/classes/Win32/Console/API.src/M000067.html +29 -0
  81. data/doc/classes/Win32/Console/API.src/M000068.html +27 -0
  82. data/doc/classes/Win32/Console/API.src/M000069.html +27 -0
  83. data/doc/classes/Win32/Console/API.src/M000070.html +28 -0
  84. data/doc/classes/Win32/Console/API.src/M000071.html +27 -0
  85. data/doc/classes/Win32/Console/API.src/M000072.html +26 -0
  86. data/doc/classes/Win32/Console/API.src/M000073.html +27 -0
  87. data/doc/classes/Win32/Console/API.src/M000074.html +31 -0
  88. data/doc/classes/Win32/Console/API.src/M000075.html +27 -0
  89. data/doc/classes/Win32/Console/API.src/M000076.html +32 -0
  90. data/doc/classes/Win32/Console/API.src/M000077.html +27 -0
  91. data/doc/classes/Win32/Console/API.src/M000078.html +32 -0
  92. data/doc/classes/Win32/Console/API.src/M000079.html +32 -0
  93. data/doc/classes/Win32/Console/API.src/M000080.html +32 -0
  94. data/doc/classes/Win32/Console/Constants.html +360 -0
  95. data/doc/created.rid +1 -0
  96. data/doc/files/Console_ANSI_rdoc.html +407 -0
  97. data/doc/files/Console_cpp.html +104 -0
  98. data/doc/files/Console_rdoc.html +964 -0
  99. data/doc/files/lib/Win32/Console/ANSI_rb.html +123 -0
  100. data/doc/files/lib/Win32/Console_rb.html +297 -0
  101. data/doc/fr_class_index.html +32 -0
  102. data/doc/fr_file_index.html +31 -0
  103. data/doc/fr_method_index.html +106 -0
  104. data/doc/index.html +24 -0
  105. data/doc/rdoc-style.css +172 -0
  106. data/lib/Console.so +0 -0
  107. data/lib/README_GEM.txt +64 -0
  108. data/lib/Term/ansicolor.rb +76 -0
  109. data/lib/Win32/Console.rb +970 -0
  110. data/lib/Win32/Console/ANSI.rb +305 -0
  111. data/lib/win32console.rb +3 -0
  112. data/test/test_cursor.rb +9 -0
  113. data/test/test_mouse.rb +6 -0
  114. data/test/test_readinput.rb +62 -0
  115. data/test/test_readoutput.rb +52 -0
  116. data/test/test_sendevent.rb +17 -0
  117. data/test/test_title.rb +14 -0
  118. data/test/test_write.rb +36 -0
  119. metadata +180 -0
@@ -0,0 +1,970 @@
1
+ # Win32::Console: an object implementing the Win32 API Console functions
2
+ # Copyright (C) 2003 Gonzalo Garramuno (ggarramuno@aol.com)
3
+ #
4
+ # Original Win32API_Console was:
5
+ # Copyright (C) 2001 Michael L. Semon (mlsemon@sega.net)
6
+
7
+ 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
+ require "Console.so"
13
+ STDERR.print "Using faster, DLL Console.so\n" if $DEBUG
14
+
15
+ rescue Exception
16
+
17
+ STDERR.print "Using slower, non-DLL Console.rb\n" if $DEBUG
18
+
19
+ module Win32
20
+ class Console
21
+ end
22
+ end
23
+
24
+ # The WINDOWS constants
25
+ module Win32::Console::Constants
26
+ STD_INPUT_HANDLE = 0xFFFFFFF6
27
+ STD_OUTPUT_HANDLE = 0xFFFFFFF5
28
+ STD_ERROR_HANDLE = 0xFFFFFFF4
29
+ INVALID_HANDLE_VALUE = 0xFFFFFFFF
30
+ GENERIC_READ = 0x80000000
31
+ GENERIC_WRITE = 0x40000000
32
+ FILE_SHARE_READ = 0x00000001
33
+ FILE_SHARE_WRITE = 0x00000002
34
+ CONSOLE_TEXTMODE_BUFFER = 0x00000001
35
+
36
+ FOREGROUND_BLUE = 0x0001
37
+ FOREGROUND_GREEN = 0x0002
38
+ FOREGROUND_RED = 0x0004
39
+ FOREGROUND_INTENSITY = 0x0008
40
+ BACKGROUND_BLUE = 0x0010
41
+ BACKGROUND_GREEN = 0x0020
42
+ BACKGROUND_RED = 0x0040
43
+ BACKGROUND_INTENSITY = 0x0080
44
+
45
+ ENABLE_PROCESSED_INPUT = 0x0001
46
+ ENABLE_LINE_INPUT = 0x0002
47
+ ENABLE_ECHO_INPUT = 0x0004
48
+ ENABLE_WINDOW_INPUT = 0x0008
49
+ ENABLE_MOUSE_INPUT = 0x0010
50
+ ENABLE_PROCESSED_OUTPUT = 0x0001
51
+ ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002
52
+
53
+ KEY_EVENT = 0x0001
54
+ MOUSE_EVENT = 0x0002
55
+ WINDOW_BUFFER_SIZE_EVENT = 0x0004
56
+ MENU_EVENT = 0x0008
57
+ FOCUS_EVENT = 0x0010
58
+
59
+ CAPSLOCK_ON = 0x0080
60
+ ENHANCED_KEY = 0x0100
61
+ NUMLOCK_ON = 0x0020
62
+ SHIFT_PRESSED = 0x0010
63
+ LEFT_CTRL_PRESSED = 0x0008
64
+ RIGHT_CTRL_PRESSED = 0x0004
65
+ LEFT_ALT_PRESSED = 0x0002
66
+ RIGHT_ALT_PRESSED = 0x0001
67
+ SCROLLLOCK_ON = 0x0040
68
+
69
+ MOUSE_WHEELED = 0x0004
70
+ DOUBLE_CLICK = 0x0002
71
+ MOUSE_MOVED = 0x0001
72
+
73
+ FROM_LEFT_1ST_BUTTON_PRESSED = 0x0001
74
+ FROM_LEFT_2ND_BUTTON_PRESSED = 0x0004
75
+ FROM_LEFT_3RD_BUTTON_PRESSED = 0x0008
76
+ FROM_LEFT_4TH_BUTTON_PRESSED = 0x0010
77
+ RIGHTMOST_BUTTON_PRESSED = 0x0002
78
+
79
+ CTRL_C_EVENT = 0x0000
80
+ CTRL_BREAK_EVENT = 0x0001
81
+ CTRL_CLOSE_EVENT = 0x0002
82
+ CTRL_LOGOFF_EVENT = 0x0005
83
+ CTRL_SHUTDOWN_EVENT = 0x0006
84
+ end
85
+
86
+ # The actual api to access windows functions
87
+ class Win32::Console::API
88
+ require 'Win32API'
89
+
90
+ private
91
+ # This is a class-wide cache that will hold Win32API objects. As each
92
+ # Win32API object is about 920 bytes, I didn't want to initialize all of
93
+ # them at one time. That would waste about 42 kB for this object because
94
+ # it has 47 functions. However, to not have a cache at all would reduce
95
+ # the speed of this object by 164%.
96
+ @@m_AllocConsole = nil
97
+ @@m_CreateConsoleScreenBuffer = nil
98
+ @@m_FillConsoleOutputAttribute = nil
99
+ @@m_FillConsoleOutputCharacter = nil
100
+ @@m_FlushConsoleInputBuffer = nil
101
+ @@m_FreeConsole = nil
102
+ @@m_GenerateConsoleCtrlEvent = nil
103
+ @@m_GetConsoleCP = nil
104
+ @@m_GetConsoleCursorInfo = nil
105
+ @@m_GetConsoleMode = nil
106
+ @@m_GetConsoleOutputCP = nil
107
+ @@m_GetConsoleScreenBufferInfo = nil
108
+ @@m_GetConsoleTitle = nil
109
+ @@m_GetConsoleWindow = nil
110
+ @@m_GetLargestConsoleWindowSize = nil
111
+ @@m_GetNumberOfConsoleInputEvents = nil
112
+ @@m_GetNumberOfConsoleMouseButtons = nil
113
+ @@m_GetStdHandle = nil
114
+ @@m_PeekConsoleInput = nil
115
+ @@m_ReadConsole = nil
116
+ @@m_ReadConsoleInput = nil
117
+ @@m_ReadConsoleOutput = nil
118
+ @@m_ReadConsoleOutputAttribute = nil
119
+ @@m_ReadConsoleOutputCharacter = nil
120
+ @@m_ScrollConsoleScreenBuffer = nil
121
+ @@m_SetConsoleActiveScreenBuffer = nil
122
+ @@m_SetConsoleCP = nil
123
+ @@m_SetConsoleCursorInfo = nil
124
+ @@m_SetConsoleCursorPosition = nil
125
+ @@m_SetConsoleMode = nil
126
+ @@m_SetConsoleOutputCP = nil
127
+ @@m_SetConsoleScreenBufferSize = nil
128
+ @@m_SetConsoleTextAttribute = nil
129
+ @@m_SetConsoleTitle = nil
130
+ @@m_SetConsoleWindowInfo = nil
131
+ @@m_SetStdHandle = nil
132
+ @@m_WriteConsole = nil
133
+ @@m_WriteConsoleInput = nil
134
+ @@m_WriteConsoleOutput = nil
135
+ @@m_WriteConsoleOutputAttribute = nil
136
+ @@m_WriteConsoleOutputCharacter = nil
137
+
138
+ public
139
+
140
+ class << self
141
+
142
+
143
+ def constant(t)
144
+ begin
145
+ eval "return Win32::Console::Constants::#{t}"
146
+ rescue
147
+ return nil
148
+ end
149
+ end
150
+
151
+
152
+ def AllocConsole()
153
+ if @@m_AllocConsole == nil
154
+ @@m_AllocConsole = Win32API.new( "kernel32", "AllocConsole",
155
+ [], 'l' )
156
+ end
157
+ @@m_AllocConsole.call()
158
+ end
159
+
160
+ def CreateConsoleScreenBuffer( dwDesiredAccess, dwShareMode, dwFlags )
161
+ if @@m_CreateConsoleScreenBuffer == nil
162
+ @@m_CreateConsoleScreenBuffer = Win32API.new( "kernel32", "CreateConsoleScreenBuffer", ['l', 'l', 'p', 'l', 'p'], 'l' )
163
+ end
164
+ @@m_CreateConsoleScreenBuffer.call( dwDesiredAccess, dwShareMode,
165
+ nil, dwFlags, nil )
166
+ end
167
+
168
+
169
+
170
+ def FillConsoleOutputAttribute( hConsoleOutput, wAttribute, nLength,
171
+ col, row )
172
+ if @@m_FillConsoleOutputAttribute == nil
173
+ @@m_FillConsoleOutputAttribute = Win32API.new( "kernel32", "FillConsoleOutputAttribute", ['l', 'i', 'l', 'l', 'p'], 'l' )
174
+ end
175
+ dwWriteCoord = (row << 16) + col
176
+ lpNumberOfAttrsWritten = ' ' * 4
177
+ @@m_FillConsoleOutputAttribute.call( hConsoleOutput, wAttribute,
178
+ nLength, dwWriteCoord,
179
+ lpNumberOfAttrsWritten )
180
+ return lpNumberOfAttrsWritten.unpack('L')
181
+ end
182
+
183
+
184
+
185
+ def FillConsoleOutputCharacter( hConsoleOutput, cCharacter, nLength,
186
+ col, row )
187
+ if @@m_FillConsoleOutputCharacter == nil
188
+ @@m_FillConsoleOutputCharacter = Win32API.new( "kernel32", "FillConsoleOutputCharacter", ['l', 'i', 'l', 'l', 'p'], 'l' )
189
+ end
190
+ dwWriteCoord = (row << 16) + col
191
+ lpNumberOfAttrsWritten = ' ' * 4
192
+ @@m_FillConsoleOutputCharacter.call( hConsoleOutput, cCharacter,
193
+ nLength, dwWriteCoord,
194
+ lpNumberOfAttrsWritten )
195
+ return lpNumberOfAttrsWritten.unpack('L')
196
+ end
197
+
198
+
199
+ def FlushConsoleInputBuffer( hConsoleInput )
200
+ if @@m_FlushConsoleInputBuffer == nil
201
+ @@m_FlushConsoleInputBuffer = Win32API.new( "kernel32",
202
+ "FillConsoleInputBuffer",
203
+ ['l'], 'l' )
204
+ end
205
+ @@m_FlushConsoleInputBuffer.call( hConsoleInput )
206
+ end
207
+
208
+
209
+ def FreeConsole()
210
+ if @@m_FreeConsole == nil
211
+ @@m_FreeConsole = Win32API.new( "kernel32", "FreeConsole", [], 'l' )
212
+ end
213
+ @@m_FreeConsole.call()
214
+ end
215
+
216
+
217
+ def GenerateConsoleCtrlEvent( dwCtrlEvent, dwProcessGroupId )
218
+ if @@m_GenerateConsoleCtrlEvent == nil
219
+ @@m_GenerateConsoleCtrlEvent = Win32API.new( "kernel32", "GenerateConsoleCtrlEvent", ['l', 'l'], 'l' )
220
+ end
221
+ @@m_GenerateConsoleCtrlEvent.call( dwCtrlEvent, dwProcessGroupId )
222
+ end
223
+
224
+ def GetConsoleCP()
225
+ if @@m_GetConsoleCP == nil
226
+ @@m_GetConsoleCP = Win32API.new( "kernel32", "GetConsoleCP",
227
+ [], 'l' )
228
+ end
229
+ @@m_GetConsoleCP.call()
230
+ end
231
+
232
+ def GetConsoleCursorInfo( hConsoleOutput )
233
+ if @@m_GetConsoleCursorInfo == nil
234
+ @@m_GetConsoleCursorInfo = Win32API.new( "kernel32",
235
+ "GetConsoleCursorInfo",
236
+ ['l', 'p'], 'l' )
237
+ end
238
+ lpConsoleCursorInfo = ' ' * 8
239
+ @@m_GetConsoleCursorInfo.call( hConsoleOutput, lpConsoleCursorInfo )
240
+ return lpConsoleCursorInfo.unpack('LL')
241
+ end
242
+
243
+ def GetConsoleMode( hConsoleHandle )
244
+ if @@m_GetConsoleMode == nil
245
+ @@m_GetConsoleMode = Win32API.new( "kernel32", "GetConsoleMode",
246
+ ['l', 'p'], 'l' )
247
+ end
248
+ lpMode = ' ' * 4
249
+ @@m_GetConsoleMode.call( hConsoleHandle, lpMode )
250
+ return lpMode.unpack('L')
251
+ end
252
+
253
+ def GetConsoleOutputCP()
254
+ if @@m_GetConsoleOutputCP == nil
255
+ @@m_GetConsoleOutputCP = Win32API.new( "kernel32",
256
+ "GetConsoleOutputCP", [], 'l' )
257
+ end
258
+ @@m_GetConsoleOutputCP.call()
259
+ end
260
+
261
+ def GetConsoleScreenBufferInfo( hConsoleOutput )
262
+ if @@m_GetConsoleScreenBufferInfo == nil
263
+ @@m_GetConsoleScreenBufferInfo = Win32API.new( "kernel32", "GetConsoleScreenBufferInfo", ['l', 'p'], 'l' )
264
+ end
265
+ lpBuffer = ' ' * 22
266
+ @@m_GetConsoleScreenBufferInfo.call( hConsoleOutput, lpBuffer )
267
+ return lpBuffer.unpack('SSSSSssssSS')
268
+ end
269
+
270
+ def GetConsoleTitle()
271
+ if @@m_GetConsoleTitle == nil
272
+ @@m_GetConsoleTitle = Win32API.new( "kernel32", "GetConsoleTitle",
273
+ ['p', 'l'], 'l' )
274
+ end
275
+ nSize = 120
276
+ lpConsoleTitle = ' ' * nSize
277
+ @@m_GetConsoleTitle.call( lpConsoleTitle, nSize )
278
+ return lpConsoleTitle.strip
279
+ end
280
+
281
+ def GetConsoleWindow()
282
+ if @@m_GetConsoleWindow == nil
283
+ @@m_GetConsoleWindow = Win32API.new( "kernel32", "GetConsoleWindow",
284
+ [], 'l' )
285
+ end
286
+ @@m_GetConsoleWindow.call()
287
+ end
288
+
289
+ def GetLargestConsoleWindowSize( hConsoleOutput )
290
+ if @@m_GetLargestConsoleWindowSize == nil
291
+ @@m_GetLargestConsoleWindowSize = Win32API.new( "kernel32", "GetLargestConsoleWindowSize", ['l'], 'l' )
292
+ end
293
+ coord = @@m_GetLargestConsoleWindowSize.call( hConsoleOutput )
294
+ x = coord >> 16
295
+ y = coord & 0x0000ffff
296
+ return [x,y]
297
+ end
298
+
299
+ def GetNumberOfConsoleInputEvents( hConsoleInput )
300
+ if @@m_GetNumberOfConsoleInputEvents == nil
301
+ @@m_GetNumberOfConsoleInputEvents = Win32API.new( "kernel32", "GetNumberOfConsoleInputEvents", ['l', 'p'], 'l' )
302
+ end
303
+ lpcNumberOfEvents = 0
304
+ @@m_GetNumberOfConsoleInputEvents.call( hConsoleInput,
305
+ lpcNumberOfEvents )
306
+ return lpcNumberOfEvents
307
+ end
308
+
309
+ def GetNumberOfConsoleMouseButtons( )
310
+ if @@m_GetNumberOfConsoleMouseButtons == nil
311
+ @@m_GetNumberOfConsoleMouseButtons = Win32API.new( "kernel32", "GetNumberOfConsoleMouseButtons", ['p'], 'l' )
312
+ end
313
+ lpNumberOfMouseButtons = 0
314
+ @@m_GetNumberOfConsoleMouseButtons.call( lpNumberOfMouseButtons )
315
+ return lpNumberOfMouseButtons
316
+ end
317
+
318
+ def GetStdHandle( nStdHandle )
319
+ if @@m_GetStdHandle == nil
320
+ @@m_GetStdHandle = Win32API.new( "kernel32", "GetStdHandle",
321
+ ['l'], 'l' )
322
+ end
323
+ @@m_GetStdHandle.call( nStdHandle )
324
+ end
325
+
326
+ # <<HandlerRoutine>> : This is not an actual API function, just a concept description in the SDK.
327
+
328
+ def PeekConsoleInput( hConsoleInput )
329
+ if @@m_PeekConsoleInput == nil
330
+ @@m_PeekConsoleInput = Win32API.new( "kernel32", "PeekConsoleInput",
331
+ ['l', 'p', 'l', 'p'], 'l' )
332
+ end
333
+ lpNumberOfEventsRead = ' ' * 4
334
+ lpBuffer = ' ' * 20
335
+ nLength = 20
336
+ @@m_PeekConsoleInput.call( hConsoleInput, lpBuffer, nLength,
337
+ lpNumberOfEventsRead )
338
+ type = lpBuffer.unpack('s')[0]
339
+
340
+ case type
341
+ when KEY_EVENT
342
+ return lpBuffer.unpack('sSSSSCS')
343
+ when MOUSE_EVENT
344
+ return lpBuffer.unpack('sSSSS')
345
+ when WINDOW_BUFFER_SIZE_EVENT
346
+ return lpBuffer.unpack('sS')
347
+ when MENU_EVENT
348
+ return lpBuffer.unpack('sS')
349
+ when FOCUS_EVENT
350
+ return lpBuffer.unpack('sS')
351
+ else
352
+ return []
353
+ end
354
+ end
355
+
356
+ def ReadConsole( hConsoleInput, lpBuffer, nNumberOfCharsToRead )
357
+ if @@m_ReadConsole == nil
358
+ @@m_ReadConsole = Win32API.new( "kernel32", "ReadConsole",
359
+ ['l', 'p', 'l', 'p', 'p'], 'l' )
360
+ end
361
+ lpBuffer = ' ' * nNumberOfCharsToRead unless lpBuffer
362
+ lpNumberOfCharsRead = ' ' * 4
363
+ lpReserved = ' ' * 4
364
+ @@m_ReadConsole.call( hConsoleInput, lpBuffer, nNumberOfCharsToRead,
365
+ lpNumberOfCharsRead, lpReserved )
366
+ return lpNumberOfCharsRead.unpack('L')
367
+ end
368
+
369
+ def ReadConsoleInput( hConsoleInput )
370
+ if @@m_ReadConsoleInput == nil
371
+ @@m_ReadConsoleInput = Win32API.new( "kernel32", "ReadConsoleInput",
372
+ ['l', 'p', 'l', 'p'], 'l' )
373
+ end
374
+ lpNumberOfEventsRead = ' ' * 4
375
+ lpBuffer = ' ' * 20
376
+ nLength = 20
377
+ @@m_ReadConsoleInput.call( hConsoleInput, lpBuffer, nLength,
378
+ lpNumberOfEventsRead )
379
+ type = lpBuffer.unpack('s')[0]
380
+
381
+ case type
382
+ when KEY_EVENT
383
+ return lpBuffer.unpack('sSSSSCS')
384
+ when MOUSE_EVENT
385
+ return lpBuffer.unpack('sSSSS')
386
+ when WINDOW_BUFFER_SIZE_EVENT
387
+ return lpBuffer.unpack('sS')
388
+ when MENU_EVENT
389
+ return lpBuffer.unpack('sS')
390
+ when FOCUS_EVENT
391
+ return lpBuffer.unpack('sS')
392
+ else
393
+ return []
394
+ end
395
+ end
396
+
397
+ def ReadConsoleOutput( hConsoleOutput, lpBuffer, cols, rows,
398
+ bufx, bufy, left, top, right, bottom )
399
+ if @@m_ReadConsoleOutput == nil
400
+ @@m_ReadConsoleOutput = Win32API.new( "kernel32",
401
+ "ReadConsoleOutput",
402
+ ['l', 'p', 'l', 'l', 'p'], 'l' )
403
+ end
404
+ dwBufferSize = cols * rows * 4
405
+ lpBuffer = ' ' * dwBufferSize
406
+ dwBufferCoord = (bufy << 16) + bufx
407
+ lpReadRegion = [ left, top, right, bottom ].pack('ssss')
408
+ @@m_ReadConsoleOutput.call( hConsoleOutput, lpBuffer, dwBufferSize,
409
+ dwBufferCoord, lpReadRegion )
410
+ end
411
+
412
+ def ReadConsoleOutputAttribute( hConsoleOutput, nLength, col, row )
413
+ if @@m_ReadConsoleOutputAttribute == nil
414
+ @@m_ReadConsoleOutputAttribute = Win32API.new( "kernel32", "ReadConsoleOutputAttribute", ['l', 'p', 'l', 'l', 'p'], 'l' )
415
+ end
416
+ lpAttribute = ' ' * nLength
417
+ dwReadCoord = (row << 16) + col
418
+ lpNumberOfAttrsRead = ' ' * 4
419
+ @@m_ReadConsoleOutputAttribute.call( hConsoleOutput, lpAttribute,
420
+ nLength, dwReadCoord,
421
+ lpNumberOfAttrsRead )
422
+ return lpAttribute
423
+ end
424
+
425
+ def ReadConsoleOutputCharacter( hConsoleOutput, lpCharacter, nLength,
426
+ col, row )
427
+ if @@m_ReadConsoleOutputCharacter == nil
428
+ @@m_ReadConsoleOutputCharacter = Win32API.new( "kernel32", "ReadConsoleOutputCharacter", ['l', 'p', 'l', 'l', 'p'], 'l' )
429
+ end
430
+ dwReadCoord = (row << 16) + col
431
+ lpNumberOfCharsRead = ' ' * 4
432
+ @@m_ReadConsoleOutputCharacter.call( hConsoleOutput, lpCharacter,
433
+ nLength, dwReadCoord,
434
+ lpNumberOfCharsRead )
435
+ return lpNumberOfCharsRead.unpack('L')
436
+ end
437
+
438
+ def ScrollConsoleScreenBuffer( hConsoleOutput,
439
+ left1, top1, right1, bottom1,
440
+ col, row, char, attr,
441
+ left2, top2, right2, bottom2 )
442
+ if @@m_ScrollConsoleScreenBuffer == nil
443
+ @@m_ScrollConsoleScreenBuffer = Win32API.new( "kernel32", "ScrollConsoleScreenBuffer", ['l', 'p', 'p', 'l', 'p'], 'l' )
444
+ end
445
+ lpScrollRectangle = [left1, top1, right1, bottom1].pack('ssss')
446
+ lpClipRectangle = [left2, top2, right2, bottom2].pack('ssss')
447
+ dwDestinationOrigin = (row << 16) + col
448
+ lpFill = [char, attr].pack('ss')
449
+ @@m_ScrollConsoleScreenBuffer.call( hConsoleOutput, lpScrollRectangle,
450
+ lpClipRectangle,
451
+ dwDestinationOrigin, lpFill )
452
+ end
453
+
454
+ def SetConsoleActiveScreenBuffer( hConsoleOutput )
455
+ if @@m_SetConsoleActiveScreenBuffer == nil
456
+ @@m_SetConsoleActiveScreenBuffer = Win32API.new( "kernel32", "SetConsoleActiveScreenBuffer", ['l'], 'l' )
457
+ end
458
+ @@m_SetConsoleActiveScreenBuffer.call( hConsoleOutput )
459
+ end
460
+
461
+ # <<SetConsoleCtrlHandler>>: Will probably not be implemented.
462
+
463
+ def SetConsoleCP( wCodePageID )
464
+ if @@m_SetConsoleCP == nil
465
+ @@m_SetConsoleCP = Win32API.new( "kernel32", "SetConsoleCP",
466
+ ['l'], 'l' )
467
+ end
468
+ @@m_SetConsoleCP.call( wCodePageID )
469
+ end
470
+
471
+ def SetConsoleCursorInfo( hConsoleOutput, col, row )
472
+ if @@m_SetConsoleCursorInfo == nil
473
+ @@m_SetConsoleCursorInfo = Win32API.new( "kernel32",
474
+ "SetConsoleCursorInfo",
475
+ ['l', 'p'], 'l' )
476
+ end
477
+ lpConsoleCursorInfo = [size,visi].pack('LL')
478
+ @@m_SetConsoleCursorInfo.call( hConsoleOutput, lpConsoleCursorInfo )
479
+ end
480
+
481
+ def SetConsoleCursorPosition( hConsoleOutput, col, row )
482
+ if @@m_SetConsoleCursorPosition == nil
483
+ @@m_SetConsoleCursorPosition = Win32API.new( "kernel32", "SetConsoleCursorPosition", ['l', 'p'], 'l' )
484
+ end
485
+ dwCursorPosition = (row << 16) + col
486
+ @@m_SetConsoleCursorPosition.call( hConsoleOutput, dwCursorPosition )
487
+ end
488
+
489
+ def SetConsoleMode( hConsoleHandle, lpMode )
490
+ if @@m_SetConsoleMode == nil
491
+ @@m_SetConsoleMode = Win32API.new( "kernel32", "SetConsoleMode",
492
+ ['l', 'p'], 'l' )
493
+ end
494
+ @@m_SetConsoleMode.call( hConsoleHandle, lpMode )
495
+ end
496
+
497
+ def SetConsoleOutputCP( wCodePageID )
498
+ if @@m_SetConsoleOutputCP == nil
499
+ @@m_SetConsoleOutputCP = Win32API.new( "kernel32",
500
+ "GetConsoleOutputCP",
501
+ ['l'], 'l' )
502
+ end
503
+ @@m_SetConsoleOutputCP.call( wCodePageID )
504
+ end
505
+
506
+ def SetConsoleScreenBufferSize( hConsoleOutput, col, row )
507
+ if @@m_SetConsoleScreenBufferSize == nil
508
+ @@m_SetConsoleScreenBufferSize = Win32API.new( "kernel32", "SetConsoleScreenBufferSize", ['l', 'l'], 'l' )
509
+ end
510
+ dwSize = (row << 16) + col
511
+ @@m_SetConsoleScreenBufferSize.call( hConsoleOutput, dwSize )
512
+ end
513
+
514
+ def SetConsoleTextAttribute( hConsoleOutput, wAttributes )
515
+ if @@m_SetConsoleTextAttribute == nil
516
+ @@m_SetConsoleTextAttribute = Win32API.new( "kernel32", "SetConsoleTextAttribute", ['l', 'i'], 'l' )
517
+ end
518
+ @@m_SetConsoleTextAttribute.call( hConsoleOutput, wAttributes )
519
+ end
520
+
521
+ def SetConsoleTitle( lpConsoleTitle )
522
+ if @@m_SetConsoleTitle == nil
523
+ @@m_SetConsoleTitle = Win32API.new( "kernel32", "SetConsoleTitle",
524
+ ['p'], 'l' )
525
+ end
526
+ @@m_SetConsoleTitle.call( lpConsoleTitle )
527
+ end
528
+
529
+ def SetConsoleWindowInfo( hConsoleOutput, bAbsolute,
530
+ left, top, right, bottom )
531
+ if @@m_SetConsoleWindowInfo == nil
532
+ @@m_SetConsoleWindowInfo = Win32API.new( "kernel32",
533
+ "SetConsoleWindowInfo",
534
+ ['l', 'l', 'p'], 'l' )
535
+ end
536
+ lpConsoleWindow = [ left, top, right, bottom ].pack('ssss')
537
+ @@m_SetConsoleWindowInfo.call( hConsoleOutput, bAbsolute,
538
+ lpConsoleWindow )
539
+ end
540
+
541
+ def SetStdHandle( nStdHandle, hHandle )
542
+ if @@m_SetStdHandle == nil
543
+ @@m_SetStdHandle = Win32API.new( "kernel32", "SetStdHandle",
544
+ ['l', 'l'], 'l' )
545
+ end
546
+ @@m_SetStdHandle.call( nStdHandle, hHandle )
547
+ end
548
+
549
+ def WriteConsole( hConsoleOutput, lpBuffer )
550
+ if @@m_WriteConsole == nil
551
+ @@m_WriteConsole = Win32API.new( "kernel32", "WriteConsole",
552
+ ['l', 'p', 'l', 'p', 'p'], 'l' )
553
+ end
554
+ nNumberOfCharsToWrite = lpBuffer.length()
555
+ lpNumberOfCharsWritten = ' ' * 4
556
+ lpReserved = ' ' * 4
557
+ @@m_WriteConsole.call( hConsoleOutput, lpBuffer, nNumberOfCharsToWrite,
558
+ lpNumberOfCharsWritten, lpReserved )
559
+ return lpNumberOfCharsWritten
560
+ end
561
+
562
+ def WriteConsoleInput( hConsoleInput, lpBuffer )
563
+ if @@m_WriteConsoleInput == nil
564
+ @@m_WriteConsoleInput = Win32API.new( "kernel32", "WriteConsoleInput", ['l', 'p', 'l', 'p'], 'l' )
565
+ end
566
+ @@m_WriteConsoleInput.call( hConsoleInput, lpBuffer, nLength,
567
+ lpNumberOfEventsWritten )
568
+ end
569
+
570
+ # @@ Todo: Test this
571
+ def WriteConsoleOutput( hConsoleOutput, buffer, cols, rows,
572
+ bufx, bufy, left, top, right, bottom )
573
+ if @@m_WriteConsoleOutput == nil
574
+ @@m_WriteConsoleOutput = Win32API.new( "kernel32", "WriteConsoleOutput", ['l', 'p', 'l', 'l', 'p'], 'l' )
575
+ end
576
+ lpBuffer = buffer.flatten.pack('ss' * buffer.length() * 2)
577
+ dwBufferSize = (buffer.length() << 16) + 2
578
+ dwBufferCoord = (row << 16) + col
579
+ lpWriteRegion = [ left, top, right, bottom ].pack('ssss')
580
+ @@m_WriteConsoleOutput.call( hConsoleOutput, lpBuffer, dwBufferSize,
581
+ dwBufferCoord, lpWriteRegion )
582
+ end
583
+
584
+ def WriteConsoleOutputAttribute( hConsoleOutput, lpAttribute, col, row )
585
+ if @@m_WriteConsoleOutputAttribute == nil
586
+ @@m_WriteConsoleOutputAttribute = Win32API.new( "kernel32", "WriteConsoleOutputAttribute", ['l', 'p', 'l', 'l', 'p'], 'l' )
587
+ end
588
+ nLength = lpAttribute.length()
589
+ dwWriteCoord = (row << 16) + col
590
+ lpNumberOfAttrsWritten = ' ' * 4
591
+ @@m_WriteConsoleOutputAttribute.call( hConsoleOutput, lpAttribute,
592
+ nLength, dwWriteCoord,
593
+ lpNumberOfAttrsWritten )
594
+ return lpNumberOfAttrsWritten.unpack('L')
595
+ end
596
+
597
+ def WriteConsoleOutputCharacter( hConsoleOutput, lpCharacter, col, row )
598
+ if @@m_WriteConsoleOutputCharacter == nil
599
+ @@m_WriteConsoleOutputCharacter = Win32API.new( "kernel32", "WriteConsoleOutputCharacter", ['l', 'p', 'l', 'l', 'p'], 'l' )
600
+ end
601
+ nLength = lpCharacter.length()
602
+ dwWriteCoord = (row << 16) + col
603
+ lpNumberOfCharsWritten = ' ' * 4
604
+ @@m_WriteConsoleOutputCharacter.call( hConsoleOutput, lpCharacter,
605
+ nLength, dwWriteCoord,
606
+ lpNumberOfCharsWritten )
607
+ return lpNumberOfCharsWritten.unpack('L')
608
+ end
609
+
610
+ end
611
+ end
612
+
613
+ end # rescue
614
+
615
+
616
+
617
+ module Win32
618
+ class Console
619
+
620
+ VERSION = '1.0'
621
+
622
+ include Win32::Console::Constants
623
+
624
+ def initialize( t = nil )
625
+ if t and ( t == STD_INPUT_HANDLE or t == STD_OUTPUT_HANDLE or
626
+ t == STD_ERROR_HANDLE )
627
+ @handle = API.GetStdHandle( t )
628
+ else
629
+ param1 = GENERIC_READ | GENERIC_WRITE
630
+ param2 = FILE_SHARE_READ | FILE_SHARE_WRITE
631
+ @handle = API.CreateConsoleScreenBuffer( param1, param2,
632
+ CONSOLE_TEXTMODE_BUFFER )
633
+ end
634
+ end
635
+
636
+
637
+ def Display
638
+ return API.SetConsoleActiveScreenBuffer(@handle)
639
+ end
640
+
641
+ def Select(type)
642
+ return API.SetStdHandle(type,@handle)
643
+ end
644
+
645
+ def Title(title = nil)
646
+ if title
647
+ return API.SetConsoleTitle(title)
648
+ else
649
+ return API.GetConsoleTitle()
650
+ end
651
+ end
652
+
653
+ def WriteChar(s, col, row)
654
+ API.WriteConsoleOutputCharacter( @handle, s, col, row )
655
+ end
656
+
657
+ def ReadChar(size, col, row)
658
+ buffer = ' ' * size
659
+ if API.ReadConsoleOutputCharacter( @handle, buffer, size, col, row )
660
+ return buffer
661
+ else
662
+ return nil
663
+ end
664
+ end
665
+
666
+ def WriteAttr(attr, col, row)
667
+ API.WriteConsoleOutputAttribute( @handle, attr, col, row )
668
+ end
669
+
670
+ def ReadAttr(size, col, row)
671
+ x = API.ReadConsoleOutputAttribute( @handle, size, col, row )
672
+ return x.unpack('c'*size)
673
+ end
674
+
675
+
676
+ def Cursor(*t)
677
+ col, row, size, visi = t
678
+ if col
679
+ row = -1 if !row
680
+ if col < 0 or row < 0
681
+ curr_col, curr_row = API.GetConsoleScreenBufferInfo(@handle)
682
+ col = curr_col if col < 0
683
+ row = curr_row if row < 0
684
+ end
685
+ API.SetConsoleCursorPosition( @handle, col, row )
686
+ if size and visi
687
+ curr_size, curr_visi = API.GetConsoleCursorInfo( @handle )
688
+ size = curr_size if size < 0
689
+ visi = curr_visi if visi < 0
690
+ size = 1 if size < 1
691
+ size = 99 if size > 99
692
+ API.SetConsoleCursorInfo( @handle, size, visi )
693
+ end
694
+ else
695
+ d, d, curr_col, curr_row = API.GetConsoleScreenBufferInfo(@handle)
696
+ curr_size, curr_visi = API.GetConsoleCursorInfo( @handle )
697
+ return [ curr_col, curr_row, curr_size, curr_visi ]
698
+ end
699
+ end
700
+
701
+ def Write(s)
702
+ API.WriteConsole( @handle, s )
703
+ end
704
+
705
+ def ReadRect( left, top, right, bottom )
706
+ col = right - left + 1
707
+ row = bottom - top + 1
708
+ size = col * row
709
+ buffer = ' ' * size * 4
710
+ if API.ReadConsoleOutput( @handle, buffer, col, row, 0, 0,
711
+ left, top, right, bottom )
712
+ #return buffer.unpack('US'*size) # for unicode
713
+ return buffer.unpack('axS'*size) # for ascii
714
+ else
715
+ return nil
716
+ end
717
+ end
718
+
719
+ def WriteRect( buffer, left, top, right, bottom )
720
+ col = right - left + 1
721
+ row = bottom - top + 1
722
+ API.WriteConsoleOutput( @handle, buffer, col, row, 0, 0,
723
+ left, top, right, bottom )
724
+ end
725
+
726
+
727
+
728
+ def Scroll( left1, top1, right1, bottom1,
729
+ col, row, char, attr,
730
+ left2, top2, right2, bottom2 )
731
+ API.ScrollConsoleScreenBuffer(@handle, left1, top1, right1, bottom1,
732
+ col, row, char, attr,
733
+ left2, top2, right2, bottom2)
734
+ end
735
+
736
+
737
+ def MaxWindow(flag = nil)
738
+ if !flag
739
+ info = API.GetConsoleScreenBufferInfo(@handle)
740
+ return info[9], info[10]
741
+ else
742
+ return API.GetLargestConsoleWindowSize(@handle)
743
+ end
744
+ end
745
+
746
+
747
+ def Info()
748
+ return API.GetConsoleScreenBufferInfo( @handle )
749
+ end
750
+
751
+
752
+ def GetEvents()
753
+ return API.GetNumberOfConsoleInputEvents(@handle)
754
+ end
755
+
756
+
757
+ def Flush()
758
+ return API.FlushConsoleInputBuffer(@handle)
759
+ end
760
+
761
+ def InputChar(number = nil)
762
+ number = 1 unless number
763
+ buffer = ' ' * number
764
+ if API.ReadConsole(@handle, buffer, number) == number
765
+ return buffer
766
+ else
767
+ return nil
768
+ end
769
+ end
770
+
771
+
772
+ def Input()
773
+ API.ReadConsoleInput(@handle)
774
+ end
775
+
776
+
777
+ def PeekInput()
778
+ API.PeekConsoleInput(@handle)
779
+ end
780
+
781
+
782
+ def Mode(mode = nil)
783
+ if mode
784
+ mode = mode.pack('L') if mode === Array
785
+ API.SetConsoleMode(@handle, mode)
786
+ else
787
+ return API.GetConsoleMode(@handle)
788
+ end
789
+ end
790
+
791
+ def WriteInput(*t)
792
+ API.WriteConsoleInput(@handle, *t)
793
+ end
794
+
795
+ def Attr(*attr)
796
+ if attr.size > 0
797
+ API.SetConsoleTextAttribute( @handle, attr[0] )
798
+ else
799
+ info = API.GetConsoleScreenBufferInfo( @handle )
800
+ return info[4]
801
+ end
802
+ end
803
+
804
+
805
+ def Size(*t)
806
+ if t.size == 0
807
+ col, row = API.GetConsoleScreenBufferInfo(@handle )
808
+ return [col, row]
809
+ else
810
+ row = -1 if !t[1]
811
+ col = -1 if !t[0]
812
+ if col < 0 or row < 0
813
+ curr_col, curr_row = Size()
814
+ col = curr_col if col < 0
815
+ row = curr_row if row < 0
816
+ end
817
+ API.SetConsoleScreenBufferSize(@handle, row, col)
818
+ end
819
+ end
820
+
821
+ def Window(*t)
822
+ if t.size != 5
823
+ info = API.GetConsoleScreenBufferInfo( @handle )
824
+ return info[5..8]
825
+ else
826
+ API.SetConsoleWindowInfo(@handle, t[0], t[1], t[2], t[3], t[4])
827
+ end
828
+ end
829
+
830
+ def FillAttr(attr, number = 1, col = -1, row = -1)
831
+ if col < 0 or row < 0
832
+ d, d, curr_col, curr_row = API.GetConsoleScreenBufferInfo(@handle)
833
+ col = curr_col if col < 0
834
+ row = curr_row if row < 0
835
+ end
836
+ API.FillConsoleOutputAttribute(@handle, attr, number, col, row)
837
+ end
838
+
839
+ def FillChar(char, number, col = -1, row = -1)
840
+ if col < 0 or row < 0
841
+ d, d, curr_col, curr_row = API.GetConsoleScreenBufferInfo(@handle)
842
+ col = curr_col if col < 0
843
+ row = curr_row if row < 0
844
+ end
845
+ API.FillConsoleOutputCharacter(@handle, char[0], number, col, row)
846
+ end
847
+
848
+ def Cls()
849
+ attr = ATTR_NORMAL
850
+ x, y = Size()
851
+ left, top, right , bottom = Window()
852
+ vx = right - left
853
+ vy = bottom - top
854
+ FillChar(' ', x*y, 0, 0)
855
+ FillAttr(attr, x*y, 0, 0)
856
+ Cursor(0,0)
857
+ Window(1,0,0,vx,vy)
858
+ end
859
+
860
+ def Console.Free()
861
+ API.FreeConsole()
862
+ end
863
+
864
+ def Console.Alloc()
865
+ API.AllocConsole()
866
+ end
867
+
868
+ def Console.MouseButtons()
869
+ API.GetNumberOfConsoleMouseButtons()
870
+ end
871
+
872
+ def Console.InputCP(codepage=nil)
873
+ if codepage
874
+ API.SetConsoleCP(codepage)
875
+ else
876
+ return API.GetConsoleCP()
877
+ end
878
+ end
879
+
880
+ def Console.OutputCP(codepage=nil)
881
+ if codepage
882
+ API.SetConsoleOutputCP(codepage)
883
+ else
884
+ return API.GetConsoleOutputCP()
885
+ end
886
+ end
887
+
888
+ def Console.GenerateCtrlEvent( type=nil, pid=nil )
889
+ type = API.constant('CTRL_C_EVENT') if type == nil
890
+ pid = 0 if pid == nil
891
+ API.GenerateConsoleCtrlEvent(type, pid)
892
+ end
893
+
894
+ end
895
+ end
896
+
897
+
898
+
899
+
900
+
901
+ FG_BLACK = 0
902
+ FG_BLUE = Win32::Console::API.constant("FOREGROUND_BLUE")
903
+ FG_LIGHTBLUE = Win32::Console::API.constant("FOREGROUND_BLUE")|
904
+ Win32::Console::API.constant("FOREGROUND_INTENSITY")
905
+ FG_RED = Win32::Console::API.constant("FOREGROUND_RED")
906
+ FG_LIGHTRED = Win32::Console::API.constant("FOREGROUND_RED")|
907
+ Win32::Console::API.constant("FOREGROUND_INTENSITY")
908
+ FG_GREEN = Win32::Console::API.constant("FOREGROUND_GREEN")
909
+ FG_LIGHTGREEN = Win32::Console::API.constant("FOREGROUND_GREEN")|
910
+ Win32::Console::API.constant("FOREGROUND_INTENSITY")
911
+ FG_MAGENTA = Win32::Console::API.constant("FOREGROUND_RED")|
912
+ Win32::Console::API.constant("FOREGROUND_BLUE")
913
+ FG_LIGHTMAGENTA = Win32::Console::API.constant("FOREGROUND_RED")|
914
+ Win32::Console::API.constant("FOREGROUND_BLUE")|
915
+ Win32::Console::API.constant("FOREGROUND_INTENSITY")
916
+ FG_CYAN = Win32::Console::API.constant("FOREGROUND_GREEN")|
917
+ Win32::Console::API.constant("FOREGROUND_BLUE")
918
+ FG_LIGHTCYAN = Win32::Console::API.constant("FOREGROUND_GREEN")|
919
+ Win32::Console::API.constant("FOREGROUND_BLUE")|
920
+ Win32::Console::API.constant("FOREGROUND_INTENSITY")
921
+ FG_BROWN = Win32::Console::API.constant("FOREGROUND_RED")|
922
+ Win32::Console::API.constant("FOREGROUND_GREEN")
923
+ FG_YELLOW = Win32::Console::API.constant("FOREGROUND_RED")|
924
+ Win32::Console::API.constant("FOREGROUND_GREEN")|
925
+ Win32::Console::API.constant("FOREGROUND_INTENSITY")
926
+ FG_GRAY = Win32::Console::API.constant("FOREGROUND_RED")|
927
+ Win32::Console::API.constant("FOREGROUND_GREEN")|
928
+ Win32::Console::API.constant("FOREGROUND_BLUE")
929
+ FG_WHITE = Win32::Console::API.constant("FOREGROUND_RED")|
930
+ Win32::Console::API.constant("FOREGROUND_GREEN")|
931
+ Win32::Console::API.constant("FOREGROUND_BLUE")|
932
+ Win32::Console::API.constant("FOREGROUND_INTENSITY")
933
+
934
+ BG_BLACK = 0
935
+ BG_BLUE = Win32::Console::API.constant("BACKGROUND_BLUE")
936
+ BG_LIGHTBLUE = Win32::Console::API.constant("BACKGROUND_BLUE")|
937
+ Win32::Console::API.constant("BACKGROUND_INTENSITY")
938
+ BG_RED = Win32::Console::API.constant("BACKGROUND_RED")
939
+ BG_LIGHTRED = Win32::Console::API.constant("BACKGROUND_RED")|
940
+ Win32::Console::API.constant("BACKGROUND_INTENSITY")
941
+ BG_GREEN = Win32::Console::API.constant("BACKGROUND_GREEN")
942
+ BG_LIGHTGREEN = Win32::Console::API.constant("BACKGROUND_GREEN")|
943
+ Win32::Console::API.constant("BACKGROUND_INTENSITY")
944
+ BG_MAGENTA = Win32::Console::API.constant("BACKGROUND_RED")|
945
+ Win32::Console::API.constant("BACKGROUND_BLUE")
946
+ BG_LIGHTMAGENTA = Win32::Console::API.constant("BACKGROUND_RED")|
947
+ Win32::Console::API.constant("BACKGROUND_BLUE")|
948
+ Win32::Console::API.constant("BACKGROUND_INTENSITY")
949
+ BG_CYAN = Win32::Console::API.constant("BACKGROUND_GREEN")|
950
+ Win32::Console::API.constant("BACKGROUND_BLUE")
951
+ BG_LIGHTCYAN = Win32::Console::API.constant("BACKGROUND_GREEN")|
952
+ Win32::Console::API.constant("BACKGROUND_BLUE")|
953
+ Win32::Console::API.constant("BACKGROUND_INTENSITY")
954
+ BG_BROWN = Win32::Console::API.constant("BACKGROUND_RED")|
955
+ Win32::Console::API.constant("BACKGROUND_GREEN")
956
+ BG_YELLOW = Win32::Console::API.constant("BACKGROUND_RED")|
957
+ Win32::Console::API.constant("BACKGROUND_GREEN")|
958
+ Win32::Console::API.constant("BACKGROUND_INTENSITY")
959
+ BG_GRAY = Win32::Console::API.constant("BACKGROUND_RED")|
960
+ Win32::Console::API.constant("BACKGROUND_GREEN")|
961
+ Win32::Console::API.constant("BACKGROUND_BLUE")
962
+ BG_WHITE = Win32::Console::API.constant("BACKGROUND_RED")|
963
+ Win32::Console::API.constant("BACKGROUND_GREEN")|
964
+ Win32::Console::API.constant("BACKGROUND_BLUE")|
965
+ Win32::Console::API.constant("BACKGROUND_INTENSITY")
966
+
967
+ ATTR_NORMAL = FG_GRAY | BG_BLACK
968
+ ATTR_INVERSE = FG_BLACK | BG_GRAY
969
+
970
+ include Win32::Console::Constants