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