From eafa6c47b636959b5bc26a393f5ac6eaf0b30595 Mon Sep 17 00:00:00 2001 From: gazhonsepaskwa Date: Tue, 4 Feb 2025 12:38:42 +0100 Subject: [PATCH] to be debuged --- lib/libft/srcs/format/add_to_tab.c | 16 +++++-- srcs/parsing/ast/ast.c | 58 ++++++++++++++++++++------ srcs/parsing/drawio/drawio_ast_utils.c | 37 ++++++++-------- 3 files changed, 78 insertions(+), 33 deletions(-) diff --git a/lib/libft/srcs/format/add_to_tab.c b/lib/libft/srcs/format/add_to_tab.c index a1fe352..6e8eb8a 100644 --- a/lib/libft/srcs/format/add_to_tab.c +++ b/lib/libft/srcs/format/add_to_tab.c @@ -46,11 +46,21 @@ void add_to_tab(char ***tab, char *str) char **tmp; int i; + if (!str) + return ; tmp = *tab; i = 0; - while ((*tab)[i]) - i++; - *tab = add_space_to_tab(*tab, i + 1); + if (*tab) + { + while ((*tab) && (*tab)[i]) + i++; + *tab = add_space_to_tab(*tab, i + 1); + } + else + { + *tab = malloc(sizeof(char *) * 2); + } free(tmp); (*tab)[i] = ft_strdup(str); + (*tab)[i + 1] = NULL; } diff --git a/srcs/parsing/ast/ast.c b/srcs/parsing/ast/ast.c index 3f743d8..dfca297 100644 --- a/srcs/parsing/ast/ast.c +++ b/srcs/parsing/ast/ast.c @@ -40,11 +40,13 @@ t_redir get_redir(t_node *node) { if (!node) return (_NR); - if (!ft_strncmp(node->val, ">", 1)) - return (_RED_R); - if (!ft_strncmp(node->val, ">>", 1)) + else if (!ft_strncmp(node->val, ">>", 2)) return (_RED_DR); - if (!ft_strncmp(node->val, "<", 1)) + else if (!ft_strncmp(node->val, ">", 1)) + return (_RED_R); + else if (!ft_strncmp(node->val, "<<", 2)) + return (_RED_DL); + else if (!ft_strncmp(node->val, "<", 1)) return (_RED_L); return (_NR); } @@ -76,34 +78,64 @@ char **lltotab(t_node *lst, t_node *limiter) out[count] = NULL; return (out); } -// -// void add_redir(t_redir redir, t_redir *redir_list) -// { -// int i; -// } + +void add_redir(t_redir redir, t_redir **redir_list) +{ + int i; + int j; + t_redir *tmp; + + i = 0; + while ((*redir_list)[i] != _NR) + i++; + tmp = ft_calloc(i + 2, sizeof(t_redir)); + j = -1; + while ((*redir_list)[++j] != _NR) + tmp[j] = (*redir_list)[j]; + tmp[j++] = redir; + tmp[j] = _NR; + free(*redir_list); + *redir_list = tmp; +} void create_redir(t_node *cpy, t_ast_n *self) { t_redir redir; - while (cpy) + while (cpy && cpy->next && get_redir(cpy) == _NR) { redir = get_redir(cpy); - // add_redir(redir, self->redir); + add_redir(redir, &self->redir); add_to_tab(&self->files, cpy->next->val); cpy = cpy->next; - while (cpy && get_redir(cpy) == _NR) + while (cpy && cpy->next && get_redir(cpy) == _NR) cpy = cpy->next; } } +t_node *get_cmd(t_node *lst) +{ + while (lst) + { + if (get_redir(lst) != _NR && lst->next && lst->next->next && get_redir(lst->next->next) == _NR) + return (lst); + lst = lst->next; + } + return (lst); +} + void create_cmd(t_ast_n *self, t_node *lst) { t_node *cpy; + t_node *cmd_node; self->state = _CMD; self->files = NULL; - self->redir = NULL; + self->redir = ft_calloc(1, sizeof(t_redir)); + self->redir[0] = _NR; + cmd_node = get_cmd(lst); + self->cmd = cmd_node->val; + self->args = ft_split("NOT SET", " "); cpy = lst; create_redir(cpy, self); } diff --git a/srcs/parsing/drawio/drawio_ast_utils.c b/srcs/parsing/drawio/drawio_ast_utils.c index 521656a..c1e1546 100644 --- a/srcs/parsing/drawio/drawio_ast_utils.c +++ b/srcs/parsing/drawio/drawio_ast_utils.c @@ -31,20 +31,20 @@ const char *translate_state(t_state state) return (out); } -const char *translate_redir(t_redir redir) -{ - const char *out; - - if (redir == _RED_L) - out = "redir : RED_L "; - else if (redir == _RED_R) - out = "redir : RED_R "; - else if (redir == _RED_DR) - out = "redir : _RED_DR "; - else - out = "Not redirected "; - return (out); -} +// const char *translate_redir(t_redir redir) +// { +// const char *out; +// +// if (redir == _RED_L) +// out = "redir : RED_L "; +// else if (redir == _RED_R) +// out = "redir : RED_R "; +// else if (redir == _RED_DR) +// out = "redir : _RED_DR "; +// else +// out = "Not redirected "; +// return (out); +// } t_dio_node get_cmd_txt(t_ast_n *node) { @@ -59,9 +59,12 @@ t_dio_node get_cmd_txt(t_ast_n *node) args = ft_tabstr(node->args); txt.args = ft_sprintf("%s%s%s", NL, args, NL); free(args); - txt.redir = translate_redir(node->redir); - txt.inf = ft_sprintf("Infile : %s%s", node->infile, NL); - txt.outf = ft_sprintf("Outfile : %s", node->outfile); + // txt.redir = translate_redir(node->redir); + // txt.inf = ft_sprintf("Infile : %s%s", node->infile, NL); + // txt.outf = ft_sprintf("Outfile : %s", node->outfile); + txt.redir = ""; + txt.inf = ft_sprintf("Infile : UNCHECKED"); + txt.outf = ft_sprintf("Outfile : UNCHECKED"); } else {