aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c65
1 files changed, 64 insertions, 1 deletions
diff --git a/src/main.c b/src/main.c
index ee57e0b..c8e1664 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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
// {