/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* c_ctrls.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include #include #include "c_ctrls.h" #include "c_utils_next.h" #include "c_utils.h" #include "m_prompt.h" #include "m_loop.h" #include "s_destroy.h" #include "u_utils.h" short c_ctrl_d(t_msh *msh) { int tmp; c_set_term_raw(0); write(STDERR_FILENO, "exit\n", 5); u_eof_fd(msh->fd); m_dump_hist(msh->curr_hist_ptr, msh); tmp = msh->ret; s_destroy(msh); exit(tmp); return (1); } short c_ctrl_l(char *line, t_caps *tcaps, t_msh *msh) { tputs(tgetstr("cl", NULL), 1, ft_putchar); m_prompt_psx(1, msh); c_redraw_line(line, tcaps); return (1); } char *c_ctrl_c(char **line, char *buf, t_msh *msh) { msh->ret = 130; buf[0] = '\n'; write(1, "\n", 1); ft_memdel((void**)line); *line = ft_strdup("\0"); return (NULL); } void c_signal_int(int signo) { static t_msh *msh; msh = NULL; signal(SIGINT, c_signal_int); (void)signo; write(1, "\n", 1); msh = c_get_msh(0, msh); msh->sig = 130; } void c_signal_ign(int signo) { t_msh *msh; msh = NULL; if (signo == 3) { write(1, "\n", 1); msh = c_get_msh(0, msh); msh->sig = 131; } signal(SIGINT, c_signal_int); (void)signo; signal(SIGTSTP, SIG_IGN); }