#ifndef MINISHELL_H # define MINISHELL_H # include "libft.h" # include # include # include # include # include # include # define SHELL_PROMPT "$> " # define BUFF_SIZE 32 # define READ_BUF 32 # define FT_KEY_C_D "\x4" # define FT_KEY_C_H "\x8" # define FT_KEY_TAB "\x9" # define FT_KEY_ENTER "\xa" # define FT_KEY_C_K "\xb" # define FT_KEY_C_L "\xc" # define FT_KEY_C_U "\x15" # define FT_KEY_ESC "\x1b" # define FT_KEY_UP "\x1b\x5b\x41" # define FT_KEY_DOWN "\x1b\x5b\x42" # define FT_KEY_RIGHT "\x1b\x5b\x43" # define FT_KEY_LEFT "\x1b\x5b\x44" # define FT_KEY_C_UP "\x1b\x4f\x41" # define FT_KEY_C_DOWN "\x1b\x4f\x42" # define FT_KEY_C_RIGHT "\x1b\x4f\x43" # define FT_KEY_C_LEFT "\x1b\x4f\x44" # define FT_KEY_DEL "\x7f" typedef struct s_stof { char *name; int (*f)(); } t_stof; typedef struct s_data { char **env; t_dlist *history; t_dlist *input_mem; } t_data; extern t_stof g_builtins[]; extern t_stof g_keys[]; extern pid_t g_pid; extern int g_mode; void sig_handler(int signo); #define MODE_INPUT 0b0001 #define MODE_EXEC 0b0010 int ft_tc_init(t_data *data); int ft_interactive_sh(t_data *data); int ft_prompt(void); int ft_input_is_escaped(t_dlist *input_chain); int ft_history_add(t_data *data, t_dlist *input_chain); typedef int key_press(t_data *data, t_dlist **input_chain, char *buf); key_press ft_clear_line; key_press ft_line_up; key_press ft_line_down; key_press ft_line_start; key_press ft_line_end; key_press ft_history_up; key_press ft_history_down; key_press ft_cursor_left; key_press ft_cursor_right; key_press ft_word_left; key_press ft_word_right; key_press ft_key_del; key_press ft_key_enter; key_press ft_key_basic; key_press ft_key_ctrl_d; int ft_cmd_process(char **argv, char ***env_p); int ft_cmd_exec(char *execpath, char **argv, char ***env_p); char **ft_cmd_getav(char *cmd); int ft_builtin(char **av, char ***env); int builtin_echo(char **av, char ***env); int builtin_cd(char **av, char ***env); int builtin_cd_opts(char **av, int *opts); char *builtin_cd_special(char **av, char **env); int builtin_exit(char **av, char ***env); int builtin_setenv(char **av, char ***env); int builtin_unsetenv(char **av, char ***env); int builtin_env(char **av, char ***env); void ft_expand_dollar(char **av, char **env); char *ft_env_getval(char **env, char *key); int ft_path_access(char *execpath, char *execname); char *ft_path_findexec(char **path, char *execname); #endif