initial commit
This commit is contained in:
commit
dc421f035e
8 changed files with 989 additions and 0 deletions
202
pkg/encode/encode.go
Normal file
202
pkg/encode/encode.go
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
package encode
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.giftfish.de/ston1th/duckycode/pkg/lang"
|
||||
)
|
||||
|
||||
type Encoder struct {
|
||||
reader io.Reader
|
||||
language string
|
||||
defaultDelay int
|
||||
delayOverride bool
|
||||
loop int
|
||||
repeat bool
|
||||
}
|
||||
|
||||
func NewEncoder(r io.Reader, language string) *Encoder {
|
||||
if language == "" {
|
||||
language = "de"
|
||||
}
|
||||
return &Encoder{r, language, 0, false, 0, false}
|
||||
}
|
||||
|
||||
func (e *Encoder) Encode() (buf []byte, err error) {
|
||||
scanner := bufio.NewScanner(e.reader)
|
||||
for scanner.Scan() {
|
||||
if err = scanner.Err(); err != nil {
|
||||
return
|
||||
}
|
||||
s := strings.SplitN(scanner.Text(), " ", 2)
|
||||
|
||||
switch len(s) {
|
||||
case 1:
|
||||
if b := e.instruction(s[0]); b != 0 {
|
||||
fmt.Fprintf(os.Stderr, "%s\n", s[0])
|
||||
buf = append(buf, []byte{b, 0}...)
|
||||
fmt.Fprintf(os.Stderr, "%#v\n", buf)
|
||||
}
|
||||
case 2:
|
||||
fmt.Fprintf(os.Stderr, "%s:%s\n", s[0], s[1])
|
||||
buf = append(buf, e.instructionData(s[0], s[1])...)
|
||||
fmt.Fprintf(os.Stderr, "%#v\n", buf)
|
||||
}
|
||||
if !e.delayOverride && e.defaultDelay > 0 {
|
||||
delayCounter := e.defaultDelay
|
||||
for delayCounter > 0 {
|
||||
buf = append(buf, byte(0))
|
||||
if delayCounter > 255 {
|
||||
buf = append(buf, byte(255))
|
||||
delayCounter -= 255
|
||||
} else {
|
||||
buf = append(buf, byte(delayCounter))
|
||||
delayCounter = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (e *Encoder) instruction(in string) byte {
|
||||
if b, ok := lang.K["KEY_"+in]; ok {
|
||||
return b
|
||||
}
|
||||
switch in {
|
||||
case "", "REM":
|
||||
return 0
|
||||
case "ESCAPE":
|
||||
return e.instruction("ESC")
|
||||
case "DEL":
|
||||
return e.instruction("DELETE")
|
||||
case "BREAK":
|
||||
return e.instruction("PAUSE")
|
||||
case "CONTROL":
|
||||
return e.instruction("CTRL")
|
||||
case "DOWNARROW":
|
||||
return e.instruction("DOWM")
|
||||
case "UPARROW":
|
||||
return e.instruction("UP")
|
||||
case "LEFTARROW":
|
||||
return e.instruction("LEFT")
|
||||
case "RIGHTARROW":
|
||||
return e.instruction("RIGHT")
|
||||
case "MENU":
|
||||
return e.instruction("APP")
|
||||
case "WINDOWS":
|
||||
return e.instruction("GUI")
|
||||
case "PLAY":
|
||||
return e.instruction("MEDIA_PLAY_PAUSE")
|
||||
case "MUTE":
|
||||
return e.instruction("MEDIA_MUTE")
|
||||
case "VOLUMEUP":
|
||||
return e.instruction("MEDIA_VOLUME_INC")
|
||||
case "VOLUMEDOWN":
|
||||
return e.instruction("MEDIAVOLUME_DEC")
|
||||
case "SCROLLLOCK":
|
||||
return e.instruction("SCROLL_LOCK")
|
||||
case "NUMLOCK":
|
||||
return e.instruction("NUM_LOCK")
|
||||
case "CAPSLOCK":
|
||||
return e.instruction("CAPS_LOCK")
|
||||
|
||||
case "CTRL":
|
||||
return e.instruction("LEFT_CTRL")
|
||||
case "ALT":
|
||||
return e.instruction("LEFT_ALT")
|
||||
case "SHIFT":
|
||||
return e.instruction("LEFT_SHIFT")
|
||||
case "ALT-SHIFT":
|
||||
//TODO
|
||||
return 0
|
||||
case "ALT-TAB":
|
||||
//TODO
|
||||
return 0
|
||||
}
|
||||
return e.encodeRune(rune(in[0]))[0]
|
||||
}
|
||||
|
||||
func (e *Encoder) instructionData(in string, data string) (b []byte) {
|
||||
switch in {
|
||||
case "DEFAULT_DELAY", "DEFAULTDELAY":
|
||||
delay, err := strconv.Atoi(data)
|
||||
if err == nil {
|
||||
e.defaultDelay = delay
|
||||
e.delayOverride = true
|
||||
}
|
||||
return nil
|
||||
case "DELAY":
|
||||
delay, err := strconv.Atoi(data)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
for delay > 0 {
|
||||
b = append(b, byte(0))
|
||||
if delay > 255 {
|
||||
b = append(b, byte(255))
|
||||
delay -= 255
|
||||
} else {
|
||||
b = append(b, byte(delay))
|
||||
delay = 0
|
||||
}
|
||||
}
|
||||
e.delayOverride = true
|
||||
return
|
||||
case "", "REM":
|
||||
return nil
|
||||
case "STRING":
|
||||
for _, r := range data {
|
||||
enc := e.encodeRune(r)
|
||||
if len(enc)%2 != 0 {
|
||||
enc = append(enc, byte(0))
|
||||
}
|
||||
b = append(b, enc...)
|
||||
}
|
||||
return
|
||||
case "CONTROL", "CTRL":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_CTRL"]}
|
||||
case "ALT":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_ALT"]}
|
||||
case "SHIFT":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_SHIFT"]}
|
||||
case "CTRL-ALT":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_CTRL"] | lang.K["MODIFIERKEY_ALT"]}
|
||||
case "CTRL-SHIFT":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_CTRL"] | lang.K["MODIFIERKEY_SHIFT"]}
|
||||
case "COMMAND-OPTION":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_LEFT_GUI"] | lang.K["MODIFIERKEY_ALT"]}
|
||||
case "ALT-SHIFT":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_LEFT_ALT"] | lang.K["MODIFIERKEY_SHIFT"]}
|
||||
case "WINDOWS", "GUI", "COMMAND":
|
||||
return []byte{e.instruction(data), lang.K["MODIFIERKEY_LEFT_GUI"]}
|
||||
}
|
||||
return []byte{e.instruction(data), 0}
|
||||
}
|
||||
|
||||
func (e *Encoder) encodeRune(r rune) []byte {
|
||||
var code string
|
||||
hex := strings.ToUpper(strconv.FormatUint(uint64(r), 16))
|
||||
switch {
|
||||
case r < 128:
|
||||
code = "ASCII_" + hex
|
||||
case r < 256:
|
||||
code = "ISO_8859_1_" + hex
|
||||
default:
|
||||
code = "UNICODE_" + hex
|
||||
}
|
||||
if b, ok := lang.K[code]; ok {
|
||||
return []byte{b}
|
||||
} else if k, ok := lang.Langs[e.language][code]; ok {
|
||||
if k.Mod != 0 {
|
||||
return []byte{k.Key, k.Mod}
|
||||
}
|
||||
return []byte{k.Key}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
116
pkg/lang/de.go
Normal file
116
pkg/lang/de.go
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
package lang
|
||||
|
||||
func init() {
|
||||
l := make(Lang)
|
||||
l["ASCII_20"] = Key{K["KEY_SPACE"], K[""]}
|
||||
l["ASCII_21"] = Key{K["KEY_1"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_22"] = Key{K["KEY_2"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_23"] = Key{K["KEY_BACKSLASH"], K[""]}
|
||||
l["ASCII_24"] = Key{K["KEY_4"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_25"] = Key{K["KEY_5"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_26"] = Key{K["KEY_6"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_27"] = Key{K["KEY_BACKSLASH"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_28"] = Key{K["KEY_8"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_29"] = Key{K["KEY_9"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_2A"] = Key{K["KEY_RIGHT_BRACE"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_2B"] = Key{K["KEY_RIGHT_BRACE"], K[""]}
|
||||
l["ASCII_2C"] = Key{K["KEY_COMMA"], K[""]}
|
||||
l["ASCII_2D"] = Key{K["KEY_SLASH"], K[""]}
|
||||
l["ASCII_2E"] = Key{K["KEY_PERIOD"], K[""]}
|
||||
l["ASCII_2F"] = Key{K["KEY_7"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_30"] = Key{K["KEY_0"], K[""]}
|
||||
l["ASCII_31"] = Key{K["KEY_1"], K[""]}
|
||||
l["ASCII_32"] = Key{K["KEY_2"], K[""]}
|
||||
l["ASCII_33"] = Key{K["KEY_3"], K[""]}
|
||||
l["ASCII_34"] = Key{K["KEY_4"], K[""]}
|
||||
l["ASCII_35"] = Key{K["KEY_5"], K[""]}
|
||||
l["ASCII_36"] = Key{K["KEY_6"], K[""]}
|
||||
l["ASCII_37"] = Key{K["KEY_7"], K[""]}
|
||||
l["ASCII_38"] = Key{K["KEY_8"], K[""]}
|
||||
l["ASCII_39"] = Key{K["KEY_9"], K[""]}
|
||||
l["ASCII_3A"] = Key{K["KEY_PERIOD"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_3B"] = Key{K["KEY_COMMA"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_3C"] = Key{K["KEY_NON_US_100"], K[""]}
|
||||
l["ASCII_3D"] = Key{K["KEY_0"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_3E"] = Key{K["KEY_NON_US_100"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_3F"] = Key{K["KEY_MINUS"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_40"] = Key{K["KEY_Q"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_41"] = Key{K["KEY_A"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_42"] = Key{K["KEY_B"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_43"] = Key{K["KEY_C"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_44"] = Key{K["KEY_D"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_45"] = Key{K["KEY_E"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_46"] = Key{K["KEY_F"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_47"] = Key{K["KEY_G"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_48"] = Key{K["KEY_H"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_49"] = Key{K["KEY_I"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_4A"] = Key{K["KEY_J"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_4B"] = Key{K["KEY_K"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_4C"] = Key{K["KEY_L"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_4D"] = Key{K["KEY_M"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_4E"] = Key{K["KEY_N"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_4F"] = Key{K["KEY_O"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_50"] = Key{K["KEY_P"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_51"] = Key{K["KEY_Q"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_52"] = Key{K["KEY_R"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_53"] = Key{K["KEY_S"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_54"] = Key{K["KEY_T"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_55"] = Key{K["KEY_U"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_56"] = Key{K["KEY_V"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_57"] = Key{K["KEY_W"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_58"] = Key{K["KEY_X"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_59"] = Key{K["KEY_Z"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_5A"] = Key{K["KEY_Y"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_5B"] = Key{K["KEY_8"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_5C"] = Key{K["KEY_MINUS"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_5D"] = Key{K["KEY_9"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_5E"] = Key{K["KEY_TILDE"], K[""]}
|
||||
l["ASCII_5F"] = Key{K["KEY_SLASH"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_60"] = Key{K["KEY_EQUAL"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ASCII_61"] = Key{K["KEY_A"], K[""]}
|
||||
l["ASCII_62"] = Key{K["KEY_B"], K[""]}
|
||||
l["ASCII_63"] = Key{K["KEY_C"], K[""]}
|
||||
l["ASCII_64"] = Key{K["KEY_D"], K[""]}
|
||||
l["ASCII_65"] = Key{K["KEY_E"], K[""]}
|
||||
l["ASCII_66"] = Key{K["KEY_F"], K[""]}
|
||||
l["ASCII_67"] = Key{K["KEY_G"], K[""]}
|
||||
l["ASCII_68"] = Key{K["KEY_H"], K[""]}
|
||||
l["ASCII_69"] = Key{K["KEY_I"], K[""]}
|
||||
l["ASCII_6A"] = Key{K["KEY_J"], K[""]}
|
||||
l["ASCII_6B"] = Key{K["KEY_K"], K[""]}
|
||||
l["ASCII_6C"] = Key{K["KEY_L"], K[""]}
|
||||
l["ASCII_6D"] = Key{K["KEY_M"], K[""]}
|
||||
l["ASCII_6E"] = Key{K["KEY_N"], K[""]}
|
||||
l["ASCII_6F"] = Key{K["KEY_O"], K[""]}
|
||||
l["ASCII_70"] = Key{K["KEY_P"], K[""]}
|
||||
l["ASCII_71"] = Key{K["KEY_Q"], K[""]}
|
||||
l["ASCII_72"] = Key{K["KEY_R"], K[""]}
|
||||
l["ASCII_73"] = Key{K["KEY_S"], K[""]}
|
||||
l["ASCII_74"] = Key{K["KEY_T"], K[""]}
|
||||
l["ASCII_75"] = Key{K["KEY_U"], K[""]}
|
||||
l["ASCII_76"] = Key{K["KEY_V"], K[""]}
|
||||
l["ASCII_77"] = Key{K["KEY_W"], K[""]}
|
||||
l["ASCII_78"] = Key{K["KEY_X"], K[""]}
|
||||
l["ASCII_79"] = Key{K["KEY_Z"], K[""]}
|
||||
l["ASCII_7A"] = Key{K["KEY_Y"], K[""]}
|
||||
l["ASCII_7B"] = Key{K["KEY_7"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_7C"] = Key{K["KEY_NON_US_100"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_7D"] = Key{K["KEY_0"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_7E"] = Key{K["KEY_RIGHT_BRACE"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ASCII_7F"] = Key{K["KEY_BACKSPACE"], K[""]}
|
||||
l["ISO_8859_1_A0"] = Key{K["KEY_SPACE"], K[""]}
|
||||
l["ISO_8859_1_A4"] = Key{K["KEY_E"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ISO_8859_1_A7"] = Key{K["KEY_3"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ISO_8859_1_B0"] = Key{K["KEY_TILDE"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ISO_8859_1_B2"] = Key{K["KEY_2"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ISO_8859_1_B3"] = Key{K["KEY_3"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
l["ISO_8859_1_C4"] = Key{K["KEY_QUOTE"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ISO_8859_1_D6"] = Key{K["KEY_SEMICOLON"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ISO_8859_1_DC"] = Key{K["KEY_LEFT_BRACE"], K["MODIFIERKEY_SHIFT"]}
|
||||
l["ISO_8859_1_DF"] = Key{K["KEY_MINUS"], K[""]}
|
||||
l["ISO_8859_1_E4"] = Key{K["KEY_QUOTE"], K[""]}
|
||||
l["ISO_8859_1_F6"] = Key{K["KEY_SEMICOLON"], K[""]}
|
||||
l["ISO_8859_1_FC"] = Key{K["KEY_LEFT_BRACE"], K[""]}
|
||||
l["UNICODE_20AC"] = Key{K["KEY_E"], K["MODIFIERKEY_RIGHT_ALT"]}
|
||||
Langs["de"] = l
|
||||
}
|
||||
146
pkg/lang/keyboard.go
Normal file
146
pkg/lang/keyboard.go
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
package lang
|
||||
|
||||
var K = map[string]byte{
|
||||
"": 0,
|
||||
"MODIFIERKEY_CTRL": 0x01,
|
||||
"MODIFIERKEY_SHIFT": 0x02,
|
||||
"MODIFIERKEY_ALT": 0x04,
|
||||
"MODIFIERKEY_GUI": 0x08,
|
||||
"MODIFIERKEY_LEFT_CTRL": 0x01,
|
||||
"MODIFIERKEY_LEFT_SHIFT": 0x02,
|
||||
"MODIFIERKEY_LEFT_ALT": 0x04,
|
||||
"MODIFIERKEY_LEFT_GUI": 0x08,
|
||||
"MODIFIERKEY_RIGHT_CTRL": 0x10,
|
||||
"MODIFIERKEY_RIGHT_SHIFT": 0x20,
|
||||
"MODIFIERKEY_RIGHT_ALT": 0x40,
|
||||
"MODIFIERKEY_RIGHT_GUI": 0x80,
|
||||
"KEY_MEDIA_VOLUME_INC": 0x80,
|
||||
"KEY_MEDIA_VOLUME_DEC": 0x81,
|
||||
"KEY_MEDIA_MUTE": 0x7F,
|
||||
"KEY_MEDIA_PLAY_PAUSE": 0x08,
|
||||
"KEY_MEDIA_NEXT_TRACK": 0x10,
|
||||
"KEY_MEDIA_PREV_TRACK": 0x20,
|
||||
"KEY_A": 4,
|
||||
"KEY_B": 5,
|
||||
"KEY_C": 6,
|
||||
"KEY_D": 7,
|
||||
"KEY_E": 8,
|
||||
"KEY_F": 9,
|
||||
"KEY_G": 10,
|
||||
"KEY_H": 11,
|
||||
"KEY_I": 12,
|
||||
"KEY_J": 13,
|
||||
"KEY_K": 14,
|
||||
"KEY_L": 15,
|
||||
"KEY_M": 16,
|
||||
"KEY_N": 17,
|
||||
"KEY_O": 18,
|
||||
"KEY_P": 19,
|
||||
"KEY_Q": 20,
|
||||
"KEY_R": 21,
|
||||
"KEY_S": 22,
|
||||
"KEY_T": 23,
|
||||
"KEY_U": 24,
|
||||
"KEY_V": 25,
|
||||
"KEY_W": 26,
|
||||
"KEY_X": 27,
|
||||
"KEY_Y": 28,
|
||||
"KEY_Z": 29,
|
||||
"KEY_1": 30,
|
||||
"KEY_2": 31,
|
||||
"KEY_3": 32,
|
||||
"KEY_4": 33,
|
||||
"KEY_5": 34,
|
||||
"KEY_6": 35,
|
||||
"KEY_7": 36,
|
||||
"KEY_8": 37,
|
||||
"KEY_9": 38,
|
||||
"KEY_0": 39,
|
||||
"KEY_ENTER": 40,
|
||||
"KEY_ESC": 41,
|
||||
"KEY_BACKSPACE": 42,
|
||||
"KEY_TAB": 43,
|
||||
"KEY_SPACE": 44,
|
||||
"KEY_MINUS": 45,
|
||||
"KEY_EQUAL": 46,
|
||||
"KEY_LEFT_BRACE": 47,
|
||||
"KEY_RIGHT_BRACE": 48,
|
||||
"KEY_BACKSLASH": 49,
|
||||
"KEY_NON_US_NUM": 50,
|
||||
"KEY_SEMICOLON": 51,
|
||||
"KEY_QUOTE": 52,
|
||||
"KEY_TILDE": 53,
|
||||
"KEY_COMMA": 54,
|
||||
"KEY_PERIOD": 55,
|
||||
"KEY_SLASH": 56,
|
||||
"KEY_CAPS_LOCK": 57,
|
||||
"KEY_F1": 58,
|
||||
"KEY_F2": 59,
|
||||
"KEY_F3": 60,
|
||||
"KEY_F4": 61,
|
||||
"KEY_F5": 62,
|
||||
"KEY_F6": 63,
|
||||
"KEY_F7": 64,
|
||||
"KEY_F8": 65,
|
||||
"KEY_F9": 66,
|
||||
"KEY_F10": 67,
|
||||
"KEY_F11": 68,
|
||||
"KEY_F12": 69,
|
||||
"KEY_PRINTSCREEN": 70,
|
||||
"KEY_SCROLL_LOCK": 71,
|
||||
"KEY_PAUSE": 72,
|
||||
"KEY_INSERT": 73,
|
||||
"KEY_HOME": 74,
|
||||
"KEY_PAGEUP": 75,
|
||||
"KEY_DELETE": 76,
|
||||
"KEY_END": 77,
|
||||
"KEY_PAGEDOWN": 78,
|
||||
"KEY_RIGHT": 79,
|
||||
"KEY_LEFT": 80,
|
||||
"KEY_DOWN": 81,
|
||||
"KEY_UP": 82,
|
||||
"KEY_NUM_LOCK": 83,
|
||||
"KEYPAD_SLASH": 84,
|
||||
"KEYPAD_ASTERIX": 85,
|
||||
"KEYPAD_MINUS": 86,
|
||||
"KEYPAD_PLUS": 87,
|
||||
"KEYPAD_ENTER": 88,
|
||||
"KEYPAD_EQUALS": 103,
|
||||
"KEYPAD_1": 89,
|
||||
"KEYPAD_2": 90,
|
||||
"KEYPAD_3": 91,
|
||||
"KEYPAD_4": 92,
|
||||
"KEYPAD_5": 93,
|
||||
"KEYPAD_6": 94,
|
||||
"KEYPAD_7": 95,
|
||||
"KEYPAD_8": 96,
|
||||
"KEYPAD_9": 97,
|
||||
"KEYPAD_0": 98,
|
||||
"KEYPAD_PERIOD": 99,
|
||||
"KEY_APP": 0x65,
|
||||
"KEY_POWER": 0x66,
|
||||
"KEY_EXE": 0x74,
|
||||
"KEY_HELP": 0x75,
|
||||
"KEY_MENU": 0x76,
|
||||
"KEY_SELECT": 0x77,
|
||||
"KEY_STOP": 0x78,
|
||||
"KEY_AGAIN": 0x79,
|
||||
"KEY_UNDO": 0x7A,
|
||||
"KEY_CUT": 0x7B,
|
||||
"KEY_COPY": 0x7C,
|
||||
"KEY_PASTE": 0x7D,
|
||||
"KEY_FIND": 0x7E,
|
||||
"KEY_SYSTEM_POWER": 0x81,
|
||||
"KEY_SYSTEM_SLEEP": 0x82,
|
||||
"KEY_SYSTEM_WAKE": 0x83,
|
||||
"KEYPAD_PIPE": 0xC9,
|
||||
"KEY_LEFT_CTRL": 0xE0,
|
||||
"KEY_LEFT_SHIFT": 0xE1,
|
||||
"KEY_LEFT_ALT": 0xE2,
|
||||
"KEY_LEFT_GUI": 0xE3,
|
||||
"KEY_COMMAND": 0xE3,
|
||||
"KEY_RIGHT_CTRL": 0xE4,
|
||||
"KEY_RIGHT_SHIFT": 0xE5,
|
||||
"KEY_RIGHT_ALT": 0xE6,
|
||||
"KEY_RIGHT_GUI": 0xE7,
|
||||
}
|
||||
10
pkg/lang/lang.go
Normal file
10
pkg/lang/lang.go
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
package lang
|
||||
|
||||
var Langs = make(map[string]Lang)
|
||||
|
||||
type Lang map[string]Key
|
||||
|
||||
type Key struct {
|
||||
Key byte
|
||||
Mod byte
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue