]> Cypherpunks.ru repositories - nncp.git/blob - src/uilive/terminal_size.go
Operations progress
[nncp.git] / src / uilive / terminal_size.go
1 // +build !windows
2
3 package uilive
4
5 import (
6         "os"
7         "runtime"
8         "syscall"
9         "unsafe"
10 )
11
12 type windowSize struct {
13         rows uint16
14         cols uint16
15 }
16
17 var out *os.File
18 var err error
19 var sz windowSize
20
21 func getTermSize() (int, int) {
22         if runtime.GOOS == "openbsd" {
23                 out, err = os.OpenFile("/dev/tty", os.O_RDWR, 0)
24                 if err != nil {
25                         return 0, 0
26                 }
27
28         } else {
29                 out, err = os.OpenFile("/dev/tty", os.O_WRONLY, 0)
30                 if err != nil {
31                         return 0, 0
32                 }
33         }
34         _, _, _ = syscall.Syscall(syscall.SYS_IOCTL,
35                 out.Fd(), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&sz)))
36         return int(sz.cols), int(sz.rows)
37 }