diff --git a/includes/minishell.h b/includes/minishell.h index 6ff1c10c..1fb652c8 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/28 14:41:15 by rparodi #+# #+# */ -/* Updated: 2024/04/28 18:34:45 by maiboyer ### ########.fr */ +/* Updated: 2024/04/29 15:07:54 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,6 +27,8 @@ # include # include +# define PATH_FILES "/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" + typedef struct s_utils { t_str name_shell; diff --git a/note_raph.txt b/note_raph.txt deleted file mode 100644 index e04cc25b..00000000 --- a/note_raph.txt +++ /dev/null @@ -1 +0,0 @@ -Alors pour le coup, il faut que j'arrive a separer les strings par commande puis a chaque sep regarder les autres cmd (bisous lpb si tu passe par la ;)) diff --git a/sources/main.c b/sources/main.c index c7bd4fd9..26c24532 100644 --- a/sources/main.c +++ b/sources/main.c @@ -10,115 +10,68 @@ /* */ /* ************************************************************************** */ -#include "../includes/minishell.h" - -t_i32 ft_check_type_operators(t_str operators) -{ - if (operators == NULL) - printf("End of input"); - else if (ft_strcmp(operators, ">") == 0) - printf("Have to redirect in the file\n"); - else if (ft_strcmp(operators, ">>") == 0) - printf("Have to redirect at the end of the file after\n"); - else if (ft_strcmp(operators, ">&") == 0) - printf("Have to redirect the stdout in the file\n"); - else if (ft_strcmp(operators, "<") == 0) - printf("Have to redirect at the end of the file before\n"); - else if (ft_strcmp(operators, "<<") == 0) - printf("Have to redirect at the end of the file after\n"); - else if (ft_strcmp(operators, "<&") == 0) - printf("Have to redirect the stdout in the file\n"); - else if (ft_strcmp(operators, ";") == 0) - printf("Have to execute one more command\n"); - else if (ft_strcmp(operators, ";") == 0) - printf("Have to execute one more command\n"); - else if (ft_strcmp(operators, "|") == 0) - printf("I have to pipe a operators !\n"); - else if (ft_strcmp(operators, "||") == 0) - printf("Or something\n"); - else if (ft_strcmp(operators, "&&") == 0) - printf("Only if the first has exit status 0\n"); - else if (ft_strcmp(operators, "&") == 0) - printf("Parreil mais chelou\n"); - else - return (0); - return (1); -} - -void ft_check(t_utils *shcat, char **input) -{ - t_usize i; - t_usize prev_i; - - i = 0; - prev_i = 0; - while (input[i] != NULL) - { - while (ft_check_type_operators(input[i]) == 1) - i++; - if (ft_strcmp(input[i], "exit") == 0) - ft_exit(shcat, 0); - else if (ft_strcmp(input[i], "pwd") == 0) - ft_pwd(); - else if (ft_strcmp(input[i], "echo") == 0) - ft_echo("ECHO MAIS PAS ARG BORDEL !\n", "flag"); - else - ft_other_cmd(shcat, i, prev_i); - prev_i = i; - i++; - } -} - -void ft_take_args(t_utils *shcat) -{ - t_i32 i; - - i = 0; - while (1) - { - shcat->str_input = readline((t_const_str)shcat->name_shell); - if (!shcat->str_input) - ft_exit(shcat, 0); - shcat->strs_input = ft_split(shcat->str_input, ' '); - if (!shcat->strs_input) - exit(1); - ft_check(shcat, shcat->strs_input); - add_history(shcat->str_input); - ft_free_strs(shcat->strs_input); - free(shcat->str_input); - i++; - } -} - -void ft_init_arge(t_str arge[], t_utils *utils) -{ - size_t i; - char *temp; - - i = 0; - temp = NULL; - while (arge[i] != NULL) - { - if (arge[i][0] == 'P' && arge[i][1] == 'A' && arge[i][2] == 'T' && - arge[i][3] == 'H' && arge[i][4] == '=') - { - temp = ft_strdup(arge[i] + 5); - if (!temp) - ft_exit(utils, 1); - else - utils->path = ft_split(temp, ':'); - break; - } - i++; - } - if (temp != NULL) - free(temp); -} - #include "app/node.h" #include "me/string/str_len.h" #include "parser/api.h" #include "parser/parser.h" +#include "../includes/minishell.h" + +void ft_check(t_utils *shcat, char **input) { + t_usize i; + t_usize prev_i; + + i = 0; + prev_i = 0; + while (input[i] != NULL) { + if (ft_strcmp(input[i], "exit") == 0) + ft_exit(shcat, 0); + else if (ft_strcmp(input[i], "pwd") == 0) + ft_pwd(); + else + ft_other_cmd(shcat, i, prev_i); + prev_i = i; + i++; + } +} + +void ft_take_args(t_utils *shcat) +{ + t_i32 i; + + i = 0; + while (1) { + shcat->str_input = readline((t_const_str)shcat->name_shell); + if (!shcat->str_input) + ft_exit(shcat, 0); + shcat->strs_input = ft_split(shcat->str_input, ' '); + if (!shcat->strs_input) + exit(1); + ft_check(shcat, shcat->strs_input); + add_history(shcat->str_input); + ft_free_strs(shcat->strs_input); + free(shcat->str_input); + i++; + } +} + +void ft_find_path(t_str arge[], t_utils *utils) +{ + t_i32 i; + t_u8 check; + + i = 0; + check = 0; + while (arge[i] != NULL) + { + if (arge[i][0] == 'P' && arge[i][1] == 'A' && arge[i][2] == 'T' && arge[i][3] == 'H' && arge[i][4] == '=') + { + utils->path = ft_split(arge[i] + 5, ':'); + return ; + } + i++; + } + utils->path = ft_split(PATH_FILES, ':'); +} t_language *tree_sitter_bash(void); @@ -174,13 +127,19 @@ t_node parse_string(t_myparser *parser, t_const_str input) return (parse_to_nodes(parser->parser, input)); } -t_i32 main() +t_i32 main(t_i32 argc, t_str argv[], t_str arge[]) { - t_myparser parser; - t_node node; + // t_myparser parser; + // t_node node; + t_utils utils; - parser = create_myparser(); - node = parse_string(&parser, "banane \"$VAR\"'truc'"); - print_node_data(&node, 0); - free_node(node); + (void)argc; + (void)argv; + ft_find_path(arge, &utils); + utils.name_shell = "42sh > "; + ft_take_args(&utils); + // parser = create_myparser(); + // node = parse_string(&parser, "banane \"$VAR\"'truc'"); + // print_node_data(&node, 0); + // free_node(node); }