back to scratko.xyz
summaryrefslogtreecommitdiff
path: root/shell.h
diff options
context:
space:
mode:
authorscratko <m@scratko.xyz>2024-06-14 15:15:41 +0300
committerscratko <m@scratko.xyz>2024-06-23 23:11:18 +0300
commitff38bddd4253b5adf08a84df34bfae32c8ae988d (patch)
tree69e39bf16cb93af3b9a592cf0fa3c489b13db499 /shell.h
parent1ee0911f2def54f1b63d18b0924ac65c2db92f11 (diff)
downloadshell-ff38bddd4253b5adf08a84df34bfae32c8ae988d.tar.gz
shell-ff38bddd4253b5adf08a84df34bfae32c8ae988d.tar.bz2
shell-ff38bddd4253b5adf08a84df34bfae32c8ae988d.zip
Shell-V releaseshell-V
Added pipeline. Formatting shell.c (created lexical_analysys.c). Error codes. Some functions of queue.c are created by preprocessor.
Diffstat (limited to 'shell.h')
-rw-r--r--shell.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/shell.h b/shell.h
new file mode 100644
index 0000000..ec87f57
--- /dev/null
+++ b/shell.h
@@ -0,0 +1,61 @@
+#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