aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c236
1 files changed, 100 insertions, 136 deletions
diff --git a/src/main.c b/src/main.c
index 1dee5b1..f6555ad 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */
-/* Updated: 2020/06/16 14:49:59 by charles ### ########.fr */
+/* Updated: 2020/06/17 17:10:08 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -21,159 +21,123 @@
#include "parser.h"
#include "eval.h"
-void token_debug(void *v)
-{
- t_token *t;
-
- t= v;
- printf("[%4d %d] (%s)\n", t->tag, !!(t->tag & TAG_STICK), t->content);
-}
+/* void token_debug(void *v) */
+/* { */
+/* t_token *t; */
+/* */
+/* t= v; */
+/* printf("[%4d %d] (%s)\n", t->tag, !!(t->tag & TAG_STICK), t->content); */
+/* } */
+/* */
+/* int main(int argc, char **argv, char **envp) */
+/* { */
+/* t_path path; */
+/* t_env env; */
+/* */
+/* env = env_from_array(envp); */
+/* path = path_update(NULL, env_search(env, "PATH")); */
+/* #<{(| printf("%s\n", argv[2]); |)}># */
+/* */
+/* if (argc == 3 && ft_strcmp(argv[1], "-c") == 0) */
+/* { */
+/* //printf("%s\n", argv[2]); */
+/* t_ftlst *lex_out = lexer(ft_strdup(argv[2])); */
+/* */
+/* //ft_lstiter(lex_out, token_debug); */
+/* */
+/* t_ret *parser_out = parse(lex_out); */
+/* */
+/* #<{(| printf("===cmd_argv===\n"); |)}># */
+/* #<{(| ft_lstiter(parser_out->ast->cmd_argv, token_debug); |)}># */
+/* #<{(| printf("===redirs===\n"); |)}># */
+/* #<{(| ft_lstiter(parser_out->ast->redirs, token_debug); |)}># */
+/* */
+/* int fds[2] = {MS_NO_FD, MS_NO_FD}; */
+/* int eval_out = eval_cmd(fds, env, path, parser_out->ast); */
+/* (void)eval_out; */
+/* } */
+/* */
+/* ft_htdestroy(path, free); */
+/* ft_vecdestroy(env, free); */
+/* return (0); */
+/* } */
int main(int argc, char **argv, char **envp)
{
+ (void)argc;
+ (void)argv;
+ /* (void)envp; */
t_path path;
t_env env;
-
+ /* char *line; */
+ /* int ret; */
env = env_from_array(envp);
path = path_update(NULL, env_search(env, "PATH"));
- /* printf("%s\n", argv[2]); */
- if (argc == 3 && ft_strcmp(argv[1], "-c") == 0)
- {
- //printf("%s\n", argv[2]);
- t_ftlst *lex_out = lexer(ft_strdup(argv[2]));
+ t_ftlst *args1 = NULL;
+ ft_lstpush_back(&args1, ft_lstnew(token_new(TAG_STR, "ls")));
+ ft_lstpush_back(&args1, ft_lstnew(token_new(TAG_STR, "-l")));
+
+ t_ftlst *args2 = NULL;
+ ft_lstpush_back(&args2, ft_lstnew(token_new(TAG_STR, "cat")));
+ ft_lstpush_back(&args2, ft_lstnew(token_new(TAG_STR, "-e")));
+ /* ft_lstpush_back(&args2, ft_lstnew(token_new(TAG_STR, "je"))); */
+
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "ls"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-a"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-l"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$$LFS$TERM$TERM."))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "*.c"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "src.c include*.h"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$A$B"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\$TERM"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$TER\\M"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\\\"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "''''$TEST\\TEST"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE, ",$TEST,$B,"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE , "$TEST"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */
+ /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "$TEST"))); */
- //ft_lstiter(lex_out, token_debug);
+ t_ftlst *redirs = NULL;
+ ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_OUT, NULL)));
+ ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "bonjour")));
+ /* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_APPEND, NULL))); */
+ /* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo"))); */
+ /* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_OUT, NULL))); */
+ /* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo1"))); */
- t_ret *parser_out = parse(lex_out);
+ t_ast *cmd1 = ast_new(AST_CMD);
+ cmd1->cmd_argv = args1;
+ cmd1->redirs = NULL;
- /* printf("===cmd_argv===\n"); */
- /* ft_lstiter(parser_out->ast->cmd_argv, token_debug); */
- /* printf("===redirs===\n"); */
- /* ft_lstiter(parser_out->ast->redirs, token_debug); */
+ t_ast *cmd2 = ast_new(AST_CMD);
+ cmd2->cmd_argv = args2;
+ cmd2->redirs = NULL;
- int eval_out = eval_cmd(env, path, parser_out->ast);
- (void)eval_out;
- }
+ t_ast *op_ast = ast_new(AST_OP);
+ op_ast->op.left = cmd1;
+ op_ast->op.right = cmd2;
+ op_ast->op.sep = TAG_PIPE;
+
+ int fds[2] = {MS_NO_FD, MS_NO_FD};
+ printf("eval %d\n", eval(fds, env, path, op_ast));
+
+ /* char **as = preprocess(l, env); */
+ /* printf("%p\n", as); */
+ /* printf("%p\n", *as); */
+ /* char **tmp = as; */
+ /* while (*as != NULL) */
+ /* puts(*as++); */
+ /* ft_split_destroy(tmp); */
ft_htdestroy(path, free);
ft_vecdestroy(env, free);
return (0);
}
-/* int main(int argc, char **argv, char **envp) */
-/* { */
-/* (void)argc; */
-/* (void)argv; */
-/* #<{(| (void)envp; |)}># */
-/* t_path path; */
-/* t_env env; */
-/* #<{(| char *line; |)}># */
-/* #<{(| int ret; |)}># */
-/* env = env_from_array(envp); */
-/* path = path_update(NULL, env_search(env, "PATH")); */
-/* #<{(| |)}># */
-/* #<{(| t_ast *ast; |)}># */
-/* #<{(| t_line line; |)}># */
-/* #<{(| t_cmd cmd; |)}># */
-/* #<{(| t_eval_state state; |)}># */
-/* #<{(| |)}># */
-/* #<{(| cmd.argv = ft_split("ls -l", ' '); |)}># */
-/* #<{(| cmd.in = NULL; |)}># */
-/* #<{(| cmd.out = NULL; |)}># */
-/* #<{(| cmd.is_append = false; |)}># */
-/* #<{(| |)}># */
-/* #<{(| line.left = ast_new(TAG_CMD, &cmd); |)}># */
-/* #<{(| line.right = NULL; |)}># */
-/* #<{(| line.sep = SEP_END; |)}># */
-/* #<{(| ast = ast_new(TAG_LINE, &line); |)}># */
-/* #<{(| printf("%p\n", ast); |)}># */
-/* #<{(| printf("%d\n", ast->tag); |)}># */
-/* #<{(| printf("%p\n", ast->data.line.left); |)}># */
-/* #<{(| printf("%p\n", ast->data.line.right); |)}># */
-/* #<{(| printf("%d\n", ast->data.line.left->tag); |)}># */
-/* #<{(| printf("%p\n", ast->data.line.left->data.cmd.argv); |)}># */
-/* #<{(| printf("%s\n", ast->data.line.left->data.cmd.argv[0]); |)}># */
-/* #<{(| printf("%s\n", ast->data.line.left->data.cmd.argv[1]); |)}># */
-/* #<{(| state.pipe_in[0] = -1; |)}># */
-/* #<{(| state.pipe_in[1] = -1; |)}># */
-/* #<{(| state.pipe_out[0] = -1; |)}># */
-/* #<{(| state.pipe_out[1] = -1; |)}># */
-/* #<{(| state.path = path; |)}># */
-/* #<{(| state.env = env; |)}># */
-/* #<{(| t_io_frame frame; |)}># */
-/* #<{(| io_frame_init(&frame); |)}># */
-/* #<{(| printf("ret: %d %s\n", eval(&frame,&state, ast), strerror(errno)); |)}># */
-/* #<{(| char buf[2048]; |)}># */
-/* #<{(| printf("%s\n", getcwd(buf, 2048)); |)}># */
-/* #<{(| builtin_env(NULL, state.env); |)}># */
-/* #<{(| ast_destroy(ast); |)}># */
-/* #<{(| while ((ret = ft_next_line(STDIN_FILENO, &line)) == 1) |)}># */
-/* #<{(| { |)}># */
-/* #<{(| if (eval(parse(line)) == -1) |)}># */
-/* #<{(| continue ; // and display error |)}># */
-/* #<{(| free(line); |)}># */
-/* #<{(| } |)}># */
-/* #<{(| free(line); |)}># */
-/* #<{(| ms_glob("src#<{(|"); |)}># */
-/* #<{(| char *j = ms_glob("|)}>#*.c"); |)}># */
-/* #<{(| printf("%s\n", j); |)}># */
-/* #<{(| free(j); |)}># */
-/* */
-/* t_ftlst *args = NULL; */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "echo"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "bonjour"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "je"))); |)}># */
-/* */
-/* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "cat"))); */
-/* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-e"))); */
-/* */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "ls"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-a"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-l"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$$LFS$TERM$TERM."))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "|)}>#*.c"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "src#<{(|.c include#<{(|.h"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$A$B"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\$TERM"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$TER\\M"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\\\"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "''''$TEST\\TEST"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE, ",$TEST,$B,"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE , "$TEST"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */
-/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "$TEST"))); |)}># */
-/* */
-/* t_ftlst *redirs = NULL; */
-/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_IN, NULL))); */
-/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "bonjour"))); */
-/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_APPEND, NULL))); */
-/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo"))); */
-/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_OUT, NULL))); */
-/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo1"))); */
-/* */
-/* t_ast *ast = ast_new(AST_CMD); */
-/* ast->cmd_argv = args; */
-/* ast->redirs = redirs; */
-/* */
-/* printf("eval %d\n", eval_cmd(env, path, ast)); */
-/* ast_destroy(ast); */
-/* */
-/* */
-/* #<{(| char **as = preprocess(l, env); |)}># */
-/* #<{(| printf("%p\n", as); |)}># */
-/* #<{(| printf("%p\n", *as); |)}># */
-/* #<{(| char **tmp = as; |)}># */
-/* #<{(| while (*as != NULL) |)}># */
-/* #<{(| puts(*as++); |)}># */
-/* #<{(| ft_split_destroy(tmp); |)}># */
-/* ft_htdestroy(path, free); */
-/* ft_vecdestroy(env, free); */
-/* return (0); */
-/* } */
-
/////////////////////////////////////////////////////////////////////////////////////////
// lexer main
/////////////////////////////////////////////////////////////////////////////////////////