diff options
| author | nass1pro <nass1pro@gmail.com> | 2020-07-13 10:49:30 +0200 |
|---|---|---|
| committer | nass1pro <nass1pro@gmail.com> | 2020-07-13 10:49:30 +0200 |
| commit | 7d752a4fbf9c0a405c7e465efed8be164bbfbb15 (patch) | |
| tree | 1e81808d597ab91dce5ea9ed2090aaa199e752fa /src | |
| parent | e173d07bdee8650ad8afcaa1e222c963f32f9bb0 (diff) | |
| parent | 4be61bd6d7e637fdb69a7ba40e2496d3cf0c2edf (diff) | |
| download | minishell-7d752a4fbf9c0a405c7e465efed8be164bbfbb15.tar.gz minishell-7d752a4fbf9c0a405c7e465efed8be164bbfbb15.tar.bz2 minishell-7d752a4fbf9c0a405c7e465efed8be164bbfbb15.zip | |
Merge branch 'master' of https://github.com/HappyTramp/minishell
Diffstat (limited to 'src')
| -rw-r--r-- | src/eval/cmd.c | 5 | ||||
| -rw-r--r-- | src/lexer/lexer.c | 2 | ||||
| -rw-r--r-- | src/main.c | 65 | ||||
| -rw-r--r--[-rwxr-xr-x] | src/parse/cmd_parse.c | 0 | ||||
| -rw-r--r--[-rwxr-xr-x] | src/parse/parse.c | 0 | ||||
| -rw-r--r--[-rwxr-xr-x] | src/parse/redir_parse.c | 0 |
6 files changed, 70 insertions, 2 deletions
diff --git a/src/eval/cmd.c b/src/eval/cmd.c index 57f9899..fc73ed0 100644 --- a/src/eval/cmd.c +++ b/src/eval/cmd.c @@ -6,12 +6,14 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/14 10:41:31 by charles #+# #+# */ -/* Updated: 2020/06/23 09:04:38 by charles ### ########.fr */ +/* Updated: 2020/07/13 09:54:12 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "eval.h" +pid_t g_child_pid = -1; + /* ** \brief Wrap a function in a fork ** \param fd_in fork input file descriptor @@ -39,6 +41,7 @@ int fork_wrap( exit(EXIT_FAILURE); exit(status); } + g_child_pid = child_pid; wait(&child_pid); close(fds[FDS_WRITE]); // also read end? diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 8ee7048..47dedc6 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -31,6 +31,8 @@ int check_input(char *input) int i; i = 0; + /* if (input[i] == '(' || input[i] == ')') */ + /* return (i + 1); */ if (lexer_sep(input[i])) { while(input[i] == input[i + 1]) @@ -6,7 +6,7 @@ /* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */ -/* Updated: 2020/07/13 09:58:46 by nahaddac ### ########.fr */ +/* Updated: 2020/07/13 10:46:50 by nahaddac ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,37 @@ void token_put(void *v); void print_level(int level); void ast_print(int level, t_ast *ast); +void print_prompt(void) +{ + printf("\033[0;32m%s\033[0m$ ", getcwd(NULL, 0)); + fflush(stdout); +} + +void signal_sigint(int signum) +{ + (void)signum; + if (g_child_pid != -1) + { + kill(g_child_pid, SIGINT); + ft_putchar('\n'); + } + else + { + ft_putchar('\n'); + print_prompt(); + } +} + +void signal_sigquit(int signum) +{ + (void)signum; + if (g_child_pid != -1) + { + kill(g_child_pid, SIGQUIT); + ft_putstr("Quit (core dumped)\n"); + } +} + int main(int argc, char **argv, char **envp) { t_path path; @@ -35,6 +66,9 @@ int main(int argc, char **argv, char **envp) path = path_update(NULL, env_search(env, "PATH")); /* printf("%s\n", argv[2]); */ + signal(SIGINT, signal_sigint); + signal(SIGQUIT, signal_sigquit); + if (argc == 3 && ft_strcmp(argv[1], "-c") == 0) { //printf("%s\n", argv[2]); @@ -63,6 +97,35 @@ int main(int argc, char **argv, char **envp) //int eval_out = eval(fds, env, path, parser_out->ast); //(void)eval_out; } + else + { + int ret; + char *line; + + print_prompt(); + while ((ret = ft_getline(STDOUT_FILENO, &line)) == FTGL_OK) + { + if (*line == '\0') + { + print_prompt(); + continue; + } + t_ftlst *lex_out = lexer(line); + if (lex_out == NULL) + return (1); + + t_ret *parser_out = parse(lex_out); + + int fds[2] = {MS_NO_FD, MS_NO_FD}; + int eval_out = eval(fds, env, path, parser_out->ast); + (void)eval_out; + print_prompt(); + } + } + + ft_htdestroy(path, free); + ft_vecdestroy(env, free); + return (0); } // else // { diff --git a/src/parse/cmd_parse.c b/src/parse/cmd_parse.c index 25802c1..25802c1 100755..100644 --- a/src/parse/cmd_parse.c +++ b/src/parse/cmd_parse.c diff --git a/src/parse/parse.c b/src/parse/parse.c index 740726c..740726c 100755..100644 --- a/src/parse/parse.c +++ b/src/parse/parse.c diff --git a/src/parse/redir_parse.c b/src/parse/redir_parse.c index 768506e..768506e 100755..100644 --- a/src/parse/redir_parse.c +++ b/src/parse/redir_parse.c |
