aboutsummaryrefslogtreecommitdiff
path: root/src/action.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/action.c')
-rw-r--r--src/action.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/action.c b/src/action.c
new file mode 100644
index 0000000..c8ccee1
--- /dev/null
+++ b/src/action.c
@@ -0,0 +1,45 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "action.h"
+#include "block.h"
+
+void action_perform(action_t *action, block_t *block, config_t *config)
+{
+ for (size_t i = 0; i < action->length; i++) {
+ const char *key = action->parts[i].key;
+ const char *value = action->parts[i].value;
+
+ if (strncmp(key, "block.", 6))
+ abort();
+
+ block_t *target = NULL;
+ for (size_t i = 0; i < config->n_blocks; i++) {
+ if (!strcmp(key + 6, config->blocks[i]->label)) {
+ target = config->blocks[i];
+ break;
+ }
+ }
+
+ if (target == NULL)
+ abort();
+
+ block_change(target, key, value);
+ }
+}
+
+int action_validate(action_t *action, config_t *config)
+{
+ // TODO
+ return 0;
+}
+
+void action_free(action_t *action)
+{
+ for (size_t i = 0; i < action->length; i++) {
+ free(action->parts[i].key);
+ free(action->parts[i].value);
+ }
+
+ free(action->parts);
+}