installed pty
[VSoRC/.git] / node_modules / node-pty / deps / winpty / misc / ChangeScreenBuffer.cc
diff --git a/node_modules/node-pty/deps/winpty/misc/ChangeScreenBuffer.cc b/node_modules/node-pty/deps/winpty/misc/ChangeScreenBuffer.cc
new file mode 100644 (file)
index 0000000..701a2cb
--- /dev/null
@@ -0,0 +1,53 @@
+// A test program for CreateConsoleScreenBuffer / SetConsoleActiveScreenBuffer
+//
+
+#include <windows.h>
+#include <stdio.h>
+#include <conio.h>
+#include <io.h>
+#include <cassert>
+
+#include "TestUtil.cc"
+
+int main()
+{
+    HANDLE origBuffer = GetStdHandle(STD_OUTPUT_HANDLE);
+    HANDLE childBuffer = CreateConsoleScreenBuffer(
+            GENERIC_READ | GENERIC_WRITE,
+            FILE_SHARE_READ | FILE_SHARE_WRITE,
+            NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
+
+    SetConsoleActiveScreenBuffer(childBuffer);
+
+    while (true) {
+        char buf[1024];
+        CONSOLE_SCREEN_BUFFER_INFO info;
+
+        assert(GetConsoleScreenBufferInfo(origBuffer, &info));
+        trace("child.size=(%d,%d)", (int)info.dwSize.X, (int)info.dwSize.Y);
+        trace("child.cursor=(%d,%d)", (int)info.dwCursorPosition.X, (int)info.dwCursorPosition.Y);
+        trace("child.window=(%d,%d,%d,%d)",
+            (int)info.srWindow.Left, (int)info.srWindow.Top,
+            (int)info.srWindow.Right, (int)info.srWindow.Bottom);
+        trace("child.maxSize=(%d,%d)", (int)info.dwMaximumWindowSize.X, (int)info.dwMaximumWindowSize.Y);
+
+        int ch = getch();
+        sprintf(buf, "%02x\n", ch);
+        DWORD actual = 0;
+        WriteFile(childBuffer, buf, strlen(buf), &actual, NULL);
+        if (ch == 0x1b/*ESC*/ || ch == 0x03/*CTRL-C*/)
+            break;
+
+        if (ch == 'b') {
+            setBufferSize(origBuffer, 40, 25);
+        } else if (ch == 'w') {
+            setWindowPos(origBuffer, 1, 1, 38, 23);
+        } else if (ch == 'c') {
+            setCursorPos(origBuffer, 10, 10);
+        }
+    }
+
+    SetConsoleActiveScreenBuffer(origBuffer);
+
+    return 0;
+}