aboutsummaryrefslogtreecommitdiff
path: root/src/engine.c
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-07-29 08:17:26 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2025-07-29 08:17:26 +0530
commitac975c3ed46e7796a705f67279b6bee4b94edd96 (patch)
tree5cf811cb058e32a208fa7e6e26b4059dabb53026 /src/engine.c
parent9f594c1c5a558264ba1445bceb4a5365669a23c0 (diff)
engine: find values for eachdo by parsing each file
Diffstat (limited to 'src/engine.c')
-rw-r--r--src/engine.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/src/engine.c b/src/engine.c
index 5a0c8fe..0854c7c 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -13,8 +13,6 @@
#include <stdlib.h>
#include <string.h>
-#define DEBUG
-
extern msg_t *msg;
void
@@ -80,6 +78,9 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive)
{
eachdo_operands_t *operands = directive->operands;
+ engine_ingest(&operands->content);
+ list_t *directives = lex(operands->content);
+
#ifdef DEBUG
printf("KEY: %s\n", operands->key);
printf("CONTENT: %s\n", operands->content);
@@ -121,13 +122,34 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive)
free(content);
- for (size_t j = 0; j < config->keys->size; j++) {
- ptr_wrapper_t *wrapper = list_get(config->keys, j);
- printf("%s\n", (char *) wrapper->ptr);
+ for (size_t i = 0; i < directives->size; i++) {
+ directive_t *directive = list_get(directives, i);
+ switch (directive->type) {
+ case _RAW:
+ printf("%s", (char *) directive->operands);
+ break;
+
+ case PUT: {
+ ptr_wrapper_t *wrapper
+ = list_find_corresponding_value_from_ptr_wrapper(
+ config->keys, config->values, (char *) directive->operands);
+
+ if (wrapper != NULL)
+ printf("%s", (char *) wrapper->ptr);
+
+ break;
+ }
+
+ default:
+ /* TODO: Handle this */
+ break;
+ }
}
+
+ config_delete(config);
}
- exit(1);
+ list_delete(directives);
free(operands);
}