diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 247 |
1 files changed, 105 insertions, 142 deletions
@@ -6,7 +6,7 @@ /* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */ -/* Updated: 2020/06/18 11:26:02 by charles ### ########.fr */ +/* Updated: 2020/06/18 13:46:10 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,13 +21,46 @@ #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); */ +/* } */ void token_put(void *v) { @@ -78,150 +111,80 @@ void ast_print(int level, t_ast *ast) 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])); - - /* ft_lstiter(lex_out, token_debug); */ - - t_ret *parser_out = parse(lex_out); - ast_print(0, parser_out->ast); - - /* 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 eval_out = eval_cmd(env, path, parser_out->ast); */ - /* (void)eval_out; */ - } + 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"))); */ + + 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_ast *cmd1 = ast_new(AST_CMD); + cmd1->cmd_argv = args1; + cmd1->redirs = NULL; + + t_ast *cmd2 = ast_new(AST_CMD); + cmd2->cmd_argv = args2; + cmd2->redirs = NULL; + + 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 ///////////////////////////////////////////////////////////////////////////////////////// |
