diff options
Diffstat (limited to '')
| -rw-r--r-- | src/c_input.c | 92 | 
1 files changed, 92 insertions, 0 deletions
| diff --git a/src/c_input.c b/src/c_input.c new file mode 100644 index 0000000..8fb4b72 --- /dev/null +++ b/src/c_input.c @@ -0,0 +1,92 @@ +/* ************************************************************************** */ +/*                                                                            */ +/*                                                        :::      ::::::::   */ +/*   c_input.c                                          :+:      :+:    :+:   */ +/*                                                    +:+ +:+         +:+     */ +/*   By: rbousset <marvin@42.fr>                    +#+  +:+       +#+        */ +/*                                                +#+#+#+#+#+   +#+           */ +/*   Created: 2020/02/14 17:19:27 by rbousset          #+#    #+#             */ +/*   Updated: 2020/02/14 17:19:29 by rbousset         ###   ########lyon.fr   */ +/*                                                                            */ +/* ************************************************************************** */ + +#include <unistd.h> +#include <stdlib.h> +#include <libft.h> +#include <signal.h> +#include <term.h> + +#include "c_init.h" +#include "c_keys.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) +{ +	char	*term; + +	if (tcaps) +	{ +		term = getenv("TERM"); +		if (!tgetent(NULL, term)) +			return (-1); +		c_set_term_raw(1); +		signal(SIGINT, SIG_IGN); +		tcaps->cpos = 0; +		tcaps->lpos = 0; +		tcaps->nlines = 1; +		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) +{ +	if (tcaps->cpos >= 1) +	{ +		*line = c_delchar(*line, tcaps->cpos); +		c_key_left(plen, tcaps); +		tputs(tgetstr("cd", NULL), 1, ft_putchar); +	} +	return (1); +} | 
