diff --git a/src/parser/parser_get_commands.c b/src/parser/parser_get_commands.c index 74c21ff..1001485 100644 --- a/src/parser/parser_get_commands.c +++ b/src/parser/parser_get_commands.c @@ -1,39 +1,40 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* parser_get_commands.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/02/11 14:06:02 by qmennen #+# #+# */ -/* Updated: 2025/02/18 20:36:01 by qmennen ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -t_list *parser_get_commands(t_minishell *minishell) -{ - t_list *command_list; - t_list *current; - t_command *command; - t_token *token; - - command_list = NULL; - if (!minishell->tokens) - return (NULL); - current = minishell->tokens; - while (current) - { - token = (t_token *) current->content; - command = parser_command_new(ft_strdup(token->value)); - command->args = parser_get_arguments(current, minishell); - ft_lstadd_back(&command_list, ft_lstnew(command)); - while (current && ((t_token *)current->content)->type < 3) - current = current->next; - if (current && ((t_token *)current->content)->type >= 3) - current = current->next; - } -// ft_lstiter(command_list, print_commands); - return (command_list); -} +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parser_get_commands.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/11 14:06:02 by qmennen #+# #+# */ +/* Updated: 2025/02/18 20:36:01 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +t_list *parser_get_commands(t_minishell *minishell) +{ + t_list *command_list; + t_list *current; + t_command *command; + t_token *token; + + command_list = NULL; + if (!minishell->tokens) + return (NULL); + current = minishell->tokens; + while (current) + { + token = (t_token *) current->content; + command = parser_command_new(ft_strdup(token->value)); + command->args = parser_get_arguments(current, minishell); + command->redirect_in = parser_get_input_redirects(current); + ft_lstadd_back(&command_list, ft_lstnew(command)); + while (current && ((t_token *)current->content)->type < 3) + current = current->next; + if (current && ((t_token *)current->content)->type >= 3) + current = current->next; + } +// ft_lstiter(command_list, print_commands); + return (command_list); +} diff --git a/src/parser/parser_get_input_redirects.c b/src/parser/parser_get_input_redirects.c new file mode 100644 index 0000000..83b011d --- /dev/null +++ b/src/parser/parser_get_input_redirects.c @@ -0,0 +1,39 @@ +# include "minishell.h" + +static int valid_def(t_list *list, t_token *token) +{ + t_token *next; + + if (!list->next) + return (0); + next = (t_token *)list->next->content; + if (!next) + return (0); + return ((token->type == T_REDIRECT_IN || token->type == T_HEREDOC) && next->type < 3); +} + +static t_redirect *redirect_new() +{ + t_redirect *result; +} + +void parser_get_input_redirects(t_list *list) +{ + t_list *current; + t_list *redirects; + t_token *token; + + redirects = NULL; + current = list; + while (current) + { + token = (t_token *)current->content; + if (valid_def(current, token)) + { + ft_lstaddfront(&redirects, ft_lstnew()); + } + else + break ; + current = current->next; + } +} \ No newline at end of file