From 7c52c2c1f277ada465bf5c526c096a7c8a954af7 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 18 Aug 2020 19:56:32 +0200 Subject: Cooliax --- TODO.org | 2 +- src/m_prompt.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/TODO.org b/TODO.org index ab74e4e..414de31 100644 --- a/TODO.org +++ b/TODO.org @@ -25,4 +25,4 @@ ** TODO [#C] [ builtin <=== pretty cool yet simple stuff ( [ $a -eq 1 ] ) ** TODO [#C] alias ** DONE [#C] Read scripts -** TODO [#C] PSX rice +** DONE [#C] PSX rice diff --git a/src/m_prompt.c b/src/m_prompt.c index 3bffffd..887fbbe 100644 --- a/src/m_prompt.c +++ b/src/m_prompt.c @@ -14,12 +14,67 @@ #include #include +#include "d_define.h" #include "m_prompt.h" #include "s_struct.h" #include "u_vars.h" +static char + *m_subst_prompt_rice(char var[], + t_msh *msh) +{ + size_t i; + size_t j; + char *tmp; + + i = 0; + while (var[i] != '\0') + { + if (var[i] == '\\') + { + if (var[i + 1] == 'w') + { + tmp = u_get_var_value("$PWD", msh); + if (tmp != NULL) + { + var = ft_strsubst(var, "\\w", tmp); + ft_memdel((void*)&tmp); + } + else + var = ft_strsubst(var, "\\w", "?"); + } + else if (var[i + 1] == 'W') + { + tmp = u_get_var_value("$PWD", msh); + if (tmp != NULL) + { + j = ft_strlen(tmp); + if (j > 1) + { + while (tmp[j] != '/' && j != 0) + j--; + j++; + ft_memmove(tmp, tmp + j, (ft_strlen(tmp) - j) + 1); + } + var = ft_strsubst(var, "\\W", tmp); + ft_memdel((void*)&tmp); + } + else + var = ft_strsubst(var, "\\w", "?"); + } + else if (var[i + 1] == 'v') + var = ft_strsubst(var, "\\v", FT_MSH_VERSION); + else if (var[i + 1] == 's') + var = ft_strsubst(var, "\\s", FT_PROGNAME); + } + i++; + } + return (var); +} + static void - m_update_psx(uint8_t x, t_msh *msh) + m_update_psx(uint8_t x, + t_msh *msh) { char *var; char psx[5]; @@ -30,14 +85,15 @@ static void msh->ps[x - 1][0] = '\0'; return ; } + var = m_subst_prompt_rice(var, msh); ft_strlcpy(msh->ps[x - 1], var, ft_strlen(var) + 1); ft_memdel((void*)&var); } void - m_prompt_psx(uint8_t x, t_msh *msh) + m_prompt_psx(uint8_t x, + t_msh *msh) { - m_update_psx(1, msh); ft_dprintf(STDERR_FILENO, "%s", msh->ps[x - 1]); } -- cgit v1.2.3