installed pty
[VSoRC/.git] / node_modules / node-pty / deps / winpty / misc / ConinMode.ps1
diff --git a/node_modules/node-pty/deps/winpty/misc/ConinMode.ps1 b/node_modules/node-pty/deps/winpty/misc/ConinMode.ps1
new file mode 100644 (file)
index 0000000..ecfe8f0
--- /dev/null
@@ -0,0 +1,116 @@
+#
+# PowerShell script for controlling the console QuickEdit and InsertMode flags.
+#
+# Turn QuickEdit off to interact with mouse-driven console programs.
+#
+# Usage:
+#
+# powershell .\ConinMode.ps1 [Options]
+#
+# Options:
+#   -QuickEdit [on/off]
+#   -InsertMode [on/off]
+#   -Mode [integer]
+#
+
+param (
+    [ValidateSet("on", "off")][string] $QuickEdit,
+    [ValidateSet("on", "off")][string] $InsertMode,
+    [int] $Mode
+)
+
+$signature = @'
+[DllImport("kernel32.dll", SetLastError = true)]
+public static extern IntPtr GetStdHandle(int nStdHandle);
+
+[DllImport("kernel32.dll", SetLastError = true)]
+public static extern uint GetConsoleMode(
+    IntPtr hConsoleHandle,
+    out uint lpMode);
+
+[DllImport("kernel32.dll", SetLastError = true)]
+public static extern uint SetConsoleMode(
+    IntPtr hConsoleHandle,
+    uint dwMode);
+
+public const int STD_INPUT_HANDLE = -10;
+public const int ENABLE_INSERT_MODE = 0x0020;
+public const int ENABLE_QUICK_EDIT_MODE = 0x0040;
+public const int ENABLE_EXTENDED_FLAGS = 0x0080;
+'@
+
+$WinAPI = Add-Type -MemberDefinition $signature `
+    -Name WinAPI -Namespace ConinModeScript `
+    -PassThru
+
+function GetConIn {
+    $ret = $WinAPI::GetStdHandle($WinAPI::STD_INPUT_HANDLE)
+    if ($ret -eq -1) {
+        throw "error: cannot get stdin"
+    }
+    return $ret
+}
+
+function GetConsoleMode {
+    $conin = GetConIn
+    $mode = 0
+    $ret = $WinAPI::GetConsoleMode($conin, [ref]$mode)
+    if ($ret -eq 0) {
+        throw "GetConsoleMode failed (is stdin a console?)"
+    }
+    return $mode
+}
+
+function SetConsoleMode($mode) {
+    $conin = GetConIn
+    $ret = $WinAPI::SetConsoleMode($conin, $mode)
+    if ($ret -eq 0) {
+        throw "SetConsoleMode failed (is stdin a console?)"
+    }
+}
+
+$oldMode = GetConsoleMode
+$newMode = $oldMode
+$doingSomething = $false
+
+if ($PSBoundParameters.ContainsKey("Mode")) {
+    $newMode = $Mode
+    $doingSomething = $true
+}
+
+if ($QuickEdit + $InsertMode -ne "") {
+    if (!($newMode -band $WinAPI::ENABLE_EXTENDED_FLAGS)) {
+        # We can't enable an extended flag without overwriting the existing
+        # QuickEdit/InsertMode flags.  AFAICT, there is no way to query their
+        # existing values, so at least we can choose sensible defaults.
+        $newMode = $newMode -bor $WinAPI::ENABLE_EXTENDED_FLAGS
+        $newMode = $newMode -bor $WinAPI::ENABLE_QUICK_EDIT_MODE
+        $newMode = $newMode -bor $WinAPI::ENABLE_INSERT_MODE
+        $doingSomething = $true
+    }
+}
+
+if ($QuickEdit -eq "on") {
+    $newMode = $newMode -bor $WinAPI::ENABLE_QUICK_EDIT_MODE
+    $doingSomething = $true
+} elseif ($QuickEdit -eq "off") {
+    $newMode = $newMode -band (-bnot $WinAPI::ENABLE_QUICK_EDIT_MODE)
+    $doingSomething = $true
+}
+
+if ($InsertMode -eq "on") {
+    $newMode = $newMode -bor $WinAPI::ENABLE_INSERT_MODE
+    $doingSomething = $true
+} elseif ($InsertMode -eq "off") {
+    $newMode = $newMode -band (-bnot $WinAPI::ENABLE_INSERT_MODE)
+    $doingSomething = $true
+}
+
+if ($doingSomething) {
+    echo "old mode: $oldMode"
+    SetConsoleMode $newMode
+    $newMode = GetConsoleMode
+    echo "new mode: $newMode"
+} else {
+    echo "mode: $oldMode"
+}