VPATH := src
SRC := main.c debug_tools.c init.c signal_handling.c repl.c new_token.c \
free_token.c new_node.c free_node.c tokenizer.c parser.c \
- parse_cmd.c collect_redirs.c print_ast.c
+ parse_cmd.c collect_redirs.c print_ast.c interpreter.c env.c
OBJ_DIR := _obj
OBJ := $(addprefix $(OBJ_DIR)/, $(SRC:%.c=%.o))
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/08 16:53:39 by dkaiser #+# #+# */
-/* Updated: 2024/10/17 15:37:32 by chuhlig ### ########.fr */
+/* Updated: 2024/10/17 15:59:59 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
+#include "libft.h"
+
typedef struct s_env
{
char *name;
void getenvlst(t_env **env, char **en);
void free_envlst(t_env **env);
-
+char *env_get(t_env *env, char *name);
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/22 17:14:49 by dkaiser #+# #+# */
-/* Updated: 2024/08/11 12:22:07 by dkaiser ### ########.fr */
+/* Updated: 2024/10/17 15:25:58 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
int init(void);
int init_signal_handling(void);
-void repl(const char *prompt);
+void repl(const char *prompt, t_env *env);
t_list *parse(t_token *tokens);
t_node *parse_cmd(t_token *tokens);
t_redirection *collect_redirs(t_token **tokens);
void print_ast(t_node *ast);
+
+int eval(t_node *node, t_env *env);
#endif
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/17 14:31:07 by chuhlig #+# #+# */
-/* Updated: 2024/10/17 15:18:44 by chuhlig ### ########.fr */
+/* Updated: 2024/10/17 15:58:28 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "env.h"
+#include "get_next_line.h"
+#include "libft.h"
void getenvlst(t_env **env, char **en)
{
while (en[i] != NULL)
{
tmp = ft_strchr(en[i], '=');
- tmp = '\0';
+ *tmp = '\0';
current = *env;
current = malloc(sizeof(t_env));
current->name = ft_strdup(en[i]);
free(cur);
cur = new;
}
-}
\ No newline at end of file
+}
+
+char *env_get(t_env *env, char *name)
+{
+ while (env != NULL)
+ {
+ if (!ft_strncmp(env->name, name, ft_strlen(name)))
+ return (env->value);
+ env = env->next;
+ }
+ return (NULL);
+}
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/05 13:15:24 by dkaiser #+# #+# */
-/* Updated: 2024/08/05 13:33:16 by dkaiser ### ########.fr */
+/* Updated: 2024/10/17 16:01:23 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
-static int eval_pipe(t_pipe *pipe);
-static int eval_cmd(t_cmd *cmd);
+static int eval_pipe(t_pipe *pipe, t_env *env);
+static int eval_cmd(t_cmd *cmd, t_env *env);
-int eval(t_node *node)
+int eval(t_node *node, t_env *env)
{
if (node->type == PIPE_NODE)
- return (eval_pipe(&node->content.pipe));
+ return (eval_pipe(&node->content.pipe, env));
else if (node->type == CMD_NODE)
- return (eval_cmd(&node->content.cmd));
+ return (eval_cmd(&node->content.cmd, env));
else
{
panic(UNREACHABLE);
}
}
-static int eval_pipe(t_pipe *pipe)
+static int eval_pipe(t_pipe *pipe, t_env *env)
{
+ dbg("TODO: PIPE");
+ eval_cmd(&pipe->left->content.cmd, env);
+ eval_cmd(&pipe->right->content.cmd, env);
return (0);
}
-static int eval_cmd(t_cmd *cmd)
+static int eval_cmd(t_cmd *cmd, t_env *env)
{
+ printf("%s\n", cmd->args[0]);
+ printf("PATH=%s\n", env_get(env, "PATH"));
return (0);
}
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/22 17:14:03 by dkaiser #+# #+# */
-/* Updated: 2024/07/18 16:44:14 by chuhlig ### ########.fr */
+/* Updated: 2024/10/17 15:34:02 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "../include/minishell.h"
-int main(void)
+int main(int argc, char *argv[], char *envp[])
{
+ t_env *env;
+ if (!argc && !argv)
+ return (1);
if (init())
return (1);
- repl("Minishell $ ");
+ getenvlst(&env, envp);
+ repl("Minishell $ ", env);
}
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/24 16:07:04 by dkaiser #+# #+# */
-/* Updated: 2024/09/13 16:26:35 by dkaiser ### ########.fr */
+/* Updated: 2024/10/17 15:25:48 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "../include/minishell.h"
#include "token.h"
-void repl(const char *prompt)
+void repl(const char *prompt, t_env *env)
{
char *input;
t_token *token_list;
tokenizer(input, &token_list, '\0');
lines = parse(token_list);
if (lines)
+ {
print_ast(lines->content);
+ eval(lines->content, env);
+ }
free(input);
}
}