|
|
@@ -0,0 +1,64 @@
|
|
|
+// +build windows
|
|
|
+
|
|
|
+// Copyright 2014 Oleku Konko All rights reserved.
|
|
|
+// Use of this source code is governed by a MIT
|
|
|
+// license that can be found in the LICENSE file.
|
|
|
+
|
|
|
+// This module is a Terminal API for the Go Programming Language.
|
|
|
+// The protocols were written in pure Go and works on windows and unix systems
|
|
|
+
|
|
|
+package ts
|
|
|
+
|
|
|
+import (
|
|
|
+ "syscall"
|
|
|
+ "unsafe"
|
|
|
+)
|
|
|
+
|
|
|
+var (
|
|
|
+ kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
|
|
+
|
|
|
+ // Retrieves information about the specified console screen buffer.
|
|
|
+ // See http://msdn.microsoft.com/en-us/library/windows/desktop/ms683171(v=vs.85).aspx
|
|
|
+ screenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
|
|
|
+)
|
|
|
+
|
|
|
+// Contains information about a console screen buffer.
|
|
|
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682093(v=vs.85).aspx
|
|
|
+type CONSOLE_SCREEN_BUFFER_INFO struct {
|
|
|
+ DwSize COORD
|
|
|
+ DwCursorPosition COORD
|
|
|
+ WAttributes uint16
|
|
|
+ SrWindow SMALL_RECT
|
|
|
+ DwMaximumWindowSize COORD
|
|
|
+}
|
|
|
+
|
|
|
+// Defines the coordinates of a character cell in a console screen buffer.
|
|
|
+// The origin of the coordinate system (0,0) is at the top, left cell of the buffer.
|
|
|
+// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms682119(v=vs.85).aspx
|
|
|
+type COORD struct {
|
|
|
+ X, Y uint16
|
|
|
+}
|
|
|
+
|
|
|
+// Defines the coordinates of the upper left and lower right corners of a rectangle.
|
|
|
+// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms686311(v=vs.85).aspx
|
|
|
+type SMALL_RECT struct {
|
|
|
+ Left, Top, Right, Bottom uint16
|
|
|
+}
|
|
|
+
|
|
|
+func GetSize() (ws Size, err error) {
|
|
|
+ var info CONSOLE_SCREEN_BUFFER_INFO
|
|
|
+ rc, _, err := screenBufferInfo.Call(
|
|
|
+ uintptr(syscall.Stdout),
|
|
|
+ uintptr(unsafe.Pointer(&info)))
|
|
|
+
|
|
|
+ if rc == 0 {
|
|
|
+ return ws, err
|
|
|
+ }
|
|
|
+
|
|
|
+ ws = Size{info.SrWindow.Bottom,
|
|
|
+ info.SrWindow.Right,
|
|
|
+ info.DwCursorPosition.X,
|
|
|
+ info.DwCursorPosition.Y}
|
|
|
+
|
|
|
+ return ws, nil
|
|
|
+}
|