/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* c_input.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 "c_init.h" #include "c_input.h" #include "c_utils.h" #include "m_prompt.h" #include "m_loop.h" int16_t c_init_line(uint8_t psx, t_caps *tcaps) { if (tcaps) { c_set_term_raw(1); signal(SIGINT, SIG_IGN); tcaps->cpos = 0; tcaps->lpos = 0; tcaps->psx = psx - 1; return (1); } else return (-1); } uint16_t c_get_win_size(struct winsize *ws) { if (!(ioctl(STDOUT_FILENO, TIOCGWINSZ, ws))) return (-1); if (!ws->ws_col) ws->ws_col = 80; if (!ws->ws_row) ws->ws_row = 80; return (1); } uint32_t c_get_line_num(char *line, uint32_t cpos, uint32_t plen, t_caps *tcaps) { uint32_t it; uint32_t line_num; uint32_t len; it = 0; line_num = 0; tcaps->lpos = 1; len = ft_strlen(line); if ((len) < (tcaps->ws.ws_col - plen)) return (1); while (it < len) { it += (it == 0) ? (tcaps->ws.ws_col - plen) : tcaps->ws.ws_col; tcaps->lpos += (it < cpos) ? 1 : 0; line_num++; } return (line_num); } int16_t c_back_slash(char **line, uint32_t plen, t_caps *tcaps) { int32_t pos; pos = -1; if (tcaps->cpos >= 1) { if (((tcaps->cpos + plen) % (tcaps->ws.ws_col)) == 0) { tputs(tgetstr("up", NULL), 1, ft_putchar); while(++pos <= (tcaps->ws.ws_col)) tputs(tgetstr("nd", NULL), 1, ft_putchar); } else { tputs(tgetstr("le", NULL), 1, ft_putchar); } tputs(tgetstr("dc", NULL), 1, ft_putchar); *line = c_delchar(*line, tcaps->cpos); tcaps->cpos--; } return (1); } int16_t c_ctrl_c(char *line, t_caps *tcaps, t_msh *msh) { (void)tcaps; (void)line; msh->ret = 130; c_new_line(NULL, tcaps); return (1); }