diff options
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | dome_key_map.h | 12 | ||||
| -rw-r--r-- | moder.c | 26 | ||||
| -rw-r--r-- | src/cocoa_bridge.rs | 14 | 
4 files changed, 48 insertions, 9 deletions
| @@ -8,6 +8,9 @@ $(LIB): $(SOURCE_FILES)  includer: clean $(LIB)  	gcc -o $@ includer.c $(LIB) +moder: clean $(LIB) +	gcc -o $@ $@.c $(LIB) +  .PHONY: clean  clean: -	rm -f includer +	rm -f includer moder diff --git a/dome_key_map.h b/dome_key_map.h index 76b5f1c..7bd77ca 100644 --- a/dome_key_map.h +++ b/dome_key_map.h @@ -24,14 +24,14 @@ typedef enum {  } MapKind;  typedef struct { -  const char *action; -  const ActionKind *kind; -  const HeadphoneButton *in_mode; -} CKeyActionResult; - -typedef struct {    const HeadphoneButton *buttons;    size_t length;  } Trigger; +typedef struct { +  const char *action; +  const ActionKind *kind; +  const Trigger *in_mode; +} CKeyActionResult; +  const CKeyActionResult *c_run_key_action(Trigger trigger, const Trigger *mode); @@ -0,0 +1,26 @@ +#include <stdio.h> +#include "dome_key_map.h" + +#define SIZE 2 + +int main() { +	HeadphoneButton mode_buttons[SIZE] = {HeadphoneButton_Play, HeadphoneButton_Up}; +	Trigger mode_trigger = { +		.buttons = mode_buttons, +		.length = SIZE +	}; +	const CKeyActionResult *mode = c_run_key_action(mode_trigger, NULL); +	printf("%d\n", *mode->kind); + +	HeadphoneButton buttons[] = {HeadphoneButton_Down}; +	Trigger trigger = { +		.buttons = buttons, +		.length = 1 +	}; +	const CKeyActionResult *result = c_run_key_action(trigger, mode->in_mode); + +	printf("%d\n", *result->kind); +	printf("%s", result->action); + +	return 0; +} diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index 920ea02..15cee95 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -86,7 +86,7 @@ impl<'a> KeyActionResult<'a> {  pub struct CKeyActionResult {      pub action: *const c_char,      pub kind: *const ActionKind, -    pub in_mode: *const HeadphoneButton, +    pub in_mode: *const Trigger,  }  #[no_mangle] @@ -120,7 +120,14 @@ pub extern "C" fn c_run_key_action(              );              let in_mode = k.in_mode.map_or_else(                  || ptr::null(), -                |m| m.as_ptr(), +                |m| { +                    let trigger = Trigger { +                        buttons: m.as_ptr(), +                        length: m.len(), +                    }; + +                    &trigger +                },              );              CKeyActionResult { @@ -149,6 +156,9 @@ pub extern "C" fn run_key_action_for_mode<'a>(      let sample_maps = "map <up> k  map <down> j  map <play><down> works! +mode <play><up> { +    map <down> hello +}  ";      // Figure out how to persist this without re-parsing | 
