diff options
Diffstat (limited to 'src/c_utils.c')
-rw-r--r-- | src/c_utils.c | 117 |
1 files changed, 52 insertions, 65 deletions
diff --git a/src/c_utils.c b/src/c_utils.c index 24545f3..8bc940e 100644 --- a/src/c_utils.c +++ b/src/c_utils.c @@ -11,7 +11,6 @@ /* ************************************************************************** */ #include <libft.h> -#include <stdio.h> #include <stdlib.h> #include <term.h> #include <unistd.h> @@ -25,24 +24,11 @@ /* ** TODO: ** delchar MOVE -** END MONGARS +** plen opti ** NORME ** FLECHES UP DOWN ** C-c globul pid - */ - -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); -} +*/ int16_t c_new_line(char *line, @@ -70,27 +56,23 @@ char char c, t_caps *tcaps) { - size_t i; - size_t j; - size_t len; - char *dst; + int32_t i; + size_t j; + size_t len; + char *dst; - i = 0; + i = -1; j = 0; len = (ft_strlen(str) + 2); if (!(dst = (char*)malloc((len) * sizeof(char)))) return (NULL); - while (i < len) + while (++i < (int32_t)len) { - if (i == tcaps->cpos) - { + if (i == (int32_t)tcaps->cpos) dst[i] = c; - i++; - } else { dst[i] = str[j]; - i++; j++; } } @@ -102,9 +84,9 @@ char *c_delchar(char *str, uint16_t cpos) { - char *dst; - uint16_t i; - uint16_t j; + char *dst; + uint16_t i; + uint16_t j; j = 0; i = 0; @@ -124,58 +106,63 @@ char return (dst); } +static int16_t + c_redraw_next(size_t plen, + uint32_t len, + t_caps *tcaps) +{ + uint32_t i; + uint32_t j; + + i = (tcaps->nlines == tcaps->lpos) ? 0 : tcaps->ws.ws_col * (tcaps->lpos - 1); + j = tcaps->nlines; + if (tcaps->nlines != tcaps->lpos) + { + while (--j > tcaps->lpos) + tputs(tgetstr("up", NULL), 1, ft_putchar); + tputs(tgetstr("up", NULL), 1, ft_putchar); + tputs(tgetstr("cr", NULL), 1, ft_putchar); /* cr, cpos mauvaise col, bonne ligne */ + while (i <= (tcaps->cpos + plen)) + { + tputs(tgetstr("nd", NULL), 1, ft_putchar); /* cr, cpos mauvaise col, bonne ligne */ + i++; + } + } + else + while (--len > tcaps->cpos) + tputs(tgetstr("le", NULL), 1, ft_putchar); + return (len); +} + int16_t c_redraw_line(char *line, t_caps *tcaps, t_msh *msh) { - uint32_t i; - uint32_t len; - uint32_t mod; - int16_t ret; + uint32_t i; + uint32_t j; + uint32_t len; - i = 0; - tcaps->nlines = c_get_line_num(line, tcaps->cpos, ft_strlen(msh->ps[0]), tcaps); len = ft_strlen(line); - mod = (tcaps->ws.ws_col); + tcaps->nlines = c_get_line_num(line, tcaps->cpos, ft_strlen(msh->ps[0]), tcaps); + j = tcaps->lpos; + i = 0; tputs(tgetstr("cr", NULL), 1, ft_putchar); - if (((tcaps->cpos + ft_strlen(msh->ps[0])) % mod) == 0) + if (((tcaps->cpos + ft_strlen(msh->ps[0])) % tcaps->ws.ws_col) == 0) { tputs(tgetstr("sf", NULL), 1, ft_putchar); return (1); } - while (--tcaps->lpos > 0) + while (--j > 0) { tputs(tgetstr("sf", NULL), 1, ft_putchar); tputs(tgetstr("up", NULL), 1, ft_putchar); tputs(tgetstr("up", NULL), 1, ft_putchar); } - while (i < ft_strlen(msh->ps[0])) - { + while (i++ < ft_strlen(msh->ps[0])) tputs(tgetstr("nd", NULL), 1, ft_putchar); - i++; - } - tcaps->nlines = c_get_line_num(line, tcaps->cpos, ft_strlen(msh->ps[0]), tcaps); - ret = ft_printf("%s", line); - i = (tcaps->nlines == (tcaps->lpos)) ? 0 : tcaps->ws.ws_col * (tcaps->lpos - 1); + ft_printf("%s", line); if (tcaps->cpos != len) - { - if (tcaps->nlines != tcaps->lpos) - { - while (--tcaps->nlines > tcaps->lpos) - tputs(tgetstr("up", NULL), 1, ft_putchar); - tputs(tgetstr("up", NULL), 1, ft_putchar); - tputs(tgetstr("cr", NULL), 1, ft_putchar); /* cr, cpos mauvaise col, bonne ligne */ - while (i <= (tcaps->cpos + ft_strlen(msh->ps[0]))) - { - tputs(tgetstr("nd", NULL), 1, ft_putchar); /* cr, cpos mauvaise col, bonne ligne */ - i++; - } - } - else - while (--len > tcaps->cpos) - tputs(tgetstr("le", NULL), 1, ft_putchar); - } - tcaps->nlines = c_get_line_num(line, tcaps->cpos, ft_strlen(msh->ps[0]), tcaps); - return (ret); + return (c_redraw_next(ft_strlen(msh->ps[0]), len, tcaps)); + return (len); } |