diff options
Diffstat (limited to 'src/b_echo.c')
| -rw-r--r-- | src/b_echo.c | 116 | 
1 files changed, 116 insertions, 0 deletions
| diff --git a/src/b_echo.c b/src/b_echo.c new file mode 100644 index 0000000..7b998d7 --- /dev/null +++ b/src/b_echo.c @@ -0,0 +1,116 @@ +/* ************************************************************************** */ +/*                                                                            */ +/*                                                        :::      ::::::::   */ +/*   b_echo.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 <stdint.h> +#include <stdio.h> +#include <stdlib.h> + +#include "s_struct.h" +#include "u_utils.h" + +/* TODO: echo "quoted text", echo 'quoted text', done*/ +/* echo kill\nbackslash\nbut\nnot\nn, echo "quoted\nnew\nlines", done */ +/* full buffer */ + +void +	e_put(char *str, +			uint8_t op) +{ +	size_t i; + +	i = -1; +	if (op == 0) +		while (str[++i]) +		{ +			if (str[i] == '\\') +				i++; +			ft_putchar(str[i]); +		} +} + +char +	*e_initb(char *ptr[], +                    char *str) +{ +    size_t    len; +    uint8_t   i; + +    len = 0; +    i = -1; +    while (ptr[++i]) +    { +        len += ft_strlen(ptr[i]); +    } +    if (!(str = (char*)malloc(len * sizeof(char)))) +        return (NULL); +    return (str); +} + +/***********************************************/ +/* void                                        */ +/*     e_fill(char *ptr[], char **str)         */ +/* {                                           */ +/*     char *bs;                               */ +/*                                             */ +/*     ft_sprintf(*str, "%s", *ptr);           */ +/*     if (*str[0] == '\"' || *str[0] == '\'') */ +/*     {                                       */ +/*         *str = ft_strtrim(*str, "\"\'");    */ +/*         ft_printf("%s", *str);              */ +/*     }                                       */ +/*     else if ((bs = ft_strrchr(*str, '\\'))) */ +/*     {                                       */ +/*         e_put(*str, 0);                     */ +/*     }                                       */ +/*     else                                    */ +/*         ft_printf("%s", *str);              */ +/* }                                           */ +/***********************************************/ + +uint8_t +	b_echo(char *args[], +			t_msh *msh) +{ +	const uint64_t	argc = u_builtins_get_argc((const char **)args); +	char			**ptr; +	char			*str; +	int8_t			nopt; + +	(void)msh; +	ptr = args; +	nopt = 0; +    str = NULL; +    str = e_initb(ptr, str); +	if (argc >= 1) +	{ +		if (ft_strncmp(ptr[0], "-n", 2) == 0) +		{ +			nopt = 1; +			ptr += 1; +		} +		if (argc - nopt >= 1) +        { +            ft_printf("%s", *ptr); +            ptr++; +            while (*ptr) +            { +                ft_printf(" %s", *ptr); +                ptr++; +            } +        } +	} +    free(str); +	if (nopt == 0) +		ft_printf("\n"); +	return (0); +} | 
