diff options
Diffstat (limited to 'src/c_utils.c')
-rw-r--r-- | src/c_utils.c | 159 |
1 files changed, 75 insertions, 84 deletions
diff --git a/src/c_utils.c b/src/c_utils.c index 95ad28d..10013d7 100644 --- a/src/c_utils.c +++ b/src/c_utils.c @@ -21,34 +21,63 @@ #include "m_loop.h" #include "s_struct.h" -char - *c_new_line(char *line, t_caps *tcaps) +static unsigned int + c_redraw_next(size_t plen, unsigned int len, t_caps *tcaps) { - char *ret; - size_t i; + unsigned int i; + unsigned int j; - i = tcaps->lpos; - ret = NULL; - write(1, "\n", 1); - tputs(tgetstr("cr", NULL), 1, ft_putchar); - c_set_term_raw(0); - if (line != NULL) + i = (tcaps->nlines == tcaps->lpos) ? 0 : + tcaps->ws.ws_col * (tcaps->lpos - 1); + j = tcaps->nlines; + if (tcaps->nlines != tcaps->lpos) { - ret = ft_strdup(line); - line[0] = '\0'; + 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); + while (i < (tcaps->cpos + plen)) + { + tputs(tgetstr("nd", NULL), 1, ft_putchar); + i++; + } } - tcaps->cpos = 0; - tputs(tgetstr("cr", NULL), 1, ft_putchar); - if (i < tcaps->nlines && tcaps->nlines != 1) - while (i++ < tcaps->nlines) + else + while (len > tcaps->cpos) { - write(1, "\n", 1); + tputs(tgetstr("le", NULL), 1, ft_putchar); + len--; } - return (ret); + return (len); } -char - *c_insert_char(char *str, char c, t_caps *tcaps) +unsigned int + c_redraw_line(char *line, t_caps *tcaps) +{ + unsigned int i; + unsigned int j; + + tcaps->nlines = c_get_line_num(line, tcaps->cpos, + tcaps->plen, tcaps); + i = 0; + j = tcaps->lpos; + tputs(tgetstr("cr", NULL), 1, ft_putchar); + 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++ < tcaps->plen) + tputs(tgetstr("nd", NULL), 1, ft_putchar); + ft_printf("%s", line); + return ((tcaps->cpos != ft_strlen(line)) ? + c_redraw_next(tcaps->plen, ft_strlen(line), tcaps) : + ft_strlen(line)); +} + +void + c_add_char(char **line, char *buf, t_caps *tcaps) { int i; size_t j; @@ -57,21 +86,24 @@ char i = -1; j = 0; - len = (ft_strlen(str) + 2); - if (!(dst = (char*)malloc((len) * sizeof(char)))) - return (NULL); + len = (ft_strlen(*line) + 2); + if (!(dst = (char*)ft_calloc(sizeof(char), len))) + return ; while (++i < (int)len) - { if (i == (int)tcaps->cpos) - dst[i] = c; + dst[i] = buf[0]; else - { - dst[i] = str[j]; - j++; - } + dst[i] = line[0][j++]; + ft_memdel((void**)&line[0]); + *line = ft_strdup(dst); + ft_memdel((void**)&dst); + tcaps->cpos++; + if ((((tcaps->cpos) + tcaps->plen) % tcaps->ws.ws_col) == 0) + { + write(STDOUT_FILENO, "\n\r", 2); + return ; } - ft_memdel((void*)&str); -return (dst); + c_redraw_line(*line, tcaps); } char @@ -99,61 +131,20 @@ char return (dst); } -static short - c_redraw_next(size_t plen, unsigned int len, t_caps *tcaps) +void + c_new_line(t_caps *tcaps) { - unsigned int i; - unsigned int j; + size_t i; - 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); - while (i < (tcaps->cpos + plen)) - { - tputs(tgetstr("nd", NULL), 1, ft_putchar); - i++; - } - } - else - while (len > tcaps->cpos) + i = tcaps->lpos; + write(1, "\n", 1); + tputs(tgetstr("cr", NULL), 1, ft_putchar); + c_set_term_raw(0); + tcaps->cpos = 0; + tputs(tgetstr("cr", NULL), 1, ft_putchar); + if (i < tcaps->nlines && tcaps->nlines != 1) + while (i++ < tcaps->nlines) { - tputs(tgetstr("le", NULL), 1, ft_putchar); - len--; + write(1, "\n", 1); } - return (len); -} - -short - c_redraw_line(char *line, t_caps *tcaps, t_msh *msh) -{ - unsigned int i; - unsigned int j; - size_t len; - - (void)msh; - tcaps->nlines = c_get_line_num(line, tcaps->cpos, - tcaps->plen, tcaps); - i = 0; - j = tcaps->lpos; - tputs(tgetstr("cr", NULL), 1, ft_putchar); - 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++ < tcaps->plen) - tputs(tgetstr("nd", NULL), 1, ft_putchar); - ft_printf("%s", line); - len = ft_strlen(line); - /* ft_memdel((void*)&line); */ - return ((tcaps->cpos != len) ? - c_redraw_next(tcaps->plen, len, tcaps) : - len); } |