Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(493)

Unified Diff: third_party/colorama/win32.py

Issue 8365001: Include initial use of colorama (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/colorama/initialise.py ('k') | third_party/colorama/winterm.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/colorama/win32.py
diff --git a/third_party/colorama/win32.py b/third_party/colorama/win32.py
new file mode 100644
index 0000000000000000000000000000000000000000..591176131f56c4d29c179d830b9b017f099d3c06
--- /dev/null
+++ b/third_party/colorama/win32.py
@@ -0,0 +1,109 @@
+
+# from winbase.h
+STDOUT = -11
+STDERR = -12
+
+try:
+ from ctypes import windll
+except ImportError:
+ windll = None
+ SetConsoleTextAttribute = lambda *_: None
+else:
+ from ctypes import (
+ byref, Structure, c_char, c_short, c_uint32, c_ushort
+ )
+
+ handles = {
+ STDOUT: windll.kernel32.GetStdHandle(STDOUT),
+ STDERR: windll.kernel32.GetStdHandle(STDERR),
+ }
+
+ SHORT = c_short
+ WORD = c_ushort
+ DWORD = c_uint32
+ TCHAR = c_char
+
+ class COORD(Structure):
+ """struct in wincon.h"""
+ _fields_ = [
+ ('X', SHORT),
+ ('Y', SHORT),
+ ]
+
+ class SMALL_RECT(Structure):
+ """struct in wincon.h."""
+ _fields_ = [
+ ("Left", SHORT),
+ ("Top", SHORT),
+ ("Right", SHORT),
+ ("Bottom", SHORT),
+ ]
+
+ class CONSOLE_SCREEN_BUFFER_INFO(Structure):
+ """struct in wincon.h."""
+ _fields_ = [
+ ("dwSize", COORD),
+ ("dwCursorPosition", COORD),
+ ("wAttributes", WORD),
+ ("srWindow", SMALL_RECT),
+ ("dwMaximumWindowSize", COORD),
+ ]
+ def __str__(self):
+ return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % (
+ self.dwSize.Y, self.dwSize.X
+ , self.dwCursorPosition.Y, self.dwCursorPosition.X
+ , self.wAttributes
+ , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right
+ , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X
+ )
+
+ def GetConsoleScreenBufferInfo(stream_id=STDOUT):
+ handle = handles[stream_id]
+ csbi = CONSOLE_SCREEN_BUFFER_INFO()
+ success = windll.kernel32.GetConsoleScreenBufferInfo(
+ handle, byref(csbi))
+ return csbi
+
+
+ def SetConsoleTextAttribute(stream_id, attrs):
+ handle = handles[stream_id]
+ return windll.kernel32.SetConsoleTextAttribute(handle, attrs)
+
+
+ def SetConsoleCursorPosition(stream_id, position):
+ position = COORD(*position)
+ # If the position is out of range, do nothing.
+ if position.Y <= 0 or position.X <= 0:
+ return
+ # Adjust for Windows' SetConsoleCursorPosition:
+ # 1. being 0-based, while ANSI is 1-based.
+ # 2. expecting (x,y), while ANSI uses (y,x).
+ adjusted_position = COORD(position.Y - 1, position.X - 1)
+ # Adjust for viewport's scroll position
+ sr = GetConsoleScreenBufferInfo(STDOUT).srWindow
+ adjusted_position.Y += sr.Top
+ adjusted_position.X += sr.Left
+ # Resume normal processing
+ handle = handles[stream_id]
+ return windll.kernel32.SetConsoleCursorPosition(handle, adjusted_position)
+
+ def FillConsoleOutputCharacter(stream_id, char, length, start):
+ handle = handles[stream_id]
+ char = TCHAR(char)
+ length = DWORD(length)
+ num_written = DWORD(0)
+ # Note that this is hard-coded for ANSI (vs wide) bytes.
+ success = windll.kernel32.FillConsoleOutputCharacterA(
+ handle, char, length, start, byref(num_written))
+ return num_written.value
+
+ def FillConsoleOutputAttribute(stream_id, attr, length, start):
+ ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )'''
+ handle = handles[stream_id]
+ attribute = WORD(attr)
+ length = DWORD(length)
+ num_written = DWORD(0)
+ # Note that this is hard-coded for ANSI (vs wide) bytes.
+ return windll.kernel32.FillConsoleOutputAttribute(
+ handle, attribute, length, start, byref(num_written))
+
« no previous file with comments | « third_party/colorama/initialise.py ('k') | third_party/colorama/winterm.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698