#ifndef SHELL_H_SENTRY #define SHELL_H_SENTRY #include "dynamic_array.h" #include "queue.h" enum { new_line = 10, whitespace = ' ', tab = 9, esc = 27, backslash = '\\', double_quotes = '"' }; /* two-letter tokens */ enum { append = '>' + 1, and = '&' + 1, or = '|' + 1 }; /* error codes */ enum { err_filename_expected = 1, err_redirect_stream_again = 2, err_redirect_stream_in_pipeline = 3, err_bg_process = 4, err_empty_command = 5, err_extra_chars_after_filename = 6, err_odd_double_quotes = 7 }; /* storing file names to redirect standard input/output streams */ struct io_type { char *input_stream; char *output_stream; char *output_stream_to_append; }; struct param_type { int is_word; int escape_sequences; unsigned int double_quotes_counter; char stored_symbol; int empty_word_flag; int tokens; int wrong_command; struct io_type streams; int last_execution_status; int pipeline; }; int filename_waiting(struct param_type *params); void add_filename(struct dynamic_array *tmp_word, struct param_type *params); void add_word(struct w_queue *word_chain, struct dynamic_array *tmp_word, struct param_type *params); int is_stream_redirection_set(const struct param_type *params); char** create_cmdline(const struct w_queue *word_chain, int word_counter); #endif