[pypy-commit] pypy winconsoleio: Implemented _testconsole. Fixed translation issues.

andrewjlawrence pypy.commits at gmail.com
Sat Jun 8 16:56:32 EDT 2019


Author: andrewjlawrence
Branch: winconsoleio
Changeset: r96778:fb78fa19bcc4
Date: 2019-06-08 21:55 +0100
http://bitbucket.org/pypy/pypy/changeset/fb78fa19bcc4/

Log:	Implemented _testconsole. Fixed translation issues.

diff --git a/lib_pypy/_pypy_winbase_build.py b/lib_pypy/_pypy_winbase_build.py
--- a/lib_pypy/_pypy_winbase_build.py
+++ b/lib_pypy/_pypy_winbase_build.py
@@ -153,8 +153,6 @@
 BOOL WINAPI GetQueuedCompletionStatus(HANDLE, LPDWORD, ULONG**, LPOVERLAPPED*, DWORD);
 HANDLE WINAPI CreateIoCompletionPort(HANDLE, HANDLE, ULONG_PTR, DWORD);
 
-
-
 #define WT_EXECUTEINWAITTHREAD 0x00000004
 #define WT_EXECUTEONLYONCE 0x00000008
 
@@ -162,6 +160,55 @@
 LPVOID HeapAlloc(HANDLE, DWORD, SIZE_T);
 BOOL HeapFree(HANDLE, DWORD, LPVOID);
 
+typedef struct _COORD {
+  SHORT X;
+  SHORT Y;
+} COORD, *PCOORD;
+
+typedef struct _FOCUS_EVENT_RECORD {
+  BOOL bSetFocus;
+} FOCUS_EVENT_RECORD;
+
+typedef struct _WINDOW_BUFFER_SIZE_RECORD {
+  COORD dwSize;
+} WINDOW_BUFFER_SIZE_RECORD;
+
+typedef struct _KEY_EVENT_RECORD {
+  BOOL  bKeyDown;
+  WORD  wRepeatCount;
+  WORD  wVirtualKeyCode;
+  WORD  wVirtualScanCode;
+  union {
+    WCHAR UnicodeChar;
+    CHAR  AsciiChar;
+  } uChar;
+  DWORD dwControlKeyState;
+} KEY_EVENT_RECORD;
+
+typedef struct _MENU_EVENT_RECORD {
+  UINT dwCommandId;
+} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
+
+typedef struct _MOUSE_EVENT_RECORD {
+  COORD dwMousePosition;
+  DWORD dwButtonState;
+  DWORD dwControlKeyState;
+  DWORD dwEventFlags;
+} MOUSE_EVENT_RECORD;
+
+typedef struct _INPUT_RECORD {
+  WORD  EventType;
+  union {
+    KEY_EVENT_RECORD          KeyEvent;
+    MOUSE_EVENT_RECORD        MouseEvent;
+    WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
+    MENU_EVENT_RECORD         MenuEvent;
+    FOCUS_EVENT_RECORD        FocusEvent;
+  } Event;
+} INPUT_RECORD;
+
+BOOL WINAPI WriteConsoleInputW(HANDLE, const INPUT_RECORD*, DWORD, LPDWORD);
+
 """)
 
 # -------------------- Win Sock 2 ----------------------
diff --git a/lib_pypy/_pypy_winbase_cffi.py b/lib_pypy/_pypy_winbase_cffi.py
--- a/lib_pypy/_pypy_winbase_cffi.py
+++ b/lib_pypy/_pypy_winbase_cffi.py
@@ -3,8 +3,8 @@
 
 ffi = _cffi_backend.FFI('_pypy_winbase_cffi',
     _version = 0x2601,
-    _types = b'\x00\x00\x05\x0D\x00\x01\x63\x03\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x09\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x19\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x7F\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x01\x59\x03\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x03\x00\x01\x52\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x63\x03\x00\x00\x2B\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x2B\x11\x00\x00\x2B\x11\x00\x01\x5E\x03\x00\x01\x53\x03\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x03\x00\x00\x37\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x37\x11\x00\x00\x15\x11\x00\x01\x49\x03\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x26\x11\x00\x00\x25\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x26\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x19\x11\x00\x00\x07\x01\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x01\x5F\x03\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x26\x11\x00\x01\x41\x03\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x62\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x0A\x01\x00\x00\x26\x11\x00\x00\x67\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x25\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x25\x11\x00\x00\x25\x03\x00\x00\x26\x03\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x67\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x37\x11\x00\x00\x0A\x01\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x01\x7F\x03\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\xEE\x03\x00\x00\x07\x01\x00\x01\x62\x03\x00\x00\x19\x11\x00\x00\x05\x03\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\xBF\x11\x00\x00\xBF\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\xBF\x11\x00\x00\xBF\x11\x00\x00\x33\x11\x00\x00\x34\x11\x00\x00\x02\x0F\x00\x00\x11\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x74\x0D\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x02\x0D\x00\x00\x0A\x01\x00\x00\x37\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x02\x0D\x00\x00\x15\x11\x00\x00\xBF\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x02\x0D\x00\x00\x02\x0F\x00\x00\xE9\x0D\x00\x00\x06\x01\x00\x00\x00\x0F\x00\x00\xE9\x0D\x00\x00\x00\x0F\x00\x00\xE9\x0D\x00\x00\x10\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x01\x58\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x01\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\xFD\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xEE\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x01\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\xFD\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x01\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\xFD\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\xBF\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\xFD\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x01\x06\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\xFD\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x01\x7F\x0D\x00\x00\x08\x01\x00\x00\x00\x0F\x00\x01\x7F\x0D\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x00\x0F\x00\x01\x7F\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x01\x7F\x0D\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x0C\x09\x00\x01\x4F\x03\x00\x00\x13\x09\x00\x01\x51\x03\x00\x00\x14\x09\x00\x00\x0D\x09\x00\x00\x09\x09\x00\x01\x55\x03\x00\x00\x0E\x09\x00\x01\x57\x03\x00\x00\x0A\x09\x00\x00\x0F\x09\x00\x00\x15\x09\x00\x01\x5D\x03\x00\x01\x5C\x03\x00\x00\x17\x09\x00\x00\x16\x09\x00\x00\x0B\x09\x00\x00\x10\x09\x00\x01\x61\x03\x00\x00\x11\x09\x00\x00\x12\x09\x00\x00\x02\x01\x00\x01\x63\x05\x00\x00\x00\x0E\x00\x01\x63\x05\x00\x00\x00\x08\x00\x00\x51\x03\x00\x00\x57\x03\x00\x00\xA4\x03\x00\x00\x05\x01\x00\x00\x01\x09\x00\x00\x04\x09\x00\x00\x07\x09\x00\x00\x08\x09\x00\x00\x00\x09\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x05\x09\x00\x00\x06\x09\x00\x01\x76\x03\x00\x00\x04\x01\x00\x01\x76\x05\x00\x00\x00\x10\x00\x01\x76\x05\x00\x00\x00\x08\x00\x00\x02\x05\x00\x00\x00\x07\x00\x00\xE9\x05\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\xEE\x05\x00\x00\x01\x00',
-    _globals = (b'\x00\x00\x44\x23CancelIo',0,b'\x00\x00\x47\x23CancelIoEx',0,b'\x00\x00\x44\x23CloseHandle',0,b'\x00\x00\x47\x23ConnectNamedPipe',0,b'\x00\x00\xFC\x23CreateEventA',0,b'\x00\x01\x02\x23CreateEventW',0,b'\x00\x01\x08\x23CreateFileA',0,b'\x00\x01\x35\x23CreateFileW',0,b'\x00\x01\x23\x23CreateIoCompletionPort',0,b'\x00\x01\x11\x23CreateNamedPipeA',0,b'\x00\x01\x2B\x23CreateNamedPipeW',0,b'\x00\x00\x36\x23CreatePipe',0,b'\x00\x00\x2A\x23CreateProcessA',0,b'\x00\x00\xC5\x23CreateProcessW',0,b'\x00\x00\xAE\x23DuplicateHandle',0,b'\x00\x01\x3E\x23ExitProcess',0,b'\x00\x01\x29\x23GetCurrentProcess',0,b'\x00\x00\x76\x23GetExitCodeProcess',0,b'\x00\x00\xE6\x23GetLastError',0,b'\x00\x00\xE1\x23GetModuleFileNameW',0,b'\x00\x00\x4B\x23GetOverlappedResult',0,b'\x00\x00\xFA\x23GetProcessHeap',0,b'\x00\x00\x7A\x23GetQueuedCompletionStatus',0,b'\x00\x01\x20\x23GetStdHandle',0,b'\x00\x00\xE6\x23GetVersion',0,b'\x00\x00\xF5\x23HeapAlloc',0,b'\x00\x00\x1C\x23HeapFree',0,b'\xFF\xFF\xFF\x1FMAX_PROTOCOL_CHAIN',7,b'\x00\x00\xF0\x23OpenProcess',0,b'\x00\x00\x9C\x23PeekNamedPipe',0,b'\x00\x00\x87\x23PostQueuedCompletionStatus',0,b'\x00\x00\x21\x23ReadFile',0,b'\x00\x00\x3C\x23RegisterWaitForSingleObject',0,b'\xFF\xFF\xFF\x1FSEM_FAILCRITICALERRORS',1,b'\xFF\xFF\xFF\x1FSEM_NOALIGNMENTFAULTEXCEPT',4,b'\xFF\xFF\xFF\x1FSEM_NOGPFAULTERRORBOX',2,b'\xFF\xFF\xFF\x1FSEM_NOOPENFILEERRORBOX',32768,b'\x00\x00\xD4\x23SetErrorMode',0,b'\x00\x00\x44\x23SetEvent',0,b'\x00\x01\x46\x23SetLastError',0,b'\x00\x00\x81\x23SetNamedPipeHandleState',0,b'\x00\x00\x72\x23TerminateProcess',0,b'\x00\x00\x44\x23UnregisterWait',0,b'\x00\x00\x98\x23UnregisterWaitEx',0,b'\x00\x00\x8D\x23WSAIoctl',0,b'\xFF\xFF\xFF\x1FWSAPROTOCOL_LEN',255,b'\x00\x00\x60\x23WSARecv',0,b'\x00\x00\x69\x23WSASend',0,b'\x00\x00\xBE\x23WSAStringToAddressW',0,b'\xFF\xFF\xFF\x1FWT_EXECUTEINWAITTHREAD',4,b'\xFF\xFF\xFF\x1FWT_EXECUTEONLYONCE',8,b'\x00\x00\xD7\x23WaitForMultipleObjects',0,b'\x00\x00\xDD\x23WaitForSingleObject',0,b'\x00\x00\x00\x23WaitNamedPipeA',0,b'\x00\x00\xB7\x23WriteFile',0,b'\x00\x00\xD1\x23_get_osfhandle',0,b'\x00\x00\x28\x23_getch',0,b'\x00\x00\x28\x23_getche',0,b'\x00\x00\xEB\x23_getwch',0,b'\x00\x00\xEB\x23_getwche',0,b'\x00\x00\x28\x23_kbhit',0,b'\x00\x00\x0B\x23_locking',0,b'\x00\x00\x10\x23_open_osfhandle',0,b'\x00\x00\x04\x23_putch',0,b'\x00\x00\xED\x23_putwch',0,b'\x00\x00\x07\x23_setmode',0,b'\x00\x00\x04\x23_ungetch',0,b'\x00\x00\xE8\x23_ungetwch',0,b'\x00\x00\x17\x23bind',0,b'\x00\x00\x14\x23closesocket',0,b'\x00\x00\xE8\x23htons',0,b'\x00\x01\x1B\x23socket',0),
-    _struct_unions = ((b'\x00\x00\x01\x70\x00\x00\x00\x03$1',b'\x00\x01\x6C\x11DUMMYSTRUCTNAME',b'\x00\x00\x15\x11Pointer'),(b'\x00\x00\x01\x6C\x00\x00\x00\x02$2',b'\x00\x00\x02\x11Offset',b'\x00\x00\x02\x11OffsetHigh'),(b'\x00\x00\x01\x71\x00\x00\x00\x03$3',b'\x00\x01\x77\x11Byte',b'\x00\x01\x7D\x11Word'),(b'\x00\x00\x01\x72\x00\x00\x00\x01$4',b'\x00\x01\x6D\x11',b'\x00\x00\x02\x11Value'),(b'\x00\x00\x01\x6D\x00\x00\x00\x02$5',b'\x00\x00\x02\x13\x00\x00\x00\x1CZone',b'\x00\x00\x02\x13\x00\x00\x00\x04Level'),(b'\x00\x00\x01\x73\x00\x00\x00\x03$6',b'\x00\x00\x02\x11sin6_scope_id',b'\x00\x01\x57\x11sin6_scope_struct'),(b'\x00\x00\x01\x74\x00\x00\x00\x03$7',b'\x00\x01\x6E\x11S_un_b',b'\x00\x01\x6F\x11S_un_w',b'\x00\x00\x02\x11S_addr'),(b'\x00\x00\x01\x6E\x00\x00\x00\x02$8',b'\x00\x01\x76\x11s_b1',b'\x00\x01\x76\x11s_b2',b'\x00\x01\x76\x11s_b3',b'\x00\x01\x76\x11s_b4'),(b'\x00\x00\x01\x6F\x00\x00\x00\x02$9',b'\x00\x00\xE9\x11s_w1',b'\x00\x00\xE9\x11s_w2'),(b'\x00\x00\x01\x53\x00\x00\x00\x02$PROCESS_INFORMATION',b'\x00\x00\x15\x11hProcess',b'\x00\x00\x15\x11hThread',b'\x00\x00\x02\x11dwProcessId',b'\x00\x00\x02\x11dwThreadId'),(b'\x00\x00\x01\x57\x00\x00\x00\x00$SCOPE_ID',b'\x00\x01\x72\x11'),(b'\x00\x00\x01\x5E\x00\x00\x00\x02$STARTUPINFO',b'\x00\x00\x02\x11cb',b'\x00\x00\x2B\x11lpReserved',b'\x00\x00\x2B\x11lpDesktop',b'\x00\x00\x2B\x11lpTitle',b'\x00\x00\x02\x11dwX',b'\x00\x00\x02\x11dwY',b'\x00\x00\x02\x11dwXSize',b'\x00\x00\x02\x11dwYSize',b'\x00\x00\x02\x11dwXCountChars',b'\x00\x00\x02\x11dwYCountChars',b'\x00\x00\x02\x11dwFillAttribute',b'\x00\x00\x02\x11dwFlags',b'\x00\x00\xE9\x11wShowWindow',b'\x00\x00\xE9\x11cbReserved2',b'\x00\x01\x75\x11lpReserved2',b'\x00\x00\x15\x11hStdInput',b'\x00\x00\x15\x11hStdOutput',b'\x00\x00\x15\x11hStdError'),(b'\x00\x00\x01\x4D\x00\x00\x00\x02_GUID',b'\x00\x00\x02\x11Data1',b'\x00\x00\xE9\x11Data2',b'\x00\x00\xE9\x11Data3',b'\x00\x01\x79\x11Data4'),(b'\x00\x00\x01\x52\x00\x00\x00\x02_OVERLAPPED',b'\x00\x00\x02\x11Internal',b'\x00\x00\x02\x11InternalHigh',b'\x00\x01\x70\x11DUMMYUNIONNAME',b'\x00\x00\x15\x11hEvent'),(b'\x00\x00\x01\x55\x00\x00\x00\x02_PostCallbackData',b'\x00\x00\x15\x11hCompletionPort',b'\x00\x00\x26\x11Overlapped'),(b'\x00\x00\x01\x58\x00\x00\x00\x02_SECURITY_ATTRIBUTES',b'\x00\x00\x02\x11nLength',b'\x00\x00\x15\x11lpSecurityDescriptor',b'\x00\x00\x05\x11bInheritHandle'),(b'\x00\x00\x01\x5F\x00\x00\x00\x02_WSABUF',b'\x00\x00\x02\x11len',b'\x00\x00\x2B\x11buf'),(b'\x00\x00\x01\x61\x00\x00\x00\x02_WSAPROTOCOLCHAIN',b'\x00\x00\x05\x11ChainLen',b'\x00\x01\x7B\x11ChainEntries'),(b'\x00\x00\x01\x62\x00\x00\x00\x02_WSAPROTOCOL_INFOW',b'\x00\x00\x02\x11dwServiceFlags1',b'\x00\x00\x02\x11dwServiceFlags2',b'\x00\x00\x02\x11dwServiceFlags3',b'\x00\x00\x02\x11dwServiceFlags4',b'\x00\x00\x02\x11dwProviderFlags',b'\x00\x01\x4D\x11ProviderId',b'\x00\x00\x02\x11dwCatalogEntryId',b'\x00\x01\x61\x11ProtocolChain',b'\x00\x00\x05\x11iVersion',b'\x00\x00\x05\x11iAddressFamily',b'\x00\x00\x05\x11iMaxSockAddr',b'\x00\x00\x05\x11iMinSockAddr',b'\x00\x00\x05\x11iSocketType',b'\x00\x00\x05\x11iProtocol',b'\x00\x00\x05\x11iProtocolMaxOffset',b'\x00\x00\x05\x11iNetworkByteOrder',b'\x00\x00\x05\x11iSecurityScheme',b'\x00\x00\x02\x11dwMessageSize',b'\x00\x00\x02\x11dwProviderReserved',b'\x00\x01\x80\x11szProtocol'),(b'\x00\x00\x01\x4F\x00\x00\x00\x02in6_addr',b'\x00\x01\x71\x11u'),(b'\x00\x00\x01\x51\x00\x00\x00\x02in_addr',b'\x00\x01\x74\x11S_un'),(b'\x00\x00\x01\x59\x00\x00\x00\x02sockaddr',b'\x00\x00\xE9\x11sa_family',b'\x00\x01\x64\x11sa_data'),(b'\x00\x00\x01\x5D\x00\x00\x00\x02sockaddr_in',b'\x00\x01\x6B\x11sin_family',b'\x00\x00\xE9\x11sin_port',b'\x00\x01\x51\x11sin_addr',b'\x00\x01\x66\x11sin_zero'),(b'\x00\x00\x01\x5C\x00\x00\x00\x00sockaddr_in6',b'\x00\x00\xE9\x11sin6_family',b'\x00\x00\xE9\x11sin6_port',b'\x00\x00\x02\x11sin6_flowinfo',b'\x00\x01\x4F\x11sin6_addr',b'\x00\x01\x73\x11')),
-    _typenames = (b'\x00\x00\x00\xE9ADDRESS_FAMILY',b'\x00\x00\x01\x6AAcceptExPtr',b'\x00\x00\x01\x69ConnectExPtr',b'\x00\x00\x01\x68DisconnectExPtr',b'\x00\x00\x01\x4DGUID',b'\x00\x00\x01\x4FIN6_ADDR',b'\x00\x00\x01\x51INADDR',b'\x00\x00\x01\x68LPFN_DISCONNECTEX',b'\x00\x00\x01\x4ELPIN6_ADDR',b'\x00\x00\x00\x26LPOVERLAPPED',b'\x00\x00\x00\x67LPOVERLAPPED_COMPLETION_ROUTINE',b'\x00\x00\x00\x34LPPROCESS_INFORMATION',b'\x00\x00\x01\x54LPPostCallbackData',b'\x00\x00\x00\xFDLPSECURITY_ATTRIBUTES',b'\x00\x00\x00\x19LPSOCKADDR',b'\x00\x00\x01\x5ALPSOCKADDR_IN',b'\x00\x00\x01\x5BLPSOCKADDR_IN6_LH',b'\x00\x00\x00\x33LPSTARTUPINFO',b'\x00\x00\x00\x62LPWSABUF',b'\x00\x00\x01\x60LPWSAPROTOCOLCHAIN',b'\x00\x00\x00\xC1LPWSAPROTOCOL_INFOW',b'\x00\x00\x01\x52OVERLAPPED',b'\x00\x00\x01\x4EPIN6_ADDR',b'\x00\x00\x01\x50PINADDR',b'\x00\x00\x01\x53PROCESS_INFORMATION',b'\x00\x00\x01\x56PSCOPE_ID',b'\x00\x00\x00\xFDPSECURITY_ATTRIBUTES',b'\x00\x00\x00\x19PSOCKADDR',b'\x00\x00\x01\x5APSOCKADDR_IN',b'\x00\x00\x01\x5BPSOCKADDR_IN6_LH',b'\x00\x00\x01\x55PostCallbackData',b'\x00\x00\x01\x57SCOPE_ID',b'\x00\x00\x01\x58SECURITY_ATTRIBUTES',b'\x00\x00\x01\x59SOCKADDR',b'\x00\x00\x01\x5DSOCKADDR_IN',b'\x00\x00\x01\x5CSOCKADDR_IN6_LH',b'\x00\x00\x00\x15SOCKET',b'\x00\x00\x01\x5ESTARTUPINFO',b'\x00\x00\x00\x3FWAITORTIMERCALLBACK',b'\x00\x00\x01\x5FWSABUF',b'\x00\x00\x01\x61WSAPROTOCOLCHAIN',b'\x00\x00\x01\x62WSAPROTOCOL_INFOW',b'\x00\x00\x00\xE9wint_t'),
+    _types = b'\x00\x00\x05\x0D\x00\x01\x72\x03\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x09\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x19\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x90\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x01\x67\x03\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x03\x00\x01\x60\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x72\x03\x00\x00\x2B\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x2B\x11\x00\x00\x2B\x11\x00\x01\x6C\x03\x00\x01\x61\x03\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x03\x00\x00\x37\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x37\x11\x00\x00\x15\x11\x00\x01\x4F\x03\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x01\x5B\x03\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x26\x11\x00\x00\x25\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x26\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x19\x11\x00\x00\x07\x01\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x01\x6E\x03\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x26\x11\x00\x01\x47\x03\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x68\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x0A\x01\x00\x00\x26\x11\x00\x00\x6D\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x25\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x25\x11\x00\x00\x25\x03\x00\x00\x26\x03\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x6D\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x25\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x37\x11\x00\x00\x0A\x01\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\x15\x11\x00\x01\x90\x03\x00\x00\x0A\x01\x00\x00\x25\x11\x00\x00\x26\x11\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\xF4\x03\x00\x00\x07\x01\x00\x01\x71\x03\x00\x00\x19\x11\x00\x00\x05\x03\x00\x00\x02\x0F\x00\x00\x05\x0D\x00\x00\xC5\x11\x00\x00\xC5\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\xC5\x11\x00\x00\xC5\x11\x00\x00\x33\x11\x00\x00\x34\x11\x00\x00\x02\x0F\x00\x00\x11\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x7A\x0D\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x02\x0D\x00\x00\x0A\x01\x00\x00\x37\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x02\x0D\x00\x00\x15\x11\x00\x00\xC5\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x02\x0D\x00\x00\x02\x0F\x00\x00\xEF\x0D\x00\x00\x06\x01\x00\x00\x00\x0F\x00\x00\xEF\x0D\x00\x00\x00\x0F\x00\x00\xEF\x0D\x00\x00\x10\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x01\x66\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x01\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x01\x03\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xF4\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x01\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x01\x03\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x01\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x01\x03\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\xC5\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x01\x03\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x01\x0C\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x01\x03\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x01\x90\x0D\x00\x00\x08\x01\x00\x00\x00\x0F\x00\x01\x90\x0D\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x00\x0F\x00\x01\x90\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x01\x90\x0D\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x01\x54\x03\x00\x00\x0E\x09\x00\x00\x0F\x09\x00\x00\x10\x09\x00\x01\x58\x03\x00\x00\x1C\x09\x00\x01\x5A\x03\x00\x00\x1D\x09\x00\x00\x11\x09\x00\x00\x12\x09\x00\x01\x5E\x03\x00\x00\x13\x09\x00\x00\x14\x09\x00\x00\x15\x09\x00\x00\x0B\x09\x00\x01\x63\x03\x00\x00\x16\x09\x00\x01\x65\x03\x00\x00\x0C\x09\x00\x00\x17\x09\x00\x00\x1E\x09\x00\x01\x6B\x03\x00\x01\x6A\x03\x00\x00\x20\x09\x00\x00\x1F\x09\x00\x00\x0D\x09\x00\x00\x18\x09\x00\x00\x19\x09\x00\x01\x70\x03\x00\x00\x1A\x09\x00\x00\x1B\x09\x00\x00\x02\x01\x00\x01\x72\x05\x00\x00\x00\x0E\x00\x01\x72\x05\x00\x00\x00\x08\x00\x00\x57\x03\x00\x00\x5D\x03\x00\x00\xAA\x03\x00\x00\x05\x01\x00\x00\x01\x09\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x08\x09\x00\x00\x00\x09\x00\x00\x04\x09\x00\x00\x05\x09\x00\x00\x06\x09\x00\x00\x07\x09\x00\x00\x09\x09\x00\x00\x0A\x09\x00\x01\x87\x03\x00\x00\x04\x01\x00\x01\x87\x05\x00\x00\x00\x10\x00\x01\x87\x05\x00\x00\x00\x08\x00\x00\x02\x05\x00\x00\x00\x07\x00\x00\xEF\x05\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\xF4\x05\x00\x00\x01\x00',
+    _globals = (b'\x00\x00\x44\x23CancelIo',0,b'\x00\x00\x4D\x23CancelIoEx',0,b'\x00\x00\x44\x23CloseHandle',0,b'\x00\x00\x4D\x23ConnectNamedPipe',0,b'\x00\x01\x02\x23CreateEventA',0,b'\x00\x01\x08\x23CreateEventW',0,b'\x00\x01\x0E\x23CreateFileA',0,b'\x00\x01\x3B\x23CreateFileW',0,b'\x00\x01\x29\x23CreateIoCompletionPort',0,b'\x00\x01\x17\x23CreateNamedPipeA',0,b'\x00\x01\x31\x23CreateNamedPipeW',0,b'\x00\x00\x36\x23CreatePipe',0,b'\x00\x00\x2A\x23CreateProcessA',0,b'\x00\x00\xCB\x23CreateProcessW',0,b'\x00\x00\xB4\x23DuplicateHandle',0,b'\x00\x01\x44\x23ExitProcess',0,b'\x00\x01\x2F\x23GetCurrentProcess',0,b'\x00\x00\x7C\x23GetExitCodeProcess',0,b'\x00\x00\xEC\x23GetLastError',0,b'\x00\x00\xE7\x23GetModuleFileNameW',0,b'\x00\x00\x51\x23GetOverlappedResult',0,b'\x00\x01\x00\x23GetProcessHeap',0,b'\x00\x00\x80\x23GetQueuedCompletionStatus',0,b'\x00\x01\x26\x23GetStdHandle',0,b'\x00\x00\xEC\x23GetVersion',0,b'\x00\x00\xFB\x23HeapAlloc',0,b'\x00\x00\x1C\x23HeapFree',0,b'\xFF\xFF\xFF\x1FMAX_PROTOCOL_CHAIN',7,b'\x00\x00\xF6\x23OpenProcess',0,b'\x00\x00\xA2\x23PeekNamedPipe',0,b'\x00\x00\x8D\x23PostQueuedCompletionStatus',0,b'\x00\x00\x21\x23ReadFile',0,b'\x00\x00\x3C\x23RegisterWaitForSingleObject',0,b'\xFF\xFF\xFF\x1FSEM_FAILCRITICALERRORS',1,b'\xFF\xFF\xFF\x1FSEM_NOALIGNMENTFAULTEXCEPT',4,b'\xFF\xFF\xFF\x1FSEM_NOGPFAULTERRORBOX',2,b'\xFF\xFF\xFF\x1FSEM_NOOPENFILEERRORBOX',32768,b'\x00\x00\xDA\x23SetErrorMode',0,b'\x00\x00\x44\x23SetEvent',0,b'\x00\x01\x4C\x23SetLastError',0,b'\x00\x00\x87\x23SetNamedPipeHandleState',0,b'\x00\x00\x78\x23TerminateProcess',0,b'\x00\x00\x44\x23UnregisterWait',0,b'\x00\x00\x9E\x23UnregisterWaitEx',0,b'\x00\x00\x93\x23WSAIoctl',0,b'\xFF\xFF\xFF\x1FWSAPROTOCOL_LEN',255,b'\x00\x00\x66\x23WSARecv',0,b'\x00\x00\x6F\x23WSASend',0,b'\x00\x00\xC4\x23WSAStringToAddressW',0,b'\xFF\xFF\xFF\x1FWT_EXECUTEINWAITTHREAD',4,b'\xFF\xFF\xFF\x1FWT_EXECUTEONLYONCE',8,b'\x00\x00\xDD\x23WaitForMultipleObjects',0,b'\x00\x00\xE3\x23WaitForSingleObject',0,b'\x00\x00\x00\x23WaitNamedPipeA',0,b'\x00\x00\x47\x23WriteConsoleInputW',0,b'\x00\x00\xBD\x23WriteFile',0,b'\x00\x00\xD7\x23_get_osfhandle',0,b'\x00\x00\x28\x23_getch',0,b'\x00\x00\x28\x23_getche',0,b'\x00\x00\xF1\x23_getwch',0,b'\x00\x00\xF1\x23_getwche',0,b'\x00\x00\x28\x23_kbhit',0,b'\x00\x00\x0B\x23_locking',0,b'\x00\x00\x10\x23_open_osfhandle',0,b'\x00\x00\x04\x23_putch',0,b'\x00\x00\xF3\x23_putwch',0,b'\x00\x00\x07\x23_setmode',0,b'\x00\x00\x04\x23_ungetch',0,b'\x00\x00\xEE\x23_ungetwch',0,b'\x00\x00\x17\x23bind',0,b'\x00\x00\x14\x23closesocket',0,b'\x00\x00\xEE\x23htons',0,b'\x00\x01\x21\x23socket',0),
+    _struct_unions = ((b'\x00\x00\x01\x7F\x00\x00\x00\x03$1',b'\x00\x01\x7D\x11DUMMYSTRUCTNAME',b'\x00\x00\x15\x11Pointer'),(b'\x00\x00\x01\x7B\x00\x00\x00\x02$10',b'\x00\x01\x87\x11s_b1',b'\x00\x01\x87\x11s_b2',b'\x00\x01\x87\x11s_b3',b'\x00\x01\x87\x11s_b4'),(b'\x00\x00\x01\x7C\x00\x00\x00\x02$11',b'\x00\x00\xEF\x11s_w1',b'\x00\x00\xEF\x11s_w2'),(b'\x00\x00\x01\x7D\x00\x00\x00\x02$2',b'\x00\x00\x02\x11Offset',b'\x00\x00\x02\x11OffsetHigh'),(b'\x00\x00\x01\x80\x00\x00\x00\x03$3',b'\x00\x00\xF4\x11UnicodeChar',b'\x00\x01\x72\x11AsciiChar'),(b'\x00\x00\x01\x81\x00\x00\x00\x03$4',b'\x00\x01\x5C\x11KeyEvent',b'\x00\x01\x5F\x11MouseEvent',b'\x00\x01\x6D\x11WindowBufferSizeEvent',b'\x00\x01\x5E\x11MenuEvent',b'\x00\x01\x55\x11FocusEvent'),(b'\x00\x00\x01\x82\x00\x00\x00\x03$5',b'\x00\x01\x88\x11Byte',b'\x00\x01\x8E\x11Word'),(b'\x00\x00\x01\x83\x00\x00\x00\x01$6',b'\x00\x01\x7E\x11',b'\x00\x00\x02\x11Value'),(b'\x00\x00\x01\x7E\x00\x00\x00\x02$7',b'\x00\x00\x02\x13\x00\x00\x00\x1CZone',b'\x00\x00\x02\x13\x00\x00\x00\x04Level'),(b'\x00\x00\x01\x84\x00\x00\x00\x03$8',b'\x00\x00\x02\x11sin6_scope_id',b'\x00\x01\x65\x11sin6_scope_struct'),(b'\x00\x00\x01\x85\x00\x00\x00\x03$9',b'\x00\x01\x7B\x11S_un_b',b'\x00\x01\x7C\x11S_un_w',b'\x00\x00\x02\x11S_addr'),(b'\x00\x00\x01\x61\x00\x00\x00\x02$PROCESS_INFORMATION',b'\x00\x00\x15\x11hProcess',b'\x00\x00\x15\x11hThread',b'\x00\x00\x02\x11dwProcessId',b'\x00\x00\x02\x11dwThreadId'),(b'\x00\x00\x01\x65\x00\x00\x00\x00$SCOPE_ID',b'\x00\x01\x83\x11'),(b'\x00\x00\x01\x6C\x00\x00\x00\x02$STARTUPINFO',b'\x00\x00\x02\x11cb',b'\x00\x00\x2B\x11lpReserved',b'\x00\x00\x2B\x11lpDesktop',b'\x00\x00\x2B\x11lpTitle',b'\x00\x00\x02\x11dwX',b'\x00\x00\x02\x11dwY',b'\x00\x00\x02\x11dwXSize',b'\x00\x00\x02\x11dwYSize',b'\x00\x00\x02\x11dwXCountChars',b'\x00\x00\x02\x11dwYCountChars',b'\x00\x00\x02\x11dwFillAttribute',b'\x00\x00\x02\x11dwFlags',b'\x00\x00\xEF\x11wShowWindow',b'\x00\x00\xEF\x11cbReserved2',b'\x00\x01\x86\x11lpReserved2',b'\x00\x00\x15\x11hStdInput',b'\x00\x00\x15\x11hStdOutput',b'\x00\x00\x15\x11hStdError'),(b'\x00\x00\x01\x54\x00\x00\x00\x02_COORD',b'\x00\x01\x7A\x11X',b'\x00\x01\x7A\x11Y'),(b'\x00\x00\x01\x55\x00\x00\x00\x02_FOCUS_EVENT_RECORD',b'\x00\x00\x05\x11bSetFocus'),(b'\x00\x00\x01\x56\x00\x00\x00\x02_GUID',b'\x00\x00\x02\x11Data1',b'\x00\x00\xEF\x11Data2',b'\x00\x00\xEF\x11Data3',b'\x00\x01\x8A\x11Data4'),(b'\x00\x00\x01\x5B\x00\x00\x00\x02_INPUT_RECORD',b'\x00\x00\xEF\x11EventType',b'\x00\x01\x81\x11Event'),(b'\x00\x00\x01\x5C\x00\x00\x00\x02_KEY_EVENT_RECORD',b'\x00\x00\x05\x11bKeyDown',b'\x00\x00\xEF\x11wRepeatCount',b'\x00\x00\xEF\x11wVirtualKeyCode',b'\x00\x00\xEF\x11wVirtualScanCode',b'\x00\x01\x80\x11uChar',b'\x00\x00\x02\x11dwControlKeyState'),(b'\x00\x00\x01\x5E\x00\x00\x00\x02_MENU_EVENT_RECORD',b'\x00\x00\x7A\x11dwCommandId'),(b'\x00\x00\x01\x5F\x00\x00\x00\x02_MOUSE_EVENT_RECORD',b'\x00\x01\x54\x11dwMousePosition',b'\x00\x00\x02\x11dwButtonState',b'\x00\x00\x02\x11dwControlKeyState',b'\x00\x00\x02\x11dwEventFlags'),(b'\x00\x00\x01\x60\x00\x00\x00\x02_OVERLAPPED',b'\x00\x00\x02\x11Internal',b'\x00\x00\x02\x11InternalHigh',b'\x00\x01\x7F\x11DUMMYUNIONNAME',b'\x00\x00\x15\x11hEvent'),(b'\x00\x00\x01\x63\x00\x00\x00\x02_PostCallbackData',b'\x00\x00\x15\x11hCompletionPort',b'\x00\x00\x26\x11Overlapped'),(b'\x00\x00\x01\x66\x00\x00\x00\x02_SECURITY_ATTRIBUTES',b'\x00\x00\x02\x11nLength',b'\x00\x00\x15\x11lpSecurityDescriptor',b'\x00\x00\x05\x11bInheritHandle'),(b'\x00\x00\x01\x6D\x00\x00\x00\x02_WINDOW_BUFFER_SIZE_RECORD',b'\x00\x01\x54\x11dwSize'),(b'\x00\x00\x01\x6E\x00\x00\x00\x02_WSABUF',b'\x00\x00\x02\x11len',b'\x00\x00\x2B\x11buf'),(b'\x00\x00\x01\x70\x00\x00\x00\x02_WSAPROTOCOLCHAIN',b'\x00\x00\x05\x11ChainLen',b'\x00\x01\x8C\x11ChainEntries'),(b'\x00\x00\x01\x71\x00\x00\x00\x02_WSAPROTOCOL_INFOW',b'\x00\x00\x02\x11dwServiceFlags1',b'\x00\x00\x02\x11dwServiceFlags2',b'\x00\x00\x02\x11dwServiceFlags3',b'\x00\x00\x02\x11dwServiceFlags4',b'\x00\x00\x02\x11dwProviderFlags',b'\x00\x01\x56\x11ProviderId',b'\x00\x00\x02\x11dwCatalogEntryId',b'\x00\x01\x70\x11ProtocolChain',b'\x00\x00\x05\x11iVersion',b'\x00\x00\x05\x11iAddressFamily',b'\x00\x00\x05\x11iMaxSockAddr',b'\x00\x00\x05\x11iMinSockAddr',b'\x00\x00\x05\x11iSocketType',b'\x00\x00\x05\x11iProtocol',b'\x00\x00\x05\x11iProtocolMaxOffset',b'\x00\x00\x05\x11iNetworkByteOrder',b'\x00\x00\x05\x11iSecurityScheme',b'\x00\x00\x02\x11dwMessageSize',b'\x00\x00\x02\x11dwProviderReserved',b'\x00\x01\x91\x11szProtocol'),(b'\x00\x00\x01\x58\x00\x00\x00\x02in6_addr',b'\x00\x01\x82\x11u'),(b'\x00\x00\x01\x5A\x00\x00\x00\x02in_addr',b'\x00\x01\x85\x11S_un'),(b'\x00\x00\x01\x67\x00\x00\x00\x02sockaddr',b'\x00\x00\xEF\x11sa_family',b'\x00\x01\x73\x11sa_data'),(b'\x00\x00\x01\x6B\x00\x00\x00\x02sockaddr_in',b'\x00\x01\x7A\x11sin_family',b'\x00\x00\xEF\x11sin_port',b'\x00\x01\x5A\x11sin_addr',b'\x00\x01\x75\x11sin_zero'),(b'\x00\x00\x01\x6A\x00\x00\x00\x00sockaddr_in6',b'\x00\x00\xEF\x11sin6_family',b'\x00\x00\xEF\x11sin6_port',b'\x00\x00\x02\x11sin6_flowinfo',b'\x00\x01\x58\x11sin6_addr',b'\x00\x01\x84\x11')),
+    _typenames = (b'\x00\x00\x00\xEFADDRESS_FAMILY',b'\x00\x00\x01\x79AcceptExPtr',b'\x00\x00\x01\x54COORD',b'\x00\x00\x01\x78ConnectExPtr',b'\x00\x00\x01\x77DisconnectExPtr',b'\x00\x00\x01\x55FOCUS_EVENT_RECORD',b'\x00\x00\x01\x56GUID',b'\x00\x00\x01\x58IN6_ADDR',b'\x00\x00\x01\x5AINADDR',b'\x00\x00\x01\x5BINPUT_RECORD',b'\x00\x00\x01\x5CKEY_EVENT_RECORD',b'\x00\x00\x01\x77LPFN_DISCONNECTEX',b'\x00\x00\x01\x57LPIN6_ADDR',b'\x00\x00\x00\x26LPOVERLAPPED',b'\x00\x00\x00\x6DLPOVERLAPPED_COMPLETION_ROUTINE',b'\x00\x00\x00\x34LPPROCESS_INFORMATION',b'\x00\x00\x01\x62LPPostCallbackData',b'\x00\x00\x01\x03LPSECURITY_ATTRIBUTES',b'\x00\x00\x00\x19LPSOCKADDR',b'\x00\x00\x01\x68LPSOCKADDR_IN',b'\x00\x00\x01\x69LPSOCKADDR_IN6_LH',b'\x00\x00\x00\x33LPSTARTUPINFO',b'\x00\x00\x00\x68LPWSABUF',b'\x00\x00\x01\x6FLPWSAPROTOCOLCHAIN',b'\x00\x00\x00\xC7LPWSAPROTOCOL_INFOW',b'\x00\x00\x01\x5EMENU_EVENT_RECORD',b'\x00\x00\x01\x5FMOUSE_EVENT_RECORD',b'\x00\x00\x01\x60OVERLAPPED',b'\x00\x00\x01\x53PCOORD',b'\x00\x00\x01\x57PIN6_ADDR',b'\x00\x00\x01\x59PINADDR',b'\x00\x00\x01\x5DPMENU_EVENT_RECORD',b'\x00\x00\x01\x61PROCESS_INFORMATION',b'\x00\x00\x01\x64PSCOPE_ID',b'\x00\x00\x01\x03PSECURITY_ATTRIBUTES',b'\x00\x00\x00\x19PSOCKADDR',b'\x00\x00\x01\x68PSOCKADDR_IN',b'\x00\x00\x01\x69PSOCKADDR_IN6_LH',b'\x00\x00\x01\x63PostCallbackData',b'\x00\x00\x01\x65SCOPE_ID',b'\x00\x00\x01\x66SECURITY_ATTRIBUTES',b'\x00\x00\x01\x67SOCKADDR',b'\x00\x00\x01\x6BSOCKADDR_IN',b'\x00\x00\x01\x6ASOCKADDR_IN6_LH',b'\x00\x00\x00\x15SOCKET',b'\x00\x00\x01\x6CSTARTUPINFO',b'\x00\x00\x00\x3FWAITORTIMERCALLBACK',b'\x00\x00\x01\x6DWINDOW_BUFFER_SIZE_RECORD',b'\x00\x00\x01\x6EWSABUF',b'\x00\x00\x01\x70WSAPROTOCOLCHAIN',b'\x00\x00\x01\x71WSAPROTOCOL_INFOW',b'\x00\x00\x00\xEFwint_t'),
 )
diff --git a/lib_pypy/_testconsole.py b/lib_pypy/_testconsole.py
--- a/lib_pypy/_testconsole.py
+++ b/lib_pypy/_testconsole.py
@@ -1,9 +1,38 @@
 import sys
 if sys.platform != 'win32':
-    raise ImportError("The '_overlapped' module is only available on Windows")
+    raise ImportError("The '_testconsole' module is only available on Windows")
     
-def write_input():
-    print("Write input")
+import _winapi
 
-def read_output():
-    print("Read output")
+from _pypy_winbase_cffi import ffi as _ffi
+_kernel32 = _ffi.dlopen('kernel32')
+
+def write_input(module, file, s):
+    
+    if not file is _WindowsConsoleIO:
+        raise TypeError("expected raw console object")
+        
+    p = _ffi.new("wchar_t[]", s)
+    size = len(s) / _ffi.sizeof("wchar_t")
+    
+    rec = _ffi.new("INPUT_RECORD", size)
+    
+    if not rec:
+        return None
+        
+    for i in range(0,size):
+        rec[i].EventType = KEY_EVENT
+        rec[i].Event.KeyEvent.bKeyDown = true
+        rec[i].Event.KeyEvent.wRepeatCount = 10
+        rec[i].Event.KeyEvent.uChar.UnicodeChar = p[i]
+    
+    handle = file.handle
+    total = _ffi.new("DWORD", 0)
+    wrote = _ffi.new("DWORD", 0)
+    while total < size:
+        if not _kernel32.WriteConsoleInputW(handle, rec[total[0]], size - total[0], wrote):
+            _winapi.SetFromWindowsErr(0)
+        total[0] += wrote[0]
+
+def read_output(module, file):
+    return None
diff --git a/pypy/module/_io/interp_win32consoleio.py b/pypy/module/_io/interp_win32consoleio.py
--- a/pypy/module/_io/interp_win32consoleio.py
+++ b/pypy/module/_io/interp_win32consoleio.py
@@ -11,6 +11,8 @@
 from rpython.rlib import rwin32
 from rpython.rlib.rwin32file import make_win32_traits
 
+import unicodedata
+
 SMALLBUF = 4
 
 def _get_console_type(handle):
@@ -31,8 +33,8 @@
         lltype.free(mode, flavor='raw')
         lltype.free(peek_count, flavor='raw')
 
-def _pyio_get_console_type(path_or_fd):
-    fd = int(path_or_fd)
+def _pyio_get_console_type(space, w_path_or_fd):
+    fd = space.int_w(w_path_or_fd)
     if fd >= 0:
         handle = rwin32.get_osfhandle(fd)
         if handle == rwin32.INVALID_HANDLE_VALUE:
@@ -40,7 +42,7 @@
         return _get_console_type(handle)
 
 
-    decoded = os.fsdecode(path_or_fd)
+    decoded = space.fsdecode_w(w_path_or_fd)
     if not decoded:
         return '\0'
     
@@ -51,12 +53,12 @@
     m = '\0'
     
     # In CPython the _wcsicmp function is used to perform case insensitive comparison
-    normdecoded = unicodedata.normalize("NFKD", decoded.casefold())
-    if normdecoded == unicodedata.normalize("NFKD", "CONIN$".casefold()):
+    normdecoded = unicodedata.normalize("NFKD", decoded.lower())
+    if normdecoded == unicodedata.normalize("NFKD", "CONIN$".lower()):
         m = 'r'
-    elif normdecoded == unicodedata.normalize("NFKD", "CONOUT$".casefold()):
+    elif normdecoded == unicodedata.normalize("NFKD", "CONOUT$".lower()):
         m = 'w'
-    elif normaldecoded == unicodedata.normalize("NFKD", "CON".casefold()):
+    elif normdecoded == unicodedata.normalize("NFKD", "CON".lower()):
         m = 'x'
 
     if m != '\0':
@@ -64,31 +66,31 @@
 
     length = 0
     
-    pname_buf = lltype.malloc(rffi.CWHARPP.TO, MAX_PATH, flavor='raw')
+    pname_buf = lltype.malloc(rffi.CWCHARP.TO, rwin32.MAX_PATH, flavor='raw')
 
     traits = _preferred_traits(decoded_wstr)
     win32traits = make_win32_traits(traits)
-    length = win32traits.GetFullPathName(decoded_wstr, MAX_PATH, pname_buf, rffi.NULL)
+    length = win32traits.GetFullPathName(decoded_wstr, rwin32.MAX_PATH, pname_buf, rffi.NULL)
     
-    if length > MAX_PATH:
+    if length > rwin32.MAX_PATH:
         lltype.free(pname_buf, flavor='raw')
-        pname_buf = lltype.malloc(rffi.CWHARPP.TO, length, flavor='raw')
+        pname_buf = lltype.malloc(rffi.CWCHARP.TO, length, flavor='raw')
         if pname_buf:
-            length = win32traits.GetFullPathName(decoded_wstr, MAX_PATH, pname_buf, rffi.NULL)
+            length = win32traits.GetFullPathName(decoded_wstr, rwin32.MAX_PATH, pname_buf, rffi.NULL)
         else:
             length = 0
 
     if length:
         if length >= 4 and pname_buf[3] == '\\' and \
-           (name[2] == '.' or name[2] == '?') and \
-           name[1] == '\\' and name[0] == '\\':
-           name += 4
-        normdecoded = unicodedata.normalize("NFKD", decoded.casefold())
-        if normdecoded == unicodedata.normalize("NFKD", "CONIN$".casefold()):
+           (pname_buf[2] == '.' or pname_buf[2] == '?') and \
+           pname_buf[1] == '\\' and pname_buf[0] == '\\':
+           pname_buf += 4
+        normdecoded = unicodedata.normalize("NFKD", decoded.lower())
+        if normdecoded == unicodedata.normalize("NFKD", "CONIN$".lower()):
             m = 'r'
-        elif normdecoded == unicodedata.normalize("NFKD", "CONOUT$".casefold()):
+        elif normdecoded == unicodedata.normalize("NFKD", "CONOUT$".lower()):
             m = 'w'
-        elif normaldecoded == unicodedata.normalize("NFKD", "CON".casefold()):
+        elif normdecoded == unicodedata.normalize("NFKD", "CON".lower()):
             m = 'x'
            
     lltype.free(pname_buf, flavor='raw')
@@ -127,9 +129,9 @@
             closefd = space.bool_w(w_closefd)
 
             if self.fd < 0:
-                decodedname = space.fsdecode_w(w_nameobj)
-                name = rffi.cast(rffi.CWCHARP, decodedname)
-                console_type = _pyio_get_console_type(decodedname)
+                w_decodedname = space.fsdecode(w_nameobj)
+                name = rffi.cast(rffi.CWCHARP, space.text_w(w_decodedname))
+                console_type = _pyio_get_console_type(space, w_decodedname)
                 if not console_type:
                     raise oefmt(space.w_ValueError,
                             "Invalid console type")


More information about the pypy-commit mailing list