/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* c_keys.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 "c_init.h" #include "c_utils.h" #include "m_prompt.h" short c_home_key(unsigned int plen, t_caps *tcaps) { unsigned int i; short j; i = tcaps->cpos; j = tcaps->lpos; if (tcaps->cpos > 0 && j > 0) { i = 0; while (--j > 0) tputs(tgetstr("up", NULL), 1, ft_putchar); tputs(tgetstr("cr", NULL), 1, ft_putchar); while (++i <= plen) tputs(tgetstr("nd", NULL), 1, ft_putchar); } else if (i >= 1) { while (--i >= 0) tputs(tgetstr("le", NULL), 1, ft_putchar); } tcaps->cpos = 0; tcaps->lpos = 1; return (1); } short c_end_key(unsigned short size, unsigned int plen, t_caps *tcaps) { unsigned short i; unsigned short j; i = tcaps->cpos; j = tcaps->lpos; if ((tcaps->cpos < size) && (j < tcaps->nlines)) { i = 0; while (j < tcaps->nlines) { tputs(tgetstr("do", NULL), 1, ft_putchar); i += tcaps->ws.ws_col; j++; } tputs(tgetstr("cr", NULL), 1, ft_putchar); while (i++ < (size + plen)) tputs(tgetstr("nd", NULL), 1, ft_putchar); } else while (i++ < size) tputs(tgetstr("nd", NULL), 1, ft_putchar); tcaps->cpos = size; tcaps->lpos = tcaps->nlines; return (1); } short c_key_right(unsigned int len, unsigned int plen, t_caps *tcaps) { if ((((tcaps->cpos + plen + 1) % (tcaps->ws.ws_col)) == 0) && tcaps->cpos < len) { tputs(tgetstr("do", NULL), 1, ft_putchar); tputs(tgetstr("cr", NULL), 1, ft_putchar); tcaps->cpos++; tcaps->lpos++; } else if (tcaps->cpos < len) { tputs(tgetstr("nd", NULL), 1, ft_putchar); tcaps->cpos++; } return (1); } short c_key_left(unsigned int plen, t_caps *tcaps) { int pos; pos = -1; if (((tcaps->cpos + plen) % tcaps->ws.ws_col) == 0 && tcaps->cpos >= 1) { tputs(tgetstr("up", NULL), 1, ft_putchar); while (++pos <= tcaps->ws.ws_col) tputs(tgetstr("nd", NULL), 1, ft_putchar); tcaps->cpos--; tcaps->lpos--; } else if (tcaps->cpos >= 1) { tputs(tgetstr("le", NULL), 1, ft_putchar); tcaps->cpos--; } return (1); }