2016-01-18 23:19:51 +01:00
|
|
|
package data // code.bitsetter.de/fun/gosl/data
|
|
|
|
|
2016-01-19 16:38:15 +01:00
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"os"
|
2016-02-06 12:06:50 +01:00
|
|
|
"sync"
|
2016-01-19 16:38:15 +01:00
|
|
|
|
2016-02-06 01:48:29 +01:00
|
|
|
nc "github.com/rthornton128/goncurses"
|
2016-01-19 16:38:15 +01:00
|
|
|
)
|
|
|
|
|
2016-02-06 04:09:42 +01:00
|
|
|
var (
|
2016-02-06 12:06:50 +01:00
|
|
|
win *nc.Window
|
|
|
|
ncquit = make(chan bool)
|
|
|
|
winMutex = &sync.Mutex{}
|
2016-02-06 04:09:42 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
func RenderFrame(f *Frame) {
|
2016-02-06 12:06:50 +01:00
|
|
|
winMutex.Lock()
|
|
|
|
if win != nil {
|
|
|
|
win.Clear()
|
|
|
|
for k, _ := range f.Data {
|
|
|
|
win.MovePrint(k, 0, string(f.Data[k]))
|
|
|
|
}
|
2016-02-06 04:09:42 +01:00
|
|
|
}
|
2016-02-06 12:06:50 +01:00
|
|
|
winMutex.Unlock()
|
2016-02-06 04:09:42 +01:00
|
|
|
}
|
|
|
|
|
2016-02-06 11:11:09 +01:00
|
|
|
func InitNC(killchan chan<- os.Signal) {
|
2016-02-06 04:09:42 +01:00
|
|
|
var err error
|
2016-02-06 12:06:50 +01:00
|
|
|
winMutex.Lock()
|
2016-02-06 04:09:42 +01:00
|
|
|
win, err = nc.Init()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
2016-02-06 11:11:09 +01:00
|
|
|
win.Timeout(1)
|
2016-02-06 12:06:50 +01:00
|
|
|
winMutex.Unlock()
|
2016-02-06 11:11:09 +01:00
|
|
|
go func() {
|
|
|
|
select {
|
|
|
|
case <-ncquit:
|
|
|
|
log.Println("Exiting NC")
|
|
|
|
killchan <- os.Kill
|
|
|
|
}
|
|
|
|
}()
|
2016-02-06 04:09:42 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func ExitNC() {
|
2016-02-06 12:06:50 +01:00
|
|
|
winMutex.Lock()
|
|
|
|
if win != nil {
|
|
|
|
win = nil
|
|
|
|
nc.End()
|
|
|
|
ncquit <- true
|
|
|
|
}
|
|
|
|
winMutex.Unlock()
|
2016-02-06 11:11:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func GetChar() int {
|
2016-02-06 12:06:50 +01:00
|
|
|
winMutex.Lock()
|
|
|
|
defer winMutex.Unlock()
|
2016-02-06 11:11:09 +01:00
|
|
|
if win != nil {
|
|
|
|
k := win.GetChar()
|
|
|
|
return int(k)
|
|
|
|
}
|
|
|
|
return 0
|
2016-01-18 23:19:51 +01:00
|
|
|
}
|
2016-01-19 16:38:15 +01:00
|
|
|
|
2016-02-06 12:06:50 +01:00
|
|
|
func testNC() (int, int) {
|
2016-02-06 01:48:29 +01:00
|
|
|
win, err := nc.Init()
|
2016-01-19 16:38:15 +01:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
win.Clear()
|
2016-01-22 20:17:03 +01:00
|
|
|
h, w := win.MaxYX()
|
2016-02-06 01:48:29 +01:00
|
|
|
nc.End()
|
2016-01-22 20:17:03 +01:00
|
|
|
fmt.Printf("screen: %d x %d\n", w, h)
|
2016-02-06 01:48:29 +01:00
|
|
|
|
2016-01-30 02:04:13 +01:00
|
|
|
return w, h
|
2016-01-19 16:38:15 +01:00
|
|
|
}
|