summaryrefslogtreecommitdiffstats
path: root/src/c_input.c
blob: a4b62ca2143f9e69e64b95195d39e982ffc548e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   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 <libft.h>
#include <stdio.h>
#include <stdlib.h>
#include <term.h>
#include <unistd.h>
#include <sys/ioctl.h>

#include "c_init.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)
{

    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);
}

char *c_delchar(char *str, uint16_t cpos)
{
    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);
}

int16_t
    c_redraw_line(char *line, uint16_t cpos, t_msh *msh)
{
    uint32_t i;
    int16_t ret;

    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);
}