diff options
author | scratko <m@scratko.xyz> | 2024-06-20 18:38:11 +0300 |
---|---|---|
committer | scratko <m@scratko.xyz> | 2024-06-23 23:25:46 +0300 |
commit | 74c6a747a58b38131534556ab95fa4dd4b514780 (patch) | |
tree | 68dae86f9ee994c2bc13681703a8c69e0e2b5f51 /shell.h | |
parent | 8f4f87eabec13330a2b3a974975053c1e4632a11 (diff) | |
download | shell-74c6a747a58b38131534556ab95fa4dd4b514780.tar.gz shell-74c6a747a58b38131534556ab95fa4dd4b514780.tar.bz2 shell-74c6a747a58b38131534556ab95fa4dd4b514780.zip |
Shell-edit releaseshell-edit
Autocomplete program and file names (tab).
Moving the cursor to edit commands (left and right arrows).
Deleting a character in a command (backspace).
Diffstat (limited to 'shell.h')
-rw-r--r-- | shell.h | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -0,0 +1,64 @@ +#ifndef SHELL_H_SENTRY +#define SHELL_H_SENTRY + +#include "dynamic_array.h" +#include "queue.h" + +enum { + /* CTRL-D */ + end_of_file = 4, + 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 new_readline; +}; + +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 |