From 470b4dfbae146d83c0061b39534c16b5aad90f1c Mon Sep 17 00:00:00 2001 From: taiyu Date: Wed, 19 Aug 2015 18:59:27 -0700 Subject: key_state.ch, and command conflicts resolved --- sway/key_state.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 sway/key_state.c (limited to 'sway/key_state.c') diff --git a/sway/key_state.c b/sway/key_state.c new file mode 100644 index 00000000..76561dbc --- /dev/null +++ b/sway/key_state.c @@ -0,0 +1,52 @@ +#include +#include +#include + +#include "key_state.h" + +enum { KEY_STATE_MAX_LENGTH = 64 }; + +static keycode key_state_array[KEY_STATE_MAX_LENGTH]; +static uint8_t key_state_length = 0; + +static uint8_t find_key(keycode key) +{ + int i; + for (i = 0; i < key_state_length; ++i) + { + if (key_state_array[i] == key) + { + break; + } + } + return i; +} + +bool check_key(keycode key) +{ + return find_key(key) < key_state_length; +} + +void press_key(keycode key) +{ + // Check if key exists + if (!check_key(key)) + { + // Check that we dont exceed buffer length + if (key_state_length < KEY_STATE_MAX_LENGTH) { + key_state_array[key_state_length++] = key; + } + } +} + +void release_key(keycode key) +{ + uint8_t index = find_key(key); + if (index < key_state_length) + { + //shift it over and remove key + memmove(&key_state_array[index], + &key_state_array[index + 1], + sizeof(*key_state_array) * (--key_state_length - index)); + } +} -- cgit v1.2.3