From f71d0a218385609ef2ef60f6b1bdcabb4879a7ed Mon Sep 17 00:00:00 2001 From: Jean Herail Date: Mon, 12 Jan 2026 22:27:26 +0100 Subject: [PATCH] feat(main_loop): Wrote the base of the main entrypoint. Implemented a helper which converts the args options to iob_context --- src/io_backend/io_backend.c | 27 +++++++++++++++++ src/io_backend/io_backend.h | 8 +++++ src/main.c | 59 +++++++++++++++++++++++++++++++++---- 3 files changed, 89 insertions(+), 5 deletions(-) diff --git a/src/io_backend/io_backend.c b/src/io_backend/io_backend.c index 176585f..9cb6c68 100644 --- a/src/io_backend/io_backend.c +++ b/src/io_backend/io_backend.c @@ -2,6 +2,8 @@ #include +#include "utils/args/args.h" + static struct iob_context context; static FILE *input; @@ -33,3 +35,28 @@ int iob_init(struct iob_context *ctx) return -1; } } + +int iob_config_from_args(struct args_options *args, struct iob_context *ctx) +{ + switch (args->type) + { + case INPUT_STDIN: + ctx->mode = IOB_MODE_STDIN; + ctx->args = NULL; + break; + + case INPUT_FILE: + ctx->mode = IOB_MODE_SCRIPT; + ctx->args = (char *)args->input_source; + break; + + case INPUT_CMD: + ctx->mode = IOB_MODE_CMD; + ctx->args = NULL; + break; + + default: + return -1; + } + return 0; +} \ No newline at end of file diff --git a/src/io_backend/io_backend.h b/src/io_backend/io_backend.h index fab5cce..3f6a07e 100644 --- a/src/io_backend/io_backend.h +++ b/src/io_backend/io_backend.h @@ -23,6 +23,14 @@ struct iob_context char *args; }; +/** + * @brief Converts struct arg_options to iob_context + * + * @param args The arguments options struct + * @param ctx The IO Backend context struct to populate + * @return int 0 on success, negative value on error + */ +int iob_config_from_args(struct args_options *args, struct iob_context *ctx); /* * @brief Initializes the IO Backend module * diff --git a/src/main.c b/src/main.c index 6ced238..b664786 100644 --- a/src/main.c +++ b/src/main.c @@ -1,19 +1,68 @@ -// all includes - +// All the includes #include +#include +#include "execution/execution.h" +#include "io_backend/io_backend.h" +#include "parser/parser.h" #include "utils/args/args.h" +enum return_codes +{ + SUCCESS = 0, + ERR_IO_BACKEND = 2, + ERR_MALLOC = 3 +}; + int main(int argc, char **argv) { + // Create the options struct (with argument handler) struct args_options options; int r = args_handler(argc, argv, &options); if (r != 0) { print_usage(stderr, argv[0]); - return 2; + return ERR_IO_BACKEND; + } + // args_print(&options); + + // Create the IO-Backend context struct + struct iob_context *io_context = malloc(sizeof(struct iob_context)); + if (io_context == NULL) + { + fprintf(stderr, + "Error: Memory allocation failed for IO Backend context\n"); + return ERR_MALLOC; } - args_print(&options); - return 0; + // Convert args_options to iob_context + r = iob_config_from_args(&options, io_context); + if (r != 0) + { + fprintf(stderr, + "Error: Failed to configure IO Backend from arguments\n"); + free(io_context); + return ERR_IO_BACKEND; + } + + // Init IO Backend (with the context struct) + r = iob_init(io_context); + if (r != 0) + { + fprintf(stderr, + "Error: IO Backend initialization failed with code %d\n", r); + free(io_context); + return ERR_IO_BACKEND; + } + + free(io_context); + + // Call the parser to get the AST + struct ast *command_ast = get_ast(); // We'll pass the options later + + // Call the executor with the AST + r = execution(command_ast); + + // Return the execution return code (last command executed) + return r; }