aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver-csi.c24
-rw-r--r--termkey-internal.h22
-rw-r--r--termkey.c6
3 files changed, 25 insertions, 27 deletions
diff --git a/driver-csi.c b/driver-csi.c
index 09c7dd7..25932a2 100644
--- a/driver-csi.c
+++ b/driver-csi.c
@@ -288,17 +288,7 @@ static TermKeyResult peekkey_csi(TermKey *tk, TermKeyCsi *csi, size_t introlen,
key->modifiers = (key->code.mouse[0] & 0x1c) >> 2;
key->code.mouse[0] &= ~0x1c;
- key->code.mouse[3] = 0;
-
- if(arg[1] > 0xfff)
- arg[1] = 0xfff;
- key->code.mouse[1] = (arg[1] & 0x0ff);
- key->code.mouse[3] |= (arg[1] & 0xf00) >> 8;
-
- if(arg[2] > 0x7ff)
- arg[1] = 0x7ff;
- key->code.mouse[2] = (arg[2] & 0x0ff);
- key->code.mouse[3] |= (arg[2] & 0x300) >> 4;
+ termkey_key_set_linecol(key, arg[1], arg[2]);
*nbytep = csi_len;
return TERMKEY_RES_KEY;
@@ -310,17 +300,7 @@ static TermKeyResult peekkey_csi(TermKey *tk, TermKeyCsi *csi, size_t introlen,
key->modifiers = (key->code.mouse[0] & 0x1c) >> 2;
key->code.mouse[0] &= ~0x1c;
- key->code.mouse[3] = 0;
-
- if(arg[1] > 0xfff)
- arg[1] = 0xfff;
- key->code.mouse[1] = (arg[1] & 0x0ff);
- key->code.mouse[3] |= (arg[1] & 0xf00) >> 8;
-
- if(arg[2] > 0x7ff)
- arg[1] = 0x7ff;
- key->code.mouse[2] = (arg[2] & 0x0ff);
- key->code.mouse[3] |= (arg[2] & 0x300) >> 4;
+ termkey_key_set_linecol(key, arg[1], arg[2]);
if(cmd == 'm') // release
key->code.mouse[3] |= 0x80;
diff --git a/termkey-internal.h b/termkey-internal.h
index d23f68c..1ebdecb 100644
--- a/termkey-internal.h
+++ b/termkey-internal.h
@@ -64,6 +64,28 @@ struct TermKey {
} method;
};
+static inline void termkey_key_get_linecol(const TermKeyKey *key, int *line, int *col)
+{
+ if(col)
+ *col = (unsigned char)key->code.mouse[1] | ((unsigned char)key->code.mouse[3] & 0x0f) << 8;
+
+ if(line)
+ *line = (unsigned char)key->code.mouse[2] | ((unsigned char)key->code.mouse[3] & 0x70) << 4;
+}
+
+static inline void termkey_key_set_linecol(TermKeyKey *key, int line, int col)
+{
+ if(line > 0xfff)
+ line = 0xfff;
+
+ if(col > 0x7ff)
+ col = 0x7ff;
+
+ key->code.mouse[1] = (line & 0x0ff);
+ key->code.mouse[2] = (col & 0x0ff);
+ key->code.mouse[3] = (line & 0xf00) >> 8 | (col & 0x300) >> 4;
+}
+
extern struct TermKeyDriver termkey_driver_csi;
extern struct TermKeyDriver termkey_driver_ti;
diff --git a/termkey.c b/termkey.c
index 6664151..ade90a8 100644
--- a/termkey.c
+++ b/termkey.c
@@ -911,11 +911,7 @@ TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKe
if(button)
*button = 0;
- if(col)
- *col = (unsigned char)key->code.mouse[1] | ((unsigned char)key->code.mouse[3] & 0x0f) << 8;
-
- if(line)
- *line = (unsigned char)key->code.mouse[2] | ((unsigned char)key->code.mouse[3] & 0x70) << 4;
+ termkey_key_get_linecol(key, line, col);
if(!event)
return TERMKEY_RES_KEY;