display_windows.go raw
1 package ansi
2
3 import (
4 "os"
5 "syscall"
6 "unsafe"
7 )
8
9 func EraseInLine(mode int) {
10 handle := syscall.Handle(os.Stdout.Fd())
11
12 var csbi consoleScreenBufferInfo
13 procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
14
15 var w uint32
16 var x short
17 cursor := csbi.cursorPosition
18 switch mode {
19 case 1:
20 x = csbi.size.x
21 case 2:
22 x = 0
23 case 3:
24 cursor.x = 0
25 x = csbi.size.x
26 }
27 procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(x), uintptr(*(*int32)(unsafe.Pointer(&cursor))), uintptr(unsafe.Pointer(&w)))
28 }
29