MiniDevil As beautiful as a shell
terminal_init.c
Go to the documentation of this file.
1 /* ************************************************************************** */
2 /* */
3 /* ::: :::::::: */
4 /* terminal_init.c :+: :+: :+: */
5 /* +:+ +:+ +:+ */
6 /* By: baelgadi <baelgadi@student.42.fr> +#+ +:+ +#+ */
7 /* +#+#+#+#+#+ +#+ */
8 /* Created: 2026/02/17 17:48:21 by zotaj-di #+# #+# */
9 /* Updated: 2026/03/04 02:08:56 by baelgadi ### ########.fr */
10 /* */
11 /* ************************************************************************** */
12 
13 #include "minishell_ui.h"
14 
24 static void init_ui_state(t_ui *ui)
25 {
26  ft_memset(ui->cmd.buf, 0, MAX_CMD_LEN);
27  ui->cmd.len = 0;
28  ui->cmd.cursor = 0;
29  ui->out.lines = ft_calloc(MAX_LINES, sizeof(char *));
30  if (!ui->out.lines)
31  {
32  ft_putendl_fd("Error: output buffer allocation failure", STDERR_FILENO);
33  ui->running = 0;
34  return ;
35  }
36  ui->out.count = 0;
37  ui->out.scroll = 0;
38  ui->out.exit_code = 0;
39  ui->waifu.mood = MOOD_PROUD;
40  ui->running = 1;
41 }
42 
51 void init_term(t_ui *ui)
52 {
53  get_term_size(&ui->term);
54  set_raw_mode(&ui->term);
55  write(STDOUT_FILENO, CURSOR_HIDE, ft_strlen(CURSOR_HIDE));
56  write(STDOUT_FILENO, CLEAR_SCREEN, ft_strlen(CLEAR_SCREEN));
57  init_ui_state(ui);
58 }
59 
68 void cleanup_term(t_ui *ui)
69 {
70  write(STDOUT_FILENO, CLEAR_SCREEN, ft_strlen(CLEAR_SCREEN));
71  write(STDOUT_FILENO, CURSOR_SHOW, ft_strlen(CURSOR_SHOW));
72  restore_term_mode(&ui->term);
73  out_free(&ui->out);
74 }
UI mode structures, macros & function prototypes.
#define MAX_LINES
Definition: minishell_ui.h:85
#define MAX_CMD_LEN
Definition: minishell_ui.h:84
#define CLEAR_SCREEN
Definition: minishell_ui.h:29
#define CURSOR_HIDE
Definition: minishell_ui.h:31
#define CURSOR_SHOW
Definition: minishell_ui.h:32
#define MOOD_PROUD
Definition: minishell_ui.h:105
void out_free(t_out *out)
Clear all output lines and free the lines pointer array.
Definition: output.c:57
int cursor
Cursor position.
Definition: minishell_ui.h:140
char buf[MAX_CMD_LEN]
Fixed size buffer.
Definition: minishell_ui.h:138
int len
Current input length.
Definition: minishell_ui.h:139
char ** lines
Array of output lines.
Definition: minishell_ui.h:148
int scroll
Current scroll's offset.
Definition: minishell_ui.h:150
int exit_code
Last command exit code.
Definition: minishell_ui.h:151
int count
Nbr of stored lines.
Definition: minishell_ui.h:149
UI state.
Definition: minishell_ui.h:167
t_cmd cmd
Cmd buffer.
Definition: minishell_ui.h:169
t_out out
Output state.
Definition: minishell_ui.h:170
int running
Event loop flag.
Definition: minishell_ui.h:172
t_waifu waifu
Waifu state.
Definition: minishell_ui.h:171
t_term term
Terminal state.
Definition: minishell_ui.h:168
int mood
Current mood.
Definition: minishell_ui.h:159
void set_raw_mode(t_term *term)
Switch the terminal into non canonical and no echo mode.
Definition: terminal.c:46
void restore_term_mode(t_term *term)
Restore the terminal to the saved settings.
Definition: terminal.c:63
void get_term_size(t_term *term)
Get the terinal dimensions via ioctl and store them.
Definition: terminal.c:22
void init_term(t_ui *ui)
Prepare the terminal and UI state for the main event.
Definition: terminal_init.c:51
void cleanup_term(t_ui *ui)
Clean up the UI terminal state and free output memory.
Definition: terminal_init.c:68
static void init_ui_state(t_ui *ui)
Intializes the command buffer, output state and waifu mood.
Definition: terminal_init.c:24