From 5c37658bccb17eb1e0101a356f7dd74f7542f3eb Mon Sep 17 00:00:00 2001 From: Guamss Date: Wed, 25 Mar 2026 11:25:02 +0100 Subject: [PATCH] add: line parsing via getchar --- src/const.h | 1 + src/exec.c | 3 +++ src/exec.h | 4 ++++ src/main.c | 8 ++++++++ src/parsing.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/parsing.h | 5 +++++ 6 files changed, 72 insertions(+) create mode 100644 src/const.h create mode 100644 src/exec.c create mode 100644 src/exec.h create mode 100644 src/parsing.c create mode 100644 src/parsing.h diff --git a/src/const.h b/src/const.h new file mode 100644 index 0000000..0bad2d1 --- /dev/null +++ b/src/const.h @@ -0,0 +1 @@ +#define BUFSIZE 1024 \ No newline at end of file diff --git a/src/exec.c b/src/exec.c new file mode 100644 index 0000000..f5ddf01 --- /dev/null +++ b/src/exec.c @@ -0,0 +1,3 @@ +#include "exec.h" + +void execute_cmd(void) {} \ No newline at end of file diff --git a/src/exec.h b/src/exec.h new file mode 100644 index 0000000..67b8ed1 --- /dev/null +++ b/src/exec.h @@ -0,0 +1,4 @@ +#pragma once + +int is_builtin_cmd(void); +void execute_cmd(void); \ No newline at end of file diff --git a/src/main.c b/src/main.c index 8042ebd..de5de76 100644 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,16 @@ +#include "parsing.h" #include +#include int main(int argc, char *argv[], char *envp[]) { + (void)argc; + (void)argv; + int index = 0; while (envp[index]) { printf("%s\n", envp[index++]); } + shell_loop(); + + return EXIT_SUCCESS; } \ No newline at end of file diff --git a/src/parsing.c b/src/parsing.c new file mode 100644 index 0000000..2d67ecc --- /dev/null +++ b/src/parsing.c @@ -0,0 +1,51 @@ +#include "parsing.h" +#include "const.h" +#include "exec.h" +#include +#include +#include + +char *read_line() { + char c; + int i = 0; + char *buffer = malloc(BUFSIZE * sizeof(char)); + if (buffer == NULL) { + dprintf(STDERR_FILENO, "Line read buffer allocation error !"); + exit(EXIT_FAILURE); + } + + while (1) { + c = getchar(); + + if (c == EOF || c == '\n') { + buffer[i] = '\0'; + return buffer; + } else { + buffer[i] = c; + } + i++; + // TODO: realoc quand le buffer est dépassé + } +} + +char **split_line(char *line) { + (void)line; + return NULL; +} + +void shell_loop(void) { + char *line; + char **args; + int status = 1; + + do { + dprintf(STDOUT_FILENO, "> "); + line = read_line(); + dprintf(STDOUT_FILENO, "%s\n", line); + args = split_line(line); + execute_cmd(); + + // free(line); + free(args); + } while (status); +} diff --git a/src/parsing.h b/src/parsing.h new file mode 100644 index 0000000..85eb311 --- /dev/null +++ b/src/parsing.h @@ -0,0 +1,5 @@ +#pragma once +#include +#include + +void shell_loop(void); \ No newline at end of file