diff --git a/includes/utils.h b/includes/utils.h index d4bbd32..17fa981 100644 --- a/includes/utils.h +++ b/includes/utils.h @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* utils.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/12 21:05:17 by moabid #+# #+# */ -/* Updated: 2022/10/26 04:37:59 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:44:16 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,6 +38,16 @@ struct s_variable; struct s_minishell; typedef struct s_env t_env; +struct s_data +{ + int i; + int j; + bool open; + char q_type; + char *ret_str; + char *str; +}; + char *get_path(char *cmd, t_env *env); void ft_error(char *str); int my_strcmp(const char *strg1, char *strg2); @@ -177,5 +187,13 @@ void print_the_env(t_env *enviroment); void minishell_process_command_pipe(struct s_ast *ast, struct s_minishell *minishell, int type); void freeme(char **paths); +void parentesis_open(struct s_data *d); + +void open_true_dollarsign(struct s_data *d); +void closed_true_dollarsign(struct s_data *d); +char *quotes_remover(char *str, char *set, struct s_minishell *minishell); + + +int ft_atoi_special(char *str); #endif \ No newline at end of file diff --git a/src/builtin/ft_export.c b/src/builtin/ft_export.c index c4698d0..607ac64 100644 --- a/src/builtin/ft_export.c +++ b/src/builtin/ft_export.c @@ -6,7 +6,7 @@ /* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/09/08 11:46:09 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:20:14 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:26:08 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -75,7 +75,8 @@ bool indentfier_exist(t_env *env, char *str) return (false); } -t_env *export_the_argv(struct s_minishell *minishell, char **argv, t_env *enviroment) +t_env *export_the_argv(struct s_minishell *minishell, + char **argv, t_env *enviroment) { t_env *new; int i; @@ -123,7 +124,7 @@ t_env *export_the_argv(struct s_minishell *minishell, char **argv, t_env *enviro return (true); } */ -void ft_export(char **argv, struct s_minishell *minishell) +void ft_export(char **argv, struct s_minishell *minishell) { t_env *enviroment; t_env *head; diff --git a/src/builtin/ft_pwd.c b/src/builtin/ft_pwd.c index 6cacf59..ba966f8 100644 --- a/src/builtin/ft_pwd.c +++ b/src/builtin/ft_pwd.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* ft_pwd.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/17 17:47:09 by frmessin #+# #+# */ -/* Updated: 2022/10/26 03:20:14 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:25:23 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,7 +25,7 @@ char *get_pwd(void) return (pwd); } -void ft_pwd (struct s_minishell *minishell) +void ft_pwd(struct s_minishell *minishell) { char *pwd; int i; diff --git a/src/builtin/ft_unset.c b/src/builtin/ft_unset.c index 0db7ed1..69dfde2 100644 --- a/src/builtin/ft_unset.c +++ b/src/builtin/ft_unset.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* ft_unset.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/22 12:21:03 by frmessin #+# #+# */ -/* Updated: 2022/10/26 03:20:14 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:25:02 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -61,7 +61,7 @@ bool is_valid(char *str) return (true); } -void ft_unset(char **argv, struct s_minishell *minishell) +void ft_unset(char **argv, struct s_minishell *minishell) { t_env *tmp; int i; diff --git a/src/core/execute/heredoc.c b/src/core/execute/heredoc.c index a979963..fd52bb6 100644 --- a/src/core/execute/heredoc.c +++ b/src/core/execute/heredoc.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* heredoc.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/26 02:32:03 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:08 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:25:34 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -57,7 +57,8 @@ void heredoc_execute_caller(struct s_ast *tmp, int direction) execute_heredoc(tmp->right->value.token_name, 1); } -void heredoc_forward_command(struct s_ast *ast, struct s_minishell *minishell) +void heredoc_forward_command(struct s_ast *ast, + struct s_minishell *minishell) { pid_t pid; int fd_in; diff --git a/src/core/execute/redirection.c b/src/core/execute/redirection.c index 1508806..50bbf99 100644 --- a/src/core/execute/redirection.c +++ b/src/core/execute/redirection.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* redirection.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/26 03:05:47 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:07 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:26:16 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -54,9 +54,10 @@ void process_direct(struct s_ast *ast, struct s_minishell *minishell) process_pipe_run_first(tmp, ast, minishell, 1); } -void process_redirect_overwrite(struct s_ast *ast, struct s_minishell *minishell) +void process_redirect_overwrite(struct s_ast *ast, + struct s_minishell *minishell) { - int fd_out; + int fd_out; struct s_ast *tmp; tmp = ast; @@ -68,9 +69,10 @@ void process_redirect_overwrite(struct s_ast *ast, struct s_minishell *minishell process_pipe_run_first(tmp->left, ast->left, minishell, fd_out); } -void process_redirect_append(struct s_ast *ast, struct s_minishell *minishell) +void process_redirect_append(struct s_ast *ast, + struct s_minishell *minishell) { - int fd_out; + int fd_out; struct s_ast *tmp; tmp = ast; diff --git a/src/core/execute/tree_crossing.c b/src/core/execute/tree_crossing.c index 54415f6..4748eb9 100644 --- a/src/core/execute/tree_crossing.c +++ b/src/core/execute/tree_crossing.c @@ -3,20 +3,19 @@ /* ::: :::::::: */ /* tree_crossing.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/08 16:36:31 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:08 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:25:57 by frame ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" #include "builtin.h" -/// Number of childs complex int child_n_c(struct s_ast *node) { - int num; + int num; struct s_ast *tmp; num = 0; diff --git a/src/core/execute/tree_executing.c b/src/core/execute/tree_executing.c index d702f66..ad6cba8 100644 --- a/src/core/execute/tree_executing.c +++ b/src/core/execute/tree_executing.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* tree_executing.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/09 22:36:12 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:08 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:24:34 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,9 +23,9 @@ void command_statement_run(char **command_statement, char **command_statement_create_complexe(struct s_ast *ast) { - int i; + int i; struct s_ast *tmp; - char **command_statement; + char **command_statement; i = 0; tmp = ast; diff --git a/src/core/execute/tree_run.c b/src/core/execute/tree_run.c index 12b8ff3..61053d9 100644 --- a/src/core/execute/tree_run.c +++ b/src/core/execute/tree_run.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* tree_run.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/26 02:25:16 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:08 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:26:39 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -39,8 +39,8 @@ void minishell_run_equal(struct s_ast *ast, struct s_minishell *minishell) void minishell_process_command(struct s_ast *ast, struct s_minishell *m) { struct s_ast *jump; - char **command_statement; - char *command_path; + char **command_statement; + char *command_path; jump = ast; if (ast->value.token_type == WORD && a_err(m, ast->value.token_name, 127)) @@ -67,7 +67,8 @@ void minishell_process_bool(struct s_ast *ast, struct s_minishell *minishell) minishell->return_value = 0; } -void minishell_process_pipeline(struct s_ast *ast, struct s_minishell *minishell) +void minishell_process_pipeline(struct s_ast *ast, + struct s_minishell *minishell) { minishell->type = COMPLEXE; if (ast->value.token_type == PIPE) diff --git a/src/core/parser/ast_create.c b/src/core/parser/ast_create.c index 122c277..2817575 100644 --- a/src/core/parser/ast_create.c +++ b/src/core/parser/ast_create.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* ast_create.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/23 21:56:17 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:33:01 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:23:38 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,7 +35,8 @@ void child_sanitize(struct s_ast *node, struct s_token_stream *tmp, node->value.token_name = tmp->token_name; } -struct s_ast *node_create_child(struct s_token_stream *tmp, struct s_minishell +struct s_ast *node_create_child( + struct s_token_stream *tmp, struct s_minishell *minishell, int prev_type) { struct s_ast *node; @@ -62,7 +63,7 @@ void ast_insert_child(struct s_ast *node, struct s_ast **ast, struct s_token_stream *prev, struct s_minishell *minishell) { struct s_ast *iterator; - char *prev_token; + char *prev_token; iterator = *ast; prev_token = prev->token_name; diff --git a/src/core/parser/lexical_checker.c b/src/core/parser/lexical_checker.c index 35c432e..47a947a 100644 --- a/src/core/parser/lexical_checker.c +++ b/src/core/parser/lexical_checker.c @@ -3,19 +3,20 @@ /* ::: :::::::: */ /* lexical_checker.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/25 20:38:33 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:33:01 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:24:09 by frame ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -bool token_checker(struct s_token_stream *stream, struct s_minishell *minishell) +bool token_checker(struct s_token_stream *stream, + struct s_minishell *minishell) { struct s_token_stream *tmp; - bool bracket; + bool bracket; tmp = stream; bracket = false; diff --git a/src/core/parser/semantic_analyzer.c b/src/core/parser/semantic_analyzer.c index 897a93d..f7c6e24 100644 --- a/src/core/parser/semantic_analyzer.c +++ b/src/core/parser/semantic_analyzer.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* semantic_analyzer.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/16 17:21:59 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:33:01 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:23:09 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,8 @@ #include "builtin.h" #include "parser.h" -struct s_ast *sub_tree_builder(struct s_ast *ast, struct s_minishell *minishell, +struct s_ast *sub_tree_builder(struct s_ast *ast, + struct s_minishell *minishell, struct s_token_stream **prev, struct s_token_stream **stm) { *prev = *stm; diff --git a/src/utils/enum_create_utils.c b/src/utils/enum_create_utils.c new file mode 100644 index 0000000..ba1d967 --- /dev/null +++ b/src/utils/enum_create_utils.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* enum_create_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: frame +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/26 10:15:57 by frame #+# #+# */ +/* Updated: 2022/10/26 10:19:37 by frame ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" +#include "parser.h" +#include "utils.h" + +enum e_token_type find_redirection(char *token) +{ + if (!my_strcmp(token, ">")) + return (GREATER); + else if (!my_strcmp(token, "<")) + return (LESS); + else if (!my_strcmp(token, ">>")) + return (DOUBLE_GREATER); + else + return (DOUBLE_SMALLER); +} + +enum e_token_type find_var_shit(char *token, struct s_minishell *minishell) +{ + if (token[0] == '$' + && (token[1] == '\0' + || token[1] == '\"' + || token[1] == '\'' + || minishell->single == true)) + return (WORD); + else if (token[0] == '$') + return (VARIABLE); + else + return (EQUAL); +} + +enum e_token_type find_logicalop(char *token) +{ + if (!my_strcmp(token, "&&")) + return (AND); + else + return (OR); +} + +enum e_token_type find_bool(char *token) +{ + if (!my_strcmp(token, "true")) + return (TRUE); + else + return (FALSE); +} + +enum e_token_type find_type(char *token, struct s_minishell *minishell) +{ + if (!my_strcmp(token, "|")) + return (PIPE); + else if (!my_strcmp(token, ">") || !my_strcmp(token, "<") + || !my_strcmp(token, ">>") || !my_strcmp(token, "<<")) + return (find_redirection(token)); + else if (!my_strcmp(token, "&&") || !my_strcmp(token, "||")) + return (find_logicalop(token)); + else if (token[0] == '$' || ft_strchr(token, '=')) + return (find_var_shit(token, minishell)); + else if (!my_strcmp(token, "*")) + return (STAR); + else if (!my_strcmp(token, "false") || !my_strcmp(token, "true")) + return (find_bool(token)); + return (WORD); +} diff --git a/src/utils/execute_utils/execute_utils.c b/src/utils/execute_utils/execute_utils.c index 51cd238..681e0ff 100644 --- a/src/utils/execute_utils/execute_utils.c +++ b/src/utils/execute_utils/execute_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* execute_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/26 02:35:26 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:07 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:28:24 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -61,7 +61,7 @@ void new_line_remove(char *line) int ast_child_num(struct s_ast *node) { - int num; + int num; struct s_ast *tmp; num = 0; diff --git a/src/utils/execute_utils/tree_run_utils.c b/src/utils/execute_utils/tree_run_utils.c index 741c786..0b8fc9c 100644 --- a/src/utils/execute_utils/tree_run_utils.c +++ b/src/utils/execute_utils/tree_run_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* tree_run_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/26 02:27:07 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:07 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:28:45 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,9 +14,9 @@ char **command_statement_create(struct s_ast *ast) { - int i; + int i; struct s_ast *tmp; - char **command_statement; + char **command_statement; i = 0; tmp = ast; diff --git a/src/utils/general_utils.c b/src/utils/general_utils.c index 2dec0d1..942b4b7 100644 --- a/src/utils/general_utils.c +++ b/src/utils/general_utils.c @@ -3,128 +3,21 @@ /* ::: :::::::: */ /* general_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/12 19:59:16 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:07 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:12:28 by frame ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" #include "utils.h" -char *parser(char *cmd, char *paths) -{ - char *with_slash; - char *l_path; - char *path; - - with_slash = ft_strrchr(cmd, '/'); - if (with_slash) - { - path = ft_strjoin(paths, with_slash); - if (access(path, F_OK | X_OK) == 0) - return (path); - } - else - { - l_path = ft_strjoin(paths, "/"); - path = ft_strjoin(l_path, cmd); - free(l_path); - if (access(path, F_OK | X_OK) == 0) - return (path); - } - free(path); - return (NULL); -} - -void freeme(char **paths) -{ - int i; - - i = 0; - while (paths[i]) - { - free(paths[i]); - i++; - } - free(paths); -} - -// bool ft_iscommand(char *str, char **env) -bool ft_iscommand(char *str, t_env *env) -{ - if (get_path(str, env)) - return (true); - return (false); -} - -bool ft_isfile(char *str) -{ - if (access(str, F_OK)) - return (true); - return (false); -} - -bool ft_isword(char *str) -{ - int i; - - i = 0; - if(str[0] == '-') - i++; - while (str[i] != '\0') - { - if (!ft_isalnum(str[i])) - return (false); - i++; - } - return (true); -} - -void ft_error(char *str) -{ - write(2, str, ft_strlen(str)); - exit(1); -} - void minishell_error(struct s_minishell *minishell, char *str) { minishell->return_value = 1; } -int my_strcmp(const char *strg1, char *strg2) -{ - if ((strg1 == NULL && strg2 == NULL)) - return (0); - else if (!strg1 || !strg2) - return (1); - while ((*strg1 != '\0' && *strg2 != '\0') && *strg1 == *strg2) - { - strg1++; - strg2++; - } - if (*strg1 == *strg2) - return (0); - else - return (*strg1 - *strg2); -} - -void *ft_malloc(size_t size) -{ - void *ptr; - - ptr = malloc(size); - if (ptr) - ft_bzero(ptr, size); - else - { - free(ptr); - exit(1); - } - return (ptr); -} - unsigned int ft_get_nb_strs(char const *s, char c) { unsigned int i; @@ -154,15 +47,9 @@ unsigned int ft_get_nb_strs(char const *s, char c) return (nb_strs); } -int ft_isspace(int c) -{ - return (c == '\f' || c == '\n' || c == '\r' \ - || c == '\t' || c == '\v' || c == ' '); -} - bool node_contain_special_single(char *str, int c) { - int i; + int i; i = 0; while (str[i]) @@ -176,8 +63,8 @@ bool node_contain_special_single(char *str, int c) bool node_contain_special(char *str, int c) { - int i; - int count; + int i; + int count; i = 0; count = 0; @@ -191,53 +78,3 @@ bool node_contain_special(char *str, int c) } return (false); } - -char *ft_special_trim(char *str, int c, int size) -{ - char *new; - int i; - int j; - - i = 0; - j = 0; - new = ft_malloc(sizeof(char) * (size - i)); - while (str[i]) - { - if (str[i] != c) - { - new[j] = str[i]; - j++; - } - i++; - } - new[ft_strlen(new)] = '\0'; - return (new); -} - -int error_exit(struct s_minishell *minishell, char *str, char *var, int exit_code) -{ - if (var == NULL) - write(2, str, ft_strlen(str)); - else - { - write(2, str, ft_strlen(str)); - write(2, var, ft_strlen(var)); - write(2, "\'\n", 2); - } - minishell->return_value = exit_code; - return (true); -} - -struct s_ast *error_exit_null(struct s_minishell *minishell, char *str, char *var, int exit_code) -{ - if (var == NULL) - write(2, str, ft_strlen(str)); - else - { - write(2, str, ft_strlen(str)); - write(2, var, ft_strlen(var)); - write(2, "\'\n", 2); - } - minishell->return_value = exit_code; - return (NULL); -} diff --git a/src/utils/general_utils_errors.c b/src/utils/general_utils_errors.c new file mode 100644 index 0000000..a37f761 --- /dev/null +++ b/src/utils/general_utils_errors.c @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* general_utils_errors.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: frame +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/26 10:08:52 by frame #+# #+# */ +/* Updated: 2022/10/26 10:19:46 by frame ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" +#include "utils.h" + +int error_exit(struct s_minishell *minishell, + char *str, char *var, int exit_code) +{ + if (var == NULL) + write(2, str, ft_strlen(str)); + else + { + write(2, str, ft_strlen(str)); + write(2, var, ft_strlen(var)); + write(2, "\'\n", 2); + } + minishell->return_value = exit_code; + return (true); +} + +struct s_ast *error_exit_null(struct s_minishell *minishell, + char *str, char *var, int exit_code) +{ + if (var == NULL) + write(2, str, ft_strlen(str)); + else + { + write(2, str, ft_strlen(str)); + write(2, var, ft_strlen(var)); + write(2, "\'\n", 2); + } + minishell->return_value = exit_code; + return (NULL); +} + +bool ft_iscommand(char *str, t_env *env) +{ + if (get_path(str, env)) + return (true); + return (false); +} + +bool ft_isfile(char *str) +{ + if (access(str, F_OK)) + return (true); + return (false); +} + +void ft_error(char *str) +{ + write(2, str, ft_strlen(str)); + exit(1); +} diff --git a/src/utils/general_utils_mem.c b/src/utils/general_utils_mem.c new file mode 100644 index 0000000..09ae9bf --- /dev/null +++ b/src/utils/general_utils_mem.c @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* general_utils_mem.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: frame +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/26 10:10:44 by frame #+# #+# */ +/* Updated: 2022/10/26 10:19:00 by frame ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" +#include "utils.h" + +void *ft_malloc(size_t size) +{ + void *ptr; + + ptr = malloc(size); + if (ptr) + ft_bzero(ptr, size); + else + { + free(ptr); + exit(1); + } + return (ptr); +} + +void freeme(char **paths) +{ + int i; + + i = 0; + while (paths[i]) + { + free(paths[i]); + i++; + } + free(paths); +} + +void free_split(char **strs) +{ + int i; + + i = 0; + while (strs[i]) + { + free(strs[i]); + i++; + } + free(strs); + strs = NULL; +} diff --git a/src/utils/general_utils_string.c b/src/utils/general_utils_string.c new file mode 100644 index 0000000..ad965f1 --- /dev/null +++ b/src/utils/general_utils_string.c @@ -0,0 +1,100 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* general_utils_string.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: frame +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/26 10:05:59 by frame #+# #+# */ +/* Updated: 2022/10/26 10:09:45 by frame ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" +#include "utils.h" + +char *parser(char *cmd, char *paths) +{ + char *with_slash; + char *l_path; + char *path; + + with_slash = ft_strrchr(cmd, '/'); + if (with_slash) + { + path = ft_strjoin(paths, with_slash); + if (access(path, F_OK | X_OK) == 0) + return (path); + } + else + { + l_path = ft_strjoin(paths, "/"); + path = ft_strjoin(l_path, cmd); + free(l_path); + if (access(path, F_OK | X_OK) == 0) + return (path); + } + free(path); + return (NULL); +} + +char *ft_special_trim(char *str, int c, int size) +{ + char *new; + int i; + int j; + + i = 0; + j = 0; + new = ft_malloc(sizeof(char) * (size - i)); + while (str[i]) + { + if (str[i] != c) + { + new[j] = str[i]; + j++; + } + i++; + } + new[ft_strlen(new)] = '\0'; + return (new); +} + +bool ft_isword(char *str) +{ + int i; + + i = 0; + if (str[0] == '-') + i++; + while (str[i] != '\0') + { + if (!ft_isalnum(str[i])) + return (false); + i++; + } + return (true); +} + +int my_strcmp(const char *strg1, char *strg2) +{ + if ((strg1 == NULL && strg2 == NULL)) + return (0); + else if (!strg1 || !strg2) + return (1); + while ((*strg1 != '\0' && *strg2 != '\0') && *strg1 == *strg2) + { + strg1++; + strg2++; + } + if (*strg1 == *strg2) + return (0); + else + return (*strg1 - *strg2); +} + +int ft_isspace(int c) +{ + return (c == '\f' || c == '\n' || c == '\r' \ + || c == '\t' || c == '\v' || c == ' '); +} diff --git a/src/utils/libft/reader_utils.c b/src/utils/libft/reader_utils.c index def5623..dc35d51 100644 --- a/src/utils/libft/reader_utils.c +++ b/src/utils/libft/reader_utils.c @@ -3,43 +3,43 @@ /* ::: :::::::: */ /* reader_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/25 17:22:52 by frmessin #+# #+# */ -/* Updated: 2022/10/22 20:48:21 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:40:58 by frame ### ########.fr */ /* */ /* ************************************************************************** */ #include "reader.h" #include "libft.h" -// char *ft_strchr(const char *s, int c) -// { -// int i; -// char char_c; +/* char *ft_strchr(const char *s, int c) +{ + int i; + char char_c; -// i = 0; -// char_c = (char)c; -// while (s[i] != '\0') -// { -// if (s[i] == char_c) -// return ((char *)s + i); -// i++; -// } -// if (c == '\0') -// return ((char *)s + i); -// return (0); -// } + i = 0; + char_c = (char)c; + while (s[i] != '\0') + { + if (s[i] == char_c) + return ((char *)s + i); + i++; + } + if (c == '\0') + return ((char *)s + i); + return (0); +} -// size_t ft_strlen(const char *s) -// { -// size_t i; +size_t ft_strlen(const char *s) +{ + size_t i; -// i = 0; -// while (s[i] != '\0') -// i++; -// return (i); -// } + i = 0; + while (s[i] != '\0') + i++; + return (i); +}*/ int check_for_word(char *string, t_args *args) { @@ -70,7 +70,7 @@ int check_for_word(char *string, t_args *args) } return (i); } -#include + char *create_the_word(char *string, int n) { int i; @@ -86,6 +86,5 @@ char *create_the_word(char *string, int n) i++; } new_string[n] = '\0'; - // dprintf(2, "The size is : %d", n); return (new_string); } diff --git a/src/utils/libft/word_count_utils.c b/src/utils/libft/word_count_utils.c index ad380f1..d1553d3 100644 --- a/src/utils/libft/word_count_utils.c +++ b/src/utils/libft/word_count_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* word_count_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/08/25 17:23:45 by frmessin #+# #+# */ -/* Updated: 2022/10/22 20:47:55 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:42:01 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -34,7 +34,6 @@ int jump_char_inside(char *string, char *special, int *word_count, bool *word) int single_word_strchr( char **single_word, char *string) { - // printf("The string is :%s and the signle word is :%s\n", string, *single_word); bool word; size_t len; int i; @@ -61,7 +60,5 @@ int single_word_strchr( char **single_word, char *string) return (len); i++; } - // printf("The i is %d\n", len); - // printf("The single word is %s\n", single_word[i]); return (word); } diff --git a/src/utils/lists_utils.c b/src/utils/lists_utils.c index 07dc6b5..c7766d8 100644 --- a/src/utils/lists_utils.c +++ b/src/utils/lists_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* lists_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/16 20:20:26 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:33:01 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:39:59 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,17 +14,21 @@ #include "parser.h" #include "utils.h" -struct s_scripts *ft_create_stack_scripts(char **scripts_line, unsigned int count) { - int i; - struct s_scripts *new_node; - struct s_scripts *curr; +struct s_scripts *ft_create_stack_scripts( + char **scripts_line, unsigned int count) +{ + int i; + struct s_scripts *new_node; + struct s_scripts *curr; i = 0; new_node = (struct s_scripts *) ft_malloc(sizeof(struct s_scripts)); curr = new_node; - while (i < count) { + while (i < count) + { if (i < count - 1) - new_node->next = (struct s_scripts *) ft_malloc(sizeof(struct s_scripts)); + new_node->next = (struct s_scripts *) + ft_malloc(sizeof(struct s_scripts)); new_node->input_line = ft_strdup(scripts_line[i]); new_node->have_herdoc = 0; if (i == (count - 1)) @@ -36,67 +40,9 @@ struct s_scripts *ft_create_stack_scripts(char **scripts_line, unsigned int coun return (curr); } -enum e_token_type find_redirection(char *token) -{ - if (!my_strcmp(token, ">")) - return (GREATER); - else if (!my_strcmp(token, "<")) - return (LESS); - else if (!my_strcmp(token, ">>")) - return (DOUBLE_GREATER); - else - return (DOUBLE_SMALLER); -} - -enum e_token_type find_var_shit(char *token, struct s_minishell *minishell) -{ - if (token[0] == '$' - && (token[1] == '\0' - || token[1] == '\"' - || token[1] == '\'' - || minishell->single == true)) - return (WORD); - else if (token[0] == '$') - return (VARIABLE); - else - return (EQUAL); -} - -enum e_token_type find_logicalop(char *token) { - if (!my_strcmp(token, "&&")) - return (AND); - else - return (OR); -} - -enum e_token_type find_bool(char *token) { - if (!my_strcmp(token, "true")) - return (TRUE); - else - return (FALSE); -} - -enum e_token_type find_type(char *token, struct s_minishell *minishell) -{ - if (!my_strcmp(token, "|")) - return (PIPE); - else if (!my_strcmp(token, ">") || !my_strcmp(token, "<") - || !my_strcmp(token, ">>") || !my_strcmp(token, "<<")) - return (find_redirection(token)); - else if (!my_strcmp(token, "&&") || !my_strcmp(token, "||")) - return (find_logicalop(token)); - else if (token[0] == '$' || ft_strchr(token, '=')) - return (find_var_shit(token, minishell)); - else if (!my_strcmp(token, "*")) - return (STAR); - else if (!my_strcmp(token, "false") || !my_strcmp(token, "true")) - return (find_bool(token)); - return (WORD); -} - +/*minishell->single = true;*/ bool check_single(struct s_minishell *minishell, char c) { - // minishell->single = true; return (c == '\''); } @@ -133,54 +79,15 @@ char *quotes_remover(char *str, char *set, struct s_minishell *minishell) return (new_str); } -struct s_token_stream *stack_create(struct s_minishell *minishell, char **tokens, unsigned int count) { - int i; - struct s_token_stream *new_node; - struct s_token_stream *curr; - - i = 0; - new_node = (struct s_token_stream *) ft_malloc(sizeof(struct s_token_stream)); - curr = new_node; - minishell->single = false; - while (i < count) - { - if (i < count - 1) - new_node->next = (struct s_token_stream *) ft_malloc(sizeof(struct s_token_stream)); - if (!my_strcmp("\'\'", tokens[i])) - minishell->single = true; - new_node->token_name = quotes_remover(tokens[i], "\"'", minishell); - new_node->token_type = find_type(tokens[i], minishell); - new_node->closed = false; - if (i == (count - 1)) - new_node->next = NULL; - else - new_node = new_node->next; - i++; - } - return (curr); -} - -void free_split(char **strs) +void printer(struct s_scripts *scripts) { - int i; - - i = 0; - while (strs[i]) - { - free(strs[i]); - i++; - } - free(strs); - strs = NULL; -} - -void printer(struct s_scripts *scripts) { - struct s_scripts *tmp; - int i; + struct s_scripts *tmp; + int i; tmp = scripts; i = 0; - while (tmp) { + while (tmp) + { printf("[%s] -> ", tmp->input_line); tmp = tmp->next; i++; @@ -188,33 +95,12 @@ void printer(struct s_scripts *scripts) { printf("\n"); } -void printer_token(struct s_token_stream *scripts) { - struct s_token_stream *tmp; - int i; - - tmp = scripts; - i = 0; - while (tmp) { - printf("TOKEN [[%d]]: [%s] -> [%d] : {%d}\n", i, tmp->token_name, tmp->token_type, tmp->closed); - tmp = tmp->next; - i++; - } - printf("\n"); -} - -struct s_scripts *ft_create_node_script(char *cmd) +struct s_scripts *ft_create_node_script(char *cmd) { - struct s_scripts *new_node; + struct s_scripts *new_node; new_node = malloc(sizeof(struct s_scripts)); new_node->input_line = ft_strdup(cmd); new_node->next = NULL; return (new_node); } - -void garbage_collect_token(struct s_token_stream *lst) { - if (lst == NULL) - return; - free(lst->token_name); - free(lst); -} \ No newline at end of file diff --git a/src/utils/parser_utils/ast_help_funcs.c b/src/utils/parser_utils/ast_help_funcs.c index 25e0a84..be28880 100644 --- a/src/utils/parser_utils/ast_help_funcs.c +++ b/src/utils/parser_utils/ast_help_funcs.c @@ -3,24 +3,24 @@ /* ::: :::::::: */ /* ast_help_funcs.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/23 23:28:54 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:20:14 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:32:55 by frame ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -bool is_bracket(struct s_minishell *minishell, char *str) +bool is_bracket(struct s_minishell *minishell, char *str) { - if (my_strcmp(str, "(") == 0 || my_strcmp(str, ")") == 0) - { - if (my_strcmp(str, "(") == 0) - minishell->open++; - else - minishell->open--; - return (true); - } - return (false); -} \ No newline at end of file + if (my_strcmp(str, "(") == 0 || my_strcmp(str, ")") == 0) + { + if (my_strcmp(str, "(") == 0) + minishell->open++; + else + minishell->open--; + return (true); + } + return (false); +} diff --git a/src/utils/parser_utils/ast_utils.c b/src/utils/parser_utils/ast_utils.c index 5b3cd97..a364fd4 100644 --- a/src/utils/parser_utils/ast_utils.c +++ b/src/utils/parser_utils/ast_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* ast_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/23 23:16:16 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:33:01 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:30:28 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,10 +30,10 @@ struct s_ast *ast_lookup(struct s_ast *node, char *token_name) if (node->left) if (ast_lookup(node->left, token_name) != NULL) return (ast_lookup(node->left, token_name)); - return(NULL); + return (NULL); } -struct s_ast *find_prev(struct s_ast *node, char *token_name) +struct s_ast *find_prev(struct s_ast *node, char *token_name) { if (my_strcmp(node->value.token_name, token_name) == 0) { @@ -56,23 +56,23 @@ struct s_ast *find_prev(struct s_ast *node, char *token_name) bool ast_not_right_type(struct s_ast *ast) { - return (ast->value.token_type == COMMAND - || ast->value.token_type == DOUBLE_SMALLER - || ast->value.token_type == LESS - || ast->value.token_type == PIPE - || ast->value.token_type == AND - || ast->value.token_type == OR - || ast->value.token_type == TRUE - || ast->value.token_type == FALSE - || ast->value.token_type == GREATER - || ast->value.token_type == DOUBLE_GREATER - || ast->value.token_type == EQUAL - || is_builtin(ast->value.token_name) - || !my_strcmp(ast->value.token_name, "exit")); + return (ast->value.token_type == COMMAND + || ast->value.token_type == DOUBLE_SMALLER + || ast->value.token_type == LESS + || ast->value.token_type == PIPE + || ast->value.token_type == AND + || ast->value.token_type == OR + || ast->value.token_type == TRUE + || ast->value.token_type == FALSE + || ast->value.token_type == GREATER + || ast->value.token_type == DOUBLE_GREATER + || ast->value.token_type == EQUAL + || is_builtin(ast->value.token_name) + || !my_strcmp(ast->value.token_name, "exit")); } bool ast_is_assign(struct s_ast *ast) { return (ast->value.token_type == EQUAL || !my_strcmp(ast->value.token_name, "export")); -} \ No newline at end of file +} diff --git a/src/utils/parser_utils/dollar_sign.c b/src/utils/parser_utils/dollar_sign.c index 09d2d59..9afdb95 100644 --- a/src/utils/parser_utils/dollar_sign.c +++ b/src/utils/parser_utils/dollar_sign.c @@ -3,64 +3,15 @@ /* ::: :::::::: */ /* dollar_sign.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/24 10:13:29 by frame #+# #+# */ -/* Updated: 2022/10/25 20:49:38 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:36:37 by frame ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -struct s_data -{ - int i; - int j; - bool open; - char q_type; - char *ret_str; - char *str; -}; - -static void parentesis_open(struct s_data *d) -{ - d->open = true; - d->q_type = d->str[d->i]; - d->ret_str[d->j++] = d->str[d->i++]; -} - -static void open_true_dollarsign(struct s_data *d) -{ - d->ret_str[d->j++] = d->q_type; - d->ret_str[d->j++] = ' '; - if (d->str[d->i + 1]) - d->ret_str[d->j++] = d->str[d->i++]; - while (d->str[d->i] && is_alphanumeric(d->str[d->i]) == true - && d->str[d->i] != '$') - { - d->ret_str[d->j] = d->str[d->i]; - d->i++; - d->j++; - } - d->ret_str[d->j++] = ' '; - d->ret_str[d->j++] = d->q_type; -} - -static void closed_true_dollarsign(struct s_data *d) -{ - d->ret_str[d->j++] = ' '; - if (d->str[d->i + 1]) - d->ret_str[d->j++] = d->str[d->i++]; - while (d->str[d->i] && is_alphanumeric(d->str[d->i]) == true - && d->str[d->i] != '$') - { - d->ret_str[d->j] = d->str[d->i]; - d->i++; - d->j++; - } - d->ret_str[d->j++] = ' '; -} - static void data_init(char *str, struct s_data *d) { d->i = 0; diff --git a/src/utils/parser_utils/dollar_sign_utils.c b/src/utils/parser_utils/dollar_sign_utils.c new file mode 100644 index 0000000..ee6402e --- /dev/null +++ b/src/utils/parser_utils/dollar_sign_utils.c @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* dollar_sign_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: frame +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/26 09:33:37 by frame #+# #+# */ +/* Updated: 2022/10/26 10:40:59 by frame ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void parentesis_open(struct s_data *d) +{ + d->open = true; + d->q_type = d->str[d->i]; + d->ret_str[d->j++] = d->str[d->i++]; +} + +void open_true_dollarsign(struct s_data *d) +{ + d->ret_str[d->j++] = d->q_type; + d->ret_str[d->j++] = ' '; + if (d->str[d->i + 1]) + d->ret_str[d->j++] = d->str[d->i++]; + while (d->str[d->i] && is_alphanumeric(d->str[d->i]) == true + && d->str[d->i] != '$') + { + d->ret_str[d->j] = d->str[d->i]; + d->i++; + d->j++; + } + d->ret_str[d->j++] = ' '; + d->ret_str[d->j++] = d->q_type; +} + +void closed_true_dollarsign(struct s_data *d) +{ + d->ret_str[d->j++] = ' '; + if (d->str[d->i + 1]) + d->ret_str[d->j++] = d->str[d->i++]; + while (d->str[d->i] && is_alphanumeric(d->str[d->i]) == true + && d->str[d->i] != '$') + { + d->ret_str[d->j] = d->str[d->i]; + d->i++; + d->j++; + } + d->ret_str[d->j++] = ' '; +} diff --git a/src/utils/parser_utils/semantic_utils.c b/src/utils/parser_utils/semantic_utils.c index 6bf96a4..b4bcddf 100644 --- a/src/utils/parser_utils/semantic_utils.c +++ b/src/utils/parser_utils/semantic_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* semantic_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/23 21:53:19 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:33:01 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:37:45 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -39,7 +39,8 @@ struct s_ast *find_end_right(struct s_ast *node) return (node); } -struct s_ast *handle_not_right_2(struct s_minishell *minishell, struct s_ast *ast) +struct s_ast *handle_not_right_2(struct s_minishell *minishell, + struct s_ast *ast) { minishell->return_value = 127; if (!ast->left) @@ -60,7 +61,8 @@ bool is_sub_tree(int export_fg, struct s_token_stream *prev, && tmp->token_type != EQUAL); } -struct s_ast *handle_not_right(struct s_minishell *minishell, struct s_ast *ast) +struct s_ast *handle_not_right(struct s_minishell *minishell, + struct s_ast *ast) { minishell->return_value = 127; if (!ft_isalnum(ast->value.token_name[0])) diff --git a/src/utils/parser_utils/tree.c b/src/utils/parser_utils/tree.c index a0319db..72e417e 100644 --- a/src/utils/parser_utils/tree.c +++ b/src/utils/parser_utils/tree.c @@ -3,35 +3,39 @@ /* ::: :::::::: */ /* tree.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/23 21:53:55 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:25:07 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:27:51 by frame ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -static void padding ( char ch, int n ) +static void padding(char ch, int n) { - int i; + int i; - for (i = 0; i < n; i++) - putchar(ch); + i = 0; + while (i < n) + { + putchar(ch); + } } -void structure ( struct s_ast *root, int level ) +void structure(struct s_ast *root, int level) { - if (root == NULL) - { - padding('\t', level ); - puts("~"); - } - else - { - structure(root->right, level + 1 ); - padding('\t', level); - printf("%s[%d][%d]\n", root->value.token_name, root->value.token_type, root->value.exit_status); - structure(root->left, level + 1); - } -} \ No newline at end of file + if (root == NULL) + { + padding('\t', level); + puts("~"); + } + else + { + structure(root->right, level + 1); + padding('\t', level); + printf("%s[%d][%d]\n", root->value.token_name, + root->value.token_type, root->value.exit_status); + structure(root->left, level + 1); + } +} diff --git a/src/utils/split/new_split.c b/src/utils/split/new_split.c index 32aa0bd..1653417 100644 --- a/src/utils/split/new_split.c +++ b/src/utils/split/new_split.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* new_split.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/23 22:52:20 by frmessin #+# #+# */ -/* Updated: 2022/08/26 22:05:30 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:50:24 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,66 +14,66 @@ #include "parser.h" #include "utils.h" - char *manage_word(int *start, char *string, char *special, char split_char) { int i; int special_index; char *word; - + i = *start; - while(string[i] != split_char && string[i] != '\0') + while (string[i] != split_char && string[i] != '\0') { - if(in_special(string[i], special) >= 0) + if (in_special(string[i], special) >= 0) { special_index = in_special(string[i], special); i += ignore_inside_special(&string[i], special[special_index]); - if(string[i] != '\0') + if (string[i] != '\0') i++; } else - i++; + i++; } word = ft_cutter (&string[*start], i - *start); *start = i; return (word); } -char **ft_new_split(char *string, char split_char, char* special) +char **ft_new_split(char *string, char split_char, char *special) { int i; int tab; char **split_string; - split_string = malloc(sizeof(char*) * words_count(string, split_char, special) + 1); - if(split_string == NULL) - return NULL; + split_string = malloc(sizeof(char *) * words_count(string, + split_char, special) + 1); + if (split_string == NULL) + return (NULL); tab = 0; i = 0; - while(i < ft_strlen(string)) + while (i < ft_strlen(string)) { - if(string[i] != split_char) + if (string[i] != split_char) { split_string[tab] = manage_word(&i, string, special, split_char); - // printf("%s \n", split_string[tab]); tab++; } i++; - } + } split_string[tab] = NULL; return (split_string); } -// int main () -// { -// char **j; -// char **z; -// char **w; -// char *string= "echo && ; \"djhfihfihw ; kjl\""; -// j = ft_new_split(string, ';', "\"'"); -// z = ft_new_split(j[0], ' ', "\"'"); -// w = ft_new_split(j[1], ' ', "\"'"); -// //j = ft_new_split("adavo a centa ll\"ora per\" vedere la partita", ' ', "\""); -// // printf("word count should be 7"); -// return 0; -// } \ No newline at end of file +/* int main () +{ + char **j; + char **z; + char **w; + char *string= "echo && ; \"djhfihfihw ; kjl\""; + j = ft_new_split(string, ';', "\"'"); + z = ft_new_split(j[0], ' ', "\"'"); + w = ft_new_split(j[1], ' ', "\"'"); + //j = ft_new_split("adavo a centa ll\"ora per\" vedere la partita", ' ', "\""); + // printf("word count should be 7"); + return 0; +} +*/ \ No newline at end of file diff --git a/src/utils/split/utils.c b/src/utils/split/utils.c index aac8b47..c4d8aeb 100644 --- a/src/utils/split/utils.c +++ b/src/utils/split/utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/24 15:40:01 by frmessin #+# #+# */ -/* Updated: 2022/07/27 22:14:23 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:44:23 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,48 +14,48 @@ #include "parser.h" #include "utils.h" -int in_special( char c, char *special) +int in_special(char c, char *special) { - int i; + int i; i = 0; - while(special[i]) + while (special[i]) { - if(c == special[i]) + if (c == special[i]) return (i); i++; } return (-1); } -int ignore_inside_special(char *string, char c_special) +int ignore_inside_special(char *string, char c_special) { - int i; + int i; i = 0; - if(string[i] == c_special) + if (string[i] == c_special) { i++; - while(string[i] != c_special) + while (string[i] != c_special) { i++; - if(string[i] == '\0') - break; + if (string[i] == '\0') + break ; } } - return i; + return (i); } -char *ft_cutter (char *string, int n_byte) +char *ft_cutter(char *string, int n_byte) { - char *copy; - int i; + char *copy; + int i; i = 0; copy = malloc(n_byte + 1); - if(copy == NULL) - return NULL; - while(i < n_byte) + if (copy == NULL) + return (NULL); + while (i < n_byte) { copy[i] = string[i]; i++; diff --git a/src/utils/split/words_count.c b/src/utils/split/words_count.c index 413fd02..f210168 100644 --- a/src/utils/split/words_count.c +++ b/src/utils/split/words_count.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* words_count.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/24 16:49:57 by frmessin #+# #+# */ -/* Updated: 2022/08/26 22:05:59 by moabid ### ########.fr */ +/* Updated: 2022/10/26 09:46:17 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,19 +14,18 @@ #include "parser.h" #include "utils.h" - -int increase_i(char *string, char split_char, char *special) +int increase_i(char *string, char split_char, char *special) { int special_index; - int i; + int i; i = 0; special_index = in_special(string[i], special); i += ignore_inside_special(&string[i], special[special_index]) + 1; - return i; + return (i); } -int words_count(char *string, char split_char, char *special) +int words_count(char *string, char split_char, char *special) { int i; int flag; @@ -37,29 +36,29 @@ int words_count(char *string, char split_char, char *special) flag = 0; word_count = 0; i = 0; - while(i < len) + while (i < len) { - if(in_special(string[i], special) >= 0 && flag == 0) + if (in_special(string[i], special) >= 0 && flag == 0) { i += increase_i(&string[i], split_char, special); word_count++; flag = 1; } - else if(in_special(string[i], special) >= 0 && flag == 1) + else if (in_special(string[i], special) >= 0 && flag == 1) i += increase_i(&string[i], split_char, special); - else if(string[i] != split_char && flag == 0) + else if (string[i] != split_char && flag == 0) { word_count++; flag = 1; i++; } - else if(string[i] == split_char) + else if (string[i] == split_char) { - while(string[i] == split_char) + while (string[i] == split_char) i++; flag = 0; } - else if(flag == 1) + else if (flag == 1) i++; } return (word_count); diff --git a/src/utils/split_utils.c b/src/utils/split_utils.c index 3f1a4ca..5bb31f6 100644 --- a/src/utils/split_utils.c +++ b/src/utils/split_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* split_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: moabid +#+ +:+ +#+ */ +/* By: frame +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/07/18 00:12:23 by moabid #+# #+# */ -/* Updated: 2022/10/26 03:26:21 by moabid ### ########.fr */ +/* Updated: 2022/10/26 10:20:17 by frame ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,7 +37,7 @@ unsigned int get_nb_tokens(char const *s) while (s[i] && ft_isspace(s[i])) i++; } - if (ft_isspace(s[i- i])) + if (ft_isspace(s[i - i])) nb_strs++; return (nb_strs); } diff --git a/src/utils/token_list_utils.c b/src/utils/token_list_utils.c new file mode 100644 index 0000000..adf3aef --- /dev/null +++ b/src/utils/token_list_utils.c @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* token_list_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: frame +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/10/26 10:13:45 by frame #+# #+# */ +/* Updated: 2022/10/26 10:22:04 by frame ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" +#include "parser.h" +#include "utils.h" + +struct s_token_stream *stack_create(struct s_minishell *minishell, + char **tokens, unsigned int count) +{ + int i; + struct s_token_stream *new_node; + struct s_token_stream *curr; + + i = 0; + new_node = (struct s_token_stream *) ft_malloc(sizeof( + struct s_token_stream)); + curr = new_node; + minishell->single = false; + while (i < count) + { + if (i < count - 1) + new_node->next = (struct s_token_stream *) ft_malloc(sizeof( + struct s_token_stream)); + if (!my_strcmp("\'\'", tokens[i])) + minishell->single = true; + new_node->token_name = quotes_remover(tokens[i], "\"'", minishell); + new_node->token_type = find_type(tokens[i], minishell); + new_node->closed = false; + if (i == (count - 1)) + new_node->next = NULL; + else + new_node = new_node->next; + i++; + } + return (curr); +} + +void garbage_collect_token(struct s_token_stream *lst) +{ + if (lst == NULL) + return ; + free(lst->token_name); + free(lst); +} + +void printer_token(struct s_token_stream *scripts) +{ + struct s_token_stream *tmp; + int i; + + tmp = scripts; + i = 0; + while (tmp) + { + printf("TOKEN [[%d]]: [%s] -> [%d] : {%d}\n", + i, tmp->token_name, tmp->token_type, tmp->closed); + tmp = tmp->next; + i++; + } + printf("\n"); +}