/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* include.h :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/23 14:15:12 by mcolonna #+# #+# */ /* Updated: 2024/06/05 17:45:33 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef INCLUDE_H # define INCLUDE_H # include # include # include # include # include # include # include # include # include # include # include # include "libft.h" # 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 ///// typedef struct s_variable { const char *name; const char *value; } t_variable; // Represents a call to a program (the program name and its arguments) typedef struct s_call { const char *program; // path of the program to call. int argc; // number of arguments given char *const *argv; // arguments given (ended by NULL) // (argc and argv must include the program name) } t_call; // Represents a command given by the user. typedef struct s_command { int error; // 0 if parse_command() succeded, error status if not bool empty; // true if there isn't anything to do const t_call *calls; // all calls to programs (ended by .program == NULL) int input_fd; // fd to use with '<' redirection (0 by default) int output_fd; // fd to use with '>' redirection (1 by default) } t_command; // An element of a list of pipes typedef struct s_pipes { int pipe[2]; // Simple pipe, we write on pipe[1] and we read on pipe[0] } t_pipes; // 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(const t_memclass mc, const char *command, t_list *variables); ///// EXECUTE COMMAND ///// // Execute the command given. Return the exit status. int execute_command(t_memclass mc, t_command command, char *const envp[]); ///// ERROR ///// // Call to show an error. // If msg == "errno", use perror() void minishell_error(const char *msg); // Call perror() and exit the program. void fatal_error(const char *msg); // Call strerror() and exit the program. void fatal_error_msg(const char *msg); ///// PATH ///// // Get the PATH values. // Return a list of strings ended by NULL. const char **get_path(const t_memclass mc, char *const envp[]); // Search the program in $PATH. // Returns the path of the program to use, or NULL if there is none. // If there is several possibilities, it returns the one from the first path // given in $PATH. const char *search_path( const t_memclass mc, const char **path, const char *prog); ///// MAIN ///// extern t_memclass g_mc; #endif