minishell BATCH MODE

This commit is contained in:
whaffman 2025-02-28 15:29:06 +01:00
parent a29defbc65
commit cfcd59acbd
2 changed files with 114 additions and 44 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ obj/
.ms_heredoc .ms_heredoc
pipetester.c pipetester.c
pipetest pipetest
*.txt

View File

@ -1,44 +1,113 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* :::::::: */ /* :::::::: */
/* main.c :+: :+: */ /* main.c :+: :+: */
/* +:+ */ /* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/04 16:19:22 by whaffman #+# #+# */ /* Created: 2025/02/04 16:19:22 by whaffman #+# #+# */
/* Updated: 2025/02/19 17:59:24 by whaffman ######## odam.nl */ /* Updated: 2025/02/28 15:25:57 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "libft.h" #include "libft.h"
#include "minishell.h" #include "minishell.h"
#include "utils.h" #include "utils.h"
int main(int argc, char **argv, char **envp) // int main(int argc, char **argv, char **envp)
{ // {
t_minishell *msh; // t_minishell *msh;
(void)argc; // (void)argc;
(void)argv; // (void)argv;
print_banner(); // print_banner();
history_load(); // history_load();
msh = init_minishell(); // msh = init_minishell();
signal_init_minishell(); // signal_init_minishell();
environment_parse(msh, envp); // environment_parse(msh, envp);
while (TRUE) // while (TRUE)
{ // {
msh->line = ft_prompt(msh); // msh->line = ft_prompt(msh);
if (msh->line == NULL) // if (msh->line == NULL)
break ; // break ;
msh->lexer = ft_lexer_new(msh); // msh->lexer = ft_lexer_new(msh);
msh->tokens = ft_parse_input(msh); // msh->tokens = ft_parse_input(msh);
ft_lstiter(msh->tokens, token_print); // ft_lstiter(msh->tokens, token_print);
msh->commands = parser_get_commands(msh); // msh->commands = parser_get_commands(msh);
simple_builtins(msh); // simple_builtins(msh);
free_minishell_line(msh); // free_minishell_line(msh);
} // }
ft_lstclear_safe(msh, &msh->commands, free_command_list); // ft_lstclear_safe(msh, &msh->commands, free_command_list);
free_minishell(&msh); // free_minishell(&msh);
rl_clear_history(); // rl_clear_history();
return (EXIT_SUCCESS); // return (EXIT_SUCCESS);
} // }
static void main_loop(t_minishell *msh)
{
while (TRUE)
{
msh->line = ft_prompt(msh);
if (msh->line == NULL)
break ;
msh->lexer = ft_lexer_new(msh);
msh->tokens = ft_parse_input(msh);
ft_lstiter(msh->tokens, token_print);
msh->commands = parser_get_commands(msh);
simple_builtins(msh);
free_minishell_line(msh);
}
}
static void main_loop_from_file(t_minishell *msh, char *file_in, char *file_out)
{
int fd_in;
int fd_out;
fd_in = open(file_in, O_RDONLY);
if (fd_in < 0)
{
error_msg("open", file_in);
return ;
}
fd_out = open(file_out, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd_out < 0)
{
error_msg("open", file_out);
close(fd_in);
return ;
}
dup2(fd_out, STDOUT_FILENO);
close(fd_out);
while (TRUE)
{
msh->line = get_next_line(fd_in);
if (msh->line == NULL)
break ;
msh->lexer = ft_lexer_new(msh);
msh->tokens = ft_parse_input(msh);
msh->commands = parser_get_commands(msh);
simple_builtins(msh);
free_minishell_line(msh);
}
close(fd_in);
close(STDOUT_FILENO);
}
int main(int argc, char **argv, char **envp)
{
t_minishell *msh;
(void)argc;
(void)argv;
print_banner();
history_load();
msh = init_minishell();
signal_init_minishell();
environment_parse(msh, envp);
// main_loop(msh);
main_loop_from_file(msh, argv[1], argv[2]);
free_minishell(&msh);
rl_clear_history();
return (EXIT_SUCCESS);
}