Contact Us!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
yabtaour

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

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