Update KeyToggle & KeyTap

This commit is contained in:
vCaesar 2016-11-13 23:46:33 +08:00
parent b3502d6b7a
commit 67e8918365
2 changed files with 99 additions and 16 deletions

View File

@ -163,18 +163,32 @@ int CheckKeyFlags(char* f, MMKeyFlags* flags)
return 0;
}
// //If it's not an array, it should be a single string value.
int GetFlagsFromValue(char* value[], MMKeyFlags* flags){
if (!flags) {return -1;}
char* aKeyTap(char *k,char *akey){
for (int i = 0; i <2; i++){
MMKeyFlags f = MOD_NONE;
const int rv = CheckKeyFlags(value[i], &f);
if (rv) return rv;
*flags = (MMKeyFlags)(*flags | f);
}
return 0;
// return CheckKeyFlags(fstr, flags);
}
// If it's not an array, it should be a single string value.
char* aKeyTap(char *k,char *akey,char *akeyt){
MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
// MMKeyFlags flags = 0;
MMKeyCode key;
// char *k;
// k = *kstr;
if (strcmp(akey, "null") != 0){
switch (CheckKeyFlags(akey,&flags)){
if (strcmp(akeyt, "null") == 0){
switch (CheckKeyFlags(akey,&flags)){
case -1:
return "Null pointer in key flag.";
break;
@ -182,6 +196,17 @@ char* aKeyTap(char *k,char *akey){
return "Invalid key flag specified.";
break;
}
}else{
char* akeyarr[2] = {akey,akeyt};
switch(GetFlagsFromValue(akeyarr,&flags)){
case -1:
return "Null pointer in key flag.";
break;
case -2:
return "Invalid key flag specified.";
break;
}
}
}
switch(CheckKeyCodes(k, &key)){
@ -199,7 +224,7 @@ char* aKeyTap(char *k,char *akey){
return "0";
}
char* aKeyToggle(char *k,char *d){
char* aKeyToggle(char *k,char *d,char *akey,char *akeyt){
MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
MMKeyCode key;
@ -219,6 +244,30 @@ char* aKeyToggle(char *k,char *d){
}
}
if (strcmp(akey, "null") != 0){
if (strcmp(akeyt, "null") == 0){
switch (CheckKeyFlags(akey,&flags)){
case -1:
return "Null pointer in key flag.";
break;
case -2:
return "Invalid key flag specified.";
break;
}
}else{
char* akeyarr[2] = {akey,akeyt};
switch (GetFlagsFromValue(akeyarr, &flags))
{
case -1:
return "Null pointer in key flag.";
break;
case -2:
return "Invalid key flag specified.";
break;
}
}
}
switch(CheckKeyCodes(k, &key)){
case -1:
return "Null pointer in key code.";

View File

@ -278,9 +278,24 @@ func Try(fun func(), handler func(interface{})) {
}
func KeyTap(args ...string) {
// func KeyTap(args ...interface{}) {
var akey string
var akeyt string
// var ckeyarr []*C.char
// var keyarr []string
Try(func() {
akey = args[1]
// for i, _ := range keyarr {
// ckeyarr = append(ckeyarr, (*C.char)(unsafe.Pointer(C.CString(keyarr[i]))))
// }
Try(func() {
akeyt = args[2]
}, func(e interface{}) {
// Println("err:::", e)
akeyt = "null"
})
}, func(e interface{}) {
// Println("err:::", e)
akey = "null"
@ -288,31 +303,50 @@ func KeyTap(args ...string) {
zkey := C.CString(args[0])
amod := C.CString(akey)
// defer func() {
C.aKeyTap(zkey, amod)
// }()
amodt := C.CString(akeyt)
C.aKeyTap(zkey, amod, amodt)
defer C.free(unsafe.Pointer(zkey))
defer C.free(unsafe.Pointer(amod))
defer C.free(unsafe.Pointer(amodt))
}
func KeyToggle(args ...string) {
var akey string
var adown string
var amkey string
var amkeyt string
Try(func() {
akey = args[1]
adown = args[1]
Try(func() {
amkey = args[2]
Try(func() {
amkeyt = args[3]
}, func(e interface{}) {
// Println("err:::", e)
amkeyt = "null"
})
}, func(e interface{}) {
// Println("err:::", e)
amkey = "null"
})
}, func(e interface{}) {
// Println("err:::", e)
akey = "null"
adown = "null"
})
zkey := C.CString(args[0])
amod := C.CString(akey)
ckey := C.CString(args[0])
cadown := C.CString(adown)
camkey := C.CString(amkey)
camkeyt := C.CString(amkeyt)
// defer func() {
str := C.aKeyToggle(zkey, amod)
str := C.aKeyToggle(ckey, cadown, camkey, camkeyt)
Println(str)
// }()
defer C.free(unsafe.Pointer(zkey))
defer C.free(unsafe.Pointer(amod))
defer C.free(unsafe.Pointer(ckey))
defer C.free(unsafe.Pointer(cadown))
defer C.free(unsafe.Pointer(camkey))
defer C.free(unsafe.Pointer(camkeyt))
}
func TypeString(x string) {