maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
main.c File Reference
#include "tokens.h"
#include "execute.h"
#include "shell.h"
#include "pipe.h"
#include "signals.h"
Include dependency graph for main.c:

Go to the source code of this file.

Functions

static int status_handler (int status, t_loop_data *loop_data, t_token *token_head)
 
static void process_ast_and_io (t_ms_data *data, t_loop_data *loop_data, t_token *tokens_head)
 
static void main_loop (t_ms_data *data, t_loop_data *loop_data)
 
int main (int argc, char **argv, char **envp)
 

Function Documentation

◆ main()

int main ( int  argc,
char **  argv,
char **  envp 
)

Definition at line 76 of file main.c.

77{
78 t_ms_data data;
79 t_loop_data loop_data;
80
82 init_ms_data(&data, argv, envp);
83 initialise(argc, argv);
84 main_loop(&data, &loop_data);
85 free_ms_data(&data);
87 return (0);
88}
static void main_loop(t_ms_data *data, t_loop_data *loop_data)
Definition main.c:50
void initialise(int argc, char **argv)
Definition initialise.c:36
void print_maxishell(void)
Definition prompt.c:56
void init_ms_data(t_ms_data *data, char **argv, char **envp)
Definition initialise.c:20
void clear_history_file(void)
Definition exit.c:28
void free_ms_data(t_ms_data *data)
Definition clean.c:51

References clear_history_file(), free_ms_data(), init_ms_data(), initialise(), main_loop(), and print_maxishell().

Here is the call graph for this function:

◆ main_loop()

static void main_loop ( t_ms_data data,
t_loop_data loop_data 
)
static

Definition at line 50 of file main.c.

51{
52 t_token *tokens_start;
53
54 while (1)
55 {
57 loop_data->input = readline("🌴 maxishell> ");
59 if (!loop_data->input || !ft_strncmp(loop_data->input, "exit", 4))
60 {
61 write(STDOUT_FILENO, "exit\n", 5);
62 break ;
63 }
64 make_history(loop_data->input);
65 loop_data->trimmed_input = trim_input(loop_data->input);
66 if (input_error_checks(loop_data))
67 continue ;
68 loop_data->tokens = tokenise(loop_data->trimmed_input);
69 tokens_start = loop_data->tokens;
70 loop_data->tree = parse_tokens(&loop_data->tokens, data);
71 process_ast_and_io(data, loop_data, tokens_start);
72 }
74}
int ft_strncmp(const char *s1, const char *s2, size_t n)
Definition ft_strncmp.c:24
static void process_ast_and_io(t_ms_data *data, t_loop_data *loop_data, t_token *tokens_head)
Definition main.c:37
void set_signals_interactive(void)
Definition signals.c:51
void set_signals_noninteractive(void)
Definition signals.c:63
char * trimmed_input
Definition tokens.h:61
t_token * tokens
Definition tokens.h:62
char * input
Definition tokens.h:60
t_ast * tree
Definition tokens.h:63
t_ast * parse_tokens(t_token **tokens, t_ms_data *data)
Definition AST_utils.c:23
t_token * tokenise(char *str)
Definition tokeniser.c:22
int input_error_checks(t_loop_data *loop_data)
void make_history(char *line)
Definition aux.c:15
char * trim_input(char *str)

References clear_history_file(), ft_strncmp(), s_loop_data::input, input_error_checks(), make_history(), parse_tokens(), process_ast_and_io(), set_signals_interactive(), set_signals_noninteractive(), tokenise(), s_loop_data::tokens, s_loop_data::tree, trim_input(), and s_loop_data::trimmed_input.

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_ast_and_io()

static void process_ast_and_io ( t_ms_data data,
t_loop_data loop_data,
t_token tokens_head 
)
static

Definition at line 37 of file main.c.

39{
40 int status;
41
42 status = execute_ast(loop_data->tree, data);
43 if (status_handler(status, loop_data, tokens_head))
44 {
45 handle_io_fd(data);
46 loop_cleanup(loop_data, tokens_head);
47 }
48}
int execute_ast(t_ast *node, t_ms_data *data)
execute Abstract Syntax Tree
Definition execute.c:38
void handle_io_fd(t_ms_data *data)
close temporary input/output file descriptors and reset them to -1
Definition utils_0.c:39
static int status_handler(int status, t_loop_data *loop_data, t_token *token_head)
Definition main.c:26
void loop_cleanup(t_loop_data *loop_data, t_token *tokens_head)
Definition clean.c:67

References execute_ast(), handle_io_fd(), loop_cleanup(), status_handler(), and s_loop_data::tree.

Referenced by main_loop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ status_handler()

static int status_handler ( int  status,
t_loop_data loop_data,
t_token token_head 
)
static

Definition at line 26 of file main.c.

28{
29 if (status == WAIT_NEXT_COMMAND)
30 {
31 loop_cleanup(loop_data, tokens_head);
32 return (0);
33 }
34 return (1);
35}
#define WAIT_NEXT_COMMAND
Definition pipe.h:19

References loop_cleanup(), and WAIT_NEXT_COMMAND.

Referenced by process_ast_and_io().

Here is the call graph for this function:
Here is the caller graph for this function: