From 2da8cbabddf812549d66b57965416aa2a84415a2 Mon Sep 17 00:00:00 2001 From: mcolonna Date: Tue, 23 Apr 2024 16:02:01 +0200 Subject: [PATCH] add ask_command() and minishell_error() --- Makefile | 4 ++-- include/include.h | 37 +++++++++++++++++++++++++++---------- src/ask_command.c | 25 +++++++++++++++++++++++++ src/error.c | 22 ++++++++++++++++++++++ src/main.c | 11 ++++++----- 5 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 src/ask_command.c create mode 100644 src/error.c diff --git a/Makefile b/Makefile index a17eb8a..3eff93f 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,9 @@ NAME = minishell # src directory SRCS = src/ # include directory -INCLUDES = include/ +INCLUDES = include/ libtf/ # .c files in src/ without the extension -CODE = main +CODE = main ask_command error # directories to 'make' LIBRARIES = libtf # .a files to include diff --git a/include/include.h b/include/include.h index 8af1a83..3ea0834 100644 --- a/include/include.h +++ b/include/include.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/23 14:15:12 by mcolonna #+# #+# */ -/* Updated: 2024/04/23 14:54:39 by mcolonna ### ########.fr */ +/* Updated: 2024/04/23 16:01:17 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,14 +14,27 @@ # define INCLUDE_H # include +# include +# include +# include +# include "libtf.h" + +///// ASK COMMAND ///// + +// Show the prompt and ask a command to the user. +// Return the command. +const char *ask_command(t_memclass mc); + +///// PARSE_COMMAND ///// // Represents a call to a program (the program name and its arguments) typedef struct s_call { - char *program; // path of the program to call. - int argc; // number of arguments given (including the program's name) - char **argv; // arguments given (including the program's name) -} t_call; + char *program; // path of the program to call. + int argc; // number of arguments given + const char *const *argv; // arguments given + // (argc and argv must include the program name) +} t_call; // Represents a command given by the user. typedef struct s_command @@ -32,15 +45,19 @@ typedef struct s_command int output_fd; // fd to use with '>' redirection (1 by default) } t_command; -// Show the prompt and ask a command to the user. -// Return the command. -char *ask_command(void); - // Return the t_command representing the command given by the user. // If error, return a t_command wth the value .error = true. -t_command parse_command(char *command); +t_command parse_command(const char *command); + +///// EXECUTE COMMAND ///// // Execute the command given. Return the exit status. int execute_command(t_command command); +///// ERROR ///// + +// Call to show an error. +// If msg == "errno", use strerror(errno) +void minishell_error(const char *msg); + #endif diff --git a/src/ask_command.c b/src/ask_command.c new file mode 100644 index 0000000..f28c50e --- /dev/null +++ b/src/ask_command.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ask_command.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mcolonna +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/04/23 15:03:23 by mcolonna #+# #+# */ +/* Updated: 2024/04/23 15:56:21 by mcolonna ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "include.h" + +const char *ask_command(t_memclass mc) +{ + const char *r; + + print_str(minishell_error, 1, "( ^.^)> "); + r = read_line(minishell_error, mc, 0); + if (r) + return (r); + else + return (""); +} diff --git a/src/error.c b/src/error.c new file mode 100644 index 0000000..6605b17 --- /dev/null +++ b/src/error.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mcolonna +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/04/23 15:51:56 by mcolonna #+# #+# */ +/* Updated: 2024/04/23 15:56:49 by mcolonna ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "include.h" + +void minishell_error(const char *msg) +{ + if (str_eq(msg, "errno")) + msg = strerror(errno); + print_str(err_remember, 2, "minishell: "); + print_str(err_remember, 2, msg); + err_get(); +} diff --git a/src/main.c b/src/main.c index 154b06f..28c3662 100644 --- a/src/main.c +++ b/src/main.c @@ -6,26 +6,27 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/23 14:33:45 by mcolonna #+# #+# */ -/* Updated: 2024/04/23 14:55:04 by mcolonna ### ########.fr */ +/* Updated: 2024/04/23 16:00:53 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ #include "include.h" -int main(int argc, char **argv) +int main(void) { + t_memclass mc; t_command command; int errorstatus; - (void)argc; - (void)argv; errorstatus = 0; while (true) { - command = parse_command(ask_command()); + mc = mem_newclass(minishell_error); + command = parse_command(ask_command(mc)); if (command.error) continue ; errorstatus = execute_command(command); + mem_freeall(mc); } return (errorstatus); }