honk/admin.go

82 lines
1.8 KiB
Go
Raw Normal View History

//
// Copyright (c) 2019 Ted Unangst <tedu@tedunangst.com>
//
// Permission to use, copy, modify, and distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package main
2019-11-10 23:21:49 +01:00
/*
#include <termios.h>
*/
import "C"
import (
2019-11-10 23:21:49 +01:00
"fmt"
"io/ioutil"
"log"
2019-11-10 23:21:49 +01:00
"os"
)
func adminscreen() {
log.SetOutput(ioutil.Discard)
2019-11-10 23:21:49 +01:00
stdout := os.Stdout
esc := "\x1b"
smcup := esc + "[?1049h"
rmcup := esc + "[?1049l"
2019-11-10 23:21:49 +01:00
hidecursor := func() {
}
2019-11-10 23:21:49 +01:00
showcursor := func() {
}
2019-11-10 23:21:49 +01:00
movecursor := func(x, y int) {
stdout.WriteString(fmt.Sprintf(esc+"[%d;%dH", x, y))
}
2019-11-10 23:21:49 +01:00
clearscreen := func() {
stdout.WriteString(esc + "[2J")
}
2019-11-10 23:21:49 +01:00
savedtio := new(C.struct_termios)
C.tcgetattr(1, savedtio)
restore := func() {
stdout.WriteString(rmcup)
showcursor()
C.tcsetattr(1, C.TCSAFLUSH, savedtio)
}
2019-11-10 23:21:49 +01:00
defer restore()
init := func() {
tio := new(C.struct_termios)
C.tcgetattr(1, tio)
tio.c_lflag = tio.c_lflag & ^C.uint(C.ECHO|C.ICANON)
C.tcsetattr(1, C.TCSADRAIN, tio)
hidecursor()
stdout.WriteString(smcup)
clearscreen()
movecursor(1, 1)
}
2019-11-10 23:21:49 +01:00
init()
2019-11-10 23:21:49 +01:00
for {
var buf [1]byte
os.Stdin.Read(buf[:])
c := buf[0]
switch c {
case 'q':
2019-11-10 23:21:49 +01:00
return
default:
os.Stdout.Write(buf[:])
}
}
}