Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/main/minishell.h
Views: 1268
/* ************************************************************************** */1/* */2/* ::: :::::::: */3/* minishell.h :+: :+: :+: */4/* +:+ +:+ +:+ */5/* By: ssabbaji <ssabbaji@student.42.fr> +#+ +:+ +#+ */6/* +#+#+#+#+#+ +#+ */7/* Created: 2022/09/03 18:37:28 by ssabbaji #+# #+# */8/* Updated: 2022/10/07 13:04:44 by ssabbaji ### ########.fr */9/* */10/* ************************************************************************** */1112#ifndef MINISHELL_H13# define MINISHELL_H1415# include <errno.h>16# include <fcntl.h>17# include <stdio.h>18# include <readline/history.h>19# include <readline/readline.h>20# include <signal.h>21# include <stdlib.h>22# include <string.h>23# include <termios.h>24# include <unistd.h>25# include <stdbool.h>26# define WORD 127# define PIPE 228# define PARENTHESIS 429# define REDIRECTION 530# define AND 631# define SEMI 732# define TERM_OWNER 13033# define NO_BUILT 424234# define HEREDOC_EXE 424242423536typedef struct s_gvar37{38int g_where_ami;39int g_exit_stat;40int g_heredoc;41int g_continue_exe;42int g_pid;43} t_gvar;4445t_gvar g_vars;4647typedef struct s_gen48{49int index;50int count;51int old_error;52} t_gen;5354typedef struct s_split55{56int i;57int j;58int d;59int s;60char **ptr;61} t_split;6263typedef struct s_env64{65char *name;66char *value;67struct s_env *next;68struct s_env *prev;69} t_env;7071typedef struct s_lexer72{73char *val;74int type;75struct s_lexer *next;76struct s_lexer *prev;77} t_lexer;7879typedef struct s_cmd80{81char **cmd;82int her_doc_num;83int idx;84int her_in;85int fd_out;86int fd_in;87struct s_cmd *next;88struct s_cmd *prev;89} t_cmd;9091typedef struct s_uwu92{93char *lexer;94char *new;95char *temp;96int i;97int j;98} t_uwu;99100typedef struct s_data101{102int exit_stat;103int fork_flag;104int rerror_f;105int ac;106char *cmd;107char **av;108char **env;109char **paths;110char **eof;111int her_doc;112t_gen general;113char cwd[256];114char *first_export;115int flag_s;116int flag_d;117int **pipes;118t_env *lst_env;119t_cmd *lst_cmd;120t_lexer *lst_lexer;121} t_data;122123//--------------------execution soukaina--------------------//124int ft_statushandling(int status);125int ft_builtins(t_data *data);126int my_exit(t_cmd *lst_cmd, int old_error);127int my_pwd(t_data *data, t_cmd *lst_cmd);128int my_cd(t_data *data, t_cmd *lst_cmd);129int my_env(t_data *data, t_cmd *lst_cmd);130int my_echo(t_cmd *lst_cmd);131t_data *my_export(t_data *data, t_cmd *lst_cmd);132int execution_2(t_data *data, t_cmd *cmd);133int check_access(t_data *data, char **cmd, int i, int flag);134void update_env(t_data *data, char *env, char *upd);135char *custom_getenv(char *env_var, t_env *env_lst);136int **initialize_pipes(t_data *data);137int my_strchr(char *s, int c);138char *ft_strcat(char *dest, char *src);139char *ft_strdup(char *src);140int count_cmds(char **cmd);141long ft_atoi(const char *str);142int c_lstcmd(t_data *data);143int pre_execution(t_data *data);144void fork_func(t_data *data);145int close_all(t_cmd *lst_cmd, int **pipes, int count);146void sig_handler(int num);147int heredoc_exec(t_data *data, t_cmd *cmd_lst, int idx);148int nofork_list(t_data *data, t_cmd *cmd);149int check_nonfork(t_data *data, t_cmd *cmd);150int check_fork(int *pid, t_data *data);151char *ft_strncpy(char *dest, char *src, unsigned int n);152char *custom_getenv(char *env_var, t_env *env_lst);153char *join_cmd(char **argv, int argc, int i);154int check_valid(char *cmd);155int check_builtins(t_data *data, t_cmd *cmd_lst);156char *cd_strjoin(char *s1, char *s2);157t_data *update_pwd(t_data *data, char *cwd);158int valid_name(char *name, t_data **data);159int check_delim_idx(t_data *data, t_cmd *cmd);160int close_pipes(int **pip, int lent);161int close_fds(t_cmd *lst_cmd);162int go_back_minus(t_data *data);163void print_error(void);164int go_home(t_data *data, char *cwd);165int ft_check_name(t_data *data, char *name, char *value);166int terminate_pid(pid_t lastchild);167int check_delim_idx(t_data *data, t_cmd *cmd);168void print_her_in(t_cmd *cmd, char *here_buff);169void init_sig(void);170void init_main(t_data *data);171void ft_initialize2(t_data *data);172int check_path(t_env *lst_env);173//-----------------env--------------------------//174void ft_create_env_list(t_env **envi, char **env);175void ft_env(t_data *data);176void ft_free_env(t_env *env);177void ft_print_env(t_env *env, int flag, int fd);178t_env *ft_add_to_env_back(t_env *envi, char *value);179void free_split(char **arguments);180void ft_create_my_env(t_data *data);181t_env *ft_new_env_node(char *value);182//-----------------Lexer------------------------//183void ft_lexer(t_data *data);184t_lexer *ft_add_lexer_back(t_lexer *lexer, char *str, int type);185void ft_free_lexer(t_lexer *lexer);186void ft_print_lexer(t_lexer *lexer);187int ft_add_pipe(t_data *data, int i);188int ft_add_word(t_data *data, int i);189int ft_add_redirection(t_data *data, int i);190int ft_add_parenth(t_data *data, int i);191int ft_add_and(t_data *data, int i);192int ft_add_semi(t_data *data, int i);193int ft_is_word(char c);194int ft_is_parenth(char c);195int ft_is_redirection(char c);196int ft_isspace(char c);197//------------Syntax analyzer-----------------//198int ft_syntax_analyzer(t_data *data);199int ft_check_redirection(t_data *data);200int ft_check_between_pipes(t_data *data);201int ft_check_quotes(t_data *data);202//-------------Expanding------------------------//203void ft_expanding(t_data *data);204int ft_skip(char *value, int i);205int ft_change_flag(int flag);206char *ft_get_value(t_data *data, char *var);207int ft_check_var_env(t_data *data, char *var);208char *ft_delete_var(t_data *data, char *var);209int ft_len_before(char *var);210int ft_len_after(char *var);211int ft_len_var(char *var);212char *ft_var_isnt(t_data *data, char *lexer, char *n_v);213int ft_value_var(int i, char *value);214int ft_check_still_dollar(t_data *data);215char *ft_fix_norme(char *n_v, char *value, int i);216char *ft_change_nd_free(char *var, char *n_v);217char *ft_get_expand_value(char *n_v, int i, char *lexer);218//----------------parsing----------------------//219void ft_parsing(t_data *data);220char *ft_strjoin(char *s1, char *s2);221void ft_add_command_pipe(t_data *data);222t_cmd *ft_add_back_cmd(t_data *data, int *fd, int *red,223int red_num);224void ft_add_normal_command(t_data *data, char *new, int *fd,225int *red);226char **ft_split(char *s, char c);227char *ft_join_args(char *s1, char *s2);228void free_split(char **arguments);229void ft_free_cmd(t_cmd *cmd);230void ft_print_cmd(t_cmd *cmd);231char *ft_substr(char *s, int start, size_t len);232int ft_exist_quotes(char *cmd);233char *ft_delete(char *cmd);234void ft_delete_quotes(t_data *data);235void ft_delete_eof_quotes(char *eof);236char **ft_new_split(char *s, char c);237int *ft_get_index(char *cmd, int type);238int ft_real_len(char *cmd);239void ft_change_exit_status(t_data *data);240int ft_get_in(int *fd, int *red, int red_num);241int ft_get_out(int *fd, int *red, int red_num);242void ft_delete_command(t_data *data);243void ft_handle_herdoc(t_data *data, t_lexer *lexer, int i);244void ft_delete_herdoc(t_data *data);245int *ft_fill_red(t_data *data, int red_num);246int ft_fill_fd(t_data *data, char *name, int red);247int ft_red_num(t_data *data);248void ft_delete_redirections(t_data *data);249int ft_check_still_redirection(t_data *data);250char *ft_new(char *old);251//-----------------builtins-------------------------//252int unset(t_data *data, t_cmd *lst_cmd);253int export(t_data *data, t_cmd *lst_cmd);254int ft_env_built(t_data *data, int fd);255int ft_change_env_value(t_data *data, char *name, char *value);256void ft_add_new_env(t_data *data, char *name, char *value);257void ft_sort_env(t_data *data);258char *ft_get_value_exp(char *value);259char *ft_get_name_exp(char *name);260int ft_name_exists(t_data *data, char *name);261void ft_concatenate(t_data *data, char *name, char *value);262int ft_check_concate(char *name);263//-----------------utils------------------------//264void ft_putstr_fd(char *s, int fd);265char *ft_get_env(t_data *data, char *name);266int ft_herdoc(t_data *data, t_cmd *cmd_lst, int **pip, int i);267void ft_print_cmd1(t_cmd *cmd);268void ft_add_new_env(t_data *data, char *name, char *value);269t_env *ft_new_node(char *name, char *value);270char *ft_itoa(int n);271void handler(int sig);272int ft_strlen(char *str);273int ft_strcmp(char *s1, char *s2);274int ft_strncmp(char *s1, char *s2, size_t n);275void *ft_calloc(int count, int size);276char **ft_free_tab(char **str, int i);277char *ft_strchr(char *s, int c);278char *ft_strtrim(char *s1, char *set);279int ft_sub_main(t_data *data);280void ft_free_norme(t_data *data);281282#endif283284285