github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/liner/output_windows.go (about) 1 package liner 2 3 import ( 4 "unsafe" 5 ) 6 7 type coord struct { 8 x, y int16 9 } 10 type smallRect struct { 11 left, top, right, bottom int16 12 } 13 14 type consoleScreenBufferInfo struct { 15 dwSize coord 16 dwCursorPosition coord 17 wAttributes int16 18 srWindow smallRect 19 dwMaximumWindowSize coord 20 } 21 22 func (s *State) cursorPos(x int) { 23 var sbi consoleScreenBufferInfo 24 procGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi))) 25 procSetConsoleCursorPosition.Call(uintptr(s.hOut), 26 uintptr(int(x)&0xFFFF|int(sbi.dwCursorPosition.y)<<16)) 27 } 28 29 func (s *State) eraseLine() { 30 var sbi consoleScreenBufferInfo 31 procGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi))) 32 var numWritten uint32 33 procFillConsoleOutputCharacter.Call(uintptr(s.hOut), uintptr(' '), 34 uintptr(sbi.dwSize.x-sbi.dwCursorPosition.x), 35 uintptr(int(sbi.dwCursorPosition.x)&0xFFFF|int(sbi.dwCursorPosition.y)<<16), 36 uintptr(unsafe.Pointer(&numWritten))) 37 } 38 39 func (s *State) eraseScreen() { 40 var sbi consoleScreenBufferInfo 41 procGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi))) 42 var numWritten uint32 43 procFillConsoleOutputCharacter.Call(uintptr(s.hOut), uintptr(' '), 44 uintptr(sbi.dwSize.x)*uintptr(sbi.dwSize.y), 45 0, 46 uintptr(unsafe.Pointer(&numWritten))) 47 procSetConsoleCursorPosition.Call(uintptr(s.hOut), 0) 48 } 49 50 func (s *State) getColumns() { 51 var sbi consoleScreenBufferInfo 52 procGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi))) 53 s.columns = int(sbi.dwSize.x) 54 }