From a6efd6d136ad54f568d5a90ee2edefacf0d96a9e Mon Sep 17 00:00:00 2001 From: "a.gurov" Date: Mon, 30 Jul 2018 18:03:14 +0300 Subject: [PATCH] slight refactor --- main.go | 15 +++- src/bearlibterminal/BearLibTerminal.go | 1 + src/ui/keyinput.go | 35 +++++++++ src/ui/scancodemap.go | 100 +++++++++++++++++++++++++ src/ui/ui.go | 21 ------ 5 files changed, 148 insertions(+), 24 deletions(-) create mode 100644 src/ui/keyinput.go create mode 100644 src/ui/scancodemap.go delete mode 100644 src/ui/ui.go diff --git a/main.go b/main.go index 323611f..c5e57e6 100644 --- a/main.go +++ b/main.go @@ -13,11 +13,20 @@ func main() { defer blt.Close() blt.Print(1, 1, "Hello, world!") blt.Refresh() + var exit = false + for !exit { - exit, _ = util.InArray(blt.Read(), []int{blt.TK_CLOSE, blt.TK_ESCAPE}) - blt.Print( 1, 3, "Key: " + ui.ReadKey() ) + var key, keycode = ui.ReadKey(); + if (key != "") { + blt.Print( 1, 3, "Key: ") + } + blt.Print( 1, 3, "Key: " + key ) + exit, _ = util.InArray(keycode, []int{blt.TK_CLOSE, blt.TK_ESCAPE}) + if (!exit) { + exit = (key == "Ctrl+q") + } blt.Refresh() } log.Println("Closing...") -} \ No newline at end of file +} diff --git a/src/bearlibterminal/BearLibTerminal.go b/src/bearlibterminal/BearLibTerminal.go index 05d7d6c..e746fd4 100644 --- a/src/bearlibterminal/BearLibTerminal.go +++ b/src/bearlibterminal/BearLibTerminal.go @@ -37,6 +37,7 @@ import ( // Keyboard scancodes for events/states // const ( + TK_NONE = 0x00 TK_A = 0x04 TK_B = 0x05 TK_C = 0x06 diff --git a/src/ui/keyinput.go b/src/ui/keyinput.go new file mode 100644 index 0000000..ea3c8b4 --- /dev/null +++ b/src/ui/keyinput.go @@ -0,0 +1,35 @@ +package ui + +import blt "bearlibterminal" +import ( + "fmt" + "util" +) + +var modifiers = []int{blt.TK_SHIFT, blt.TK_ALT, blt.TK_CONTROL} + +func ReadKey() (string, int) { + if !blt.HasInput() { + return "", blt.TK_NONE + } + var key = blt.Read() + var pressed = "" + var isModifier, _ = util.InArray(key, modifiers) + if (!isModifier) { + + pressed = Scancodemap[key] + + if (blt.Check(blt.TK_SHIFT) != 0) { + pressed = "Shift+" + pressed + } + if (blt.Check(blt.TK_ALT) != 0) { + pressed = "Alt+" + pressed + } + if (blt.Check(blt.TK_CONTROL) != 0) { + pressed = "Ctrl+" + pressed + } + fmt.Println(pressed) + } + + return pressed, key +} diff --git a/src/ui/scancodemap.go b/src/ui/scancodemap.go new file mode 100644 index 0000000..ab1e2c3 --- /dev/null +++ b/src/ui/scancodemap.go @@ -0,0 +1,100 @@ +package ui + +import blt "bearlibterminal" + +var Scancodemap = map[int]string{ + blt.TK_A: "a", + blt.TK_B: "b", + blt.TK_C: "c", + blt.TK_D: "d", + blt.TK_E: "e", + blt.TK_F: "f", + blt.TK_G: "g", + blt.TK_H: "h", + blt.TK_I: "i", + blt.TK_J: "j", + blt.TK_K: "k", + blt.TK_L: "l", + blt.TK_M: "m", + blt.TK_N: "n", + blt.TK_O: "o", + blt.TK_P: "p", + blt.TK_Q: "q", + blt.TK_R: "r", + blt.TK_S: "s", + blt.TK_T: "t", + blt.TK_U: "u", + blt.TK_V: "v", + blt.TK_W: "w", + blt.TK_X: "x", + blt.TK_Y: "y", + blt.TK_Z: "z", + blt.TK_1: "1", + blt.TK_2: "2", + blt.TK_3: "3", + blt.TK_4: "4", + blt.TK_5: "5", + blt.TK_6: "6", + blt.TK_7: "7", + blt.TK_8: "8", + blt.TK_9: "9", + blt.TK_0: "0", + blt.TK_ENTER: "Enter", + blt.TK_ESCAPE: "Escape", + blt.TK_BACKSPACE: "Backspace", + blt.TK_TAB: "Tab", + blt.TK_SPACE: "Space", + blt.TK_MINUS: "-", + blt.TK_EQUALS: "=", + blt.TK_LBRACKET: "LBracket", + blt.TK_RBRACKET: "RBracket", + blt.TK_BACKSLASH: "\\", + blt.TK_SEMICOLON: ";", + blt.TK_APOSTROPHE: "'", + blt.TK_GRAVE: "`", + blt.TK_COMMA: ",", + blt.TK_PERIOD: ".", + blt.TK_SLASH: "/", + blt.TK_F1: "F1", + blt.TK_F2: "F2", + blt.TK_F3: "F3", + blt.TK_F4: "F4", + blt.TK_F5: "F5", + blt.TK_F6: "F6", + blt.TK_F7: "F7", + blt.TK_F8: "F8", + blt.TK_F9: "F9", + blt.TK_F10: "F10", + blt.TK_F11: "F11", + blt.TK_F12: "F12", + blt.TK_PAUSE: "Pause", + blt.TK_INSERT: "Insert", + blt.TK_HOME: "Home", + blt.TK_PAGEUP: "PageUp", + blt.TK_DELETE: "Delete", + blt.TK_END: "End", + blt.TK_PAGEDOWN: "PageDown", + blt.TK_RIGHT: "Right", + blt.TK_LEFT: "Left", + blt.TK_DOWN: "Down", + blt.TK_UP: "Up", + blt.TK_KP_DIVIDE: "KP_DIVIDE", + blt.TK_KP_MULTIPLY: "KP_MULTIPLY", + blt.TK_KP_MINUS: "KP_MINUS", + blt.TK_KP_PLUS: "KP_PLUS", + blt.TK_KP_ENTER: "KP_ENTER", + blt.TK_KP_1: "KP_1", + blt.TK_KP_2: "KP_2", + blt.TK_KP_3: "KP_3", + blt.TK_KP_4: "KP_4", + blt.TK_KP_5: "KP_5", + blt.TK_KP_6: "KP_6", + blt.TK_KP_7: "KP_7", + blt.TK_KP_8: "KP_8", + blt.TK_KP_9: "KP_9", + blt.TK_KP_0: "KP_0", + blt.TK_KP_PERIOD: "KP_PERIOD", + blt.TK_SHIFT: "SHIFT", + blt.TK_CONTROL: "CONTROL", + blt.TK_ALT: "ALT", +} diff --git a/src/ui/ui.go b/src/ui/ui.go deleted file mode 100644 index 78a9f5f..0000000 --- a/src/ui/ui.go +++ /dev/null @@ -1,21 +0,0 @@ -package ui - -import blt "bearlibterminal" -import "util" - -func ReadKey() (string) { - var key = blt.Read() - if !blt.HasInput() { - return "" - } - var modifiers = []int{blt.TK_SHIFT, blt.TK_ALT, blt.TK_CONTROL} - modifierPressed, _ := util.InArray(key, modifiers) - var pressed = "" - if (modifierPressed) { - pressed ="modifier" - } else { - pressed = string(key) - } - - return pressed -}