summaryrefslogtreecommitdiffstats
path: root/src/c_input.c
diff options
context:
space:
mode:
authorsalad <fmoenne-@student.le-101.fr>2020-09-08 18:07:14 +0200
committersalad <fmoenne-@student.le-101.fr>2020-09-08 18:07:14 +0200
commite9d902e8d9475785952355e228dcffd223bac8be (patch)
treec4995c9e701f3128999849ccec88b0be84627800 /src/c_input.c
parentadded TODO, this is a baseline before reformatting (diff)
download42-minishell-e9d902e8d9475785952355e228dcffd223bac8be.tar.gz
42-minishell-e9d902e8d9475785952355e228dcffd223bac8be.tar.bz2
42-minishell-e9d902e8d9475785952355e228dcffd223bac8be.tar.xz
42-minishell-e9d902e8d9475785952355e228dcffd223bac8be.tar.zst
42-minishell-e9d902e8d9475785952355e228dcffd223bac8be.zip
clean, ca fait ziz
Diffstat (limited to 'src/c_input.c')
-rw-r--r--src/c_input.c105
1 files changed, 49 insertions, 56 deletions
diff --git a/src/c_input.c b/src/c_input.c
index a4b62ca..fa61c6a 100644
--- a/src/c_input.c
+++ b/src/c_input.c
@@ -11,76 +11,69 @@
/* ************************************************************************** */
#include <libft.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <term.h>
#include <unistd.h>
-#include <sys/ioctl.h>
+#include <term.h>
#include "c_init.h"
+#include "c_input.h"
+#include "c_utils.h"
#include "m_prompt.h"
#include "m_loop.h"
-#include "s_struct.h"
-/*
-** TODO:
-** 1 : cleanup
-** 2 : prompt on beginning
-** 3 : c_set_term(0) on command
-** 4 : MAKE IT WORK ON XTERM FFS
-** 5 : leaks
- */
-uint16_t
- c_get_win_size(struct winsize *ws)
+int16_t
+ c_new_line(char *buf,
+ char **line,
+ t_msh *msh,
+ t_caps *tcaps)
{
-
- 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);
+ write(1, buf, ft_strlen(buf));
+ tputs(tgetstr("cr", NULL), 1, ft_putchar);
+ c_set_term_raw(0);
+ m_parse_and_run_line(*line, msh);
+ *line = NULL;
+ tcaps->cpos = 0;
+ tputs(tgetstr("cr", NULL), 1, ft_putchar);
+ c_set_term_raw(1);
+ m_prompt_psx(1, msh);
+ return (1);
}
-char *c_delchar(char *str, uint16_t cpos)
+int16_t
+ c_back_slash(char **line,
+ t_caps *tcaps)
{
- char *dst;
- uint16_t i;
- uint16_t j;
-
- j = 0;
- i = 0;
- if (!(dst = malloc((ft_strlen(str)) * sizeof(char))))
- return (NULL);
- cpos -= 1;
- while (j < (ft_strlen(str) - 1))
- {
- if (i == cpos)
- i++;
- dst[j] = str[i];
- i++;
- j++;
- }
- dst[j] = '\0';
- return (dst);
+ if (tcaps->cpos >= 1)
+ {
+ *line = c_delchar(*line, tcaps->cpos);
+ tcaps->cpos -= 1;
+ tputs(tgetstr("le", NULL), 1, ft_putchar);
+ tputs(tgetstr("dc", NULL), 1, ft_putchar);
+ }
+ return (1);
}
int16_t
- c_redraw_line(char *line, uint16_t cpos, t_msh *msh)
+ c_key_right(uint32_t len,
+ t_caps *tcaps)
{
- uint32_t i;
- int16_t ret;
+ if (tcaps->cpos < len)
+ {
+ tputs(tgetstr("nd", NULL), 1, ft_putchar);
+ tcaps->cpos++;
+ }
+ return (1);
+}
- i = 0;
- (void)cpos;
- tputs(tgetstr("cr", NULL), 1, ft_putchar);
- while (i < ft_strlen(msh->ps[0]))
- {
- tputs(tgetstr("nd", NULL), 1, ft_putchar);
- i++;
- }
- ret = ft_printf("%s", line) + ft_strlen(msh->ps[0]);
- return (ret);
+int16_t
+ c_key_left(uint32_t len,
+ t_caps *tcaps)
+{
+ (void)len;
+ if (tcaps->cpos >= 1)
+ {
+ tputs(tgetstr("le", NULL), 1, ft_putchar);
+ tcaps->cpos--;
+ }
+ return (1);
}