/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jschaft +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/23 14:33:45 by mcolonna #+# #+# */ /* Updated: 2024/06/21 15:48:48 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ #include "include.h" static t_list variables_from_envp(t_env env, char *const envp[]) { t_list r; char **splitted; t_variable *var; int i; r = list_createempty(env.mc_global); i = 0; while (envp[i]) { splitted = str_split(fatal_error, env.mc_global, envp[i], "="); var = mem_alloc(fatal_error, env.mc_global, sizeof(t_variable)); var->name = splitted[0]; var->value = splitted[1]; list_add(fatal_error, &r, var); i++; } return (r); } // Execute a command from a string. static int do_command(t_env *env, const char *str) { t_command command; int r; command = parse_command(env, str); if (command.error || command.empty) return (command.error); r = execute_command(env, command); return (r); } static void start(t_env *env) { env->mc_command = mem_subclass(fatal_error, env->mc_global); do_command(env, "cat ./header"); do_command(env, "echo"); mem_freeall(env->mc_command); env->mc_command = NULL; } static void prompt_command(t_env *env) { const char *command_str; env->mc_command = mem_subclass(fatal_error, env->mc_global); command_str = ask_command(env); if (!command_str) env->exit = true; else { add_history(command_str); env->errorstatus = do_command(env, command_str); } mem_freeall(env->mc_command); env->mc_command = NULL; } int main(const int argc, const char *argv[], char *const envp[]) { t_env env; t_list variables; (void)argc; (void)argv; env.exit = false; env.mc_global = mem_newclass(fatal_error); set_global_mc(env.mc_global); env.mc_command = NULL; env.errorstatus = 0; env.envp = envp; variables = variables_from_envp(env, envp); env.variables = &variables; handle_signals(); start(&env); while (!env.exit) prompt_command(&env); mem_freeall(env.mc_global); return (env.errorstatus); }