diff options
| author | Dominik Kaiser | 2024-06-25 14:02:02 +0200 |
|---|---|---|
| committer | GitHub | 2024-06-25 14:02:02 +0200 |
| commit | 97cca528658e5b811a56600b7c0b4f9c11bf83fc (patch) | |
| tree | 38120dd91e74a8f5073a5af414245ccbf4fbd417 /src | |
| parent | 0d7a57a7bc14831d6d7076ccb0ea7a7213ddd7fb (diff) | |
| download | minishell-97cca528658e5b811a56600b7c0b4f9c11bf83fc.tar.gz minishell-97cca528658e5b811a56600b7c0b4f9c11bf83fc.zip | |
Add basic command line
* Initialize terminal and signal handling
* Add basic repl that doesn't do anything yet
* Add handling for Ctrl-C, Ctrl-D and Ctrl-\ in interactive mode
Diffstat (limited to 'src')
| -rw-r--r-- | src/debug_tools.c | 2 | ||||
| -rw-r--r-- | src/init.c | 33 | ||||
| -rw-r--r-- | src/main.c | 6 | ||||
| -rw-r--r-- | src/repl.c | 26 | ||||
| -rw-r--r-- | src/signal_handling.c | 38 |
5 files changed, 102 insertions, 3 deletions
diff --git a/src/debug_tools.c b/src/debug_tools.c index e75c0a7..ccf2164 100644 --- a/src/debug_tools.c +++ b/src/debug_tools.c @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 15:34:14 by dkaiser #+# #+# */ -/* Updated: 2024/06/25 12:48:20 by dkaiser ### ########.fr */ +/* Updated: 2024/06/25 13:13:18 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/init.c b/src/init.c new file mode 100644 index 0000000..fd2c8ac --- /dev/null +++ b/src/init.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* init.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/24 15:02:24 by dkaiser #+# #+# */ +/* Updated: 2024/06/24 15:25:57 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void init_terminal(void); + +int init(void) +{ + int result; + + init_terminal(); + result = init_signal_handling(); + return (result); +} + +static void init_terminal(void) +{ + struct termios term; + + tcgetattr(0, &term); + term.c_lflag &= ~ECHOCTL; + tcsetattr(0, TCSANOW, &term); +} @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/22 17:14:03 by dkaiser #+# #+# */ -/* Updated: 2024/06/22 17:14:36 by dkaiser ### ########.fr */ +/* Updated: 2024/06/25 13:58:24 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,5 +14,7 @@ int main(void) { - return (0); + if (init()) + return (1); + repl("Minishell $ "); } diff --git a/src/repl.c b/src/repl.c new file mode 100644 index 0000000..f97af6c --- /dev/null +++ b/src/repl.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* repl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/24 16:07:04 by dkaiser #+# #+# */ +/* Updated: 2024/06/25 13:50:19 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void repl(const char *prompt) +{ + char *input; + + while (1) + { + input = readline(prompt); + if (input == NULL) + return ; + free(input); + } +} diff --git a/src/signal_handling.c b/src/signal_handling.c new file mode 100644 index 0000000..a19fa94 --- /dev/null +++ b/src/signal_handling.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* signal_handling.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/24 15:08:43 by dkaiser #+# #+# */ +/* Updated: 2024/06/25 13:33:26 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void handle_sigint(int status); +static void handle_sigquit(int status); + +int init_signal_handling(void) +{ + if (signal(SIGINT, &handle_sigint) == SIG_ERR) + return (1); + if (signal(SIGQUIT, &handle_sigquit) == SIG_ERR) + return (1); + return (0); +} + +static void handle_sigint(__attribute__((unused)) int status) +{ + write(1, "\n", 1); + rl_replace_line("", 0); + rl_on_new_line(); + rl_redisplay(); +} + +static void handle_sigquit(__attribute__((unused)) int status) +{ + rl_redisplay(); +} |
