summaryrefslogtreecommitdiffstats
path: root/src/b_echo.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-08-04 15:52:47 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-08-04 15:52:47 +0200
commit5cb3373a2e5a5109a5d3b72ef45978b98f885706 (patch)
tree11a0a6f467da3ddf227d2eaf6824c4509242025e /src/b_echo.c
parentok nice (diff)
parent$? fix (diff)
download42-minishell-5cb3373a2e5a5109a5d3b72ef45978b98f885706.tar.gz
42-minishell-5cb3373a2e5a5109a5d3b72ef45978b98f885706.tar.bz2
42-minishell-5cb3373a2e5a5109a5d3b72ef45978b98f885706.tar.xz
42-minishell-5cb3373a2e5a5109a5d3b72ef45978b98f885706.tar.zst
42-minishell-5cb3373a2e5a5109a5d3b72ef45978b98f885706.zip
Merge branch 'master' into fix-pwd
Diffstat (limited to 'src/b_echo.c')
-rw-r--r--src/b_echo.c116
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);
+}