Reorganize

This commit is contained in:
Unrud 2022-06-20 01:19:08 +02:00
parent e29982dc00
commit 8a2a29c9d6
40 changed files with 39 additions and 37 deletions

63
terminal/qr.go Normal file
View file

@ -0,0 +1,63 @@
/*
* Copyright (c) 2018 Unrud <unrud@outlook.com>
*
* This file is part of Remote-Touchpad.
*
* Remote-Touchpad is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Remote-Touchpad is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Remote-Touchpad. If not, see <http://www.gnu.org/licenses/>.
*/
package terminal
import qrcode "github.com/skip2/go-qrcode"
func GenerateQRCode(message string, colorize bool) (string, error) {
q, err := qrcode.New(message, qrcode.Medium)
if err != nil {
return "", err
}
return qrCodeToString(q.Bitmap(), colorize), nil
}
func qrCodeToString(bits [][]bool, colorize bool) string {
s := ""
for y := -1; y < len(bits); y += 2 {
if colorize {
s += ForegroundBlack + BackgroundWhite
}
for x := range bits[0] {
upper := false
if 0 <= y && y < len(bits) {
upper = bits[y][x]
}
lower := false
if 0 <= y+1 && y+1 < len(bits) {
lower = bits[y+1][x]
}
if upper && lower {
s += "█"
} else if upper && !lower {
s += "▀"
} else if !upper && lower {
s += "▄"
} else {
s += " "
}
}
if colorize {
s += ForegroundReset + BackgroundReset
}
s += "\n"
}
return s
}

27
terminal/terminal.go Normal file
View file

@ -0,0 +1,27 @@
/*
* Copyright (c) 2018 Unrud <unrud@outlook.com>
*
* This file is part of Remote-Touchpad.
*
* Remote-Touchpad is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Remote-Touchpad is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Remote-Touchpad. If not, see <http://www.gnu.org/licenses/>.
*/
package terminal
const (
ForegroundBlack string = "\033[30m"
ForegroundReset string = "\033[39m"
BackgroundWhite string = "\033[47m"
BackgroundReset string = "\033[49m"
)

View file

@ -0,0 +1,39 @@
//go:build !windows
/*
* Copyright (c) 2018-2019 Unrud <unrud@outlook.com>
*
* This file is part of Remote-Touchpad.
*
* Remote-Touchpad is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Remote-Touchpad is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Remote-Touchpad. If not, see <http://www.gnu.org/licenses/>.
*/
package terminal
// #include <unistd.h>
import "C"
import "os"
func SupportsColor(fd uintptr) bool {
return C.isatty(C.int(fd)) != 0
}
func SetTitle(title string) bool {
if C.isatty(C.int(os.Stdout.Fd())) != 0 {
os.Stdout.Write([]byte("\x1b]2;" + title + "\x07"))
os.Stdout.Sync()
return true
}
return false
}

View file

@ -0,0 +1,49 @@
/*
* Copyright (c) 2018-2019 Unrud <unrud@outlook.com>
*
* This file is part of Remote-Touchpad.
*
* Remote-Touchpad is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Remote-Touchpad is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Remote-Touchpad. If not, see <http://www.gnu.org/licenses/>.
*/
package terminal
import (
"syscall"
"unsafe"
)
const (
enableProcessedOuput uint32 = 0x1
enableWrapAtEolOutput uint32 = 0x2
enableVirtualTerminalProcessing uint32 = 0x4
)
var (
kernel32DLL = syscall.NewLazyDLL("kernel32.dll")
setConsoleModeProc = kernel32DLL.NewProc("SetConsoleMode")
setConsoleTitleProc = kernel32DLL.NewProc("SetConsoleTitleW")
)
func SupportsColor(fd uintptr) bool {
r, _, _ := setConsoleModeProc.Call(fd, uintptr(enableProcessedOuput|
enableWrapAtEolOutput|enableVirtualTerminalProcessing))
return r != 0
}
func SetTitle(title string) bool {
r, _, _ := setConsoleTitleProc.Call(
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))))
return r != 0
}