From ad25d505b44b1550bead4ea407fb2ac3e1960be0 Mon Sep 17 00:00:00 2001 From: Gautier WOJDA Date: Thu, 19 Jan 2017 18:32:06 +0100 Subject: [PATCH] add some work --- 42sh/includes/btree.h | 54 ++++ 42sh/includes/color.h | 56 ++++ 42sh/includes/dlst.h | 35 +++ 42sh/includes/ft_printf.h | 81 ++++++ 42sh/includes/ft_readline.h | 275 ++++++------------ .../curs_single.c => includes/ft_xattr.h} | 29 +- .../curs_clear.c => includes/get_next_line.h} | 39 ++- 42sh/includes/libft.h | 162 +++++++++++ 42sh/includes/lst.h | 80 +++++ 42sh/includes/minishell.h | 4 +- .../rl_clear_function.c => includes/mytime.h} | 44 +-- 42sh/obj/ast_free.o | Bin 0 -> 3596 bytes 42sh/obj/builtin_bg.o | Bin 0 -> 5336 bytes 42sh/obj/builtin_cd.o | Bin 0 -> 4988 bytes 42sh/obj/builtin_echo.o | Bin 0 -> 2676 bytes 42sh/obj/builtin_env.o | Bin 0 -> 2348 bytes 42sh/obj/builtin_exit.o | Bin 0 -> 4544 bytes 42sh/obj/builtin_fg.o | Bin 0 -> 5276 bytes 42sh/obj/builtin_jobs.o | Bin 0 -> 4920 bytes 42sh/obj/builtin_setenv.o | Bin 0 -> 3296 bytes 42sh/obj/builtin_unsetenv.o | Bin 0 -> 2808 bytes 42sh/obj/command_getoutput.o | Bin 0 -> 6472 bytes 42sh/obj/copy_cut_paste.o | Bin 0 -> 5184 bytes 42sh/obj/data_exit.o | Bin 0 -> 5160 bytes 42sh/obj/data_init.o | Bin 0 -> 5844 bytes 42sh/obj/data_singleton.o | Bin 0 -> 5356 bytes 42sh/obj/do_job_notification.o | Bin 0 -> 4948 bytes 42sh/obj/exec_ampersand.o | Bin 0 -> 3116 bytes 42sh/obj/exec_and_if.o | Bin 0 -> 6652 bytes 42sh/obj/exec_command.o | Bin 0 -> 5844 bytes 42sh/obj/exec_dgreat.o | Bin 0 -> 3860 bytes 42sh/obj/exec_great.o | Bin 0 -> 3856 bytes 42sh/obj/exec_less.o | Bin 0 -> 3848 bytes 42sh/obj/exec_or_if.o | Bin 0 -> 6652 bytes 42sh/obj/exec_pipe.o | Bin 0 -> 6416 bytes 42sh/obj/exec_semi.o | Bin 0 -> 2912 bytes 42sh/obj/ft_exec.o | Bin 0 -> 4688 bytes 42sh/obj/ft_findexec.o | Bin 0 -> 4740 bytes 42sh/obj/ft_parse.o | Bin 0 -> 5264 bytes 42sh/obj/ft_post_tokenize.o | Bin 0 -> 3404 bytes 42sh/obj/ft_putast.o | Bin 0 -> 3896 bytes 42sh/obj/ft_putast2.o | Bin 0 -> 4376 bytes 42sh/obj/ft_split_whitespaces.o | Bin 0 -> 4200 bytes 42sh/obj/ft_tokenize.o | Bin 0 -> 4916 bytes 42sh/obj/get_lexer_state.o | Bin 0 -> 3088 bytes 42sh/obj/get_touch.o | Bin 0 -> 5468 bytes 42sh/obj/get_touch_toolz.o | Bin 0 -> 4408 bytes 42sh/obj/get_touch_toolz_2.o | Bin 0 -> 5556 bytes 42sh/obj/is_builtin.o | Bin 0 -> 4492 bytes 42sh/obj/job_addprocess.o | Bin 0 -> 5048 bytes 42sh/obj/job_cmp_id.o | Bin 0 -> 3760 bytes 42sh/obj/job_format.o | Bin 0 -> 4020 bytes 42sh/obj/job_format_head.o | Bin 0 -> 4172 bytes 42sh/obj/job_free.o | Bin 0 -> 3924 bytes 42sh/obj/job_getprocess.o | Bin 0 -> 4784 bytes 42sh/obj/job_getrank.o | Bin 0 -> 4388 bytes 42sh/obj/job_is_completed.o | Bin 0 -> 5280 bytes 42sh/obj/job_is_stopped.o | Bin 0 -> 4796 bytes 42sh/obj/job_kill_all.o | Bin 0 -> 4180 bytes 42sh/obj/job_notify_change.o | Bin 0 -> 4456 bytes 42sh/obj/job_notify_new.o | Bin 0 -> 4568 bytes 42sh/obj/job_remove.o | Bin 0 -> 4512 bytes 42sh/obj/job_update_id.o | Bin 0 -> 3956 bytes 42sh/obj/job_update_status.o | Bin 0 -> 2732 bytes 42sh/obj/job_wait.o | Bin 0 -> 3712 bytes 42sh/obj/launch_process.o | Bin 0 -> 6328 bytes 42sh/obj/lexer_backslash.o | Bin 0 -> 3540 bytes 42sh/obj/lexer_default.o | Bin 0 -> 4000 bytes 42sh/obj/lexer_delim.o | Bin 0 -> 3600 bytes 42sh/obj/lexer_dquote.o | Bin 0 -> 3724 bytes 42sh/obj/lexer_great.o | Bin 0 -> 3872 bytes 42sh/obj/lexer_greatand.o | Bin 0 -> 3776 bytes 42sh/obj/lexer_less.o | Bin 0 -> 3864 bytes 42sh/obj/lexer_lessand.o | Bin 0 -> 3776 bytes 42sh/obj/lexer_number.o | Bin 0 -> 4280 bytes 42sh/obj/lexer_quote.o | Bin 0 -> 3608 bytes 42sh/obj/lexer_sep.o | Bin 0 -> 4008 bytes 42sh/obj/lexer_special.o | Bin 0 -> 3920 bytes 42sh/obj/lexer_var.o | Bin 0 -> 3948 bytes 42sh/obj/lexer_word.o | Bin 0 -> 3916 bytes 42sh/obj/line_return_toolz.o | Bin 0 -> 5768 bytes 42sh/obj/list_toolz.o | Bin 0 -> 4000 bytes 42sh/obj/main.o | Bin 0 -> 5176 bytes 42sh/obj/mark_job_as_running.o | Bin 0 -> 4432 bytes 42sh/obj/move_to_line.o | Bin 0 -> 4976 bytes 42sh/obj/parse_dgreat.o | Bin 0 -> 4616 bytes 42sh/obj/parse_dless.o | Bin 0 -> 4540 bytes 42sh/obj/parse_great.o | Bin 0 -> 4616 bytes 42sh/obj/parse_greatand.o | Bin 0 -> 4508 bytes 42sh/obj/parse_less.o | Bin 0 -> 4604 bytes 42sh/obj/parse_lessand.o | Bin 0 -> 4508 bytes 42sh/obj/parse_separator.o | Bin 0 -> 4300 bytes 42sh/obj/parse_subshell.o | Bin 0 -> 4644 bytes 42sh/obj/parse_word.o | Bin 0 -> 4296 bytes 42sh/obj/print_and_del.o | Bin 0 -> 7520 bytes 42sh/obj/process_cmp_pid.o | Bin 0 -> 3152 bytes 42sh/obj/process_format.o | Bin 0 -> 5316 bytes 42sh/obj/process_free.o | Bin 0 -> 3528 bytes 42sh/obj/process_mark_status.o | Bin 0 -> 4280 bytes 42sh/obj/process_redirect.o | Bin 0 -> 3340 bytes 42sh/obj/process_reset.o | Bin 0 -> 5116 bytes 42sh/obj/process_setexec.o | Bin 0 -> 4128 bytes 42sh/obj/process_setgroup.o | Bin 0 -> 4956 bytes 42sh/obj/prompt.o | Bin 0 -> 4764 bytes 42sh/obj/put_job_in_background.o | Bin 0 -> 4044 bytes 42sh/obj/put_job_in_foreground.o | Bin 0 -> 5456 bytes 42sh/obj/quotes_gest.o | Bin 0 -> 4408 bytes 42sh/obj/reader.o | Bin 0 -> 5016 bytes 42sh/obj/readline.o | Bin 0 -> 5496 bytes 42sh/obj/reduce_bquotes.o | Bin 0 -> 4400 bytes 42sh/obj/reduce_parens.o | Bin 0 -> 3980 bytes 42sh/obj/set_exitstatus.o | Bin 0 -> 2876 bytes 42sh/obj/shell_exit.o | Bin 0 -> 2620 bytes 42sh/obj/shell_get_avdata.o | Bin 0 -> 5456 bytes 42sh/obj/shell_get_opts.o | Bin 0 -> 3632 bytes 42sh/obj/shell_init.o | Bin 0 -> 3932 bytes 42sh/obj/sigchld_handler.o | Bin 0 -> 5180 bytes 42sh/obj/sigint_handler.o | Bin 0 -> 2608 bytes 42sh/obj/sigtstp_handler.o | Bin 0 -> 4128 bytes 42sh/obj/sigttin_handler.o | Bin 0 -> 2552 bytes 42sh/obj/sigttou_handler.o | Bin 0 -> 2552 bytes 42sh/obj/token_append.o | Bin 0 -> 2916 bytes 42sh/obj/token_cmp_type.o | Bin 0 -> 2676 bytes 42sh/obj/token_expand_var.o | Bin 0 -> 3048 bytes 42sh/obj/token_free.o | Bin 0 -> 3028 bytes 42sh/obj/token_init.o | Bin 0 -> 2760 bytes 42sh/obj/token_print.o | Bin 0 -> 3536 bytes 42sh/obj/toolz.o | Bin 0 -> 4676 bytes 42sh/obj/toolz2.o | Bin 0 -> 3420 bytes 42sh/obj/toolz_parseur.o | Bin 0 -> 5608 bytes 42sh/obj/toolz_termcaps.o | Bin 0 -> 5264 bytes 42sh/src/line-editing/copy_cut_paste.c | 79 +++++ 42sh/src/line-editing/curs_ask.c | 57 ---- 42sh/src/line-editing/curs_move.c | 45 --- 42sh/src/line-editing/curs_setup.c | 82 ------ 42sh/src/line-editing/curs_term_setup.c | 62 ---- 42sh/src/line-editing/curs_write.c | 63 ---- 42sh/src/line-editing/ft_readline.c | 106 ------- 42sh/src/line-editing/ft_split_whitespaces.c | 79 +++++ 42sh/src/line-editing/get_touch.c | 92 ++++++ 42sh/src/line-editing/get_touch_toolz.c | 61 ++++ 42sh/src/line-editing/get_touch_toolz_2.c | 94 ++++++ 42sh/src/line-editing/libftprintf.a | Bin 0 -> 337424 bytes 42sh/src/line-editing/line_return_toolz.c | 143 +++++++++ 42sh/src/line-editing/list_toolz.c | 58 ++++ 42sh/src/line-editing/move_to_line.c | 99 +++++++ 42sh/src/line-editing/print_and_del.c | 138 +++++++++ 42sh/src/line-editing/prompt.c | 63 ++++ 42sh/src/line-editing/quotes_gest.c | 83 ++++++ 42sh/src/line-editing/reader.c | 61 ++++ 42sh/src/line-editing/readline.c | 63 ++++ 42sh/src/line-editing/rl_bitset.c | 71 ----- 42sh/src/line-editing/rl_clipboard_function.c | 62 ---- 42sh/src/line-editing/rl_clipboard_utility.c | 95 ------ 42sh/src/line-editing/rl_comp_function.c | 41 --- 42sh/src/line-editing/rl_default_function.c | 38 --- 42sh/src/line-editing/rl_display.c | 61 ---- 42sh/src/line-editing/rl_dynamic_buffer.c | 99 ------- 42sh/src/line-editing/rl_long_move_function.c | 65 ----- 42sh/src/line-editing/rl_merge_line.c | 40 --- 42sh/src/line-editing/rl_page_move_function.c | 72 ----- 42sh/src/line-editing/rl_prompt.c | 31 -- 42sh/src/line-editing/rl_quoting_function.c | 44 --- 42sh/src/line-editing/rl_remove_function.c | 39 --- 42sh/src/line-editing/rl_setup.c | 46 --- .../src/line-editing/rl_short_move_function.c | 65 ----- 42sh/src/line-editing/rl_stack_line.c | 34 --- 42sh/src/line-editing/rl_state_function.c | 34 --- 42sh/src/line-editing/rl_word_move_function.c | 67 ----- 42sh/src/line-editing/rl_word_utility.c | 51 ---- 42sh/src/line-editing/toolz.c | 95 ++++++ .../line-editing/{curs_goto.c => toolz2.c} | 53 ++-- 42sh/src/line-editing/toolz_parseur.c | 91 ++++++ 42sh/src/line-editing/toolz_termcaps.c | 91 ++++++ 42sh/src/main/data_init.c | 5 +- 42sh/src/main/main.c | 5 +- 176 files changed, 2036 insertions(+), 1746 deletions(-) create mode 100644 42sh/includes/btree.h create mode 100644 42sh/includes/color.h create mode 100644 42sh/includes/dlst.h create mode 100644 42sh/includes/ft_printf.h rename 42sh/{src/line-editing/curs_single.c => includes/ft_xattr.h} (57%) rename 42sh/{src/line-editing/curs_clear.c => includes/get_next_line.h} (52%) create mode 100644 42sh/includes/libft.h create mode 100644 42sh/includes/lst.h rename 42sh/{src/line-editing/rl_clear_function.c => includes/mytime.h} (50%) create mode 100644 42sh/obj/ast_free.o create mode 100644 42sh/obj/builtin_bg.o create mode 100644 42sh/obj/builtin_cd.o create mode 100644 42sh/obj/builtin_echo.o create mode 100644 42sh/obj/builtin_env.o create mode 100644 42sh/obj/builtin_exit.o create mode 100644 42sh/obj/builtin_fg.o create mode 100644 42sh/obj/builtin_jobs.o create mode 100644 42sh/obj/builtin_setenv.o create mode 100644 42sh/obj/builtin_unsetenv.o create mode 100644 42sh/obj/command_getoutput.o create mode 100644 42sh/obj/copy_cut_paste.o create mode 100644 42sh/obj/data_exit.o create mode 100644 42sh/obj/data_init.o create mode 100644 42sh/obj/data_singleton.o create mode 100644 42sh/obj/do_job_notification.o create mode 100644 42sh/obj/exec_ampersand.o create mode 100644 42sh/obj/exec_and_if.o create mode 100644 42sh/obj/exec_command.o create mode 100644 42sh/obj/exec_dgreat.o create mode 100644 42sh/obj/exec_great.o create mode 100644 42sh/obj/exec_less.o create mode 100644 42sh/obj/exec_or_if.o create mode 100644 42sh/obj/exec_pipe.o create mode 100644 42sh/obj/exec_semi.o create mode 100644 42sh/obj/ft_exec.o create mode 100644 42sh/obj/ft_findexec.o create mode 100644 42sh/obj/ft_parse.o create mode 100644 42sh/obj/ft_post_tokenize.o create mode 100644 42sh/obj/ft_putast.o create mode 100644 42sh/obj/ft_putast2.o create mode 100644 42sh/obj/ft_split_whitespaces.o create mode 100644 42sh/obj/ft_tokenize.o create mode 100644 42sh/obj/get_lexer_state.o create mode 100644 42sh/obj/get_touch.o create mode 100644 42sh/obj/get_touch_toolz.o create mode 100644 42sh/obj/get_touch_toolz_2.o create mode 100644 42sh/obj/is_builtin.o create mode 100644 42sh/obj/job_addprocess.o create mode 100644 42sh/obj/job_cmp_id.o create mode 100644 42sh/obj/job_format.o create mode 100644 42sh/obj/job_format_head.o create mode 100644 42sh/obj/job_free.o create mode 100644 42sh/obj/job_getprocess.o create mode 100644 42sh/obj/job_getrank.o create mode 100644 42sh/obj/job_is_completed.o create mode 100644 42sh/obj/job_is_stopped.o create mode 100644 42sh/obj/job_kill_all.o create mode 100644 42sh/obj/job_notify_change.o create mode 100644 42sh/obj/job_notify_new.o create mode 100644 42sh/obj/job_remove.o create mode 100644 42sh/obj/job_update_id.o create mode 100644 42sh/obj/job_update_status.o create mode 100644 42sh/obj/job_wait.o create mode 100644 42sh/obj/launch_process.o create mode 100644 42sh/obj/lexer_backslash.o create mode 100644 42sh/obj/lexer_default.o create mode 100644 42sh/obj/lexer_delim.o create mode 100644 42sh/obj/lexer_dquote.o create mode 100644 42sh/obj/lexer_great.o create mode 100644 42sh/obj/lexer_greatand.o create mode 100644 42sh/obj/lexer_less.o create mode 100644 42sh/obj/lexer_lessand.o create mode 100644 42sh/obj/lexer_number.o create mode 100644 42sh/obj/lexer_quote.o create mode 100644 42sh/obj/lexer_sep.o create mode 100644 42sh/obj/lexer_special.o create mode 100644 42sh/obj/lexer_var.o create mode 100644 42sh/obj/lexer_word.o create mode 100644 42sh/obj/line_return_toolz.o create mode 100644 42sh/obj/list_toolz.o create mode 100644 42sh/obj/main.o create mode 100644 42sh/obj/mark_job_as_running.o create mode 100644 42sh/obj/move_to_line.o create mode 100644 42sh/obj/parse_dgreat.o create mode 100644 42sh/obj/parse_dless.o create mode 100644 42sh/obj/parse_great.o create mode 100644 42sh/obj/parse_greatand.o create mode 100644 42sh/obj/parse_less.o create mode 100644 42sh/obj/parse_lessand.o create mode 100644 42sh/obj/parse_separator.o create mode 100644 42sh/obj/parse_subshell.o create mode 100644 42sh/obj/parse_word.o create mode 100644 42sh/obj/print_and_del.o create mode 100644 42sh/obj/process_cmp_pid.o create mode 100644 42sh/obj/process_format.o create mode 100644 42sh/obj/process_free.o create mode 100644 42sh/obj/process_mark_status.o create mode 100644 42sh/obj/process_redirect.o create mode 100644 42sh/obj/process_reset.o create mode 100644 42sh/obj/process_setexec.o create mode 100644 42sh/obj/process_setgroup.o create mode 100644 42sh/obj/prompt.o create mode 100644 42sh/obj/put_job_in_background.o create mode 100644 42sh/obj/put_job_in_foreground.o create mode 100644 42sh/obj/quotes_gest.o create mode 100644 42sh/obj/reader.o create mode 100644 42sh/obj/readline.o create mode 100644 42sh/obj/reduce_bquotes.o create mode 100644 42sh/obj/reduce_parens.o create mode 100644 42sh/obj/set_exitstatus.o create mode 100644 42sh/obj/shell_exit.o create mode 100644 42sh/obj/shell_get_avdata.o create mode 100644 42sh/obj/shell_get_opts.o create mode 100644 42sh/obj/shell_init.o create mode 100644 42sh/obj/sigchld_handler.o create mode 100644 42sh/obj/sigint_handler.o create mode 100644 42sh/obj/sigtstp_handler.o create mode 100644 42sh/obj/sigttin_handler.o create mode 100644 42sh/obj/sigttou_handler.o create mode 100644 42sh/obj/token_append.o create mode 100644 42sh/obj/token_cmp_type.o create mode 100644 42sh/obj/token_expand_var.o create mode 100644 42sh/obj/token_free.o create mode 100644 42sh/obj/token_init.o create mode 100644 42sh/obj/token_print.o create mode 100644 42sh/obj/toolz.o create mode 100644 42sh/obj/toolz2.o create mode 100644 42sh/obj/toolz_parseur.o create mode 100644 42sh/obj/toolz_termcaps.o create mode 100644 42sh/src/line-editing/copy_cut_paste.c delete mode 100644 42sh/src/line-editing/curs_ask.c delete mode 100644 42sh/src/line-editing/curs_move.c delete mode 100644 42sh/src/line-editing/curs_setup.c delete mode 100644 42sh/src/line-editing/curs_term_setup.c delete mode 100644 42sh/src/line-editing/curs_write.c delete mode 100644 42sh/src/line-editing/ft_readline.c create mode 100644 42sh/src/line-editing/ft_split_whitespaces.c create mode 100644 42sh/src/line-editing/get_touch.c create mode 100644 42sh/src/line-editing/get_touch_toolz.c create mode 100644 42sh/src/line-editing/get_touch_toolz_2.c create mode 100644 42sh/src/line-editing/libftprintf.a create mode 100644 42sh/src/line-editing/line_return_toolz.c create mode 100644 42sh/src/line-editing/list_toolz.c create mode 100644 42sh/src/line-editing/move_to_line.c create mode 100644 42sh/src/line-editing/print_and_del.c create mode 100644 42sh/src/line-editing/prompt.c create mode 100644 42sh/src/line-editing/quotes_gest.c create mode 100644 42sh/src/line-editing/reader.c create mode 100644 42sh/src/line-editing/readline.c delete mode 100644 42sh/src/line-editing/rl_bitset.c delete mode 100644 42sh/src/line-editing/rl_clipboard_function.c delete mode 100644 42sh/src/line-editing/rl_clipboard_utility.c delete mode 100644 42sh/src/line-editing/rl_comp_function.c delete mode 100644 42sh/src/line-editing/rl_default_function.c delete mode 100644 42sh/src/line-editing/rl_display.c delete mode 100644 42sh/src/line-editing/rl_dynamic_buffer.c delete mode 100644 42sh/src/line-editing/rl_long_move_function.c delete mode 100644 42sh/src/line-editing/rl_merge_line.c delete mode 100644 42sh/src/line-editing/rl_page_move_function.c delete mode 100644 42sh/src/line-editing/rl_prompt.c delete mode 100644 42sh/src/line-editing/rl_quoting_function.c delete mode 100644 42sh/src/line-editing/rl_remove_function.c delete mode 100644 42sh/src/line-editing/rl_setup.c delete mode 100644 42sh/src/line-editing/rl_short_move_function.c delete mode 100644 42sh/src/line-editing/rl_stack_line.c delete mode 100644 42sh/src/line-editing/rl_state_function.c delete mode 100644 42sh/src/line-editing/rl_word_move_function.c delete mode 100644 42sh/src/line-editing/rl_word_utility.c create mode 100644 42sh/src/line-editing/toolz.c rename 42sh/src/line-editing/{curs_goto.c => toolz2.c} (50%) create mode 100644 42sh/src/line-editing/toolz_parseur.c create mode 100644 42sh/src/line-editing/toolz_termcaps.c diff --git a/42sh/includes/btree.h b/42sh/includes/btree.h new file mode 100644 index 00000000..5839155c --- /dev/null +++ b/42sh/includes/btree.h @@ -0,0 +1,54 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/16 11:13:15 by jhalford #+# #+# */ +/* Updated: 2016/12/05 11:53:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef BTREE_H +# define BTREE_H + +# include "libft.h" + +struct s_btree +{ + void *item; + size_t content_size; + struct s_btree *left; + struct s_btree *right; +}; + +struct s_printdata +{ + int is_left; + int offset; + int depth; + int left; + int right; +}; + +typedef struct s_btree t_btree; +typedef struct s_printdata t_printdata; + +t_btree *btree_create_node(void const *item, size_t content_size); +void btree_insert_data( + t_btree **root, + void *item, + size_t content_size, + int (*cmpf)(void *, void *)); +void *btree_search_item(t_btree *root, + void *data_ref, int (*cmpf)(void *, void *)); +int btree_level_count(t_btree *root); +void btree_apply_prefix(t_btree *root, void (*applyf)(void *)); +void btree_apply_infix(t_btree *root, void (*applyf)(void *)); +void btree_apply_suffix(t_btree *root, void (*applyf)(void *)); +void btree_print(int fd, t_btree *tree, char *(*printer)(void *)); +void btree_del(t_btree **root, void (*del)(void *, size_t)); +void btree_delone(t_btree **root, void (*del)(void *, size_t)); + +#endif diff --git a/42sh/includes/color.h b/42sh/includes/color.h new file mode 100644 index 00000000..96eea18e --- /dev/null +++ b/42sh/includes/color.h @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* color.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 13:36:48 by jhalford #+# #+# */ +/* Updated: 2016/12/09 22:09:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef COLOR_H +# define COLOR_H +# include "libft.h" + +struct s_color +{ + char fg[7]; + char bg[7]; +}; + +typedef struct s_color t_color; + +# define FG_DEFAULT "\x1b[0m" +# define ON_BOLD "\x1b[1m" + +# define ON_UNDERLINED "\x1b[4m" +# define ON_INVERTED "\x1b[7m" + +# define FG_BLACK "\x1b[30m" +# define FG_RED "\x1b[31m" +# define FG_GREEN "\x1b[32m" +# define FG_YELLOW "\x1b[33m" +# define FG_BLUE "\x1b[34m" +# define FG_MAGENTA "\x1b[35m" +# define FG_CYAN "\x1b[36m" + +# define BG_BLACK "\x1b[40m" +# define BG_RED "\x1b[41m" +# define BG_GREEN "\x1b[42m" +# define BG_YELLOW "\x1b[43m" +# define BG_BLUE "\x1b[44m" +# define BG_MAGENTA "\x1b[45m" +# define BG_CYAN "\x1b[46m" +# define BG_DEFAULT "\x1b[49m" + +# define FBG_DEFAULT "\x1b[49m\x1b[20m" + +void ft_color_reset(void); +void ft_color_set(t_color color); + +void ft_color_mk(t_color *color, char fg[7], char bg[7]); +void ft_color_mkif(t_color *color, int cond, char fg[7], char bg[7]); + +#endif diff --git a/42sh/includes/dlst.h b/42sh/includes/dlst.h new file mode 100644 index 00000000..42d73729 --- /dev/null +++ b/42sh/includes/dlst.h @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* dlst.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:21:04 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:21:52 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef DLST_H +# define DLST_H + +struct s_dlist +{ + void *content; + size_t content_size; + struct s_dlist *next; + struct s_dlist *prev; +}; + +typedef struct s_dlist t_dlist; + +void ft_dlstadd_after(t_dlist **alst, t_dlist *new); +void ft_dlstadd_before(t_dlist **alst, t_dlist *new); +void ft_dlstdel(t_dlist **alst, void (*del)(void *, size_t)); +void ft_dlstdelone(t_dlist **alst, void (*del)(void *, size_t)); +int ft_dlstsize(t_dlist *list); +t_dlist *ft_dlstnew(void const *content, size_t content_size); +t_dlist *ft_dlstlast(t_dlist *list); +char *ft_dlsttostr(t_dlist *list); + +#endif diff --git a/42sh/includes/ft_printf.h b/42sh/includes/ft_printf.h new file mode 100644 index 00000000..6db739f4 --- /dev/null +++ b/42sh/includes/ft_printf.h @@ -0,0 +1,81 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ftprintf.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:22:54 by jhalford #+# #+# */ +/* Updated: 2016/12/15 15:29:22 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H +# include "libft.h" +# include +# define ALL_FLAGS "#0- +" +# define ALL_CONVERSIONS "sSpdDioOuUxXcCb" + +typedef struct s_fmt t_fmt; +typedef struct s_conv t_conv; +typedef char *(t_converter)(t_fmt *fmt, va_list ap); +typedef void (t_pad_func)(char *str, t_fmt *fmt); + +struct s_conv +{ + char id; + char allowed_flags[6]; + char base[20]; + t_converter *converter; + t_pad_func *sharp_func; +}; + +struct s_fmt +{ + char flags[6]; + int width; + int precision; + char modifier[3]; + char conversion; + int valid; + t_conv conv; +}; + +int ft_vdprintf(int fd, const char *format, va_list ap); +int ft_fmtcalc(char **final, char **str, va_list ap); + +extern t_conv g_convs[]; + +t_fmt *ft_fmt_init(void); +void ft_fmt_print(t_fmt *fmt); +void ft_printf_color(int fd, char **final, char **str); + +t_fmt *ft_printf_parse(char **format, va_list ap); +void ft_printf_parse_flags(t_fmt *fmt, char **format); +void ft_printf_parse_width(t_fmt *fmt, char **format, va_list ap); +void ft_printf_parse_precision(t_fmt *fmt, char **format, va_list ap); +void ft_printf_parse_modifiers(t_fmt *fmt, char **format); + +char *ft_transform(t_fmt *fmt, va_list ap); + +void ft_fmt_error_conv(char conv); +void ft_fmt_error_mod_conv(char *mod, char conv); +void ft_fmt_error_flag_conv(char flag, char conv); +void ft_fmt_error_flag_flag(char flag1, char flag2); + +void ft_fmt_simplify(t_fmt *fmt); +int ft_fmt_validate_conv(t_fmt *fmt); +void ft_fmt_validate_flags(t_fmt *fmt); +void ft_fmt_validate_mod(t_fmt *fmt); + +char *ft_signed_conversion(t_fmt *fmt, va_list ap); +char *ft_unsigned_conversion(t_fmt *fmt, va_list ap); +char *ft_str_conversion(t_fmt *fmt, va_list ap); +char *ft_char_conversion(t_fmt *fmt, va_list ap); + +void ft_pad_sharp_o(char *str, t_fmt *fmt); +void ft_pad_sharp_xb(char *str, t_fmt *fmt); +void ft_pad_left(char *str, t_fmt *fmt); +void ft_pad_right(char *str, t_fmt *fmt); +#endif diff --git a/42sh/includes/ft_readline.h b/42sh/includes/ft_readline.h index f8aeb60e..a9e83df6 100644 --- a/42sh/includes/ft_readline.h +++ b/42sh/includes/ft_readline.h @@ -6,209 +6,104 @@ /* By: sbenning +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/08 18:02:25 by sbenning #+# #+# */ -/* Updated: 2017/01/11 17:31:09 by jhalford ### ########.fr */ +/* Updated: 2017/01/19 16:47:18 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef FT_READLINE_H # define FT_READLINE_H -# include "libft.h" -# include "ft_curs.h" +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include -/* - * Input-Key Mapping !!! LINUX Or MACOSX !!! -*/ +# define FLECHE_HAUT 4283163 +# define FLECHE_BAS 4348699 +# define FLECHE_GAUCHE 4479771 +# define FLECHE_DROITE 4414235 +# define TOUCHE_DELETE 2117294875 +# define TOUCHE_HOME 4741915 +# define TOUCHE_END 4610843 +# define TOUCHE_TAB 9 +# define TOUCHE_OPT_RIGHT 1130044187 +# define TOUCHE_OPT_LEFT 1146821403 +# define TOUCHE_OPT_UP 1096489755 +# define TOUCHE_OPT_DOWN 1113266971 +# define TOUCHE_OPT_V 10127586 +# define TOUCHE_OPT_C 42947 +# define TOUCHE_OPT_X 8948194 -//# define LINUX -# define MACOSX -# include "ft_input.h" - -/* - * Default offset for dynamic allocation -*/ - -# define RL_OFFSET 1024 - -/* - * Readline possible prompt -*/ - -# define RL_PROMPT_DEFAULT "$> " -# define RL_PROMPT_ESC "> " -# define RL_PROMPT_QUOTE "quote> " -# define RL_PROMPT_DQUOTE "double quote> " - -/* - * Bitset manipulation : X is the bitset and Y is the bit to manipulate - * IS : Is Y set in X - * NOT : Is Y not set in X - * SET : Set Y in X - * UNSET : Unset Y from X -*/ - -# define RL_IS(X, Y) (X & Y) -# define RL_NOT(X, Y) (!RL_IS(X, Y)) -# define RL_SET(X, Y) (X |= Y) -# define RL_UNSET(X, Y) (X &= ~Y) - -/* - * Possible bit for t_line.bitset - * - * FINISH : bit to terminate and flush the readline - * STACK : bit to stack the current line and begin another one - * INSERT : bit to toogle insert-mode/replace-mode - * SELECT : bit to toogle extend-video-area-mode/clear-video-area-mode - * ESC : bit to escape quoting and new line - * QUOTE : bit to toogle quote-terminated-mode/quote-not-terminated-mode - * DQUOTE : bit to toogle dquote-terminated-mode/dquote-not-terminated-mode - * QUOTING : Regroup ESC, QUOTE and DQUOTE -*/ - -# define RL_FINISH (1 << 0) -# define RL_STACK (1 << 1) -# define RL_INSERT (1 << 2) -# define RL_SELECT (1 << 3) -# define RL_ESC (1 << 4) -# define RL_QUOTE (1 << 5) -# define RL_DQUOTE (1 << 6) -# define RL_QUOTING (RL_ESC | RL_QUOTE | RL_DQUOTE) - -typedef struct s_data t_data; -typedef struct s_line t_line; -typedef struct s_input t_input; -typedef int (*t_input_function)(t_line *, long int); - -/* - * Interactive line data: - * - * bitset : global/local state and settings for readline - * prompt : current prompt - * input : destination buffer - * pos : cursor position in the destination buffer - * size : allocated size of the destination buffer - * used : actual used size in the destination buffer - * select : start position of the video (aka selected) area in the destination buffer - * clipboard : duplication of the copied/cuted part of the destination buffer - * stack : list of stacked line. (lines are stacked when a quoted (or escaped) new line appear) -*/ - -struct s_line +typedef struct s_line { - int bitset; - char *prompt; char *input; - char *clipboard; - int pos; - int size; - int used; - int select; - t_curs curs; - t_list *stack; - t_dlist *history; -}; + int prompt_size; +} t_line; -/* - * Input data: - * code : input identifier - * function : input handler -*/ - -struct s_input +typedef struct s_list_history { - long int code; - t_input_function function; -}; + char *str; + struct s_list_history *prev; + struct s_list_history *next; +} t_list_history; -# include "minishell.h" +long long ft_pow(int nbr, int power); +char *ft_strndup(char const *s, int n); +char *ft_strdupi(char const *s); +void ft_puttermcaps(char *str); +void ft_putnc(char c, int n); +int ft_size_term(void); +void ft_free_tabstr(char ***env); +int ft_is_whitespaces(char *str); +int ft_get_size_prev(char *str, size_t pos); +int ft_nb_line(char *str, size_t pos); +int ft_get_ind_prev(char *str, size_t pos); +void ft_found_next_word(char *str, size_t *pos); +void ft_move_to_beggin(char *str, size_t *pos); +int ft_nb_last_line(char *str, size_t pos); +void ft_found_prev_word(char *str, size_t *pos); +char *ft_remove_imput(char *str, size_t pos); +char *ft_realloc_imput(char *str, int a, size_t pos); +int ft_readline(void); +struct termios *ft_stats_term_termcaps(void); +struct termios *ft_save_stats_term(void); +void ft_init_line(void); +void ft_read_it(int input, size_t *pos, char **str); +void ft_check_quotes(char **s, t_list_history *head); +int ft_check_quotes_num(char *s); +void ft_del_2(char **str, size_t *i); +void ft_del_1(char **str, size_t *i); +void ft_suppr_2(char **str, size_t *i); +void ft_suppr_1(char **str, size_t *i); +void ft_print(char **str, int ret, size_t *i); +void ft_move_to_line(int ret, size_t *pos, char *str); +void ft_get_head(t_list_history **head); +void ft_push_back_history(t_list_history **head, t_list_history *new); +t_list_history *ft_create_history_list(char *str); +void ft_curse_move(char *str); +void ft_move_suppr(char *str, size_t pos); +void ft_move_dell(char *str, size_t pos); +void ft_move_to_word(int ret, size_t *pos, char *str); +void ft_history(char **str, int ret, t_list_history **head); +void ft_move_term(int ret, size_t *pos, char *str); +void ft_move_left(size_t pos, char *str); +void ft_home_end(char *str, int ret, size_t *pos); +int ft_put(int nb); +char **ft_split_whitespaces(char const *s); +void ft_cxv(int ret, size_t *pos, char **str); +char *ft_lecture(t_list_history *head); +void ft_prompt(void); -/* - * Readline setup/cleanup/teardown -*/ - -int rl_setup(t_line *line); -int rl_cleanup(t_line *line); -void rl_teardown(t_line *line); -int rl_set_termios(int input_mode); - -/* - * Dynamic allocated buffer manipulation -*/ - -int input_maj(t_line *line, char *str, int size); -int input_move(t_line *line, char *str, int size); -void input_remove(t_line *line, int size); - -/* - * Readline internal function -*/ - -void rl_set_prompt(t_line *line); -void rl_put_prompt(t_line *line); -int rl_previous_word(t_line *line); -int rl_next_word(t_line *line); -int rl_clipboard_new(t_line *line); -int rl_clipboard_new_cut(t_line *line); -void rl_toogle_bitset(t_line *line, int set); -int rl_finish(t_line *line); -int rl_stack_line(t_line *line); -int rl_merge_line(t_line *line); - -/* - * Realine display functions: - * - * reset_display : Redraw the interactive buffer and replace the cursor - * based on t_line.input, t_line.pos and t_line.select . - * reset_display_ante : Redraw before the cursor position. - * reset_display_post : Redraw after the cursor position. -*/ - -void rl_reset_display(t_line *line); -void rl_reset_display_ante(t_line *line); -void rl_reset_display_post(t_line *line); - -/* - * input handler functions - * - * An handler use curs_ to manipulate the cursor position - * and recalc t_line.pos based on the cursor movement. - * - * An handler can also modify the content of the destination buffer. - * If it do so, it must reset all display that appear - * after the first index of that modification. - * If t_line.pos is that index, rl_reset_display_post can simply do the work. -*/ - -int rl_default_function(t_line *line, long int input); /* Not handled input */ -int rl_esc_function(t_line *line, long int input); /* Backslash */ -int rl_quote_function(t_line *line, long int input); /* Simple quote */ -int rl_dquote_function(t_line *line, long int input); /* Double quote */ -int rl_nl_function(t_line *line, long int input); /* New line */ -int rl_comp_function(t_line *line, long int input); /* Tabulation */ -int rl_left_function(t_line *line, long int input); /* Left move */ -int rl_right_function(t_line *line, long int input); /* Right move */ -int rl_wleft_function(t_line *line, long int input); /* Word left move */ -int rl_wright_function(t_line *line, long int input); /* Word right move */ -int rl_home_function(t_line *line, long int input); /* Home move */ -int rl_end_function(t_line *line, long int input); /* End move */ -int rl_pageup_function(t_line *line, long int input); /* Pageup move */ -int rl_pagedown_function(t_line *line, long int input); /* Pagedown move*/ -int rl_select_left_function(t_line *line, long int input); /* Left extend video area */ -int rl_select_right_function(t_line *line, long int input); /* Right extend video area */ -int rl_select_wleft_function(t_line *line, long int input); /* Word left extend video area */ -int rl_select_wright_function(t_line *line, long int input); /* Word right extend video area */ -int rl_select_home_function(t_line *line, long int input); /* Home extend video area */ -int rl_select_end_function(t_line *line, long int input); /* End extend video area */ -int rl_select_pageup_function(t_line *line, long int input); /* Pageup extend video area */ -int rl_select_pagedown_function(t_line *line, long int input); /* Pagedown extend video area */ -int rl_retarr_function(t_line *line, long int input); /* Remove before the cursor */ -int rl_suppr_function(t_line *line, long int input); /* Remove after the cursor */ -int rl_clear_function(t_line *line, long int input); /* Clear screen */ -int rl_copy_function(t_line *line, long int input); /* Copy selected area or current cursor line */ -int rl_cut_function(t_line *line, long int input); /* Cut selected area or current cursor line */ -int rl_paste_function(t_line *line, long int input); /* Paste copied/cuted area */ -int rl_insert_function(t_line *line, long int input); /* Toogle insert-mode/replacement-mode */ - -int ft_readline(); #endif diff --git a/42sh/src/line-editing/curs_single.c b/42sh/includes/ft_xattr.h similarity index 57% rename from 42sh/src/line-editing/curs_single.c rename to 42sh/includes/ft_xattr.h index a7c883a9..9afadc18 100644 --- a/42sh/src/line-editing/curs_single.c +++ b/42sh/includes/ft_xattr.h @@ -1,26 +1,21 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* curs_single.c :+: :+: :+: */ +/* ftxattr.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ +/* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 17:04:53 by sbenning #+# #+# */ -/* Updated: 2016/12/09 16:40:41 by sbenning ### ########.fr */ +/* Created: 2016/11/07 13:24:05 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:24:05 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#include "ft_curs.h" +#ifndef FT_XATTR_H +# define FT_XATTR_H +# define FT_XATTR_SIZE 10000 +# include +# include -/* - * Save cursor reference or return a previous saved reference -*/ - -t_curs *curs_single(t_curs *curs, int set) -{ - static t_curs *single; - - if (set) - single = curs; - return (single); -} +int ft_xattr_print(char *path); +int ft_xattr_count(char *path); +#endif diff --git a/42sh/src/line-editing/curs_clear.c b/42sh/includes/get_next_line.h similarity index 52% rename from 42sh/src/line-editing/curs_clear.c rename to 42sh/includes/get_next_line.h index cb3d0694..b63d0ac2 100644 --- a/42sh/src/line-editing/curs_clear.c +++ b/42sh/includes/get_next_line.h @@ -1,34 +1,31 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* curs_clear.c :+: :+: :+: */ +/* get_next_line.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ +/* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 17:28:50 by sbenning #+# #+# */ -/* Updated: 2017/01/10 17:20:41 by jhalford ### ########.fr */ +/* Created: 2016/11/05 12:21:36 by jhalford #+# #+# */ +/* Updated: 2016/12/15 13:07:58 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#include "ft_curs.h" +#ifndef GET_NEXT_LINE_H +# define GET_NEXT_LINE_H +# define BUFF_SIZE 32 -/* - * Clear screen and keep track of cursoe's coordonate -*/ +# include "libft.h" +# include +# include -void curs_clear(t_curs *curs) +typedef struct s_save t_save; + +struct s_save { - ft_putstr(tgetstr("cl", NULL)); - curs->li = 0; - curs->co = 0; -} + int fd; + char *str; +}; -/* - * Clear screen after cursor position without moving cursor -*/ +int get_next_line(int const fd, char **line); -void curs_clear_post(t_curs *curs) -{ - ft_putstr(tgetstr("cd", NULL)); - (void)curs; -} +#endif diff --git a/42sh/includes/libft.h b/42sh/includes/libft.h new file mode 100644 index 00000000..ecbe6bb5 --- /dev/null +++ b/42sh/includes/libft.h @@ -0,0 +1,162 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:49:04 by jhalford #+# #+# */ +/* Updated: 2017/01/19 16:13:05 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H + +# define STDIN 0 +# define STDOUT 1 +# define STDERR 2 +# define STDBUG 3 + +# define DG_MSG0 "{inv}{yel}%21s {bol}{blu}%-3d{eoc}" +# define DG_MSG1 ft_path_notdir(__FILE__), __LINE__ +# define DG(f, ...) ft_dprintf(STDBUG, DG_MSG0 f "{eoc}\n", DG_MSG1, ##__VA_ARGS__) + +# include "get_next_line.h" +# include "ft_xattr.h" +# include "mytime.h" +# include "lst.h" +# include "dlst.h" +# include "btree.h" +# include "color.h" + +# include +# include +# include +# include +# include +# include +# include + +# define FT_WS(x) (x == ' ' || x == '\t' || x == '\n') +# define FT_ABS(x) (((x) < 0) ? -(x) : (x)) +# define FT_NEG(x) (((x) < 0) ? 1 : 0) +# define FT_POS(x) (((x) > 0) ? 1 : 0) +# define FT_MIN(a, b) ((a) < (b) ? (a) : (b)) +# define FT_MAX(a, b) ((a) > (b) ? (a) : (b)) +# define FT_DIST(a, b) (FT_ABS((a) - (b))) + +typedef struct s_stof t_stof; +typedef struct s_stos t_stos; + +struct s_stos +{ + char *key; + char *val; +}; + +struct s_stof +{ + char *name; + int (*f)(); +}; + +void ft_debug(void); + +void *ft_memset(void *b, int c, size_t len); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dst, const void *src, size_t n); +void *ft_memccpy(void *dst, const void *src, int c, size_t n); +void *ft_memmove(void *dst, const void *src, size_t len); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +size_t ft_strlen(const char *s); +char *ft_strdup(const char *s1); +char *ft_strcpy(char *dst, const char *src); +char *ft_strncpy(char *dst, const char *src, size_t len); +char *ft_strcat(char *s1, const char *s2); +char *ft_strncat(char *s1, const char *s2, size_t n); +size_t ft_strlcat(char *dst, const char *src, size_t size); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +char *ft_strstr(const char *big, const char *little); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_strcmp(const char *s1, const char *s2); +int ft_strncmp(const char *s1, const char *s2, size_t n); +int ft_atoi(const char *str); +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +int ft_toupper(int c); +int ft_tolower(int c); + +void *ft_memalloc(size_t size); +void ft_memdel(void **ap); +char *ft_strnew(size_t size); +void ft_strdel(char **as); +void ft_strclr(char *s); +void ft_striter(char *s, void (*f)(char *)); +void ft_striteri(char *s, void (*f)(unsigned int, char *)); +char *ft_strmap(char const *s, char (*f)(char)); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +int ft_strequ(char const *s1, char const *s2); +int ft_strnequ(char const *s1, char const *s2, size_t n); +char *ft_strsub(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s); +char **ft_strsplit(char const *s, char c); +char *ft_itoa(int n); +int ft_putchar(int c); +void ft_putstr(char const *s); +void ft_putendl(char const *s); +void ft_putnbr(int n); +void ft_putchar_fd(char c, int fd); +void ft_putstr_fd(char const *s, int fd); +void ft_putendl_fd(char const *s, int fd); +void ft_putnbr_fd(int n, int fd); +void ft_putaddr(void *a); + +char *ft_strrev(char *str); +char **ft_strsplit(char const *s, char c); +char *ft_str3join(char const *s1, char const *s2, char const *s3); +char *ft_strcut(char *str, char *cut); +char **ft_split_whitespaces(char const *str); +char *ft_convert_base( + char *str, char *base_from, char *base_to, char *flags); +char *ft_strcatf(char *s1, const char *s2); +char *ft_strinsert(char *str, char c, int n); +int ft_strappend(char **dst, char *src); +char *ft_strbetween(char *start, char *end); +char *ft_strreplace(char **str, char *start, char *end, char *new); + +char *ft_itoa_base(int nbr, char *base, char *flags); +char *ft_lltoa_base(long long nbr, char *base, char *flags); +char *ft_ulltoa_base(unsigned long long nbr, char *base); +char *ft_uitoa_base(unsigned int nbr, char *base); +size_t ft_ilen(int n); +size_t ft_ilen_base(int n, int base); +size_t ft_uilen(unsigned int n); +size_t ft_lllen(long long n); +size_t ft_lllen_base(long long n, int base); +int ft_addrcmp(void *a, void *b); + +char **ft_sstradd(char **list, char *new); +void ft_sstrsort(char **list, int (*cmp)()); +void ft_sstrprint(char **list, char sep); +void ft_sstrprint_fd(int fd, char **list, char sep); +char **ft_sstrdup(char **list); +void ft_sstrdel(char **sstr, int index); +void ft_sstrfree(char **sstr); +char *ft_sstrcat(char **sstr, char sep); + +char *ft_path_notdir(char *path); + +int ft_printf(const char *format, ...); +int ft_dprintf(int fd, const char *format, ...); + +char *ft_getenv(char **env, char *key); + +void *ft_realloc(void *data, int size); +#endif diff --git a/42sh/includes/lst.h b/42sh/includes/lst.h new file mode 100644 index 00000000..ee4926df --- /dev/null +++ b/42sh/includes/lst.h @@ -0,0 +1,80 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lst.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:46 by jhalford #+# #+# */ +/* Updated: 2016/12/12 14:59:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LST_H +# define LST_H + +# include "libft.h" + +struct s_list +{ + void *content; + size_t content_size; + struct s_list *next; +}; + +typedef struct s_list t_list; + +t_list *ft_lstnew(void const *content, size_t content_size); +void ft_lstdel(t_list **alst, void (*del)(void *, size_t)); +void ft_lstdelone(t_list **alst, void (*del)(void *, size_t)); +void ft_lstadd(t_list **alst, t_list *new); +void ft_lstiter(t_list *lst, void (*f)(t_list *elem)); +t_list *ft_lstmap(t_list *lst, t_list *(*f)(t_list *elem)); + +t_list *ft_lstnew_range(int a, int b); +void ft_lsteadd(t_list **alst, t_list *new); +void ft_lstnadd(t_list **alst, t_list *new, int n); +void ft_lstsort(t_list **begin_list, int (*cmp)()); +void ft_lst_print(t_list *list, void (*printer)()); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lst_sorted_merge( + t_list **begin_list1, + t_list *begin_list2, + int (*cmp)()); +void ft_lst_sorted_insert( + t_list **begin_list, + t_list *insert, + int (*cmp)()); +void ft_lst_delif( + t_list **alist, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)); +void ft_lst_delsub( + t_list **alst, + t_list *sub, int (*cmp)(), + void (*del)(void *, size_t)); +void ft_lst_cfree(void *ptr, size_t size); +void ft_lst_bfree(void *ptr, size_t size); +t_list *ft_lst_filter( + t_list *lst, + void const *data_ref, + t_list *(*f)(t_list *elem, void const *)); +t_list *ft_lst_removeif( + t_list **alst, + void *data_ref, + int (*cmp)()); +t_list *ft_lst_find( + t_list *begin_list, + void *data_ref, + int (*cmp)()); +t_list *ft_lstpop(t_list **lst); +void ft_lst_merge(t_list **begin_list1, t_list *begin_list2); +void ft_lst_reverse(t_list **begin_list); + +int ft_diff(void *a, void *b); +t_list *ft_id(t_list *a); +t_list *ft_lst_at(t_list *list, unsigned int nbr); + +#endif diff --git a/42sh/includes/minishell.h b/42sh/includes/minishell.h index 02b05202..2895c065 100644 --- a/42sh/includes/minishell.h +++ b/42sh/includes/minishell.h @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* minishell.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ +/* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */ -/* Updated: 2017/01/11 17:17:16 by jhalford ### ########.fr */ +/* Updated: 2017/01/19 15:21:51 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/line-editing/rl_clear_function.c b/42sh/includes/mytime.h similarity index 50% rename from 42sh/src/line-editing/rl_clear_function.c rename to 42sh/includes/mytime.h index 6782b79c..140e1100 100644 --- a/42sh/src/line-editing/rl_clear_function.c +++ b/42sh/includes/mytime.h @@ -1,32 +1,34 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* rl_clear_function.c :+: :+: :+: */ +/* mytime.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ +/* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/09 13:34:29 by sbenning #+# #+# */ -/* Updated: 2017/01/10 17:46:00 by jhalford ### ########.fr */ +/* Created: 2016/11/25 11:43:12 by jhalford #+# #+# */ +/* Updated: 2016/11/25 20:26:20 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ -#include "ft_readline.h" +#ifndef MYTIME_H +# define MYTIME_H +# include "libft.h" -int rl_clear_function(t_line *line, long int input) +struct s_mytime { - int pos; + char *year; + char *month; + char *day; + char *hour; + char *min; + char *sec; +}; - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - curs_clear(&line->curs); - rl_put_prompt(line); - pos = line->pos; - line->pos = 0; - if (line->used) - rl_reset_display_post(line); - if (pos) - curs_forward(&line->curs, pos); - line->pos = pos; - return (0); - (void)input; -} +typedef struct s_mytime t_mytime; + +int ft_time_isrecent(time_t event); + +t_mytime *ft_mytime_get(time_t epoch); +void ft_mytime_free(t_mytime **time); + +#endif diff --git a/42sh/obj/ast_free.o b/42sh/obj/ast_free.o new file mode 100644 index 0000000000000000000000000000000000000000..d3bbdd4d4d0bc796d6badaeaf1396e9741445153 GIT binary patch literal 3596 zcmb7HYm8Gx6rS7m-geui-DP>nv#>l9XqTrOF~|ncQqUM)iehd`dv~|E+^)SXECkK! zfzcP`s4%fpjBa~^Z% zn=^OL%yhrGdhU8q2+c3hfCJ!89Zehzx(9rj&RfuF3?}X47?5YvO^(qCGR>0JRdRLL zUbF1+HT|}y9Z(AKIBnMuA$;@&L^p*;rkS%gmfK9HRFp2$T>4ncst3Jp;o(f?qCky? zD=S(F>)9S&Mij%B?=#*RFVorC zVVQPjGt;|iy??6w?pJATzhizbUSZ=Vxxv->O;sOhvcmi1F7af3otbPkUb+hJ=exu! zZR;F#y|%);qCVjDyTrqxlaST%E}x{!xRvfk!%Wi~RUq>KG6Svz3Q?6y#@!=el|!8N<)^D7cciUh;qiR|echUz^%< zI@NPFp4#*5<iIDz3S=E7VKuGfO;A zPqP-=Ikw;O#db#ftx#;&up8E~P^t&K=Y$IZzex2Qk3aQg3lCy^<;ryr$G2ETCttAR z&55Q&Q+#^11GmSl<|Y`4d2cJghum5b-?lCTRoOO#AN zNzJ*TvEI=kg&Zau4w2Dv$}*#+Ric15;5QxvT^ z;qdt(YxUZcXoK#L))`}>_1aKuzb^sjP;GJ8AH6TKFfy(70hX{Xe9E!B0XOr!0jAE^ z(ikC@H@IW)giaRz=%PpjWfqFTFGNj)=8r}qgcKq?1l`LUXf&fvBO@#N#G6cl+bBY; zMo}wfQh*lA)@=?b{YJ5R4sG3PbZIe7^ZWL9ZIC)2a9EugX_e6ieEZv9r&a$dTA>@= zXl<~6ys;O8F}@AKT@b-gh>^y7Xx;(`8fp$fj0(&RAAvkU*L+{22y?EVXf5zHhJ^7Q z)T1;<20w?;L&hnHlk^Oa`~XoGm>K>JawL`+NDyHRv^QuaX~m(vOsff&FeX7ILSR_U zSvh)2_#)(5MoeS;RnMC4YYc>WlsB+%2D1rXLZ==u+ThXY9TBO82n8m{Ksn7sf{cP! zLQdkOq5Uv}4QLE4#2_55)h#J19;*vU+3t1q^*aYYt7`(nrZYX^Tk zKH<>XXAV7C-#dErTzlL{3-zy#{yz15Q}^!3fxo{U^Zu!ev+HWNe0=VD__-(Eefm%~ zesIUH7=Iq@!$%qpo(^6JegvEWm%uN9S?Y(u$H3o%{{VA$@F(|f1SE)6NEZu}mp6!; zM;G^Vr1Z$zq>II>2C~ZNV%exDRwP|4TNTA#x>$$G#qy`C8?0QHl#9iolHhq^6r)uX zPX=8)EDc}~i=Qr@2Q~1la@@1b+y6JJ~hu+L^fR^R9~MOFGNeU?nU2{A?i66e<8*vUO=m9*P=tvYMcYC zd2fkGmYrfUZ)ZEoIV+i;+q__)$Jyp2-7<^CZ_et zt$H%8FHGx;TJ_~=J(AX=M!P-?ofFc!Kdo!VNuPlwVv3z$%r>h9685ZnU1=nhoT}t_ sB_SARyrLxkFN+aK5l>u&DfLQQn5}qVOU0bk;i}O2J_|mC@}(ByKl|baI{*Lx literal 0 HcmV?d00001 diff --git a/42sh/obj/builtin_bg.o b/42sh/obj/builtin_bg.o new file mode 100644 index 0000000000000000000000000000000000000000..92476142285fc803d6888b784457487a7af8ce73 GIT binary patch literal 5336 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 baAm*KCv(9yYfV?)JG1Lf$`SlsbD7(J?r2iV literal 0 HcmV?d00001 diff --git a/42sh/obj/builtin_env.o b/42sh/obj/builtin_env.o new file mode 100644 index 0000000000000000000000000000000000000000..4dce0ec7f0777c078cf2fa62624b6d108305f5c5 GIT binary patch literal 2348 zcma)7&1(};5TCcnrXNX@XcZJiqSRVJlT->8KU=JlN)_#g9|u`B+q6kZHzC=yRV;c? zF}HdUR6Ka_kMOAY2Y41dDtHk*7QgDu+j;3`TWtpB&6~-*-~Q&kc`qM+eEZV|AOe5` zY7n)o35?Q8>#SdCmM92>_aB-oPuCEE)FWJ@F>ve1FIn z_y?Yu%~o;?#J8EB!kb{2R`Ck2^*&^vQ_N}Smi%12Qg%)ru%F*M#_M6c zt1aS5er410<9+er)mp@JZkIQ$w}W?khWR~j5f3k&g!J<(F`lY-ZA(0>G>>&UM$KL< z*wcnFHo{b-dB%7N4)$T+(bMn?EpLUdUvhb4rh=#IE-;Md_uvg@4>4Yb@z{khKwizs zs`sE+uqC3u-c`mM=S7bZk0jW!IX~K$I3KO-;0)hM;>qm)hkpl*X#|q zG@r`Uzx2P&)R$K?_1gDLed_D2_rr7(5@Tc6E+rOnm1?16CkB)0WIEAj74iBW9ZaK> z95|NjKMd81mCDu%MWw#!Iv?sbvY{$a1BnG#Oq0T_`MEGR*P-L|GYy^*62aQ9c-MF(o z5Qv@$hjEAW7*HhCD-FEFop6t%U2anZj_}^Bzuy4r1#h&C3W#erFI^-oKR^?z;}EoICiJIdUf`fp6d*G(oKc5J7K@YO#@v^6 zdf?*$qAj_gO}Z&fYboSkyN2S$-zta7Csozcr4kUr%cbKVB()#;0O|XW!&c(y-65P$ zpi-?Ar~3JlQ?(SLB02OwCT;i?VvE`9!ZZk`NfbSCXB@;*T*M=7?JJl?-`R`W_nV;B z)>Ix0N8^vQb6xy51(z{LgEWpp{ET+tDCirg!qd{=ZCUJTNkcu2c=|D+Yn|;qnuhBE gj=KP%6x&|5``Dr(gwScWgcg&K^b3mNy&wR80b0lfiU0rr literal 0 HcmV?d00001 diff --git a/42sh/obj/builtin_exit.o b/42sh/obj/builtin_exit.o new file mode 100644 index 0000000000000000000000000000000000000000..f08787f4e736556d36d7be239e3d61bc45835cfb GIT binary patch literal 4544 zcmb7Idu$v>8K1rL-rINQM?#9za8;V%K>bMSP^%+#%ZEfNavY;8pgzE+hxMA!YIW%(J zP*HIZBWR&O0Oz-^Y=&XFUfp&kmC-Po;|t>2r^a7Z-y2}8#HP(Kiq=G9(g3J*L3~F> z?z=m17nhavT@^@#t&eReG%&U%lW=TG;4Tyf<5N^1Ue^Z$-Z<-c-Sq zA-)q{kQeWcSE$u0mf;kp7~X%y_h%K~xC*G}UE}ldsuM@$2Dip{m&&)B6`s3BJQ-iD zV7B5-w%~nfjdDODtq z>VZri)LX@NBx39L_NsaqQNfG@k1h2M@o`;HIzlAcUJ+{__0j#Xs@pyN)&Dn&QvK`wkTa}6!VU_0&95{S1H*M8jyXxeI`v?06 zbG>E-M^oSMAe8>09sS$43Ab(zOf>9@XFCBmtQp(uH^so1i`fH{4_1#B3j;$t+_G@0 zo?Wu7qOcuLsADs7=~MQL~FH=LITU zZ{2|bvr(_(#|(J-lf0>F5yymQ)u-&LD@?;KRSJ{BGs!r?s7ixrNDK5zpqs)p;jtW! zTn7fuV}eN7D=eDqeI(y-RDQkIp>0Wb>EU!X(v$AcI+0DGei%Eoy@_!8_T-0??@#UT zx&wz(cu0iP`@3igp@iCW5mFxeyKp59HK~!C;k+lAL^VY-f)25*lEv49`M^RXy0maQ znIt3%uYDPR82BmHbNjLbZin=;gHDIcG7`qJn#LdLxC!XD0j!h1pG@w7D2k{Y77t=z zt%#Jkg$(T@K9l`3O7=aW1P1LepEz1Z`!QMg;5sitLqj?uQzV(no$ z<-D(zKfSE!p~d1UY8}LYHh!8~*K59Z?>7;l);+*DBfQr1w&?RovTGf+3A9jH4wHw!hF{yfxAQ0;&^oMsGC?S#5lWEko}P%Nrt zN8r|R2wk_x90cRH#$sAzhFt4BCEetVCn?6!&k*7K2x9|DM z^v*YzW``l?K};$790ak+d;{;7+I3v|u&st0{PtRWV!*&{hcELRuXV;3#>28rUVzvD z*cdNrOa3{*+qNCVD|GOY$C8gd9ed^MH-7z(7oY3i_u{9{ef@W4ch499exb+AojKus z*1oY3+L9fc=<505AGiMPXD4=EyYhJX#>h)|daotUoH+9A$+s^6hndU7;o5BkFi;^bRqJn4L(8NMgUd(iwSc1yLI;DxFtKeBCG_iV= z7fXgFrlx{tozukSQ(i0?npjE7#1Ls>9xD@TjHa{bl<9w^O>{-dVwP&^SR_tU3zA8D z=suy%WVLK68smw;pf`f9UST>dEd|G_7)fVOh3;xs&tSQ8A;AZcrd`8Puc1-FzZK5} z-2G;y!K-qh;noL~Hela6{Gn!xd(0g${I_?LC+wo>@qo7mexu@g{blBqKL;`jKwbAx z+612x2HyttYNf>!C1S`6-gi`YI1~)X2z-C!Iq>}!&S-if5!B0s UwiJpr{HKIhYM#=+{B{)o0amcBIsgCw literal 0 HcmV?d00001 diff --git a/42sh/obj/builtin_fg.o b/42sh/obj/builtin_fg.o new file mode 100644 index 0000000000000000000000000000000000000000..9da2139c8804a78f406ed21e1b0527b34b9027e4 GIT binary patch literal 5276 zcmb7IdvFuS8Q+t9r?X^PGPWs{M+6QOT5J;njmxX1LFqvVP16`i8+wt?k}Qx|frtwUe0s5FE(=?@-K4>Q)A)yWJbO>!SrN7_Z z%E$_7=#KZk{eAoGZ@=C9_Pdpz|My@26A(i23p`L8P{&j}VyGxnQ4Qh`D33OI9cQFX z6@yc-M&&rubdoz92_Q`K&iJM~ui$EHADuuUAAQ+7NeKKA?4_s{)3l0CA!DbdqMonH z(=Yq`=}b-W)wJ0(&4FZpDQ$w(?J>>O8&}qrVgVtMa`hX|9zoW2bT)QqT7kHy`D1(u;D?!_ijny#QU+ zze2)JCyVdr`*z)aZ4Y~VHP5T^4J9ns#d`m$eDZaO59dqd^Vy_nCx+ECkc z(2fuF&*RJWZ*gC6y?-xBzUw95=r!`W{^b)^J>R7|zSGyp=j_a1b-mMd&$0XEuD^GU zd^p4|Wxan-$oQzPccgmo<@zD&-mjG#!a5zZWN**d1E#rd^%YYgPD;L*R2~K&kIX{E zpM2+ae91vGRlwWz2Gr++HzZ%L$L&cgtfZPFRN#lt-x z;2-zJ-I9>!2%VpT+6#M9U4T3S$@cB2wS`l#$|clxeQ3MSD8FWmoX;B-H$fW}VU**S zjPmdqqg*;|l>1&dD&8QAQR$sxjGR%7kxL?S-+XAErH{tJCCf0kaj^Xs2x)sFe*Q8_ zIezrqMc7ms4h~;1)YBYPj-QmI@zci04qZg{w^LsMtnAR;zH#^K-6Gy9&vH;Z%BQY))}kGG`43g`JCS$@O^ijBTdUU6$zXD`I?idV6lmK%#r`qT-;q(l0W$ zBk~DnP*{VBf=Fx=NqbvffXot(>58H!Qkg>0)j*%k6dh6Y1Q!g?g_LG7b8k}cVLCi- zi2@RVs|3#G>~yST7c*%)IS}L2Ht!F`!DKdT=F^!0ktpq*DN1+Jfy=mM4Cn7vFuXUa!R8@tt;cg%$qKr}a zeGlBT)x{_91lm+`5t9?p?K{R%gYN-@89-@y9Z#U%?_zpoQXVrj_#Zg7=PY4s51#1E z^W-aSfA%^@_dG?|K8BG(P4m&9{SqSZBHMX9G)4OZ6@OuyT8$}5e+Q3!sEyMa%MhE? zxxqt_oJF1I>kz@WfF329@9WTm?P!fbqki1i(G-jUJxi7u3Es5*`KGP1H`pvp`&@Z!#%D`u%7>16{*R{XsO3qv^j}zwHqpER!a|>}E9xMn z(!$TQ9&kq-V6#!tN+jNk$0JZQezfrkhK0GO z?;>pMttB1;H?kqSs6?q9OI$ye-{$|vhW847p4&)I;$Js53`V0( z+eS;iIniHRZPQMD<;0UupPBpiGrO0(yKwJ;(1YtzGqhiQ#_8*Co%YRtyfDp*J+%80 zco|_cQExz9jk*za3+gZ`V}ft)C#a`Te~T#)JL`ix^IsV+^BdvI7_s8Yo+ zrizg-2lACr#atj&Ok`9sw@D|MQmA6$kycEKR52Gy`u`QG0fZsL8P;Br`JNOLN;P(s zd+!j+j;IoC3h0at&M_VJ(mzRa`EvDpAyzd2|=R5%B! zQg>y-J;=(Ic$Mfb6${-Gb!Tqu`Q$`Rac8mH^nQO$u!LUJ+^cZ!!YtXM(>2Ib=8Zrb zr%hgl02&bSxqee#8S5-@9!>Z9;~B~u4gfmb`8|6aSnzwrA5qjm&>!^8R#Z*XyHvlX z?=Pvrv+8v1h#E+#KJ8XDaF_ZK?Nv3hPYrBRV|b=i^<{OkwgN_L)!=efKZ3!xYMazX zZBUIu7g&xFw}Nb~I#v5VrFNGZI;$O0do+C(@N!LmO!d8{D!=v3!X69pRqikj$Ywm? z-HOjb!tKsp54SInc(%mM2go^{Z$cvfbn^R-ci8zu$NYjCTXN@TKvS5-5e zblj_^nR3j8lgkKmC{ftzb|s2tp=8_q-(SOyPe3-ptleo|kr%{{jHLS0w-d literal 0 HcmV?d00001 diff --git a/42sh/obj/builtin_jobs.o b/42sh/obj/builtin_jobs.o new file mode 100644 index 0000000000000000000000000000000000000000..1260e07f2bf29b914f14d323653398a628896728 GIT binary patch literal 4920 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 Ir_)&XKh(C^ZU6uP literal 0 HcmV?d00001 diff --git a/42sh/obj/builtin_unsetenv.o b/42sh/obj/builtin_unsetenv.o new file mode 100644 index 0000000000000000000000000000000000000000..c95cd843017e0b98a66f7bcdc9953a9d4db6f49c GIT binary patch literal 2808 zcma)8O>7%g5T0G6fhPdJ#gmdfW(2Sh(o0ciAGeakPvX_p%RxIg49SL<$@Fe!p!Wx7wk<-Jkq>* zGjHDaX6F6u{`BYX|M&qUA7F#rhg@aYB$1KsMcyXk9q3a&wn}r5gpQa%93>-?rrG9_ z?e<;$RBrmzf4b;h<{iQ#=;3|D#p`IhJVgEGb;AkK8=t@vW!xK2uU5;ZX6f@3 z-mZM#7^{JZ-IEEtaf;rcI9XP#m$!@siw_47&HWjOUN< zInTg#&@{8C&D3yrh2H%hT;h169B-84aTP)UMbRfI&R@A?If&kTw>aKce9|)F5!rW$ zkLnU5hY&g-QSkR5pXK-I8M@>@o2p4(QNjV-k~ zb?Xw`qIqgFck_B~gOF7tx1qLcNUHHf~A?+aYdtz%0g>o{^#Z3X$@F^{#CUE7)7 z8eVgtSGJ#xp5IT7tsG7rX*Jdz`zBSXm0MrADm8QKn;*B^?N)BX(Ka?0Q9F25UAdNd z<-0MutjWpA)5ntwX02YTSjmx8CY4D(VwCZP85+r;k{UjgI`}BmYeqWXD3$G!B_tlI zx@nu%Ldt;jR2>o0vx}9vf}S2eR4)Se-tmHxWkXfBi(nM>8t4mvQ>##dIqHBkAUzaG zFkd95+!q;;;#e^`g~qrv+V6`z9eO78aQJBA`7rJf1DTtSCh(yg?o!zx_#)4RLb%6D z6v)AUz!C5>mc>2J0oo1-!($|nsM>3S^~o0s=Sdr&iKxByE@^SDO*ctPe2*F^3KJh((c6H%ZExvOlOja zu95@_N`{{^x^!-wndSFFM)ISxqo|)mrmQJmst8?SB+8pilrA^@UnG89g`!38PU2ff zKwTsPl+K(0X(=Yf!v4T2deKVvBWM05uy$K)J&Z+S@5qPuiQk7W(MN_Su$830BKxqF zXbohky5zSg=2Em??^l8-I)i8%$Q-VobTn`Wq~)Ot8=d^JQ5a z4f|0`Ot5&CJutxnSJ>b*3uM`VGRtB(a#xnIEaH5^d@a_eG1<4U>I>Vlg5lv>?<3=~ zL-gl`8#8n_O0*9>DKBtISW#*?aX+CthpS^45;)SSgSP8o&}MA< dB{b%%pcQmm*Xku}wrtuJ3!EVwE0|@(`4<`pf$;zU literal 0 HcmV?d00001 diff --git a/42sh/obj/command_getoutput.o b/42sh/obj/command_getoutput.o new file mode 100644 index 0000000000000000000000000000000000000000..41121df3932b98c65f7a5bbab3c00694be00a91c GIT binary patch literal 6472 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/copy_cut_paste.o b/42sh/obj/copy_cut_paste.o new file mode 100644 index 0000000000000000000000000000000000000000..9d52813aa02108fed745a7403c68dd9e2acad41d GIT binary patch literal 5184 zcmb7Ie{5679lvMip6w*qP6Am6gnAvYF<~ck84Jveq{Y+2A`>c*1qu3aY~vU?w&foo zFtV|@w0Sj5pp9-qZRyaa?T-~z(>ASLH$Y54`Df8IZTvB5sH75++R^ooEo-ZGpYOeU ziT#olcFNuNzCZ4B-|zSC-JSEt_uu)*#hBt`Xiyta{VJLOD$1u(f5=65(Z=6oio0kG ziYj?vGO8^kMA7w9a;#+bO@4P|aQ8fK^#bGw3gMA2Jpfoif(CY+h*flbs93ZZP+i~F zx4Um%;Ff;4=S56H3kk(qTXa2MEEUq(loaZEy?>Tp7RF9b?P$gv^(_2JB!|i=9iT!3 z|Gv@p#MkDmJ}ZGC>8Cd$(?@jsCM`CA#2p)cxRA(l-gvCwwBcWisIquIo-X&1#CiN%GB z{|nFB7x%}D<@1@Oo{f!=dkg&ghxG5XbZFIm{WI}$Lx;oy+x`2N{JvI8yo(QrC;ZFD z;&!|XHoQMQAYSQ6e$jZZNxZAlzkfX-9u5ToY4^{d!vn>N_thmPU(?#wH=Y|ooF%=S zJ)F)abbZIR8e8^?#5*8`w}D5W%pmrk{B&%1$zlCq0jp~cu%8Ehd9YaP+v}af5d(1i z49lqmnfrdzS%GMe_a%vUPr1og>^0b_zd{;BnYX5ZQ%ExeJ=Eq1B{1HaTs%dm;%W*8M zC=j-G6%kg@rB6vdu!vr9+`$0?0V!j5v&;;ZZ)Qi$ltWe_^h?g&6v$hX!UNC%OBC><&vI{6-&ub zoOSLg0;Dr_ICm%!>+F8CILt~Tc@`gz6<9i3Vh2lld~B4+7&W7;kSwu$uE>h%qe;C) z50O{_C!#L-OfH)Wl(WTjDw|9M2!Wm`X?BQZl3Av-C~LfJ-0AhJE4(dAD?)dKAZ%57 z8=cfddCn17{AY-;RTa`xp^*HH^O6)Pyt0Wd~u*-CZ}v z(~dFb6iD|3O$-V%%07;&^+Zs?ij%sZ<8C=qXzj#Ti4#Ag0gbv>t^Gjx)!; zEey`01(&Y~?n%rAZuk|!(dWeYchRVHWUGpLhy)F;DG(|*g=>HwD1%ehD;PUQ^C|0T z>>Td;I$WW1JI*A2NtPkDvjMv3`!Z5_~(g15vvFq65PB$ zWJATe!H6e+$QR4!2eF|mgeu(|R44|*aYEXFyOZ#!kdC$^>3?;5?Y-X}`_czp$0wV< z_ukZsc;M`@1muTNpGAEEl{OINlYF2w)7g(gxg`;$do>9dK08xH>mo(8CS*m6BnQ&| zBN1Urt4|8kB~t-wtH>{dKY z{oBl-^<}a?um5Ss<4erFW7=(l-Po*YC;ecH*=1n2^FOAY^k;$H5SGcoz6nc3`M|pb ztwKJdD)zIMb(V{T&U7}ODJPPh=`Z$dtd|sz6gzeK-d%7k1JKlkhG}QW(-jPD5#}+^ zF7%vR74B|yZ{RL9%JJt^Q@n96SJe{ts&DW%5=FUBJ zjdD+zyC%3pEpy*qVdnfH`-)#v2;leP!+`b2ro~bi%(ukr~Hc z?t#cLf#6@lyixv{F#p19d|i|`hULs;k1&ui$4Tye4q=HjwV7VL$Umi4cspbrVZKsi zV$C4$p5Tv!ITGenFP`U1FV?%Z42W}4z=89GPd+z8(S&Ymn74?i6!nZl#hzlU73=I{ zEO-wq-2i$E)C>9sDE4;nbxALP;{FSs1I0-bdfB+!(Sg^_qHUlbPL z=?zE5=!%yi^&v}?^FoX%LiB1Rv4Ah-^r2)bmCgzgEa~wl28mZA&@DwGnPK|jLb{X` RlI)P4!OK*qM=L^N{{<{iVcGxy literal 0 HcmV?d00001 diff --git a/42sh/obj/data_exit.o b/42sh/obj/data_exit.o new file mode 100644 index 0000000000000000000000000000000000000000..36f4b2acc5d0c40bcb566192ce6ef4e7bea68562 GIT binary patch literal 5160 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 Ra53+dOTs~?LIncK{{S^wcWVFu literal 0 HcmV?d00001 diff --git a/42sh/obj/data_singleton.o b/42sh/obj/data_singleton.o new file mode 100644 index 0000000000000000000000000000000000000000..a8b8ea35527b220247ecd6087280e3c834c4a74a GIT binary patch literal 5356 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/do_job_notification.o b/42sh/obj/do_job_notification.o new file mode 100644 index 0000000000000000000000000000000000000000..9dd64dd4e02d646cdb91a74c19569a75e3682ca5 GIT binary patch literal 4948 zcma)AYit}>6}~gOGduRK*BjdnPMpUk&Z7yjoo8#cAvkSPZ9)odh}#5O4eQylcf)#j z*_ln_riRcw6xRenBP1$>RHR4*R354V0z@E%q9{TL1pQHdfGp9d4U`h`BQ-6;eBYfr zX1z&Bu5|9X-?`_0bME8Zz4mY4`}==lLTC|z3KE4}G*G1>C<`DN;#-tg;z7rh@(D3G z1tq1%*|zT<_7#A#?R`7<@B1GPTb&F7g?x^vdlC!*pg?P0NP$MdU&(uguN@`XH4 zsQzg)92sbRE<`*zcc?aEgH-m|_KwH5?|o?2%U5x|qx3#bZf==F8S)j&j`V8e8{&f3 zl?R&YK+wD?Uv_Ay>K@|y&5bYQ`f0=Z{rxI^Q0}S5&Ls(o(k* zL9<~$g83qeC1qoLFR1ey#y8e_J3gm8ih25Wt@Ko(l(X$UJL*SVRD5Y=d=Y$1nMG~E zJ%wgNd~V(zu3~qC0gd;;l;Rr*y2VAsry%c`eAuQA&vUU*l8lY>O{;wPMtA_#MYrM> z@o`a>I*+XvFeR?*dEMGT*(}JJAG;A8yxW#tM3OY zW4sQKnb`SOW|G3@wal^cYohh|YwS7wp#(mQ&TB#Ev>g3&ZbRnumY+cVcrn|PgVQ@E z^~}UCLSh&u@0-{;CH;?0gKs(f5CUfbzUj$+*;UuP`smy)IjUdTGLr*V=Gc^$q4mVA zxiXU(_+8dA6B+9&#;Vu{Qk>bQhTAGDdb@~pLhkBfH$*-1+eYvs?XqU=< zVYuLA{X)6a>xk{VY0`W4Joa$Gwr}%BFE4KLX;CQo;-K&ulkj9+$cf4bt3uB9d8o5hWSbpA4A`_09a$g0 zr9(9zSA}m67qcUxSjNm{MbhCy)${F2wd}YaU5W+I#}}mHTDb60+V%=hyMk5y2Njlt zwUSpDDY>~cnM-^X_@m_{uu#ST847Fh@;Qu3+9R7HzqFPOVzS9Br(mC#@>ts_P4F zp0+aCZbXtPvnx4IYr`4Wdtq$T2AU(u`{MV{FHqScXtrVYiFzAq&WkO$zrjb3l z4D9!Utd$>*$G7pWIgX2ncM(3ppzQ_{TOxb?@;g=Tjc*-*e-7Bqg$I{d| z78n0aJ^$@|_!HfsgueX6(}W3a;PK0}!I6T{9)%#sf~t6omWyUC1kt z*C1~~-h;Ft;51|tgd2ANG6g<#2_EwK&?ww`ns_9XiD^O;vqzb@>ooBgC=)l2CZ1kp zV)oL+gvR~D!h=o|cV3xz$Y|oh<0}b;*-sO%1I5L3q^T2?@?s{_#1p2xn4L5+sT4g= zEKN)W<;4V~iE~vZCL>ME3PsN=i6$OdW#ZL96R#UJkQWC{yib&gxj++FSp~sOqsc*~ zy#C*LjNz>D%wj}XIB%4o4vo+}rYzdidxds5rKJ)v>r3!r#EaN*okTM;YP=BJlc|&X zgDpWqVQ=88i@%UTdq3HNTH`k$TEk-puM4MG^ zgA!@g472$WL;sG^e85;_`bKQnXf{7$q|Duhwbjtkj9JT#B%ra?hyZr#tJ{q(;8^cV zhGpiB`88t!V6@k0H4hkVK{JA8*8%*(>^2g;#`0&4)x*Zx-NqKcXXlPmW8$XOAqO|@ z##bYi-9~eyZ9ke@braixaIZkHUp?ocG3lPO&@pHxChebv#`JnB(3oJ)Cjx!fN1?HJ zJ=+xi05te|c->mi_XgPPQ+k!sOO%G9zsYNddNXt@15#xLbR87C8ZggheZSv;Pd4Ce z10HO^D&o^SG8p(^m=^|N@BmPU%MUoHXP_+*!Z yauxhH$sZ0ltL|v|kQ=n+<9^J>!xI152uuYJM|BjBd>>Cs83ZhzU#?Vuh4?Qv3kwkd literal 0 HcmV?d00001 diff --git a/42sh/obj/exec_ampersand.o b/42sh/obj/exec_ampersand.o new file mode 100644 index 0000000000000000000000000000000000000000..dad02cc2e4400dd61e9a0aaa9fa2820c3abbd65f GIT binary patch literal 3116 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 A7ytkO literal 0 HcmV?d00001 diff --git a/42sh/obj/exec_command.o b/42sh/obj/exec_command.o new file mode 100644 index 0000000000000000000000000000000000000000..176695299a195d3ac3e3f03f15ed945a814c19a7 GIT binary patch literal 5844 zcma)Adu&_P89#P%AGQ~ z7Sys%>8eH<6AyJv+8?WUZ9{At8)!^}4XtRQLkuPm12Ij}3L*#?5Ai4AA>_Tdk-TT6L|Ec=7UUh5uEBojBD-PWt7r45A&1yY6mA`w> z(x2>KDV47Fx30?Hn#1@&`Foo{o7FQ4>TC>-<#CHPqV7^ zO&3QoPS36scIOHi+upM2w5bpy%3nf(C*Y4=-H-jJ*1XD}Gh%1USY5wDbv!tv{Pin; zt za_p2CA9%Upz@^fH?)%N;*i<+v>v0ZOeTr<2cwZO%j%#srq z_-tT0IY|k~!1QE4XIF~J$^I2PrM&Ni^t+N_dFO=@JtGid7C){$n$JyifnT@?Wnkrf`tyNfquQax)| zyCZ^TfrZEwJdtue;n_o8*>Qxcc+PW1MY>q$HdRXjvA&(7vk!{UbG5Jcv#%;|L) zSvFU8Pj|+%^Es@6>oYa$qQDD;H;O5QJEuIFE4m_W=cHdRO@>aS?V<#*qKfAOJuT8{ zSj?=AoDZ&|oOO6|OOAu-VeWhKfly;;S-e@RiCcPGyfM^-qaE%B*c9rI*2KRayC`;U z-R9;?>JXqb5mwMMGb5yNU)WkQ$Vh9;}gP?&iAIx_lgxMUbiN|8}htN?E+s(~X z`VfGkyhgF50Zuq^tOH$r@&y;QnOIIML{&ai%qtHHA=Lh~}lJwhj%p zuye8428iNYIIMoKHf6M|6Dxr-ZStASgB#XNSPy{E)!ShZY6u-9s|nw+XGH3^A+HVJ zQThwDMjfu9ja&&HYKp=Ow4Fz(HGfK4heYA46=R+G28kEp1t(6P#14olE=Wfwm&t zQ5#ta?HEWqPxj_Th^wg1kM)6>+7f9Y{V!$hO+cluudy}#ByBH2riXMI=?&Tc z&^V-Mf>R!JG>Qo|Bd?-t2OLB(p;n|8R!69HaMS76Lo`N^y$P$>Ip%v{t+A%aC*a57 zJ~n3;$K)!A)%ZG_rq6#}&hYQJdY4sHWhXM~#0hgtImWG$j`9oRw^O!ayUV2Y9zc=hh`uUH25yZ2w^>B*ZAGAZ{8$+(-)IsUyUL$O%Vc{|PZ7aPE6}!VjzvBb?I(16b$0>?i2gBc}_d}Tw{3?XS$8;U~JYJ8SR}r=o3Z5o- zYozlP-e!9$Zn;NkJ-Ib~7tTf8o82DyG^nx!F6O*m@V-F<^5N1w!YiC#3o_PRJy4)v z3QMUn-a)<*FZjMB|0(drnVN`zw!G>46>)XPTdClci+SHL?|Q1Te)peZ6~-cL0R zAuSgDvli6{wZ`?Dv0lGiJ4g4l#e-VypcaAF1}!nDp?n^+1bB2%3-8d(L9I!@SZf8a zc)b=L)E4O1XeKoMAry>gH4qK`8vO%a6SX$8qR~gKzFliOqQo&R4k)be`lGBE)+=a{ zKt;2_8}u>AgL);b%e$hm#m*P2KZ)h z%xhOKI3~M`9|ZDs;P9jOD85|r#fpQ;@){V?ZVY+@gdklGVU{W`uF|`z^rclg>&~v< zSf$@lrEja!gEI`+Pkgr7sZ1t#F53B2rH~$(c|O`%ypQp^%v4GOPh&5IeODOHJ6^FM z{I@jzxy9?&5q!zwFCaX!?NUWP3T-^2hf?Vqhs(uEAu|Wg7Rycm&v~#14co4Rf0&&# Gdig*9eU^>@ literal 0 HcmV?d00001 diff --git a/42sh/obj/exec_dgreat.o b/42sh/obj/exec_dgreat.o new file mode 100644 index 0000000000000000000000000000000000000000..4f5329280a2a26f5ae8422e5cdcdc29035f8c7d8 GIT binary patch literal 3860 zcma)9ZEPIH8J^v{*}L=E=d&G>G~weK2b>^$=X}-_hY-N%Vgf>d)2alm&Ub73((|5s zyG~3q}8Abx;^K%huK)2glDPb27$3Is@zaMVyD2p=JRp4r*t z?g&jr_s;tzI)%sVrC?|yUQ`?I3}ZI_&}nF-tTYszHXxBg<& z-M59!BE-3qlR{alKmu9UW}_D3RjNg0ZpHgRmsKA-2XB z;)Tn2alFFxbj7jV!W6^%!F;E5d_y{{GZ&37z^jgJR~y_K-}4%8xyHM`O$+B)%X}N+ zn=TYv@&3_*cmE~g`43EAaK4{wydE9J?=BG!hfYDZ#uwH35zhCq_VW|fQp{L_2hg6B-y<2CGV(80Ew?}NO?yGi4{uko}h zl0r;|GWoglTXq#<>wNcXyi>Z<;*LNl{YZRVmo#0H!9p|m#h{A5kNysxXEW$7P-EeI zN%~4`Y`UmCny-JF-#4FmGl3Cb`y*iT^*yKabEJ*@)%To)26`y{k~mJh`tbbR@O*vv zxYp-JkJk_U1r7PRVe}IDeMi#y`cdusiT29Rtz+k-d+Et&Ifn9CbtJ#G9Z&J`pJBYIDi-PA1-yZX8jw3wH%f2%uidENlT;KM}yU>El_PNW2 z8q!Z0p;xNzL}teI$`h_r$`G#NjQgTio|yE7TP-<&#sEt4&PhBFXi!WcsEWNy1-}q< zQPK>%D5>U@$~CkE+|%3@#Y)w4#LjB1ghs_?0#=+X)Wmp6czmEpMwfAQsz*jrX=`b! z%jm|En^_pUjhoscsh=lrNcOdF?%BvRm%`Mh%{{oi*EXqgxrn50OeT?dR;QptY#~?x zAw;~#h@_H9;t7%HfbZrWDuYPlHa^D5MGX$(YlZ2 zwr)j}(P_+*Ma+Y<<4S)Bb<{jKeS})q=|HR8j3JC}x(YeQDr)^6%&Mb`J%(yK$n1^t zMbDVsiCy6Tq-lZKD-y&!M(r}VBwm5^1+|4{Z#wZ>s4X&k7mK#oN6;SuMX!v_gB=1z zw#nzfVsVQjS!a}tfZl;1d*bhcEtYE%AAtA6EZ1>Nj+Up>>QbqG;h&ieYlk36a@+#$_@PEqQTyKT7jH6j6>AL}yWmt5=k-ukC zowz-nqv*@-JeXi?|8ZX+2^~LtZ}dS)ib|7JhEc`ulIEwUvlWb?=3B6 z9^ZZHh3XZLAA9?%KYem))rs%he*4OY*Zk*=-Rr(RJo=l%FWw;k_8zc427L)iU=c0{ zafP{%qo7I9gP=!2&w^eC9R>XhbOOWxnb;J$@cMCOuF%Bv(I%!iP0U3cVHPG9P0YT9 zGz6JN6H`!|ctmL8nb9UD9!*THMc^opfM_}f(q7znnwSMT2u_VA=9KngBGJU$(pWqh zH1UGap)y%%V*YB=A?@`MxW;-;o94mwh&*iU$kV62nEy2K$Y|65OPd%{g4>NAs_2`D z2u&qSBV*Uy!kA4P>GoLs0K6E;<)9}|6XopL@Fo+RQt5}yTROtO2`AxWiUX((KhoAGKnt>wyV2G=)Rya&9TdTl(>`26901e|*LvXe}mzy~sN zU%zlrqWD8rsNo$AoRFD32C76l4Vi3%azs!X<9?F z?=}~gh_z4lS@CY!X+4eh5o^Y@Fhkz3!0xYrBeD$+I6~>a4;)eSZ`67Y zTtfdDIQ%T?vKqWWReRH@;}ff?o!|P6?Rp%I24**YT;Nl| nFJKwniHhS_U13+J9n@;Q@#hh5z9aa)<0}-O9`?AedK2t_;?*Z- literal 0 HcmV?d00001 diff --git a/42sh/obj/exec_great.o b/42sh/obj/exec_great.o new file mode 100644 index 0000000000000000000000000000000000000000..49a86d0f973c19ccbcc2a936d6033f048430dc7e GIT binary patch literal 3856 zcma)9ZEPDw8lGKe)^?mYPEy)HDfk+osYL9Qwh&#zwFPo=Ly-^=K(uIa?2Y5%taIK? z8=$>b>giNpq`Q_c-4Aq73Cb@J5+ETE2vI~qfZz`WA%1`WsS>Hmm$)8P={?WvZ0ndp zJMug4$Gr2*J2UUhtUvhq=r2(rjEF!5Y5`42RA~^(g`nd!{ziEq7BuW-ACyoBrXY3D zh+^BmGvfzxpx-up=WS>7P@2^O@i=T-QV5H-7O{&gEVf;A#->ZQ=hu|Uwr{v&{VjhE zn?;DTk&{AMtUv-;*Jh&@;#H~zWp2j%SmT6!N}SyMa#p%OaWkl~aK0pc zB{nvlQy$ILzs~KROTT8|!g~2hz~t&Xj^}1cYx%41_!b&yXX-g|gn0Ggx!K{l`tT90 z&yF6c?|mB$x!Ga#61m;4r*ic}+V?B%m7877&WCoL%s^%!-B+mK*61G`fRb5tRc6I<;nfORXT}LCyHs=Xex@L@qaHeD zOWUejiuvrStGo$8r=VSwU0>uqU-Xy>eu2(L(PBBfmiZkwuTDdgg3%6Qy0F42ZtzNy!!bsi72$~p{TbkSAFdswwte*?4XsG<*}ngE%-u_>^$ z*%hbfM>H)kdqsQ)q{GxMfJ^*&NIc2rLbEp&e<{=!nY}%tHTnhge}GypiOzxT14TB= z{b13U#gVL&N=85jA;|97`(QnCW&C6CewgKIj`l1Vw;-xe7baFgjLA!thr<5@d#{64VJ+oo*0=1s29;%4bi#qZbv+|u ziyX_aPbeG)q#JvYb`sUu*)OqBhhra)CaUuQ4 z_8*_AE_vkeo0mTI)sHKV{?hu_7eBw^*sI%DpExl3mjlnPk?(#8EN(1!G>%2M7?cHF z2O0%UfF1z-6SN=n0_YIvQ_xWm1H1=}A{U-d2nr!-V)|$kQ=BH|B91T%6N@Hp=|UQU zIA~%DY7>tLO*}K&M4cw);v#Sq<~~h_LE4KOPZP612f>kOVoqrj6X(>a@GcYUlc~R(*S800FT^qUnBrfk4dXtk$ySm4jE$w|Mt?S@qs{qT&6+`v^4k^kpWPJAn)22;|_& zgVKWkWBD51(ZC6*dHNoXbQm(x8rv*etr6KdB%?#J&AL%8g%%x=(wEDvYo%!o$z}hM z?bbdtj>zsIX^vRCkG>=Lz~dtn-yZh3uR4qW1KhJE9smFU literal 0 HcmV?d00001 diff --git a/42sh/obj/exec_less.o b/42sh/obj/exec_less.o new file mode 100644 index 0000000000000000000000000000000000000000..14dd6f7397ba46fb73612a572a8b771d10941d70 GIT binary patch literal 3848 zcma)9TWnm#8J@Gdb9UEjuh-t-q~yX92Pdd_*SS%bI3#W{+L%;oA)%-xJzeh}+Y6hs zX3yEgAxRU-2xVo7i@3a?mheE{KtY1Ow3Ub&HL6h6yfhDaA}UCca6|$Tb&E*)eRJl- z>m`tk_MiVU|9tb$%s(?{|M|a5*P=ogVSx%10ZmC%84$`3K=U+yM|mdZH@w6?D1i=4 zLF%Lt#j-qm+Vf>!-!<~Yt_3}iX0$*&4jV}dVbT^6N6CU>StWa{K4H0DO_?m~p&h+T^YN-J_1nb5p;M5p@y+Y=5X|>j`@%%E)H2^;MtSbcn!Pjcd)F*_rZ3Jw_W3%)p%MJ z2_Yr}nf%82EjtRab-qV6-WA;`)!_?Ien)&+hagjKUk-6ECxyHyvtDSy!y!w&))mfRf#`A-n!w;ns>dd)oFZt75xuwkUGDUG&RM?5{pm zD&#h8a3=+QRI?~Mo+!AU@T@VfX4}HmyzJR~MX~C5w&PiD`B}7}vOMl=p@x)GM(CBQ zGm)t~Zh6A7OBupd>~T-j$`g~GaH=I6&=^2T?hT2D01b*M1XZzjso)j-E=sDii;`+~ zsa!*g&t1(OQLI#5TkNmaN@!H9?z7@#p(e&l!sVkxGP;a=l4%)Erp)EZE~6Vs5z4~Y zZESA~Cm%>`Nvv((k>1ACmLjB0JJPtZH!V`-8WB!Dm`EVm%uYdvXb+eVAw(=~gp-K` z@q~zXz;{QQ${MOD8tPpp+M*Yr9|J{JMd!d?1cjfJZ-PZ* zCPy;AQ8EHL1wp1`AAv2C8{-_WA7;6kV}1^88@2l}riczgJWv0n@&Z{b%1?@`6z@n} z153&K;#|nXAekk?Fr@!b%Taq6(r45Lpo!=)h)JqTVm)9fc~5*5I9EunrGF;S)`fZ_ z@jhsO0?B(-G=GEmL#jQA4PY^Om-0~fce6LwTVbu{Xy#@5{uq^Mm~_H%e{48UAs{55 zD!%T&3di4m=L_b9+Gy~s@3N>bO|5;eqcr2+$|nYgF3=J>qJ%*PKKH`7IwR_8#b#?e zBjX#->zFysu?CJFOQhQOz2Erk%Aq?qIxBy5{OJ>;>*oIc>#mD;zVgM{<;BcvhpxU; zUHRI%(|5i7$<_6juC@K{gOB?@|I4AxU!U0h%!zlm$dAqf>))WSKyfU>3Q!L86VPtZ zBG1`+8{bGm9ps zpf>S{(8M#NO-wwRn2SrnQJDKQodanvZahuQ0v!aChbHEf_F^K@#N5(YJQ*}GuXU(Q zR+^Z<+QcJ9(*=;m;&G#iCs2=gN}G84v={TAUOY0|^nGa)MM`kH(c?y$@g<@xDnTk4 z&ps-Q>6DRbkH%ht7lT;=IzCUN>(_OE+v_qD{maUf3d|q;O5ke^ar@2KyD+~h$}CERJqMB91UW{%3PAsHQ#?dBtLHMHocl%8B?Zj~W(NcR0fc9^fA zaa5*()wC(eA6f$ zer66jd7tL1GzU}mH#FxMovd^j0B=&o>K2{XN^|=IEjstHxm{QbpBMO8@CsN)XQElUslGz|A7~FHc>n+a literal 0 HcmV?d00001 diff --git a/42sh/obj/exec_or_if.o b/42sh/obj/exec_or_if.o new file mode 100644 index 0000000000000000000000000000000000000000..d317d0cb5ae17124726a64cfb492366222726a2b GIT binary patch literal 6652 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/ft_findexec.o b/42sh/obj/ft_findexec.o new file mode 100644 index 0000000000000000000000000000000000000000..0e9cb0408b3d4c311c1620db4a6d6aa17b5d151d GIT binary patch literal 4740 zcma)AeQaCR6~FJ<_t`H_Z0D1gTn=m(Y~7&@LUD9*+H-xN~gR zA8jc_tD1JiL}+DG5lEYav`ym=HYP+T)S)GeiU!csY8#AA+LS*sshL1RNJF7$biZ@o zed&vvuD#N|=bqm^=XcNjeAm8k`J*pc1Jx&2#P_v~<**^gvgf043O#|Og|ln!66kXn^5Llf>w zJ9L*~S6Agrj*OJ7Lo|OY<8%1lmNYlZm(6DisLLu6T-zE^INPsCSDrt0}Vt>b(DCiyCl6;~bat#beVPEO$Eo8-eG z7L@hzz2~WueHP!9a6s9WDuVI1SEnAQB@Y(8z8JGWmoMNOWEhy>@sM@MD|`%i{k z$7hY1nG#mlcBsD(B9gC9^0AQ3=cob3#+*9I<@1}(3KJ}UX1mcjIakJ9jU;-h&H zcVWOjNEG~90=BdQYi%RGu-TR9HglD8+H$4c$-Zvc14~)qrCT)I-9v4Ml(-R*!2D8H8 z#90bqIst9A-I%UkGHU0A1$mzkJ)Ea_ujwH*h%P74W#fg=@7t8g%kj{OuM^kP-}o^J zm%}oB?GH}p7Z)SfHCmpQi`0Sbu^jjG#6?WyQZ4b?;(B6m8fuAG7k~SOm{{p@KCuJ? z8rzaFd2Z;tZ^qeHx`!e=ckUaE9I{H~Y#|@%>FDg}jNF;Z;qr|2bVBLqy1Qf3MpiDR z;?@x>70*=63{DBvJ5nsZw+zqt=;6YFbTZy`cX^Dt3|ML`Sz^Ux1!y*Bu`J8xD=eKY zvF-hPXk(|%Oxl+8b;=d;qY<(YE#>S{%dU-7Gt$V)%QnmUo?R~R~4Sr&E{Q<|0AgRR^X3~TFx%}NW7gW3VGMd@qs1h)jf8TeXbf9rj? zV?CUy66$Zor?hK@%0rA$Z3FWJ?+pZS8Ti%!u_+kyw<>`EvEeRgf=PcXDLuG98d?=k z&}j=O3b8bP6|VQdwu$HhfqPL6wxZgLI6}gK+hk#3N#|??_mX|D`sv2O(~FK1rERtl zW&PudIe@Zn9}JX`@*5H!^_e2Q&y*0U(8hAhnpb@$eUP-~*HJGyH zO=l1)zH6>Ds`mxt5K#u ziJAp>bwG{!_2(V!0W})de+G@ZRd=e|7F3qnW zht?(A!ul^J2~mB!ft(>^ zqejc*S48Y#ie0?wjfb`xRCh8qq)4`IKXrb-(ENAWd}2pIcGxD&?MqO-ulTaL_-|y> z1Ov)#WQats46G3(N31wALbq|^_ChB~iH;0Cr2H<7zS5PwJN_Be0^V25k*-G`d17Jy zKiQKD|9CRcd2A{WS@+=&Q<2k8O!SSO40K*tdf}Jve)g-!-~0R={QipkZ{+_XhcOvZ z549CyBlD_gRg zd%9O5u*J`@74HD_Vt)iX#^}~|n8YWm3=CU&x$bq@(zazfJnZBNDcsxO-_6%ld4o2< z{S~fjlRTsi^R=gV%PAhJaP<>@i}nt%v%G1T`;K$3Hp)Hw`E4+28{jR&+=Ehkf!_*( z_23wIiF25&+s~Wf;~(aCe8T;`uz#E11z__44-fF*an1+$I_=y1c3?3F3u_O6e}Fe> z`-N;=malUUa8>gZhk4M`avaqGG%Ay71EwCsIf?=Ui)CpAAcv&9U*hy#!SG}4keHqr z9R%37{|ypr8l#serYiOvBu;XSzDhXVu_z=?dh8xZxN31J?~w8%Db4wYl4qbvpgK;cjOpwiN#KC>L{CJke6QLfN9X zmV{H|MW=e8ki|RDw%+Vk#7l~B&}2#$9&WB(O0PaE55^7syB^%0=E84+${8xe2A<-cOV;WDj5NOLJS{|AZ@JB!crD9dfRK#G@!tZzPxryUt ztQ_^b-}!y#JHPXt*XNU7{?D~{gFHdeb0lgh`#;1raY z>StL_`k2xrK!&40T`v-E0&c?I0+AtZ+qA7u36lvc&;c@ z9Kn$9LGY=NXPr?4U%J0IXxUCd+QIj5*F*Qu_{4l}^;yMxgOi(El!t5d__Fz=G*t3^ zjSF5@j)u#CTb-9L(cfQ4@0atP6Q9TT8%1-ge3{%po?R;AbGTS2e^62Eu5$6Wv3_c+ z=Z&wB$PK3L_wwzkSg*Dkm#^$QFW+z?DMPG`&*M|uAwHNdF*1@(Te-wA!+XzsA5ih_ zRROhsV0F9SE%G^sM&_OGb;b9zTJ_7f z$cIZTDJ$dKug-@z-#y;NpWWb!{Y~bFF;B-T<_=_XDa+cqeb!Zo(~2*yjHBS=mH9o+ zpW5>ZzVwhaP{8iG9V+w7ImOqh_)aT61w}-NA+Jt7bAK~A$yhmGc3|14f|*qFoqV78 zxGvHq;s(Otn;=v0k3wIphd`6|K}dO_FJ->GRqi)mz0WND)f{`H(=0u4!z>l2E_6@O z%^WXInPb~T?UN+E(ESdLSN|j{}1%w+F`dH&AO_}4H%w!)t{{qino26fw zrJuTkl)5L)vA0C+F)oHV59z@W8du83zR7tU#ydmiIOdFrPG2c?pY!Ip5M9Q*C&tcc zrS6HVz0=dvs%5a2SC$urM6v@iy|2Bqan zmf6&?nz6)ZYF?#+;aug2o}a6`m<8iIckbzp?@t%(Ogc6 zIYVUgxxu*nWO9xe5d1n;zf(x3(ZSUjCp|2Z`J9u^IhLI{j23(>hZizYK&FsJV98U= z*_pvyIu$2XHa*~oLS}G?tl5n1fK)0)Cvtp&kWNP9SP9$7>4g8)U7J zPGvYfSKCVGL^7MV)8atBkV2zWMOP(<5(P1k5;h+c6mJCuC}Btx5HM;Pp)Jtviq`A? zXv}DiF3{?*f4&XEAKg*^k?Kv6%@H3GhF{ZmAVCC{i5>O#B1PzpsQ9C77Q(34{Lx6n z1;HBGm7oJ1L(2iTMIvwu*P@RQRSQA261P60OI%%xgHc1bNMsw_qKnGdYTFQ9oz_|9 zjnsiKShr^V-PB)Ee?)AkJ8laYZ1ZEq4q4%ZN8R}(8p0N5-tiIfzm@^rk|=8 zX^OmrZ)7!y(!BChgybk8@z4++&;qy0`^u@+C zs3yHGcoUif>vIOy<-p9@MYeHZ5oYfi4WCdj{1nZn@L^xA-e`bo($>$e+D6Xfc35Ag z!##4<&ZF8wxG>7)iD`ES8P-jj+UP%mS`HhlwG(mZexfx%LZ1fQO4kOX8!D#V73_tU zYrc~H4|u56*AfW!0j*>2RdVdDs6GOd))-Adg|s`QhvZ+z-osw+J2_f-5dNVd*bFU9 zCmv#1yi=v^ImFhuCIg81PK_Lun7a=%5)oaX}HsmG2J-N~H*GEc+DXrTwt_LFQ| zP8t;RV_hb&Jl+^~<|mmpO&Iu63$a(WtDFgRkHBq$y)Z7jHC zvJjIOKU35Hj}IRi{H1GAfGC@*}^%VS$d}L z(`O!CFtz0Q*Ke-9`C@+QbFWR@@$=uEU$JC;ZfUG~|4TisZ(RD;X8qOQCL5YdfB(mk zYwuQl=6jPXuK)PR#<$muJ`;I;`m>uJIsN#VFT8oBIT?TM$Xgr(6XWq)3)v2N7_txY z1cVFzbqJ5F_+Pc8>mdYhBWa`Dz5)^RDy< zzHafyH9b)EFFjP$gGP^ze|}?75B<)`3Y}M=Fv3QIAp)I=4IHre< zALzcbdb1JQuP;GM%N9L)RMn8oT>ppm?y-+<<8f-8@t5`6|b z41Ew9vyKiyBjH5%LSwI@CUgk80~*OI+NyMu(rABys84fT!A-MV5XIFz7rLA zUj-KKgWF0C7Saj4mgVWR=73Z-ZQEW;dEHLKJK^LD!kT%>D+0UNZx5xjSz&pnR#;B{ v@pR5g4v)C6diUXOB{?qse}xZf)mgrW*%3$I8o(d3iQ!KYG2`y+ba!z(v&_sw zp<%u9B+5T?TnxvR2R^!@tIk@pjr3hS+v0# zXj`;Fal5nP4Q5p*M1Oo9o|nc)<7F$AvZmB|Wbw{hRN(;`-tDiR>9;j8VuRV*l}weRx_?88A^@cY^;u*u?QR zaXgvhag{+WdVP}9=eMLgi2n7Ca=dGN((3>qI`x3~C@;=k7;_Ut!7m1X0)K+K3;8l6 z!H{euS}!qAapTY<`#UoAtC_LiN zFJl`GX7#*0U>bvRZg17FHEV;svcp>GxHK`#RMTZ`NHfy|wo)-HTd|EdG`)0COR21f zE(N*2f9Ff`KFzdBhAwxfx>8;86KWYZS!Z__l+?O4snt(D94NiR!u)h$zp*EuO|M&H z6`B8Ytfbp4TefUwE9DY|!>oz(;TWNp4ZR>&b*og+wY*G# zIz6lOYN^Gn$xO{=!aSiP-YNy+$xvH-o-iLiw1 zLmF|8Y%^O$W>B9ioYs4(r;oE|5O(f{gOCu0NCd=*%3eo*3oW$bc}M#dZBU%ZUm$HB zxiV>xnqcSZ;Stdo#Ya^jAG(t+stek> zMvuha{qsVbeYEtrDxVlRb9u#$vm@*8j9~m7@W|Luay44}AOQbj7F>xMpx$uAEm zL0VgsYV1%TAxKM`{*u~5TcqR`DZWb*H%hV4gcOD$7%E8OXRk`jLdPF8cvft0m4uJP zD3%4lQ((x>2}pcn;bB*Hj&gk~B*N*W+aHm1J`D-~P?}468c1KtC4{4&;Bq5mfI_v>=tno1c F_J8<*6es`y literal 0 HcmV?d00001 diff --git a/42sh/obj/ft_putast.o b/42sh/obj/ft_putast.o new file mode 100644 index 0000000000000000000000000000000000000000..68bc619fd146569bb4c6b0f2091a63c26756021a GIT binary patch literal 3896 zcmbtWZERCj7(VxQx9!@k>lkc^AXmP@*^Li%fiX5=T3`qn9}-1xy0+VjTU*+012PN* zR3;kX2gVFJ5~h8NcFda(oR>Mu2B)9|Jhube_B^aA|#W z<$ahX`8M0f!e%?rf zJUr5V^~VU6L+zvC{Y|Y-bgPQ4RMCA+EXPS$t`cSxBw&3`g6${2HkPm#Q#%PB#c-Yl zu>eeg{dE#9(NBgCRl@!z-HCpsqOXlbH7EL>itZnadY$O&D#~4!YcF%6&#CBxV^PzI z^5@L1YW`R>=tQ@vD7O?}xl`Jh zZ_ev>elz>^o5Jm#qK$8x+0n6OojDlKWD}{R*%WFFHJbCHeRz=XZfb-PTCym#aK6Z9 zq7D6#M6#hfXQc;nk!&s$6%CuS7}wAu?JkkbiC82T$q%u$0S>XXOgxszAd<(d#H8S$XkRKD7elE`3<)+2 zsx{t4Jp|_jt<~oWEcGw*&#hQpvjX?ZWe8omR@dMc zY)O%6R0(?BvxFpM_-ibM|y2{^$;v!q|mt^ zXQz3LVW9UJboA;q<+}ir^~FA(`;&Ctqt6t+SD<}B>t21PS9srndXQ$F`vrjE^_~G7 zqi2$zqk?+9?`_~;bcM+9GqfFCV*{<b3q00IxpXPPC`FlOz}6wJB$CQiB29v5jqE z3=~Q#Y_GE2w)NeY3%vEv>`x2~$(+Kmbd`?1j`m-2IG!?*WN0pkCfq;+Pp@B)kBu?b zOPwbH&$6wvTK?nmLHK^0*u3M!qt&BRj(&Y=`tb`_7EW25oc882<80&JgZ?XTq^1Qc z2H(1T&G+OZuRd`iY91Ya7h}#szJ>e>DZ?ankOh$CkPVP1WDqg};gJCdo}pR@+DQmq zJP&mcG;Ri6+#l)UA)|}u4p)ec$B8ZyNG_fTx_F4Bi(5?>w{aE_jayC^4}{F(nWT%y zRA!x$E}k?wBabVyc&_C@UJAOnFgfs__RoX8QTu@rLde@lilU}ARNLJtw4FgMSmE&= zMi%Fo3ORh0G}o`I+br4w!Kd|=mHFc*L;$(EXho)`{TZl4uW=5DrXFUzf6=~y82`38 zZ!n%{q@*JmJkz1x{PR-I17kN=m1dOt4jLZ!8pG{gYg7|+hRc1%@EGf;%~jzEbagR literal 0 HcmV?d00001 diff --git a/42sh/obj/ft_putast2.o b/42sh/obj/ft_putast2.o new file mode 100644 index 0000000000000000000000000000000000000000..93e88ec6884b8419158e0a4b4bf50b4e0ca2f55d GIT binary patch literal 4376 zcmb7IeP~ zB{^}%GP1ZX3vOVAg|SjdVJu^?1;$obH@2p%|CB<@U@dI0Erq7EkU&aXnr*Dv@Auw) z^3$ukWEY=%?)lwwe)qil^`89Zzpj237D5XMRFEL#qC}N~pnM6ErTqn^9C11>DIeDc zr=TQMoN3mJ^L1rFndZTvv4hLD+ZxcF7WtUVXk3Up2nEGSDz}(szE-c6tSJTf`COh} z)qj`aMmkyz(*RAgP@I^XGC^u%rn&o(!Tk?5`sY=^KNT|O;{)78>GI8#^DFW_$qDzA zZ>V|nKr8a)CMK%Iqny9y{9L{tD1uw%D_N6ehWPm;Cm*H8O@VS*<=2e`Rb4CQSIt>d z#oFij=6!o;Eb8!j>J|BBb9p;Oe||2XN>ALJFITC|6iq8P%k)0?yvJ33eJY{xo95^6 zl_!qa3+&JDMa8#K@twUzK0CikF7N02i;wT6TjZ-BudMjI|51F;s|ozuE%MKb5kNuQ+W^ zRzyoEzh)RK9-ZrVPSJ$*U5a3zsFed2m{33B?xHRx;Eg`KaQg^Jc-;OBQ@Qc-i!bu*fbCCBZZDJf zw_Djo%B6~75Argn!9#Y+C0i2Ng-biL3)e;bsYhHUhAz!Jkv7djPb&Ttr(9Wy_~Mae zE7eGu%i|d(NuM+Q{Y|Ld?~IVJb7Om9z7+{5|74T@2R~mPNpFnwDL~IixT4+Mw1&^y z%|0W`K1Rdm#bzJw8}*FA_@c_^Y_kt6ESg(29w)mr?>vuxt`*AxM0hf85ZF}Ng;x`g z|M9@k$R07eXLLwBuy15!@ZsIPDKT(QujqrM?#<7XYsJDAF#w=f3{XMuJD45XF9vzr zruObVJd!$Etkz0pE7g#JR=H3tS+){&6Cngdt0DJz7DSC74iqh^ZHl$aKr9iu zJ(ko~Ve9A_fUC4!ErD2X^#17P)}5`m%%sp2u%{jG)E!Nx#AlBP#Ra>rinh6w)@%|)7PTAqQDM))PDb3{6#KZ8o>TO+@MzCtKNhHGfe@|n75eF7^- zs~eUG^B|HzUv0bsmC!duUW5KJJvP(-P1m|t-w=$v1#27owlJHP*I~+FxDUu*(bPMm z??4&)I@{46W<5!+0<|gc=AfZT__y%#2x%cY;m{r!%(CH1D?t>;=9MqRhx-=WwnE#} z3!Nc|;*F*4kG+BN|M)PTvYKQle35E+?F8^j3F4JQJ{I;dKeo9Uf~w7IBM{!%d_kQ* z^yK-+lJDPk_U%{K{p8(`x7~K1b?1fqtw(=-^|O}mJo>^n&*xKT zzx^A;aAN-s`4AGsAZs9;K;FfpkUZolp&J z)*ondHlPp>!B-c9aMZMa$J$V990Q`c*D@}^{LEZ|pOMQKFfM5LRB}~Z(wS-J&WNZB z1RE@_$w(3*v>u~ zJtY&N3r=Srh{xqB_^lt78z*JgunZ4NBQ!1Bff>V6Vj$yDnLH;q0|@q^Z#;C$hGk$} z8jpD$W!pKq7H(}$+)d1+vEY#Mao%H&0b{k)jD9_Y$rGC}2lz|h?&yv>n!ojI#Or3x4U6viU*7_#tI?L*qE7*D1V1;Spu?Ommz!py~Hx zXK~Z~orv$r^a*J4VR3E0!;VhxRd$!MH!1sT(4YD$ICHet(Gn0-`Bw Ap8x;= literal 0 HcmV?d00001 diff --git a/42sh/obj/ft_split_whitespaces.o b/42sh/obj/ft_split_whitespaces.o new file mode 100644 index 0000000000000000000000000000000000000000..f8ea70a798ab89f4600d3986153f747d7a69993f GIT binary patch literal 4200 zcmb_f|8G;*6~FJ<=Y`mbUjiBJO51r-2+)-zbTFWp5;WXB3Xu?P7@bOA9mh`0jN`?2 z!>UE1I8<@nZedfkN&8`~D)oy-|AG9#$fyWNm6-NJw;v)cNS#QeOtLgf^XRnfbMCt@ zU!JoqlXj%*bI+Iix#yhw?fLG5zx=a72+b$(gXTxe5`MyHps%9USov>gw$U+6@)(dS z15={xcZ(X%hC$ZqdD90-Wc9^?(>EXCkd-19&E_ckh%G;H}*TswV_m3oAW&E}A zxp<=rV54}cOmdiqc=5ik*60u~BIrvM-&?4kN`2kgagz5<_-!1gq-|udK8&^qe?DqY z!WaSPWjKY##6H{@k8^hSI=UOCKCAR+tGL*0mBuR8OmvP1TE(%7Ft2dLRyjInm7=wU zg8;Y6W0iS!DBjSlc+Hx=?~@`N=4PUcY?+D9G6TY#7vXQvFGyoNx@eVqE0-dgFvo90 zRUBJ{_Y*u&+05&0TJb^H9REt4veCTqa-9;MKd4hSn&U4)S&l9i=MnI2tK3&HulobV z8r&aQ-vacV3{;L*ta$IDrQNnlGftNA-dR)t<&Y4^FCld|5WvD!?u${sV(igb)es~A{wO7byO#j)y2NuLqGomzIoL(yRR;~E&5Z3%H z|5m5sZ}B;FCw{XHK(c!C6Kz_#P%YkCDix{=zsEezPA*4*`)T;x&7=HygioG4(;I#@ zF_KFSXTk?MyF0tXJL74*c)JgDL+IT5ROg;uA~zE6O5@ttoft^vQ<=f8WZuqY)2X~Y zI+V&Ma=7&pxz4!g>dOJDYjAY<{6MU0?^C%U5g&?;i1plAnNDQv(czJSob2~{ zdsL({d65$-!Cx-t1)PM|s%;N#Az!G)*cNKlHsfgPrZ~O@w@AD2g`Nopam)BS;kH@p z3HU-!2M+~zG#%e^1a~5l(3Oe@7<<=<4fTWYInW`o#eSX#<%I@4A)3UK%s{KZ%iIqs zowtX606)G#{1_VFf|7>iXk2$^(vY=%S|>BouV#NGmiF&*q*vZ&=>WUJ z_R@ze9b}tm$nr1fStmH)z79!i*Vqi$ixRe7!RFs%V~2vx@>$h(I6$WqfSZDL=ErO` zHBMz2$Xo-|s(^-Me4E)*_eAQzmB(Y8t&RfWRj$q-l zia)5|+4iUL*ZPk^=IRch$!dWgL1TIyjmP|)1&|CDe2xW>J16@vdFR9_So&XlI5uu= z3$XoLBk&t)D3W2ErJylLKI1vsZ(OA(z@I)#yCSqBLaomc%zooUff@>H zTy?lM!lqxQfblMw7_~V`4^7eI5&C+PI;N;ALVJ^Ra0Y1HRX&!8k}H%9+nJ;Yx$Sp5Xk3L2uks{9VO=p}3`ZkK!GQKkm_ol?*2FPAI+| wJcJ3{Gli~{-7|zwTVb+N5nq0*M0{lPQ@8w(Ny+<8N}rXN&%O{#%fHnB0{*V|F8}}l literal 0 HcmV?d00001 diff --git a/42sh/obj/ft_tokenize.o b/42sh/obj/ft_tokenize.o new file mode 100644 index 0000000000000000000000000000000000000000..6c708728e7d1162bea836addfda5d49f77cf74da GIT binary patch literal 4916 zcmc&%YiwLc6`s4hvv1$KwiC-Gk8bL`fM(ZCO|c*ZZ{khXuAQcSB>B;DS?^x2H(Bqx zdw1<5YN!>r#l}rZRf_miDH2HV1JQumh!7DaO{G>)+KBK7LVyuLq&!3@5(FAzzB6~O zy}k)F{9?4{oH=LCeD}=b%*?+1&p+MtF{Zc~7{~)U$HAf?l)FGF(*Hx*6|@@Wq>rrw zlMzK^KV7dF2P;y6(Di}jzJW#EuKie62#;cE1pvhcWs-zlbUmA{q-~AxIuiqlMSV_I z$D};xweV8FQy1M9YQQswsyW@Pl!Xm=dlP*-7TR~y>%2pcO(&DOBZM;G$Bg{^` zt4q8Yd&6JbThy0$*m&uop|UY9#=9gw8}H{5=1%eQ#o-clamIH+Ogdw68O4_a7Vx(* ze{$%zjjx<8<_z;zymuXY=!YR0=%TnS-e@`_LUhJwcQCVvVwlgd%i^4J9n)t@j87JPX1Mk2c;#Cff-FCb$ zNxU<10zZF;ct~Oa>5Ol`+`smCyKhZ0$9OZPQH-;qSBn$*Vpi9CIv1ygvEvf2LmJ0` zM_ck5_MZfD;29(Oa2cy>b#R_97bV_^#5*bRq{^_|c9SsK`Bumm1)_7j?J^&lj z5~m*DBhn zbB|sa9*${uKPkROc&VvBwx(u|TuaSVug(l!NzGQTPHtt|Q?!L%PtqvZJ2ZyWZ1P%a zsvRxspq*q_spT|{dgiUvO!6|?FQ;Z+7iNF}&zm|X@^H5I%FOptv!08oS$qcg^A~55 zH)fMJQd6(BK6-(0{!b-Ar%1G?XHRc*+$fv*QZd>dYmK!=H)aYr`Zl$F=rF6h3<_{aO42ut%=o-&Wl=f%S@wUz82+Qfhk>!gOR?!Q2v%*YE zWJ<+~0jrd{2@FO|uiy~Nrpw44VT4{N6?4&Q(ah(HMm9=VMY?n|Bk8i}LYd19`jlBo zR}9vf+>sdU8G!8R>Sg`O-E8keeVuIAVDGkMAKTfNOboD|WPiU^P3-Cv8p($T9~wxq zPD^Y{Y=5x7C()l`dlG%De|K_wSE7eu%y|>HY9T*Lb$k3Q!_oyB9xhrd3XIndNH}2v zENMz9!iJHe7ef?`h9}+tVn&pDWu4l{-D={Pjfz_hg)AjhC%{Q* z2XvUyzm7VFLR;ahdTM;Njj*poennykvq9+yT96yU6dhyroVlcl;%R7GqOuR;tgy}! zzc_5d>|VL~Yfnu3;pEzjMru$zTEIOgJ>8U#o-1G~p5z_9<*ntg`0;YF)qJJ=Q67nnLs)=@J^vCA4g>(B1-Xa6Py0Q>1PD88{12 z@cpRqo&1*&fp@^Nr0)n8Ae#BsPz7=&mYjFcG(QWCV0nV3`FUs*FW*Mf9M}N2Loo3M z|0D@Nj@|x53RQ7s(6xabCJNaU=4JCJWI#`LC3fP-f#3b+*SQ@ho}o=cFY+viCWib4 z5F~9X(qkYhG!>+e6GO4TDb?G4^MCQF118Zj0!N{7Q0#8T@lPNm#!x#BYWINX_Mqn} zrh(B7O+HlU(ml=N-+yIp{hzPD(e|0jGx=4Gn|`$UQfAo-*EhG>gLDEEPO(t4?Bs~?8Y>J0mg9m#YPCn zYC;{eDlc#-*vK`PB_0bNbfGtd)romLEPxJHaj#K$FnETCz1_TV3vc>5Z|>&NExhG8 zUx&(fxN9G0-Z!~F=)aHq;N;!H-QFDcpRu%V9`cUxfcGbSx%WZTySe8m4|D_X1YhYr z&hP2w!EWw~amD)yR{(Rs*thUye1FwfAQ9^(+Sz!zZW@8a9jJa9G6J~|5}~WKo=8YF z1&M@KJ0R(PY==aGs;!VnPIV(Bl2(mE;=odyA@MX;fkpqa>f7YSf2RzK8ybWH9zrvw29orOp zxoAu<>+OoC-f+5Fz^hce-t>GikGj~qdai7w7nFiwnoPG}ywams9UU^tw*NRDtg^v0 z#>BT4-jWMnqlcyKG-hP->4L2er85W2LK^RCigMxQY4?1rTEgR3YD<)fQaNikh?vvG L1)ahsm9c*Vjs(~* literal 0 HcmV?d00001 diff --git a/42sh/obj/get_lexer_state.o b/42sh/obj/get_lexer_state.o new file mode 100644 index 0000000000000000000000000000000000000000..2a093a6d1ddf804c8e9bbdefd8696a47fd652cc6 GIT binary patch literal 3088 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 bS1jlA1w5u{c07@hJ-LYF44pM~oi*(Lc7(o( literal 0 HcmV?d00001 diff --git a/42sh/obj/get_touch_toolz.o b/42sh/obj/get_touch_toolz.o new file mode 100644 index 0000000000000000000000000000000000000000..efab36269fe798105860b75e7ccbd69e4921da4b GIT binary patch literal 4408 zcmc&%U2I!L7M^Q+uI)In-L$lzRK+L-775$kEQQbpwt<37RK(BH(DI|Zj_ue+j&0f3 z{fUy@c9Q}otEH#{1PD=qcmweQ53IDi60MdMLRzGKLcCN$NUa1*g;*&-MfdyW&UNgY z0@;^kl$rB0=X`U{%$?)OKfnFr`=AhpUtmBFpw}ga1UlLk=*v|8Ksy(9CXUkw&6R;E z*ke?pS(aTmWIMbgKXAvs2UcX43;G<6cwBZ40BVVVIO5unT2{U=)hb#|yP?#Uwfn*G z`|s?SxH$jOn&%lzZ__I|N*AwE%PEBy??R8Y5PuByfy?64&CW2qRr&Vm_}owG#h;AN!K+O@rViK}-|sZuR-Iln(#g|h zJo$FTSI_3Wc&~c!M%IXDAFf|A-@j`-LvP^Z8u4)H6r?x4_f01)H{S>Q-84JYlW(pz zgFJ1kRXtd)<}GW_?v5px^BV8BT6qL`{3HW$hl2Is6-w501E=daSXOU6xL4oT;~MXb z#?zue`X!eqb?;lHTvdqPe9vgSu#TcW;COFFe0ocJ;^V$xN{EQ_VR7Fh|I#Fkcce~c4?M&g)&QbpUt$5%#yYlg%k6HVmb3Z z7_6|-krl|&s9JyvX4*kzwE&+*elAMV2IuIRSvZ||^wcz3Dt0AzM~F-3v#j!2yo^3v zxNDV_d~REnPkdEA@t-T7_WXrRyLDcj&%*p!_i%1SMn~r_3=KWJJ9f<3`g!bQ>%2=NX}MCX789*%vs|ne@(Cgv>x`?T>!m*$H;1C@j6vKbUkb`WV^^O) zx+AhPa&7;wSqG%>X~kXZQDVF{LdclljJZ|#qqjyPxTL|2&^RFYL0oV6qmc*^ahnHV zbk}+cqrB@2T$U#xLcGkPUtCXuc8^2U=)NyHMdOs7G$yCO8N-I*_dRpyDaBvJ2+2O7 zq&Q$9m0nWPCN2{A2m{**wIuu}XCN7|6_8jDNUR4Wra*irwX++WG0AdZY*(Sosl~Tz zzxqGaOkRhg!rUI9zvL*x7|cIGG!2slM+W3(>aW5OydJ|zD1AFaZ-HFyyD>}vI{HR^ z!y^1wNEW4=eZ!$JcScD&e8X`e=`G6`f;NT^>9{5Md$9ik>wm=j6eJkJMflBl23l1~ zSxs4S*r+pfZM}#_Iez-h_Q(gb;iDVUZ}4Y{56e8dIttJfI-A-L(07$2gxX~A?kmDw zlbCGYHM!pZV#6OD_6-C>V;+p%FC<>K5kWjQ&T&nCO#yTk`au3~V%w1?BPYK4Xz2Bq zFYe4Go}GK=%r#&BWp4X-bC`b`{Z;gL(0Q7lp#K}4M?x&_GwuKzPmn4e{#GiSeW!{C z!FrE&5}hiZu~zX5po*V^cH}8h#lzE9JTa{Hkzucmpp znYQ%9adqtnG-`SSRhvH&sS-aj#~QpJyi<=M1Q3;QA4vFEhYcC(3#DbyoRIkQn?)Jh zFE@a_VodrbWS_ZTnx-woW=V#i4UX-TaTUzA8ueWSIQ^si_-I+t^*n^S7R58^zaZGRJpcdz literal 0 HcmV?d00001 diff --git a/42sh/obj/get_touch_toolz_2.o b/42sh/obj/get_touch_toolz_2.o new file mode 100644 index 0000000000000000000000000000000000000000..dc0a06a01aef9278b76a1c803b885f6c049708fc GIT binary patch literal 5556 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 oVi_@% literal 0 HcmV?d00001 diff --git a/42sh/obj/is_builtin.o b/42sh/obj/is_builtin.o new file mode 100644 index 0000000000000000000000000000000000000000..2161a2b4d827160565f747cd687c961b6e928558 GIT binary patch literal 4492 zcma)9e{5S<6~6D;&p%?vb`sWgTGDxP)^?EEZdXAlZD~e>UZ+&rMz>Z>=wUzqdd0Dg z{hVgikRoM+hQPESkR~*Z3TZG95`wL4+Juy<6N65OASBTEV-iCXn-ow%AR<7N?|bjQ z#D48)uXOG?-?`@=pL_2)_g(+$Uw{5@SO_H`(1C)WR0v%fgmxR~Y0VL@+YLuub)Iw3 zJPeV*1pHE$m6(lmh)RmZM3R11xwpoHDC#JUWniS7_DlCril@Q;sr|aQ{Q7RX^RRcjfTKGFT z_24HrEn3`cv|A-V&&}#@eIa`O>P^$J^85QzpS2J#Mf#lq^;vlS3dLf(Jjea)kI(b> z8|mg|{aKAllT-ZuKFtI}drPkO%QA2Nj{TGAb=~;dg+{g9xz^vLFDGj;*MCocU4OF$ z(+SZZpXX18CvNPo&}!AoMx!vx@UB_!M`e7cWI)yp<8%Eri>I9f_Q$s({f$e17jM#^ z6JM)f`u$z-`FrOk{n?MUuDjkhrN3w721esOC*g{|^KjRTOTlsJkFP81!CUWhgE#VL zHfOO;+vqmVSdEfl%pC2V;ni1KD%aqTDLI;Q?>&gV_{ue-(#Gk!6a4qfs*LZ5J1nk9 ze-a98XU&tzy?U!#4acK@y+YROu-w0V!ks<-KJjs1FeF55z%gX-+d&gha_iT@&x7+= z?+5iZ+LGLvy(2f4AJUiJ(HGa#`qCG!ygt2t6;1!DbN0)}*B37;OUKuB^Vj;tw}ZN} zrY}y4ph) zZ+U{`-}d3}`S6c@_$NO6st>RF@FgGi!ztb}>6w{_kEiF#?T*!Kq$jiaY(Bl)tmA6j zGnog-?%$W)d$;Jc&0Mi-)orVhvpR+pv!=*B)WO_b^-S}0sgT>huTv9MZ&=v)Ml~y< z<1*eC!mJhAq9Uw@EjrfOG7D5}ImC?eeA%ps7Nl0YX_h-3O!uV1oM;v78ur|=u}Y$4 zl?s5g~h3k#STL~m_;1J%8>!r>#jI| zUWkMyRH>q$B_J%C5lyV^40$-r&pqdfkvyi?*bV$uaMC1vG(Js1>5?KKo zcp6~jwg7F2g2zE*~FA(M7C1})9kyKaew{TfI=t@NXgiiY# zy03!*=@hlf5SKf|6LdNe8H6~@U?O}R4KGl-6OuN8?pdI~Sm=4MeDLlt%kMd;gCF98 zE&wfnf)iL!_!USDD!50@q{6F^zE8`nn%N%yBM^T*m{T*OVO~ED%Bz`l_%9yXt7gW- z{{VV}^Y*Ek-6FC8s9gYl4MKQ_whHkw#E`Dh!9D2Di30Vi70#Tm@v2nMFze9lL`K6A{@7KAZtWa8xk^rK%`ZEE%cd>CtL+YvS`##oR+Jv$2?H#rl#e zW&l-84C#wiLlv`P9E8SHpo-ZcRZM59nBQ_DE08KyfVBF5XB@_^bFX3D+hlptQD5_p zRXO{hQ07xgDjtqJ1uOp2C@8%_XIHO!uHJwL0*C=v^d}P+GV#UtZ=zQzzgU=b#&arTZ z_?>YjcOGQq?!u~&@Z&xFcQ2^Q$tTaqA82`%5e4aJu!9?KJiu9bHH^zCJ%J%958+| zvEcI1Ja`zGw=wjg8aT=(@mYyk^4RYLGn3;wI6_Yxk$4gurIpA_yc;|UoR)YyIJO{> zk{G^Gy25!;(%%n(5q9Xik{<+zeQ2k|J0u5l?0zQs=fRUOT;l**8I*)0ubqR?1D#vG z7ju7lamI(ap5AeUkThnpHd=BsgY(0M*?BIg}x kRQPUco3pJRGrmBLtyC4p)+=jsHXfjxGG3yavRM-U13O=AXaE2J literal 0 HcmV?d00001 diff --git a/42sh/obj/job_addprocess.o b/42sh/obj/job_addprocess.o new file mode 100644 index 0000000000000000000000000000000000000000..23736aefd9a41c373f352a054438f6409bbfb36f GIT binary patch literal 5048 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/job_cmp_id.o b/42sh/obj/job_cmp_id.o new file mode 100644 index 0000000000000000000000000000000000000000..0dd4403abe98f8d4f76581401ec3e06fafd03c00 GIT binary patch literal 3760 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 IuQ1N}FN~005C8xG literal 0 HcmV?d00001 diff --git a/42sh/obj/job_free.o b/42sh/obj/job_free.o new file mode 100644 index 0000000000000000000000000000000000000000..36954c14496a07d96548a6514b4bd57d14533d30 GIT binary patch literal 3924 zcma)8TZ|M%6s_)=>FJ&KJ|K$-3@-SHu(JZ{Mtp!SIv^OMtQezdXM1{g8)s+6=^jMI zNP!(<5XM-Eh5l?qM&*VT^@us4|JTy^Rzh~!N4BQK?`+Y3R0FvG|Tdx?S3E! z`sQ`_Za$-j(vT8}$7SEj2*KE(>?8}DWtE+g=9uOA4QaBhp)G6gx-}dYEgWtN?K>4; zpvhjJCL_K8uTrz6xgGC2g%i#xb8|D>Iq^y(BMoO8_dhef5bq0xFPr}yI$d~P+$G=Nbxa=WEv{uutD=Rv&SzWy{()6grac zS9p148~`5c_9x_@I`cL>XWSZX;BE0pi1AP+Z`H3`m5A;8 z6{;TQs9^S}{Z5@HK7N-Rfs?_9X7IhBBdVSTaIw(`afmxX(;Jr{$$M-1z%1n9;^fc8 zUBBmxyXAowC!aW8oNOK`?rxG#fln28eVQvy9xG0MIz_K3dDl z$#2|v&!+q~r{TG^YJRYPpno8Lxm`iIFCQF$(!Xj&|5aBAuVELq)<%}wwW{B!RVd?F z9H-wFg<%h~3uBMeww6nURV%!45snJFJ5@jAmghd^2zHjwqbN0yBhm=HQmc;Tn^n&p zt2*Vpi&=mXzQx{?y;~ME*T*2#-STvdP{sJl6&NV_e#0GU`Y00L8m*MZ0(iLwF-F~n z=Ueqg&2~JxR9w%;Dw0+C0{IiQGABEY3Ag46+j1p}Zq2hm{V;ZEYZ8&nb;;Gq%ThO` zkS{TzE5rJ3T-&Q=s4+gJ#$2(!JD7v_b%}^%ZcHYTgJu?XAv(IXNG6#iq!5WThSzsf z8AK8%TVu$qRBJ58v2+U-V;M~&R(3HUuLVwy%OsOGGSwHO4uU#1Wg(@+GUg!KZ2^;g zcr&yrJ~U|e+y@6Ot7#E^?{;3qT9$tbpw%CeS`&R#-#h*qwa$I$MaulGe0KR}v?4MZ2~ zeP-fcXjf9ZMDNQb7C`c-_33@RB7P8qv8WM&+PiV>P-2$eh>F3D#?NCAe*F+U#Lq+%`9D&S5CM@Tt;$E_}>< zWe|P=b)+=ROx+NwX{csuU8rWD=2DwNH4C*jH4ODAs3Qk8pV|ho7srF3^uEE=GojiA zb&W{#E3cw=T+5sS&vwGMN2C*A_t9=@aSPnkauZ~6Ipax=bf7EVy|xG@FF|tTwrqjT zkaB60c!jwm69T+nT4&CsseSHgwCVU4^5Or}E>I60(Re9q!T^uqk5RH^V^qYZKd*eg z54h_^C+J(dXTJZOyTJJJX8*n4hI1>UKujl`mcyY)3KVACQmV-|n%cZs*WZL}&((xhq5M2)95#IqSfqW2; z;$_e~phKW)DTI5m+KNfXmYd9h|_V(lp}RtZfkKxJa)(8QEfCZ-on zOgV+cD}W}Ji}GSJ(!?YUv6R=&GhVD#da;O=7i*Lz?p4A6UslDDG0YCk2-;A<2r;9D zX{J4Pm(aH7v|K7~?on%84A1;=!kj*><_obllY3gfB^?w+aJ0Jk9-f+ZGLuHHaSf2x z_Ed{P(`yvms$FT8or1e^@S2$x?@_N{1%D@%lXsSbXuaro@3BVU-#^YfUOnGXP%?b@ z)n5b{qSHL_U|8~z4jkozflI~n13|sDP~eO!0^mW5WVM)?Ft^4GV?!)$+#c%!*EhuC z#yc?`qGs&U4SWK4Uk3tT&T9hmm$PsY*A3SOcB7#9rHU_99E|gfpB29dJWD{;lwYXQ iS5j!;^)t;Kn;pfU3ePV)73@3sn<4)&3I3A_r2ha@XD9jq literal 0 HcmV?d00001 diff --git a/42sh/obj/job_getprocess.o b/42sh/obj/job_getprocess.o new file mode 100644 index 0000000000000000000000000000000000000000..c92fdb89967d8637633773c47530ce6855e6b8a1 GIT binary patch literal 4784 zcmb7IZEPGz8J^v{-P`-{-T5QIjpO8!OY_ktwwsS8KnPBW(Iq4(v~d$CXmeig`Ocj0 zj@xyk%NEAec2vyZW!3YTgKTuSPl&ByOq>Z6f&GYQe zUhHd1!pQHu@B7TmGw;mqJ3HrJ|L1S-Mubp80u>|-scEP(5R_XW(*)nA>`nL$CpZQr z@WCl4DS{}b>Dq@}-}e1I1N-(|^8@P%X^@Z8UTPJBvB7zODk!EoY!8i(n2uZbAk*Bo zckA6B51K{5vr6@$)q0~TFl3AG27KkJqGB<2%N3W4?T?R<_MbevIM0XT2RVzRez+5T|b#pU+nv8ucDd`LQvvN^s(F+Y%Cy+-<4 zVA5)e&#I1Lovt}vIasO;o951Kvqzkgd>IM$fse0Z2JfGI=1qKd(Ja*Qbo~LQIrlvH zspRXIe7hx|bVXcwH+lb+XT&9T&uJG}PYztl9jDNo%1zuqB~lOW zW6N>x=*@j?*OlDy!KvKww%p|4MVOEy>D=V6a+5#vi6#dwlDS@KEgF+Z{ako`~hJV^L0_nyG3CivaJHT`MOkbMXfYUF%L z!=(zU>bNT$H}8%+BJaBO($KhzymQS$IX@!G)yhc5t4NBlEVOva@l~NzcRU1mx#WP# zS6r=)AyS)8>4+^@&5lU=9{+g7DUDR@;S49L@C)e_?Q+?yjbJ6#c)bob6Q+;4W7T0s zY1hX}RYzE6$qU!Ds4#_PRz1KnJp_I^@GW6k=+T(Z+eJpg(}7G*&9*TQYoEynM*Wpz zfmpxb_A)Ym{lVjrVU@8Dquy>Pt;(&*b}f`l>s`rKr47lT_5f^C`eUKwhvFZOuSjff z|0s^wkS0_KZEweyYW*BnO9`U-d?f8FL1;xtMwh|e5|5)L zHc#2!z5+AEHIE~)+*2*Qk0cuu$edJzLL)`GF&Ele6_5zgwgh80g0!9d@%R=deF53+ zpJ;}6q$I>@W(&$LUwL(K4QZTx0ifKwA03pC@`$I@lkQWVQ3Y98Jz2a;PkYMu_FsWk z^cbc@+rGtMQzHNJ+jeK^8T5qqO;q}6RJPNMcA4>ecqiC%t(sja zG}3D;P(>d?gRW@nVC!2@JqACNiIG)_--kMG2bG9^8;x36+Ycnc(b_02lIcfKeUDs= z^sm4?%bq!%G(UzJUafx%=4&uRi=&s>XlQ4E=;u(qL%1svg1Ilc+=xMQzoIL-8=Rgi zj;`Wv)L@Y`dYhU}7+-|-Y3y$l`<52kG+aFdzXL|(mPi*=XQa(wfOi6pbdc~icpK@> zBO%wahu(ZrwCH!i-U!TCr0;^sEeU@%`bnsWp^-az40bLSS5n;1Ujm6G6!50L6SysK zjnvbDn}nNAJsY?wxSgrz;a=d_G~7(;k8t0m+X{D6>W#o{gWE6CjO1}(v53<8I_$Qq zs5(UYA5bq4HN4pIbqrJUc%x%%& zdHbAEv*E`35?#VgilNPWB1`!WcEa;^J&Tp#(dF*hnggZxO{GRwd&S56i~S4F7oT7P z?uQWXfw0UTOTT$6K6EqxPalqFOdTXc!KyKz4z1xQ3J(T<{xCGZ%lw(Zt2oCcA^h}m zP8=&@KE(ZMse4?#H9a`g-t~iv%m4oMorUh-S{+^A_~%sD`OhzV<=FR)KfL_Ij%_c0 z;ic0*IlAF({nfkN`KK;DyDnTz?|tsUt9=g~i>DI@o;!8s7ymx@#$fubhl|~RiamPt z1FiOQEA!~lPHe{Q5WZ)hf(%0rLLP=Z33&#>C;L0dWeA^L3j4nlvH_BV+y|*Zz65y$ zat87v$g2=$0{#S3gX=+ImJ;H_mQV;LAtobNj>3QlF&|{F*WeQ3doLko7$GKx9LVG$ z#1xag9+Lxk$ViAu#9n-lHk*_MDTv|oyCYok>4@0%qc-$C`axV%AvH9PDBhoPfoKC zl6jL%Gc$6$5L=V!ht!X?_*pE(J?N`?7hgqrJJ})>6byqXO;<`$s#xW5-iLa}oqDhI zdQ0mz-8mO=4mWiH&}+&cT66E5xR+uk-Y0vC{JMLceA6EQ8~fj|!?3*zCU9gsZa}iL zf5-DtP9d+seyhB{!NGVO517a=^R!s(oVHMRwMapW>7UTj`VP(5tf?>~#%Hu7Ty3+q z0B$$TY9zd)_bL1F7+a*q1aD=M-Ob~oTp20b dZnYxJ0>o6PxS*UNEh(8aG;q{{qNn)93&I literal 0 HcmV?d00001 diff --git a/42sh/obj/job_getrank.o b/42sh/obj/job_getrank.o new file mode 100644 index 0000000000000000000000000000000000000000..7dfe939a4a13bec2ef2b56428d382681bea2eb37 GIT binary patch literal 4388 zcmb7IYit}>6}~gOGyC-J`ccb?n{N*lpj>YG-@an4*^0&j=%_^rs5T$DwtNneBaC+ zv)-mnxYD`joNvzk_T0z0GumIg{kQ*wgirzk9V7^;Y3R}rv{jHrg74AZih2)@a}1jA zgHuqF1knt`DI9V<+w<=o*?;f-}5V?h1eGMM=t9X5k6mjY^+{5$oa3# z&*yth4!>SLt1?mLkXF7bHxTVPnZ=UK?<-h8xqVm7ub!_I3--JDI$GB2*_g-Q)L)fv zGH<#mw&v&a$?Xu==F8V=<$_VkPcprC&9_tLHzX5!?wa{|eATf7?gqE!cemtQC;9$x zoqTS7wY=HNXSeVL;!P{(nJw$*<>x$7yXt(uD*4KC)UDUahoW;STk{J1K!6T&CUEdH}%(n+|1#{3nLd9`F(MTDyO~9erDuSZk9rG0p{Wb zJ{7Jt9HhDV-1J;->hOY?zH2^tg!xY$zNjX@d2V`S{@BR;X(f4-xAmKMqQfwdkn1wc z%d>;-Z%r+VKdpY%o!rNwuIV2ffRov_C9`>>ut#MH+ zva`kwhbJUo$I&%>7h|_>!GpZx)UC0GgSvB!iE_Ru%GF9S?RMm!uUB)Yz|z?+DpNe*&fF48yK+mSQwtA+c6GXOi3;bex}JhtxIkS!j+@Z&Le2{L8QsAXU?9Uoie6 zyez$&)xL22SMd15>Ic-mRD3h67wGk=eLW(&3g!s}XltYEV16BDFc&=q#cTqbqPGKm z38sEi_&k&r)^-7j?nSo%KeQ_L22@X|BmQ^jBY;C)%;*Zdqx5cI4x3;-ORpO_h_>i) z*a1j*ZItU2rTaj5HB>09kvlPnE*FU@$zd3)v5Jwn0^TGax^5fXaPofNO~6eh^S+ye z+mp25uIJbk+;s8_a7XC2!yQaM?YkXthee8+h4$9$G;2huKNbA$60vp4sGOmybSLYR!IGz+82-i9G<%; zAL8mDiBIof9_}lJ+JEzVnD<=}d!_#do?Q1hLT4as&131ej>WaT^#8>0Wzr>ue0&uu zLWkDynTc{l!`xk*?;_S%7{a$N$Fe#*AkLSpHNTHO^Vof7j{NJ&vC^7X&vxy6@h_vP z>C@rgoqXZ7e{T(zQmOdCGY$2Y)UVC1-d8_+;rSmdtpCSLkA3)^fybv~Pw$ynqyOv^ z&gfWY?}>l@viCALd4jqj8zDoGyCGwc24ot-4dpJ(L4E^y1M)Vc4GE_qTOqq3_d^!I zhev{^yBiv<0+SHWf`nKfgjhBbIw_-g3?#(OV-(M+gjlwOSjo8j*m%MTapxt((?y6U zj^86_EPFz{2P7BkkPu5#MzMqm@r21JmL(w;jHKs@CBzz#QLH>dEJz8l3JG!bBt5Sr zLZ=`S;+;T<_lz9K8-oxp5(#l`gjgOj32qu8UJf$q{mx?uXN_kTBfK`}DN?LxJfv*O zqxT5qP)bR~Lt)N}`Q8Zm+7;3)Ey?ky%|z;p>L=UeXSOIIRu%JPP~J(jp;!1D5T)g- z1>YcMxxrU>wqe(^(#u*~2S2hBu^(v(0gyH12R~lHO`ksa83OXVC{tohd6BSDbIW!R zw);H;9JS_>dEsT-k>kA24;kQnWx&BmlqGn*7Dy^uFnUglHnbacM+;48QTfAk7$aa>R8z)kOC6v=l)~n{kM5q&q}>s>a|isF;2fEbvtwtfZu2~ pxk8TfA7jbJ^G+V$YL#NS;8ZJuUyJ_gdyZw}pM`3zhR-M={tHfGm&O19 literal 0 HcmV?d00001 diff --git a/42sh/obj/job_is_completed.o b/42sh/obj/job_is_completed.o new file mode 100644 index 0000000000000000000000000000000000000000..52ebf04660f021f03cfe9efaa2ca44b5a771aca5 GIT binary patch literal 5280 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 bIc>ZGdJZ4{f*%LEFV-q+0R%6D?HZ_V>H@++}yf zLQnY4cfQ~G&hLEZ+;hG;%Nzgs$0vpmN<^T7v_a|`sx$=UX2@lNpHW8RLB~msK?!Ye z3QCe7ifwzv{a(-x?44V8?YwG-tuwMgK2CeNLkPwO<1kfNY`ah#X^z^i*YF|R-g3|8 zyS^NDi;!oT8bBNL>8`LLdjd1$tJEAHXyyCuEN>ycV}>--dX`7Xmme8v6!&udv*Qc- z{w#;zC||i+s&Pmw-#LGigxDkX9acb`>J0V~)-~g6;d(n# zR|Au+miV07IM(Ue&Fa2#wP4%Zx6B;zoa9SOa1eYviUT-*@|(Bt702vS179~7VB53v z!ON0wNb>EHe9{y#A;!Wsb$H(@<*Luvx?U3ld_Nh?lXAU-pAjGT#dnDXfiU4qbj;T%>#Mxc{khj|^YVY3~r2*gBaz zP8rNiyq%kPRl2d`B03;LDYW0u9X<5ENIo#+lfXPqk9Xh!8CsrOau`A8j$RhY2YJ|E z+WIkSafz#h58MNmOD{}KO`(%3I==Pe+|geT+4+O-BTOsb81zuQLC_RmtAD;TD@K@^gALu?1CdZy05mU zkk77LYV zEss` zNqj!`h1jzAwyxW8{34oACA6&zKUwQ$nc89zNo{23$Sd4r^ zSncrL)QOtb zW6Q*ztI*HaFY0XhHru7@Nm8q&7V_yFn|NaWkvc__ow$*t>{ z*yup@1}t-)`4-e}t=Hm0xD0I(XZZtBIB97$(`HSXJ`b6S0{9%o-h z&GZQ4J~SuMX)HAMqWM=e^_)Rs#uHg(oB$eyn2R(j)c5-YAW;*^5%t4wRFbCt`56w=PL!zCrYyoB&N@5}0 zlB-d5i}saJdx)EgR)aQ`)FCRvAMq%AEJfc2FJmXFXW2L3JPWl;TWb9r+TWPv+`<=O z`CGVxoAxp+e|uM|nYi^PEPvB(<7d;KBH^>B{si3YHQ$38h_0|cgkFdf8-<&&K7o~? zwTgrhxMykg@hfz|;$+c&Y=$)l7AK2l)yx8GUT6(qXRLH+tyVLOr@w4;jhb05bkgg~ zQE68|rYrh7w2j+QSr}%fJIJbZ4g=`4!%FDiM6-*-^a5LC!6*It<{U^wDE!%C3GCp7 zf92wXkMIKSmUurj%gnK~TgT!@ZtDN>;duU3c9RT+0V+a=*6_Cq@`Z2X+CU?*2ou6L zImaa+d|Yr&WE(LT;+-h>Hq|Am;gPQSFHA1|=l8akdf#-q=Rf|h-_5^p-{Mz~J!k&@ zm0xskdF8t=J@ewh^&jc4-{H+Yeeq{&+s0D&oPXfo1BZ{rQt`d#PoH`1%DKM}r#^gm ztoPmMse?Cl6qh>bQwMvnNw+~ZLB0klK=wf%hCB^<9&!QlHslh7zxPRep<5yAAvwsm zAXUf_$P#WKyCRQG^LQF%_ zi}#8UubQN179_;9D7~1o2r-pOh#8s?kH4g6@*;Esm4uiv2r-LD=q;Fp=q+bt(jdev zBI%iO2r(5&h?#&8Q-g$fB?`0ti~JcQ$*dAy3+2FFLfM~EQgOpP z2`|pF0MhdTiKeE)pFy!Xk$On|QhRWTan#_e`VU}5`6$sY6ch}DC@t?vJPw^olMk$H z(`{s>l`XFw{M>BBz2D8+!QWT2Jb@!cw?0ZS6P}y>WBhFoMxl*ulCMb^ZNVt{tZnhc zmACy@W8mmd8@R}4APo5M@f5&8J`DCSl2o*4^qjUpH`AI?(z^ApX!GF0Ps&m)A*?tM^oFVS+Ll==}yh~Aszsun)NF!0l=W=R$Eh=s)fxI>oF5n);9+l ztNJ2S5|-SzA<%kO>ZMXIlp2bDy1WYdO4vyNVPSKIDe&Jnvuw!|x?`6Lc`uJmt&UcT gUaczZ5?=UtJeTlCrr?9zcE;;`pZe{qe>Z^Pzen`Z<^TWy literal 0 HcmV?d00001 diff --git a/42sh/obj/job_kill_all.o b/42sh/obj/job_kill_all.o new file mode 100644 index 0000000000000000000000000000000000000000..85cac4ae77980a0613d2c28f767b7c46fe2019ea GIT binary patch literal 4180 zcma)8dyHIF89(>V+_^JzXJ=*~*5cB3V4<|M-C5d7H?qN9Y3mfWfdC6=(Ch5o*`2%0 z&J6e7=__a&+n8NSq)6}|6C(*hjm8jCjfwaGAEZ74Q4C@X@ehmzF|Ni)TMX;(cka3C z%ur}g@}2K-zVo}^Ip_P%JujU9`#Yu(T1=n=#X(I2T>*r48R#sH@6ooT!-12WgBIz) z6r>!DXto_x4h5kc>UZwB=g$A@k>o0Yc>L@$0MKcRi=$*wv+bG6bZgG`15cW4d-vTF zx9^RHMTGMz7ln3C#TRO_m#~o@;nfz(1>^I|^|^}wZoI=?`<1dnyte*=cnf7m zhS(ingr|-}TpX|5Y}P7vy}ZEi-nHH%D!wrlQ2L_rg?NqWd3nIy@qJI>U8V5$ULu~1 zuUU4w@&4F_H-CwE!Qtiw*ZYpbtEpZ8;w9pt=p^fhkv4C|3 zcB_8St^ktcTMLC)jr9eejgR8&`Pa3Qws5 z%dbWbK-y=TmOP&r^c)>CFwV?mPpX=I+!A%?n-3DrJ z`~<0E!R-$3BTto<{!%*jX5lGuhF&G(5A2uroGqOoQCuz^`|PsF9p8zOAEnS;_mk3z z{mZ2jsnXK^GZ4>gnTRhvAI_Hp`|=oBUfT28>(8#Ntdx%ZtnjIyPO!WRlaqJtFC3_N zzT2o5Mu$g+M+%#q8t#N`qa#p;cWxiPZnN+`r#Ro3-sUvwf!C-}w(oOmHM?A^4LhPZ z=h0BgB2)DB7HJpkMmoR*-SGzjf zZ^W|s#9+2p>q9!~!!Y(~UyEfe zi*xWx?-8-=zJ4mBD2ybkL8PvN?MBPOaC+4j*Oj&EYtT2d3W~8FP2-2MSKvdtFfm6A z%es-}2GY(hlKeGq%D|bY}SX8rU_}1+O_&n z#^fH~L2ZjZlo#<|a?g$aOh;Kkllne%S4q|L;DhAPrr#Zcpv^47) z2)_U&Ga9~cjYet@)TA{YsadFbs}!j@sB5j;p#Bz=%tI|$_d`5OwHNBB_4!EcgE}rU z{A7{Crq;t(SoWXj21Mo!uqoP;TI!SJTCPfF${9x}rnGnpr(z7CdkluuhZ0`_`;4*9 zd>mZv`37#^6VT*&6!f9E`AujJ=Uu_gJPl2r+?800`7$(lIzw2AFzRqS1ygE6>IYy( z65Dgf1lKEXZgNzIY@sb7W#`EsKg48|83sNqt(|je>Yj^RccmTwVm>GrY*k3~7x8x)n4HYJnC(JgM)1o&~)G`YY%>s0RTTKs!KtL7xDz zHZUYuENeh$ObwctGRnlPrisa}OsrCxShmW$#VV(X#i`(#(KNAClotz`Cf2tyJ*P~JPr-Ae z>BV$cCZ;S+%yKo6bxsq@UzvD!(R3W7g5WJe6Ym=3^?vziBG;I+n4y}wU5U}rn5Asm zk=uoKD6i!+X7VJw81Utwk++DmvJ&0SVj`RWf__s^SWiOig0C+ALkDib^ZGJ4UbXwD^bpq8+}YJ3L_*9S;*cUGSZn9}HJnP2n8Ks4Dfw zfD#YqsHabtC+g0YuZqx7JsO~3Kt>Syhlzw`p~Z5Vkxt)gT%P#0Va^)q#4ScXakG&e zGjxcl8kc?rppeu#j!LLY^opzESb@ vii6QF@w(z41kb?`HHvMj=OsHiU literal 0 HcmV?d00001 diff --git a/42sh/obj/job_notify_change.o b/42sh/obj/job_notify_change.o new file mode 100644 index 0000000000000000000000000000000000000000..6db4d7e737d07f67e7fb94dd0921a57e260317c7 GIT binary patch literal 4456 zcma)AZEPGz8J^wq-tPH6W1GmW>*QLuA!%ZtNkU__Zb;fBy0$?9Y3stC<5D`KYB-BKRNPLw)B_Jx0FtmcIgcdbC&+M#w zcTTBCdgq<@nRlLjcV^z%x%=fie}B&uLW>AgkUmJmK$V4{+yJ>s@B@n5A9S4K7?jWk zr=X+>qS&@yKH>-Mz!`8fNkdKf3F9m6;x7x1~BBjH{?ughDAYkaxx(&Z8I6^g}X`7qzVJHC+b zlHyn?U#(v8IHZ^FPA(wIITgi4IcY*nXM%Y|*LCA-7V6biYe`?1 zZ?53T5PRbb`P6c(fUnSKxMjOum}7X$-uIGO)vW(vg?valN!c6U1+_oI_kAF>w60;JXMG)S z4)5vP?fMh7ddar;?g|~LuPDB(0vq7tmV6ZZPpx?mUwPK9G_ktD0Nd_44`KnnBT(X; z;!~!;>(7R5>M-BjT3s^szV8mjw@C$aS-o%R1LEVnpi78&aKJJ6VTcQmueu0*jNOn= zK{^W`L0Nu8bb4LCJ(FK}J%4I(GJjfb@ce0!U)X(h;rQYU;;$T$Kb@57?95``c$L7y z?pO1tDO34{-{u!C25x7MzZs0ZBJCeCp8VN1z~ceZ@qoK_Urm3B`zwFyXOo}%sT{DA z*_YkB_mNL#50{&*npe+GO-xQqX4g9|j*RiCNf;AbH&1+QgJ?CK+(EB6?s#>->A7s% zbz1q=Rdh6JCEMpR z7n<0Ac4)$X%Vu;Ge7{*MwtXazZ&%zxRk&Wgnw1qfE460Jw;N5*DYxk2)>=O3rDEJ= z_$Y0+YEPC0tIh{1TN1YGty;BSE@jDF=XcGY^GbYlxj9$!TEekwG6vtF0*zyP5^!vZ zz;;915sm|oB~DCPQ$C$}OQu$%TrLS&2TTEg`Ei12a)Nns)Jw{Vn=QMpEho-tH=B4n z8*|u_sEQRQ{~@8R(r!x)8j(~cI+9wY4Pcw-695Oa9sQBio$z=(o58*fWEnm<9^cL^JcASsju?xZT_nUNDwNLroDZP)KZYToJ;LvT zme#b0e%@`%_DR%z`uWG0=-R4mpkLjZ^l9EzitB;A;8MK&cdR8Cni@ktWjI)2UK4!%(!y2J=i$0c#<+#(WRzSx8^rB=L73kxk|hd@rCGU2D7yWmwTH5OX7{*I=7BSg%73n**^$ z=+Conh!MR7%ck`a#&A1Y$7roa45HsWh_(i?)|hQ7NaRst7|OJwtk^*yKq`nuRl z&~p0Mb6S23OD@y~PRm7DCmG`H`dA|N8(4B_Hgb|u?2sXVQ{*4onMb$$6i_3LWC^g~ zdp`QcT$0;V?mg&y|~+y7c-R*6HL)__Yz`SC@&@>A?B!pn3#k(i;AAd6QPq31@V|5#G^+I;LUX6MKz&79)Z(A1G3E6>d@%?a2p)b|j-^5~g(yUX1r9 z$d$KAbM2ZMFT~DN=4t)jWROlmtcR~I{zwMx-Bc1aBW0*s&ou>C4aaTstDS4NnmJ|V zYFno6=tf#cdt3nIY;{q`$9CCW2M;5xu0s>EJkA1tw2^sB?LM^SMFu!BPErQ$Zp&BW zf_sN@2(A|}FcOOf-k?O%n$h2Hec8AvYGn>2b`=Qy7d`$6aVp-Cc&pJdQsEjl1jkz0i2j_!u<8yPNZm@W**v(0>~=#z%8X zuTy%B(onMhA4*R{r!gQbqiA%PVqcHVn{H=+vB&m$Z2ETktGIxw!rP=>@tSi5+$2i{ zzksV=z3P^Iua27~{!1u0hj3**WLF9`S4i(_*_Rh3X>?s`yGK;pg=R_E72GUw&#d4V NQZU|`Yw+eJ{s-rBl#T!Z literal 0 HcmV?d00001 diff --git a/42sh/obj/job_notify_new.o b/42sh/obj/job_notify_new.o new file mode 100644 index 0000000000000000000000000000000000000000..b1f5b6a485dc970a5db27c8771c3c825a016c3f9 GIT binary patch literal 4568 zcmb7HYit}>6}~gOGduh6?)s6$A$78;owR{u?K*~7kQTed?FLd*O4AZ(HCd1Mm9BS} zomnStVj3k;6w9g95c;o_sHy-V0ikL|B?>AHP_-3MDMCC{L8#iu;ZdxjLQABY@0+>f z*xQtvt3CHT?z!Kbx%ZwsXMg>lzrPz2LJ0_Tpdjd34P6R^wi=Y7{yuF_)El@UeS965 zf|Qi=Ow-97aHIlens<(T;m#|%FP)GA@fgeYRv~oSg5ofl-%Qi8oqDNKkcMVFA7_Oe zFS;Q9Y$4PuqAQu^SZ=gYFaav{9d{4kam#|&*QIoci-b1Sga^|SNFT3UwOoJGT#9#m ziMJ4W!*yHSE%EU2vZJH*+yvL}>Ugh8gyrIuD)}m>G~*R{Akf~CQDnlNUdDcKU(l`^ zUp-qXaU77p0(T%o8$BG>`f<(yf`jx)UXyzi)tZ@UcW z<`0a|!>f+&b2qp-zDFfqkHq`RGV$E_YFVop@3|(t$CiobOxCXYz859lH|47TVwreI zVi&SGzLWBN`0razEZSL5Y}#L|I*#{r%tmE@sWN7oyLK#|aaQ7`r12r(@kpM;`ICFz zgqJIt`8syjo6vk8ye#pCB;HwxCsl!Ktmw<+e!i7U6&JDjeUlN-d#4O$PQLHg-X}h; zi+dMFy@?FI6Z8oDDL(^#4LGmU+d+#PAK}wt`*P&nnd#RvNB`EBc~F~#e`b2>?aa*7 z+cVoT)6bt3vxK0YnRy_IvAOAy*D^<^=0xJy07o9Y@w2YO$XsRyb4O+~Gb6JzwazOu zG2qX^YfUq7IUP>^vEljqd)7r_uRqpY+>q48%pXh=6 zW+k^jZHeC9HZXb%`>XrLvb_WSc2O+#p(-4cz3uj;F;S{GqE>)VD~*{BcRgFjaWs7u z<6HYNkah5}8ErVoCCAK{vjtJERthP%BSyYdw;i)quUa{qF6EN#;3+O+#5wp#ZrY{$ zbAsLC2TI)qY*g%0p^_U*5xK(8rZZk0O9)!^m0;d1)EMnbARdhpLI|Tp1mZi}sSF~`!aY!LibgRKVR}Xvd{JD) z7JN1Owk&{REUqYgP+~nEv<LNeSNAtpBC ziEOud%+&RlAG_z|Vu!b!xXTjzjtbwUpW&G`<7rGPU(;w_&^piOA};YIoAu1j(k> zt#)^c@DU7ZLH%{G8H#K5Ij~cpU`8kY8Bk!eu4Bqm5cPH8XTUT=;|A+p=za%1v^w-B zu+C7MaS{A>m_r>5>giB|Y_h?WRgo_0eC-v@3e$w{)1J7b0;VMW^nFMR;r<1px5 zq3?n9MK&2vgMSz1$Va#=&q8~G+GZ}x&!PQ<+7|B6d1&0rNE)#lzlFwqi1e!6*BGz( zS|47-c-7Z#P`i5;c0JOsc3&?v!fQW77yc34bVWM{S^pKfm#C*&iK?`{21DB$ekZg` z5ZgIT`zIx$Un^As{qVtsM2@41)9D35x<+TR?FTztC+U{%f#O4T{L^m5o|*kY5DT*k^kLAAAm)PwngC6MnC{;PJqP*? zXclxC6vt|>2l4#e3i={w9CR3T8pNH%PjG)&ZJ_Z!pov#RI|$7N(ZnIH6dH4uCLNue zct)C-@6wB>n_fKi(!{eu6AzCxF-vJ;@=6o$3z~S1ND~v6Cf+qNE+!34Oe7fuvxX+7 zqnya>r-^AOy^cVoi6>T?co)&c+e1!d!qLPGlqOzjG%=l|X-InUwvZ;?T=e3FBSR%D zO}tm67q2;*7@ssTw`t;b$%+5#B!_THdD=0C*~ literal 0 HcmV?d00001 diff --git a/42sh/obj/job_remove.o b/42sh/obj/job_remove.o new file mode 100644 index 0000000000000000000000000000000000000000..5f68e0e7e8f8f04bd1ab2e6a0b9dc9014ef8034d GIT binary patch literal 4512 zcmb7IYit}>6~43UnO%F=yX)8quAGLA5}PE{UN;Y7nz)Ti+-^!Dpd@{uR@3$D?CwPC zon>d7G;u7YO@-pRky;{t&>v7F2>C;Z5EYFC6wwx1N=pS2FI8794e~P;RThGB9VAct14@5~-*Hy@ z1U5JYB_qe_x@$h@N&`yQcaPt*`?4Lh-jogUF_t(8(!|=tVXC0$y5YDDt5%jkm@nXY zQuaTq1tWbOS!g1jqB${D)2-iF2jx+z@8#qcmIagnU)44|uP|Sf zFTAC^6>l;8=AwLsiHU}}kMD0`d;#CflIB|ZtXj$DkTBn?GQJCPzNgxK;=}kJ{4OYq z#@8s+%BFKA-wUA}`cA?pX{i_Gn=BY!h~fAGJ{g|4I$xn)ubO(TFv;+)nC~xSd|PEe zC$1Ww&u35U^*(SozKG1X)spWo*U0C^S1%Z0zJU;*mTY-*elzs`{P^4h^+o4gM{jY93>FzUL+1s0`*sIp32X5Fg(Q zx`ash8zzJAg`5URs^Kmn>gzN zyUuSpdJZn>V|1JwNB6m=@3~p8FF)t4u>4#nTtK{MK0i0}UVirX;PqJkw$8&x?}J(p zK?T5>{m)HXwS6+jvyUMn77&631;mei^R@E$K*VJq`%WSTiu320wA2Y`7 zCcAUzUAwaT%!Xsxwd}~y@X&B}jZwuOIXE&5V`$_0p&QqJcu2WD4#wxo`|Z8OLT=-F zry?$gEUcoiYAz8&xVontUzMze;~~JSmg5S?SDd$rAyVs(b4AYv2|Qv!ga%XbQn{O1|Fuv(;wtc+C^+guGyHh zY)2TnRjL-s!ZoNkK({@>&^-ipHLwj~81QI@V^j(aFK}*1WOC}JiRZBPnS4O$Quziz4k{fwn@s3SDGJ%sE5W`Q zWEnme|Svc)Nxc zDb;n6Rmt`)SmW&bWMoxFXwRV|_A075NaVWsSD|_%OWMBI+b@xJK?+4)9;uSP{Dk&3Dn%@-YTA4~gE8SOGL2 zPbkR&G@gOPlL{W3+#HylFyqNv0y70Ole|4J(=dCJpM&{4B%XnpP1e!;JIyYbBguyX za|z6CqLZNxu{)-uUV~1*g{nt%z7DmUcwABMrB*U!s+c!|m(F-Qs{9wn@=)F>Kph;` zKIR|guh+|TaPi+)_8AAM85@PBSV#Z;$vYdhtV(#)BL}8v2 zV&Y4PnMsICMnYUygt*is7t@*$vt4>|5fb96lo0co5Yt>j%yvRt1QKGp6XHUY^h`xU zOn&LbTqDFJmJk;eAttY!HglB_b69$PSnkA-7yPCeA&cCK$g!XV*`yr2Qz#E+luR-f ze;i(X?sCY;1@c_F6l`T;ES336G^$fP zgmP0(BPXq#wPEB_3lZmllhghC^8!!c$dcAu1D;ZK+@T8hW`6|QSQqjbh0*4Zkav!d zCsv2<9h|_&4EkhZ@nor$&FQVr%Ng?-cJv{T43^?1Riy=%qh` zM$m&lkoE~^%xLg9G~W5>W6%h1^bjF2ihi10Hrf{0X#hdNwVD0RvNB{3hHUz_`hOv0-yX8>57|O5xq7|eR&?C@ zidIA5#^e_8p=)Ja|LmIAU##Pw3Ag06kr?=Ep=!apoHKsA)G$rIWlYw2Me;l>M{iyx Gh4?@DdC-gi literal 0 HcmV?d00001 diff --git a/42sh/obj/job_update_id.o b/42sh/obj/job_update_id.o new file mode 100644 index 0000000000000000000000000000000000000000..a0818cdd0245eed26a78dcab8a9e78d4af8b4a22 GIT binary patch literal 3956 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/job_wait.o b/42sh/obj/job_wait.o new file mode 100644 index 0000000000000000000000000000000000000000..8eb10c592e85d5ec53430f86dd163a68fc151476 GIT binary patch literal 3712 zcma)9YiJx*6uvW?*=!!&Y??l4D2r`;KxcQ8Mva>2M!UL&6r}bMgfi}9l1#dpS$AfW zv|%+gtz;VmEm#mltRPxJL{NXUe_9_f}FbI!gIoZtE22#|qX=3hBl#FQ=G<}#Wym&6or+j^uf~gu} z)tsh^l2y~iVFjS}ilS`W+rRVaiq$^u@EX_j1u9GKqz2N(%NZGa-HUg<#+tEjmx-53 zrwi&h#akPni)KpUc6l%yzXV_JUyg0|>B7->M&WXF{Ij8A1qBq}@ZhSnLX#mhTd6)R8E_N?$atcGiuLGTeJ+-EF zK_>u$c@|VX=oLh~)mASpIp3Wu|C*e+8cWVgUjd_Bx|uAWzf5jtshr9A2Mf@(BEs^L;t68r*ThT?>mv+_MW9 z$@${7Gn9TgaoKi&a}>7a#ElyNQS!GxKb5%3iA!^(8*{~LwqfTV@!9K$Z+6GUmLoC% z-4Ht$;*0o5FkKAFlB)Cw{!rgDUXq%_VLpXTFT>`(jGd$4gTO)Lf~ftJ4fmrHx!^DxE8q zI^?a{Db>i7MvZiMBBfcj(8$a}CJL3DF?6e7? z?$l2$H9Rn|XGeHkEts02hkGKiNGyDRCWr5U+!KQk>F$bjKJb6>Mt7U=jt);4quErn zyUQG5ZZ=HQEv97|f+bQcx|pc~I)>tku-Mv#1=C7dMUx4wLPxMo@&!Zw4Z&7nB~FnT zfpVn~Z}bHpZF;QfzUJ+1Pv8XmBqnmz_BMRgx@$yfGxG%>Z)(DY^siyt+Z^(QGbmyoMH9NFn2s|Fk1pt$W|z$1=H zjW4OZzV;2S!e7d!4hBSY4QWu*5zxteOoHBNniLn+iPmD%vrR>@Bjo@3No(&XhyNUe zZa?TH&~XqIf$S+?>Zur13{p|e)_^dm5~QL6aTV2xR8&5$s;(2XHM!O!M#`1+H2C%r zLd|gV5)STU!emGYHP;7@!HQyQ2Tk81l!XO%`&oZ5^osb@3b&WH!&YR+U?~WH2Up-J z&^tha=Z3Rr(JVwYJ(DYD)u^_$=b>7SdBD6w5mos2-@Q-h4uE#FkrAqTWsd4QcM5vi zG1gEyyS^4d5*q`XrPbo5Hp%brmDYbC$wN|mujD@@`TWC@7>G&%F+z)%B+=g|Z6wQ0 zux#wbnY|#b_aBo2&UCFatsjKpFOn}1mm0{k9-cmUioSz^OGhQ4C^n!PuTmu#lS_CY zp4BfpT-Lap21hOB0dV}ueO%w^aCr-t8^Dp3d<}^qQ~3vQ^nUpQIF{ry;DrC7!{v9m z{1!Ojm%+*IAlK8OgT1VAc?US*((gxlPbWCp-^17G$dNsrczVyn&bmL!`MsRe*9Lxg zrNgP)kPKoi^xz`~UL~@yM^1R;y&jq3sP?D0t7WFRM+T>&U}RL&RK`+;{rCsTZnMge urQ}oAh@u--Rx2=)vw8eOW(_g>J47AZ#?VZKe(L2^OI_5MmXXgxX8!_$IZSc@ literal 0 HcmV?d00001 diff --git a/42sh/obj/launch_process.o b/42sh/obj/launch_process.o new file mode 100644 index 0000000000000000000000000000000000000000..3fdab7199aaeff0598b16ae18ec5ccb9fafb79e8 GIT binary patch literal 6328 zcma)A3vg7`89w)B?>_U`ydcPHF$7WBgoh|XpnwE#BHES;>L_#B?A|1c%kFmfE`lMW z5Yl0dw4!BdXX+HDw$f?qP)8i=qcGYkNL8kGs2%%22OX%bGPW~XwWi;9@3~8|V(}*D z{OAA9`M>j@*MHC5S3myeXFeg63V{sCgLGI!7D2)@0ZFI+1y3aGRGgG;TpgT(NmdKP zu*}WYITFLTvE$|&&*^T-OGogKkG_a;LQJ9bh`TA=$1vh~E0;|7N}!z2JnrOTJf#Lvt3M%kP`9dc<( z^1OVp?(UqqNx51s!`g|Fp&}mE?K(Hpb$%i{<{geB85qF3cCpW>cn-j%}oSpBwLF>0i6eCd7X) z=%2%v>E2*3aJhfCNWSTk?`roTNFAbVyrcZf#^U9C17&>cz9gTuC41iS?vs2cr5D@2 zBp(j3OZZ_{=_|Cx_K_49erd5y`jIsTTVspHu~oU!Pm1ES=wE+GZ>tufN)9-6Xv@EyvsR z1^#hf>?sa86Hl`yqzKyER8XFT&M@#bq|p!eIFlU0=&B2r*XYH!^=ED@RsijS+IFxJ12K&Ly5v6A6TB)Jius(b}y5Hh=m$dDFWUH-I@`C!kCb}UXX@MDyz8Tp5xt0_?Jl9C+$MxS<^gplbG+?vSV6BIj64Gx?V zHA8>5sRzzF0|1MdbF}zMvE%V`BO-vw+wUNCvI&sA4$^2-%twx?=y=cp5y;_!3*P5| z4FDzEP8-4OpM}lcQYm0|HgQQH@4~uqw(5#QTj4!dZci2ky?C(C7SFDSkcP0aRekuN z-DY@*ZAOkCx(q!Qhi-FQ+GGAUgYR(1DejBnvZgZ=p`rpa%D0fdYw`OKHt`u0L|KN} zBs$#jslM$u-1zIB@6VZuftLKj2!hVWSUM3&XRJt1rjSl7jI`wY%}gBebz?G}%=ek8 zl;}^UHx2Y}F;fFAbLZqE{oR?=K!10tFwhd6m#|xBbD6lA&qtE^h?R+Sn;^^GZYE|$ zT9VNvx2}sWX-UqC#4IbfxTRat=X3EkbF&$5OT`N5c%LCDTH~VRUDnKPOy={+OgfS< z(@Ar*ckDnc<2x*}YSr57Bb&^e-Ecwc?AFTwZ|qeY3+ zo>%t97c80bS<_4iJ9n5IKyDnN)G962^;$)B*gLVhR;feeP-{ddUu=!aB{(S_&DON( zqM~|9D1=vww-rWp%F(A~!Fr{lIuxQc zURG6L?yRS>0I#*mMy0c!9aqh;JFez2t|=Md#v3jfXf&uTF{7?dfwd6z(_niQ$Q$T( zD6|Acu^Mrkkq^Ex(uztkivrKN8#+eE=#EEa+^tYNi>PR~F!RXk?72qD+I6THiKGJZ4QUXww_w6+T0X642{fco7y}n^jlY(tu{wO$6RfW+B`k< zduZEeH&<<*DO8(&Ds*iK6<$TX9Ob~3$o4?5h*a7`^Q;2kS?gv({W^+OG*fS7i7bKJ zk?kYNl)xqwA3;&m1GIkv$ulc(FVMfBSTR*Q#Y(^WAdtY1kbOwFKKL2LUUhy*17v%4 z6{jH#%^utWPQyfKr;yaEISm??l#{70RGYIR@IET&R>eiZ7Krt}$srDi*1oCaY9)%~ zi>S?>(q#Cik$E2QCE)X2Oy>KcJxr|`6D-tgPz>CFY#DI>grE-5=M3e*@`n zg0`JnBMEmw`ysV)AQaVsT_`7j1*QZZM3EEbxlQYb@cC78*L)vkJs48L`%oB|TOg}NZjYnH9nL0u|p>B&!l z1$|0g8=BQGN7f)}7eTyA+^=YVfb=U3Z&CPci+{5wfK30!GERkkxunF=wI2s_j?8Dj zn{W{in|)d!mpe_y*b*wY<=cHU|ApGno)==?K=@z;@XHIS;e(Sw!12=qiD)7GNC+YJ zrI>N17Kwe*o>v>|-sI$h+7f>DU*_b4Cuh8W|EiwJuf-cCKJdZuiO=6Y{iR9A!V`Dy z_y6hWlMO45e)GkLpWQnD6YtB*t#Nx#|8kzEFMQMEJ3gF!_s&qba?|5`A364)$KG8N z{%dg0*73FGjCf?v)+S66x91Who+$2(JCN={dI;$N((_0skj@}+>1wcC7bDF_(vfaO zN+WR(eiw zI~P%x4@W?VXF#@M93jMkN{Gjt5Kq1|gj##cfNxssk?f)HbgY{ig8h{Kl5bbKgsp~&VUd5n|l@(?jzq}BpLI#$3nStwNN&Pm2joc zf1m7S5?VHWK%$Wm_Z=vfRfoT&UQ^}1_Zl$8s(2GE73GuaD&z|LKvLX`A})dPRDrjd zwn9GFCbhQYyaiW|MeGki>I-#y?*DBh*PY-ILXS8bQ6S}m^w`;9E+Eraz2(7)n+IYZIy0mFs+9h4u zWnEfpySCKds@1{rgx5but3`c<_wADOsVnNWAi%~hP4fp+~d^TD!7^Zturj<$C9O+mJ-2C`u4~Z;(^S640_#bn)NFD$H literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_backslash.o b/42sh/obj/lexer_backslash.o new file mode 100644 index 0000000000000000000000000000000000000000..0e3a6241467419b8f59ac6b329d0063e2816a295 GIT binary patch literal 3540 zcmb7GYitx%6uvXFvybj}TiRMd9&Q367}_mR8ln~1(#0)orSyR$V#e)u+AdvYo1NWK z2^bQLu|gs~qlt+c#l%E^sqqyJ28|{fH9^B4<0C#ojK)f0f|7{eH*<%!3ku%sIo~~J z&i(GW_nw)%pZ)dg-vJ>MO+Z0>kZ~O<20>c@IZNliwC6CG?I_2fc{bgY8amMoqhwB& z+`en~CwKPG*j{g!?2wPswpI(F(&rNg30^adA#<=iV%Vjk<1&oS+Y`N;y~o1i8Rw$V zev$dPmZKe7&-VE8g{lj zkLOLp%Isl!7p?aynP0oi=h$WQbNLE`yPX5B%x}BoTPFFwyFxxEzwu1AlCNCBr&rBv zoa|NXpPOIl?(s{m_esh3l-$6TSICE#&Y`T#Z=K)G!dveL;mhThE$qQMOGeq+o3n-t zBi%WB#9fjvCY{sZ<2Pjp^(RxVSg$#13>R^_?f}D>`#m@)`8Ggjuw61uM3`xuv-!wj!IyXP{|) z3ykL0HO;G63cHw%=gmp8=xSpylO4138GE!jE8+t-hQ~+t7IqJ1;;n1!QDGVgwo93k zDLRvz69egfV7jYY^d)=5?b~`g#cc!K9m!sCYi}~qFVe}rKDV2=t<$lH+XuGwCq<_V z9f?g_`_hTNl-QBz6@5L)Oi-2z;+>9uu3K#Ni^)-K2uN` zC00tNh!S?3u=53LBv!WU+=yik#YkxJrsBnt9nBO)sW4_*;CIoM$d`&vg2Uh_jvmUC zGR|B=nWtPAt=F|^t$$&3o>GUJP<@IP4Toq3>Tu6iN-t#i!4GK}634udFIBNz~B1h^DJRMpR#DO`=%u6mNMM?FWJTlpCC zaY`}BY84T&%CS&I5((Z#s@?&^r>xS3>D4SKMdO98YLj$m2cUi0z0kV$0JL9w5IUee z0UgwyfevXeKv!umLx;83p(EPc(AC}zH8Y#C;{+b4HOiL&MOPo1JmuJ5LBkqvV(vA! zLi^Q+M%!r3>*Fc{CmG=jeg_Et1Qq%nio>)8Rebs9YjxqDfy)rBHKEVF|%hMtAFoe%2*WYdE0%);inYNz1I;-+AkSMyu_zhEW0p~@47!-BoRPG2u>xciUpl&) zA>2hYRvKL_DH-)&=NG`vbFZDTGfKYJB%0H_V^#L`3T3iZsf`4JN99b55P8?1Bs+gz zju#>kt-Vj(RP7d_5Z@q16%Ruz%DHGYw8A+cO3upW%R~5gbK!0g@v>cvOMg7Kc75Ai zkA1ftcRsN;E^1yz&7)+hxCC$`q0n#%xKG^y=%X^_Hy#Ez&!>veg*#cRQS?aFA9~oo zMXztygYCNN->OGp)%eSLBT(G}IHfN_H?~Eug5xFCj|GWdcR@{UK=3s^>e~Jz5|>L{ wA`!r}{m)87U(`^^RtKDAifb!u!OPVw&bs!DVR;|%UUP3G1OFdQYlxKp06T#HSpWb4 literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_default.o b/42sh/obj/lexer_default.o new file mode 100644 index 0000000000000000000000000000000000000000..fce1b2678fe968e3381d80c6e2c1005cca73272b GIT binary patch literal 4000 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_great.o b/42sh/obj/lexer_great.o new file mode 100644 index 0000000000000000000000000000000000000000..6b6d3d0c60b17c88564460144f26eb914f1536ef GIT binary patch literal 3872 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 W$M@6IEc|`9or2(dZ&%K}#Qz7>+Cmio literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_less.o b/42sh/obj/lexer_less.o new file mode 100644 index 0000000000000000000000000000000000000000..55ca67fab76fe3232c02d08a5071fe50275f13d0 GIT binary patch literal 3864 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 ABme*a literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_sep.o b/42sh/obj/lexer_sep.o new file mode 100644 index 0000000000000000000000000000000000000000..0fc8b499c9e038ec6695c958f3853a64c4db740a GIT binary patch literal 4008 zcmb7GeQX>@6`$R`+1vZ@-Pul4r%B5}5|c)??~(>&k&EkdeChgfX^rhmBR;gboY(f1 z%bvMiCuvD4(`zdZS0ZhJKLGLZ2SSK~K%!DysXzhILM4dASA-Bs{{S4Rh(HAjZ58u- zyR+BxC81%Yd0+G1Z{EzCncZK#@wcl%#w3M-pa;+wI7kv5Z4>$xGTxvWA#dO;#i02* zFd6kY8PN>GF;6+3?CI0FBhzo|zI29?KqEYw_Hv9d$_>gAF~1qcjCpKv&aj=jYchh)|_cyi+87}r$~>jgng;SuZwrQ zRCZJB%+JRY>D>fgXqqR3KTi98ZUm(HqTW1o;S%k!w^myA1&9}R{rq{_VWf-cTIu@hZv0Gg z6Is4T|Kwk(40>aYWt%UL#dAL%FJIB6tJs?6FWePlbCz>&>5ZSJKl+m_Jvqrj;qam4 z3A1ijYF2V+Fg=(~?kHFBP7VyEp$zWXJ-F*mX4lK9s(H$+d(^Pag~2jQ6>S8j=1$fg zoGGRD?6&8bX~4~PN{-3KatE@-!Zdhc{1BVUO|S>IHGL#0ZSPm;yZHGBVwE|{) ztX#7k6GMU{ZV04@4_)7Q27^kfF&Dul6g^XNO72`t>Xx?0dbtuysGDQmQV+@~2P7pHiF_ck7nN3aFeSDH zw=*yZ*B)skti)*Kz0vXBd+ zL{UzH29!rYx$+pOsx(1^%G02l@&(Y4@>S5V@(s|4@;%U~@*HTF|Ji1(e;MiU3mA~& z(r>{eE9p8G(t0e2omKkWobqOlDo`Nnlbb>s5u(! z2@*2baHprTIz;!SCGLN~Jevv&W3PSthefI%?Hk#b(W$k^lHM7MM|17}@u7I?8wd=I zUVe$G;2dSdVRUuI2$xP5alE1M@MQWpk&POCZ=5G9w?B8W|L?ypZ`l0IKhJMo;i*?% zIQ_miZ@b&NJ-zg)$d#A(Jd%i>_Ml~c8)kv7=WRQsvag(S~(aA)W6<%&pVWKJv6CDKdqO(CCQZ%=C z;8btnMTe5SsLaBPP6nAMS1}`%n@n^9gjW$NnFi5m7ttsmGLg6N`d{@6V&`eE-B_21 z8%-GNnqN`r;YlW)N=S)lP&+Fo*#ggrD}=MQ=D!Fm8%sPP@9*-?A5I*6W%eXICF#vr z7pO#Ypi332TwR>O-(Kre!cvQNJtgd^%H2cnUvIG=vQzHsYBTS-ADkzo*2|9%5Kb3f ze$Vc?LdJ0v4?7gvv4G4%-YW-1iAy{f{ufu(e4cly^E|5N`GyP+Ww@pumQ z=Xf9FWQOBX+5pA|KI`eKTPa-3exctXI2diU`bEL%_bCp8 r-$-mz+13u7UWfK^X3XO2Y&({Dl6hZGqheL?A#N4Z^>Dwh^qu}Ma<_Zm literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_special.o b/42sh/obj/lexer_special.o new file mode 100644 index 0000000000000000000000000000000000000000..497c3be6c61cd53d45b2b736b6d33cc78efcb393 GIT binary patch literal 3920 zcma)9Z)_aJ6@PnsySMkpcNaUP2?=mgLP#p?Gl@YKnBYr%VQuWh^`Fon&~iR+?1RhR z^>*!qe-({O#bJ<)O5qEFFMI+?;=EsN?@QcsH%ZwKxi94D{TCM7LNJ@OFRcH(1A%z zDK?^6mS-RJ{JyVGwEGM_B~TvZn2+xf#p#YQkh$19#@e z_6EZg;8Z2vYx;$upc4u@ECal9r6|m;cuP&**dC*Cw&*u`1bBt1shT~{_|5SJcrQwr z%f%}>hbla!6)!6`iRicTd;ciodjYwS=R3siTCn-?Jao!yi7drf$Al{_kM}@yxhQZmx+f%Cm>tni}2w@3%>Wcgs(U7mi!hghw+`B zHRl{DIn$OkJka1v-4ZV&jc)>vOY*O%KN)fho;_>f6>|}S%zFMbwA1E7 zFUI(`4aOGUOk;5Q3@`Z_on~=@zo7p1g*o+8!VK(Xv#w(zmT3SzoBD&X@XfZ=W4sY! zkyAvtSI*>p-5=lHJPzM8na1&ZQ;+c`1@kc`LK5tTzr&1g964>)b4CyVN4_|6)?7HL znDtX;{cS(Wg+FKR`BRQ>h0O5qfsxF-U2{tnC)3;2-PN7hRxINx>+J1@($%x0>xS** z){5D(eblb`+;XdSu~aB`6)8LEVsduoNaeoiLbhjzJ4?0&SJx|eHVx$W<|c zXgohkckUk>pna1gyYpjo`&d3VLBsj+alf0}Hy|{YKbhP=k*5J)?9T1EV|+L_Zqk9= z7>$qS_YCHSNdy#xLM6weLfQ4mv&tn1*B8Z#R}gCv$EB=Mu1$7m zYBH^FOs-MdQP-icq9)_T&RddIG#Hcx5lHrW`nlflx~M7(&rPPal0(=%0f_t8VAmQGz{9n*^vUWvi zvk~8d-Y9G9LYvc+i0(rF96YqEql4&%K;gS1oY{zBFt%|Q_dCIK#W(~J{TWyr6 z)$Avp{RL<9B#7;c!lQXEn_B0dM{C4i&4=eRtz}0vzP1(8AvGiwr73hG#^qXL8HVI2 zxz8^POK$vFcu$tDI=;O1t9OfQH~#uRf7^IM%f9vdhi^Q0n`^YHI5=Pl5OpnrqH_}CwTehj)5#JMYi=0SB3ryhd17S@5#IEQTF)JhXq z2AepcI9J>_>1^WCkX|CGFmaZpi3@?fxHk9|L=(w_SsSCurh{l!1CN4Ya_5bo0!Ortui@5>IFn|ven1l?HsysMG%F(ovPDG3) zxy~kdEUhrq`SWr6Sv{sj zhTw9m7Khf}rx{|ZK#uomdY`5OBE_B_+ztx2bf1Q?RR_|#k;R%rT5?F+fc4g+drhBq z?U1&8NQ)tyS3){=c%9gD>a6-3-N_|`&+mN3*Yzi*+$!bOQbO={>Mu&kzjjhE1dY25 nDqYv2^Ci$YPSznj%dY3xN63FRt&&s13*3}2;Uykdex&~gDFIWt literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_var.o b/42sh/obj/lexer_var.o new file mode 100644 index 0000000000000000000000000000000000000000..0668ed3e08042ba723fdc1f1ed562bca8f86a402 GIT binary patch literal 3948 zcma)9U2GiH6}~gGGyCh^^$)?21eQ8LsIb>f(#UGv)SGz2+H8Jmdqb!a4V(4YyXj`u z-57O8@V@_^Jn&;k-vv_OzrM38tW5=i9%RgtPzrYZupeTayQ`+YNa z67Le4T=|@H&$;J*_uM(>-n;(O=bwDx7edhl7{~`&(7_TQw3|Q|Y5a=zTEHE6f^*P3 z9hia?qY=$C>()};?YsI+`tZyZ-RrH$4)M5bHtOO)IqmsSn&zx^tTAua>Q%>Vn&bDS zruJTT@o*a46xx#E%5_{_*T0Nct`r<|C*ILEZy`S6=Gt4EhZkS|*s-d$$avf1^YDHl zF|HS{WY1MNr4w&euKowP-?K6=XYl=G`mP#ZHE+*bwJ+nH>&W^3Q2S<~T@~*{zTkw| z8J~wI!xPuW%P%aHEz{1QV0d5J@0&8dQ5n{OYsTl|RgN8Z65JWzC5g91;t@3~S+ZwMGdq68Rfw(fJS3#?Rp9YXc@Fg_L+-${isoDu*>xwFX8V1Rk$7Vg??Z_v zRS_1V==CYR^Hwg|4r1qiACq|7Wib6+?(FBkB0heXI94c$Ef#%!J-IrOuC}KbA2Ff`Hs`bbP$KFhTm}#X~PLE*p2Cm@^oKLSp6(8U4 z8ds$EN5naE+j>t-K{$<-R_-I|wEFRYbRc%@+^`#h^lPR+SlP0+w$@Cqw$iJa<+p~9 z{xQYVoycYn?Mp0L)mo`yCq{;bhlUed3uRnMgCoOGhIVWl`o>+NRxKpU){<3qxw)9H z4i!W)SHr~Q{K?Ak*?e-xwpvkGCfsWEeBBb`>Ak63b_Oy#u}@5=4~qK^OpS~ExqZ9S zQ{tYfbZSOq)6>&#H?@D<(I~%{J1~!8HZ`3Qhf-5w`e1s`L@FzsU>Jrd z*>#aG*Xp8fmP-&dR}?CC-NKNRX07y)CCJP=D>Yxm5ps;s%N2V*(XeZ!dE1&z5YXmJ z$%m~_#1i$&4=fw_uB=JPLro)vgWxdEp3T?u&RT%rmq29RM^UUQN}`Alp}XWCVIb%1E}jlm8OYaoP!;0s(%Y+ z?+S+j6o?5r1UEpq5JH4{*R2%pg6~8x!AEewBF@i*bBqUdg!w!^A|mdlK-=vKhdZT( zo|*&mDR*lRKnkr0rf4>}s_`d*rkw=$X{W$-?F_h~HNpMbPrw7()8IkvS@4kdOYpGv z5_m*=1-#39GKKI~Qx3g>0X3%l6++R~Cl}sz^nZXuE8fP~V>xg`ee!{?Q|r#V+L2jm zJ--DP{`2(r1wMrc{0A(!2KF9EyD9W%h<>dn{1?b=@Yed&0TKQ?G~Qa;4eCH3ya~O7 z)HbLCaS;jbLjT|J&~FJ&p!+$xz9aq+y8b|b*n#h}e><3=1m+-uKLi^FDSJaB5dF%o z@EGKCG>vgZ&frdz6jwCSb2h!3D+XVHn&x1SKMSD;fgqN)(OL zT$}sm4F3Mj923hAN_)%kXrD_{=Um(%YwPi^<-;4E)JI1&K1T{JZw(i-4;MG_*f_?r zBVm#C;q?m`jI*>U6>`CJfFmA zYhKcoho*$G6j$OAf8YtZ&?b2P{Gyvy?|h3?H2!0CPnTPwLL}jm@o+Fe)l zQIYbMfa1gQK2-$W8xo2ZQ}jqEuwM@wlX~x{9vIbC<6b=qO*a~P_iK7Ty8cPscwUbi zzt%Nq0b^PBLmH!cpHZaAxL?2Zbv*`K*J0h5^UV5<7}yN!*CzGwsIDD`%NZCab#)Rx z%lggehM+yFE5>)!AU=?IhY<=f_#z~t9DEiMhiQ-p99tP&l=@Lf`lTW983upmO2hfu zxTo%r`YlpI(9d{AN?r^x7`(>rI#t}&q3`U_aZk1R-`JrGbFR*REDOb|;Nxjkowwe7 nc};6+A&=j`eEsR?Jj;CE&3VgtYT@lZywV^4cUbl;mJt5~WSU#P literal 0 HcmV?d00001 diff --git a/42sh/obj/lexer_word.o b/42sh/obj/lexer_word.o new file mode 100644 index 0000000000000000000000000000000000000000..1fe43cd13bf29b051fd5add5e442074ecb9cd5ca GIT binary patch literal 3916 zcma)9eQX@X6`$R`*}L@@xU388$X6;(Ns^p9nTj$ z7u)>{@RWPv@_70A`LbiX`Qvo&Q|oDqhwK{v}oZUZe1yxI#S7 zzxjNj9k0I)@5~kA)o-6)b-mLH?{{hgSFR8bht7j+_ph6W6D3&hPh-B^MBCz9s2s;S z>vqFES#pcEJv!86D+Ux^N-56*k16>)@=v+khUd)LGgU;_A7I<9_rbKn+pF+a6rK`= zCB$6NCJ)YAx#W6??d$!q!pkaWws-oY&whq~+?OOxEPtcv{Cd<^)OkwcVq@;X4{-#w zxo`?rbtId+F58~WE&emN@OEEr@virBi;b1sQscec(r*418_STEb1#@;uMoMVyH-{R zx0ron;hac(pWZ&D8`>8}xI=^rQPNR64Qj5AO2-pW{CGo*i1rE&M^tExxpv{d+LkQuab_ z;Y{DR{*>W?PmPXF9ZH>WsDiN&+lu*g|IXT+aBSGs>iN1OhO!4TlcN*hqr->9c=m|6^_Hi@ zRCwNaeu$D=7x{9nF6wr<1XlA|q2ksZbSZAvN_RMd#I7@a^HrQHPYJnPac5Hvw^o{U zonnfBE}u`nc7?foRn#lraa`d0yrwu$I+bJ|f=4*In6Kx(xd6effM>z3Xlt~u#Ji;t zPnsL!YqTz8t{&2ixMkg7-H7xywhJS^3CAVW3)3!bZ-)_Q&$ifb_t$YMr4+hS4R_%K}g&A!ra?2j)Wv(b3&Blhp~^;ckKt;MB#uZ->+LhiN4uJX0bjc95a$ z_nAk7=U$(J7}9nad8&;Ph-UD?)D6BOhH(lsWPA@)8ux*k#si>X;}Ot^@fc{-coMY3 zcnZ`qehnHko(Am<-cccf*|e$C=+G0|KfpApKRo{zPyQDuq`9s1JuwMt>JNW=2cOp~$;nkq zThKZ}X`Q|`DPqw*XnzO`xg|P`<^?oEN5e5R!;uKFBj03u8;Gez=t=auAcWTrbld>8 zUfW~s1OFLSdpYA#w73#2!x^~>Z_)cWWAs-L53;i>d>BkdqP>`X$r=*0EHzkG+V}jDI;BUi++TX^6tRNy8VWAtd5!3F5J^ zk7>vL5GpTBJ|Pj*D5`ID@giS`XJz`&zg@oe-E(LA@2)>s+T7jq+Rj%CYd7k@tXBH& zx!+30PW+~jdi2gm-hXA|RlD5HzrXWq=g(l=-%yz<|3yt=(M*@!sEir6yMlTz>Z7Pn zp?dLwEd#a=9EG8UBp7j}V)&?HL~-0$m`YSJx0KbCQZY_k9||*#R$RLp=tU4B(^L&) zuF{Ip=Tm~hkWh_`mfn9xoowPY+Dc}UH%36}St^CKD@ZIOv5f1vO04E{D`V5^HC!cx=D$2&na z&Vj0x+(Nlg#8=y;M@gg`wQ5@F)1_SlyIVE2+iPj>md2gry&JuAMEc|j!Bd9h!xQ3n z__k;x8`TQ|A%yuux`_I>BLpL%$ymon(lSS6_n?dnO5MC!#vxs8He>?4b6T1+@{8uI z+zjcE_4+y>oV N*T(+}$1QTY{{u2+SN;G1 literal 0 HcmV?d00001 diff --git a/42sh/obj/line_return_toolz.o b/42sh/obj/line_return_toolz.o new file mode 100644 index 0000000000000000000000000000000000000000..ed542b13be4563e24d6b86119369c3c73f3b3964 GIT binary patch literal 5768 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/mark_job_as_running.o b/42sh/obj/mark_job_as_running.o new file mode 100644 index 0000000000000000000000000000000000000000..c4363f82a2c9780526f50da07d6d80e227034513 GIT binary patch literal 4432 zcmb7HYit}>6}~gOGduhA?%GM+rcO85NgYVM&I4*eDGtPC8-i3q(}b#FSdZ81N!Po} z&aCT{R82@!>Kag6Qwdar`lEsf@eomgN~j2tN;IGXBH{-RK?;4OpaxS!aT_V-`)2NJ z?5#t?)t-AE_uTKE`#5**{_4$FFGhq=LIM>i4619Wav+qeK?^iqrj+7-!$a(Y66nAb zqz)QUOw%n*yT0t}w~g$-?UEiyvr-`5vSGvGNZ>@eVKZ79wFR?d{3SJc9U&qoa+|6yseUUx4=)33H`* zc6GeQF70@qw~Af$5ZmW##C-1q@&JBW&Np|N__!`e9UX-gQ;M95SZUrqZ z93nX9OYK)8?=8%{SeUtYp)gCjFAaIVaO~cB(Q*6^^e@bg%ok=wVP@nUM9^@5VLb;c z99w|P2HyqtLVw}t^Y<+*E*54Wdag8`=A|l402&7V$owmhEy8bh1Opa~!m;Ns!ofIj zY6lZAw|n>PAI(jb8jfA7=7t6a2L^NfRt2}l=Al6-1KYO_Y}qKBhLt~98{KTxs&1oJ z$xjv=cbPDlMaOJ3t5v&N9}mv0{GvR%b%2;3y6Xmwkof)%KXMtFEY* zA=K?L)8$?l8#sh!prU=-Rx}h{w_%SqU1X4Jj#r9hQK?nSIjTA0>EvEhx*5?@LH=kqS#Q2z9MOABJ3EZOFbcB*o)~7nPP%5pjNoABQj+Ht9V^$fCg;MX0 zzb}4$;sdyMLYh#e;g(K(UbZh&wGKh6z8cK$g_l655=zD6gb>0=icsp7PAWr4u4o_B zo8ob_#F&)vmM@+FiI%TM-((9EZ7D_JKppEa&<*IFCQv+n6U59aG+mESvzix7=LV07 zeM9}D`A4l~W3fDxAf_+NuF+K-=2Bco6_6p;RkbX}sr}l=8laMY@Tc`FK#%~}I zS$&7vn>MyUa;WvHz1<@EAR4u>{vy~M#kKl8*jGT|f=>JspwK2=N0+A|>eoe|0n-eP z8?5)BItx8=b>wBR?nu@+4}L4mkuC=II<${bTg6Z|L8?+)jZj2PzY}r@WUST8U@@w9 zMy~;j7#gwTL#PVTxRMx#@DeDRP=K2trl%&M8i`K?Y6@yPQ4G`$sND%0>T95A8fq@_ zAjEDgZZrdRDDhaJW}yy?BqJ$+q7fx^5xgS<-!74ifid`~p+vcYhLS!?7V&z_u_dZ# z8{wsINA)cj^q$BMzy@O*jh}#j8|K)%xGc{?J4tO5m*qKVKc=>sJM;%=+{@SiVmJN_ zjr$PGtG(A6F9g~kCSv?8(6*?(eXU)OZB={wg+_Sohp3{b;HE3uDaiUSQJtZl%Mew` zz5qk^d{7DP6^Nberu~Z&QLr2z-@z5}zDwl6^TD_IkBb9ec;>In2k(%B4}e&f_NCt5 z7hjLX|HlUjDprHK2!_IUf+BQq4WB2r`f=h@<^6}?Q-IbaC22YObUHEhr2gCo-9N=1J$&k}zMp^p?1q2rd-C{y9ynqA?(uK@;*Hav{@D{xAAa|R z!6OgEAK5+Lb5*9ap{cG`Cx&j zKr^7Pg1!s-Dd@MLbD#^L6jpm3i09|SpgTa5pd+9;5O)$k!Tsq2M>z_jiC07?2!%HV zO}sj|QYg$>nwZA2BNLk@=DYOb>86RNUYdATXyW0KCT1y3OkQc?eL)ki5ou!L(!@-W zaZ#j+i6n!VlP0F4?8xk=7t>IB@sgs6Csvwx7tzFPPIhF%(Zmdtra9@wbdn~XV|wxO zkS5+-H1Wcbp@tyR#A`-+ot0j^_oRurO)qYj?D)SHF0WCFL_;@H$k*tMF8m3#lY(g=2t}wzn2u zM^>fDhey8YH1bl*+uMfTv)tkwYIA`hZ^}O$E4;(-V8d{H#K~9Pzyv>@eh~H;M0qs}3XhCDfs4vDp1uQs1Q+yEIk*h!**d zmV&0;s70W~AgSV|0V0|;Et bOU{=w^|g|NdHS1@vrh-BpqMMH7~1{|2W+3j literal 0 HcmV?d00001 diff --git a/42sh/obj/move_to_line.o b/42sh/obj/move_to_line.o new file mode 100644 index 0000000000000000000000000000000000000000..dcadb73ad9997315af1bc166185e6dafa03d0e08 GIT binary patch literal 4976 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_dgreat.o b/42sh/obj/parse_dgreat.o new file mode 100644 index 0000000000000000000000000000000000000000..aa3d9954727d5c7b74c1e1ecab202ef8eb06ca26 GIT binary patch literal 4616 zcmb7IeQX>@6`#HH?%ny4^ZDD&r(5S!O?*z`w1L`1^t@+%X@7DGu=RLE# zm#-#iB#V!e5lV&Hs{a%eK@e0F2|`d+T7?pnh9U?;Livv%C`v^G0ir6RRn6}=J8Pe> zDG4LLdGmhr=FOYg_h#n&+y7kuFd~E&7N|fqph+E7I|$_-&@F-=Q?|zaj#C_i63DPA zNOc5JOw+Rtdw$!OAMYQ2d`=Epo9P4!?Qz;)CxwU+s1Ya0f?}FEYos)0x}GB;)7`;&*i)ZF+}U1cam47|Tp`YH-Ki^()WWW5t)&6Cby%oyd zzwgqX^lvhgt+w}-DtoO9l;Js6wST^U-jT`MuJ@g&}5r68NSJ|`1%~1zm*B@Y- z^Us5m%HB3*FNuRhg}6lUdB#s?!TO#R?@blkGu&4 zB+@Izc}=9JZdI9h(KmsChojffhN0tE%8x|BFzo37>-D=9`V6j>w_}3-Yk_am8?lu0 z>GDMY=an6KSEQ%anB#N0dodLHZz#R~8}x7LJW%e$MG0exoU7dbv+4d1(o+`(KmUt9 z9u@6-_B`=u`$5Zb^F_OTOJ`SSSNoc50q5KLEnN^gyEk@jSSws7o0`lxuI2d5%#Ar# z#_P7HFl`DKbJ{$Z*<3nR8$%wZ+jx+dcreDJjb$xt9ahCCPcPqdzS5)ZvH5G zP?;X@l#GL9ks#zk(H?6r*=~N!wsP$>SFlDs;pE50J>hy8hqeoOOyT-W85K6K&H`|| zn6sb*FJ#M|Z868uA(@;;R-7W2@iP7p*(z~}Y&ljg@1V!$uHv@H7K*MV4i%joIwdRl zEIXcY#Ar^qymLuj@c`#69b~WP4>YgX+D?~W)P&|%oGwK8tA}wIP2_d45S~wAp(;i+6 z3!%HKk-`?_ZY>i%-ddp`UPm(fhf$QtA{K~sWGFj*ChOn@F?(zUfcC_vp`g`ir^&*h zXD0Vc`Fp4#jbD(`eJ~Aa-`lfNP3W27cPP~t(FbYp5V+RhVg^X*QSzb94AD8UFgV)qXy<8Ee@Ca$7`+A7W^9Uu0DYSZo4J4`Xq}_<02Ux3KSVP^u~koi z>Cwo~!R{r}9KRndX{?L!liVcKNeebwHnz`5QF0-TQ0jstA~O)TQne}iFj&%98QTqh znl7!T{-c4kCe%?AdkoS>j$SLh=|yuGkkJx1!J@`;sUhv(%h3md(f4sSV+{KGC6xJ~p80J3wMF0g%gqfpe^6Zd>>n;He??EdwP=&Q z^wyi*Cz1;eo*h{8?xmNv>Tmr%+qAg+w|^eH{$cHjpIlw_kJpZEe!uJFSL2`g)`2tM z_}Asd+4g6TG1TJNlx3g|pdFwmK@8F3pyxr~2fYTm4Ei(ZJx~k|F9D@M+d)I1anMsB zW&>0N)1w6(g@H|ok*=Wo(ImvEZ3Rc6GlZB5Trdh_iV#Ch4P<-~V#uk1j2S`0yc~)DNZ~Jm<3L)^pv7LUf6&K`l;W!t zU#2)1?HOkkM_bgfQe_c%g(%ecpj#-rvofF1mHK?KRLYN3$-=CR1!0cj+37jC(xhx= jaychEq1s+CFF}L>{$Wzck4i}nN6hf$h96;g%ZmR3_@1-* literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_dless.o b/42sh/obj/parse_dless.o new file mode 100644 index 0000000000000000000000000000000000000000..8828a2d327a3b4c86e16a33a485a1814a3653fb9 GIT binary patch literal 4540 zcma)AZERE589vwcy|&}TalTX15U+s(64-&zHd{kS80k#PB*q$wwpDkIeUlg*JN3PW zz@RJ2HqFb#iYC@|`_T%mXdh}P?SpCRhZyS=s!l3WrH)?{Qa6ohps@)dG^%FLbMCo` z z{>0GkN4;+0@jR#aer_ywc@3Y}p!WFk#f*e&`F^>~TZnBksA>kW%){eLkBybA1LR*G zpU3xoMRB)$xx#pnLu&a_e1RzER1_Cge3$V2)a$!#e5G_@!m>ZgS6B1AeyHBFJBzGu z%QuzI$PjDe^Z3;35O?NFPfzD9vyh%*cpq7BM8!9#0{YP%<8%3nWBcR_u8r@rif@(T z`}1A$$@r$znOeU6HGH@3lFvCbecSbZSMeQJPravJ1-hha-iNzhY&uC<8((+W9q6t1 z<>(TTYSr*%ic?spW0ngCbA_yF?%ZBIBBl7^3cLtDnUYQJxdOO`&zdyHOL)8P0MlH4 z9!x5}t%~oa$ER#O&Pmmj%G+=GTtPC{uJPJ&JGMttmA|ECuk1=yj$TVu%9m4>(Mzeh(QB!>X8u)1 zFT%Q*n)d}jg(f*Y-m>jPMkGgp*~y86#eLaya`Ps8 zQb<47LF5XKNZXEZ%rU2AS;AI2=U7uBQ!F@E!7=UJVf3If9ey{`C2R-@!p;{96Y+Av z&P^1oY@Bp?Yupi~+{C0KY$shJcRq(HY*#5#QQ+q>54=#!TJS*>vSlx}xR22xm7GRa zoFbcc((Vx1DszZzm8@*8gdSJhN*6>XU$iZ8uvp5XQ>wD7GLz|&7|#lu-&KlJ+|N0S z`>g^ZR+{T)ytIYZq^*v&=>BNT=!!OJ&B#Ar0${VYway>?ROI2vn))3rpGJcDb>UOc zjuw2DHZL>vRl*;ABoe`nG8zRPg6&W)1ug+Cnm-zekWYwk1AKS1&=|n}tm9^mbW}Nr zH?U#d11H1{A?n3?DwJVY$=bUmEFMiBpzYZU2dz;%MdkOMn4XmOPf^2~JSVODKn?3F z?=M;b--*3{r`1$MAFN$vXsy}C46stiX|>Q2dX`ndcm>M%6{_GHsPYhBZ-_UgxUV^U z1bTr`tFKptkD*Q`7|`=s6B7urk<==1DaDU)EoO z3Wf~MWUK*ftVb1m2-SH&`aPj{pgQ&D@O#jlSYI}=E+_sA@O>Dfb7Em|wBeBFYpAZE z(`X6Zfa)~*!wmPwba;RZSb^3VS`T6YBKQk5b($S|J)5E6@1c5#v_;lI#f>b0ApCh)n>c!% zjAjd(djJ{jktd--MvwH6{GZ_HoHzPD&Sp%&U(a%YW=N+Q0Kr*QhX4j24IP8(3_c>C z!5Q{#B@3Sc-Gf7Xi4|C<5MOW`pXK5c2{z-@{lZWRy?laFu!CfAZTCKK`1$8!Ol+C0 z&BvM}78nER40mKwiJ#p8ug zJ1P|fPdP%TAPV9JCv*mt8pxB15Gw_7XA$ByQv?5B#s-m%%sP@(6?LFX?kadOk+s9S zg*Fq@V)en$v+&|f_d;fFkZfVW`yhy+XzZK5&oroOxEO=4Pn?FQrrnA*pw>7CL|eLh z;5w1Xm$SIgC(CvzsjOtKf8fF8h<(UT$`8AZnx>b-X;2Ri>OSK!y#ZF(DC;3;K*nC( zZ%pWQuL2y=V*m#AMz}>`wGHZBBYFfFfHnYzBc0d1s`ta{8PR>Agx){s$lapSJ)2 literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_great.o b/42sh/obj/parse_great.o new file mode 100644 index 0000000000000000000000000000000000000000..3f64649e9de6229ad08e84231a9abee4a26e6b02 GIT binary patch literal 4616 zcma)AZEO_B8J@lK?%w&#`TU6k0lTpspn^L-14)h)Q%ny-C6~qowTYJV-P%4l?ws8{ zz6uGEm8vIKC{acEmsY4jN~@+)OQ@oJh|*LLB~p+gMf_@0r5{uUl^}#r6NNs{?5sa7 zq%iV3@4U~v^US-m@668mga2Or!W2Ra3sjIg$heNG3xaYVJT+fk^Wo>$* zZ~Nw;TLe5O6yKkWsji?A3L4Y_U$LB%a4p~av%H0PGBR_tY|rut__D*pj=hikv*Qc+ zeyV8hm9J15DRW3I-!NYw$~hIqbroN0lfRDWx?_A!wlr$HU*_wnS+CRTJW+MS zvpE@JZF~WrdL82KeA)5wqHUG3dl}xBp0`)UmsSD2cGviPzVh&H`GRZX%PPJe#rNqw z^2zwdv$6hW>92^7>w=?4h*-VkXYd`6 zP4MTrb{d+;7t>@AGP7_Bih5-;yYAW^%2fZJnYc2TsUEqOsa7s$szV=VCWo$NCY$+J z9l8YTQs#V!0ilV`=FG&QglK%88F9Yypcp%exlmia6hvty>Nwxq4-C#S-Bpac##})~I7=y<|?L zhJd-L(f#G!`D|+SN_R|1Ki@$VN}kBNp75+;&#`UcDqZmGy&_jGd3MRO+`=LBpt3xE zQL+xUiUeU7%caq-O35vZmh5~N>5BG>yW!xz!a{p6saij!&wAgD(7wZ zAPU)Xr&`?M=#WZIBP&jk&w5#Zh-_6jM7A6|UvSXlYgg%#$Q8@3E%uk4JUXSS_$oJ+ zb;L+sxcuT$yz(B-S>9up5V6vHe#T2%XiZvgyhRVk6UO{_lh%yP3?%_JYa8mr@ke5h z#uhbfY54~7Hmr+~g0{5agSC2=srQI*{IOUJd(CJRbTHeYdWo*RjNhR$ z-$qr0gt{ZVLv@9kqlcky6KV~0i|BJ`@yrRe!6o{87z=2%hq@EdHv?;KsJlbdn=$kp z16H@tY)A7rn&Bt)m!Zsv!I_LjfQ_Z7%(bX40MhS^d;ryeK`2RvB3dOZpOK>VG^}A-%V7!gHq3|V+8XJDN*KM-EzliB;qqSaxJG;#B9b%{N26`dbxs9u!Cgr zZU3`#{p%klnAkE~p_9JLtg(b@$KFPn$$vK=ejeK(t#m};M_R+DFD!K2+4*@y9zyCM zSq!S`%VumzVhy?kLvGzm}{M1{r9JbuYOVg%xfP%_@B29ula2G(I3UW_wzlcescZd z{9M=Z!?(c8Y+ndj0oeq30>TtM0yzQsCFCv0MaUD7E9uo@Uej>yz zrXU_Egt+#Ki^mJ0c2p_|o^pgvLKMUePUs9OHIOG2Ayx|F&LYHZrUw4Mj5U#s%sP@x z6?L3T<|z=3AdR&{+l6)@p(Ps3$P4h|JoiI(-6YlR+rj5R^u-fD41IG>aM#-h-;g*3 zPfhzQJ_ohNIUw5f%>$Q-T(OeJML$(>os_atg;nbwnvJ*z-IV;SyZBYkOUu-41%&b* zk{n|q_&#W3_o@2^j5@q%*YiF6E05nU+6QdMZ~D2808zq?njWi<^y&4+fZmkW&9oje zw(4_WMU9Fcfd*vk)WgQ8UjGKb0X+dAtvA9g4y!G#&mYiZY4~o{n*q#4_e;{h^9{X+ zzV+J6>aNuCawRBNv18{{c){vK#;a literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_greatand.o b/42sh/obj/parse_greatand.o new file mode 100644 index 0000000000000000000000000000000000000000..ea85f5b23293978f9af85e523137d490dabea37f GIT binary patch literal 4508 zcmb7Idu$v>8J|6S_wIc5`TU6OJe(eJ^O9npouo}@ozxC?xwt`;61RaAZO?aW`;zmX z*4%&W@-F{a=yxMc!GUU z0v(uwR7)d@X?oVA=gYpnw}0Q>>v|x)tpwt6*u4oK2g<{N54maPtf7e!)Abx_HqE~K zdhfY&-X*~K9w&uz$ng1sIlQZj`dU9cfm*)cZqm7bP}>WzIRl91oJ%-pWoL&DBIs` zaSZeH%nAE&-p-lkp1#15JQ4M^q|d}Nz++1O4Ed+_ybRA8HHRJSuHV5l7vBe+3a>}u z%_uyj3QT`AkjaDdR><2Dv3$Pc3U6x6g! zoZE0WXkpR;`>wSDgc@=|HM8f_FYJfi4SK>Y|4J!dcgBlpMb@0uy~ z|Guv@lb$-?^R?gf@@yyf?78;~$wQXo=8JZ6dq-zSXL3WffD5U8dnc5Rt(!Z#HVW6t zrp7alYdJnMM;t5TW$au>R-^`Dc2gsViwAO<)Yi@JsF1GnJ|b^>BIA0(Glx9KvV^O6 z-m}I;wrG2n?U`==C|XdN9uq0!Aj72*dZB2KBqwY)KVn#Gi~%p_}5@-X;~IafhCMh(a(ZkrKy7m4kR1PXQZedhQ`G-I-!a1 z9Mn7L+8FsfSi)Ev{UZ1&hP0mkUkbDhp|;BCeb6?u_eL4b4v6=|WHiOHU=iac=^^ny z!`|FdiM58K86)u5xekVANT*2{!c(ZY4&gf^C&606JLMXjVOtMTxCV3&_i_`z1??2# z3-97u&aX(g9*O$p-ZWad;gWEIWbt+X+x}Mik-svrWwwHM_%4h3(p27e4rL+!r}^-M z#@oJ;jwlr%O&H)ho{IdSArC>7AY!xdwZ+dF$HtdW;6w}W@qFv)!LOg*Uw3)MkKVl6 zb@jPo>(g(Xzv)+c>a`VH?AF;=x1LB;A9`_M!+XDb{&xMf*Rzc)OYi>k*p-i}PWADaa(vuHJ_3)BbV)^cl(gT4#;3Fs{7BIxg+ zYoI6sUIj{lc7X;#qo4;tJPmLWJRVKpC`@dcnCZ&I6s3t-+YFAvyr+pNzzL%;r)XlT zsgBGqnwWB`BRkN z>nq?kU_2M9#tOcU$S{%iml+}WBjC6^cBoX`fyKcFi*^$nE75)zI4+p>ZQxiWBc=E{ z#aAm1Cfm;_&Ube$Is}E6(*jlCVqc{5a$VSdTba(bh3$OrFVy?WbYTwT?dUn#QAdiI tT+YdkjR)oeURddHMzY=1HQ!YO9*dMb8*Uu{{ko literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_less.o b/42sh/obj/parse_less.o new file mode 100644 index 0000000000000000000000000000000000000000..7a14b1466f52f82509b169dbefdf17d1e3d0164f GIT binary patch literal 4604 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 af=B`UizJsFm6jZgeBrGPKf7>`Mfop9A+8<( literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_lessand.o b/42sh/obj/parse_lessand.o new file mode 100644 index 0000000000000000000000000000000000000000..2d892b98bff1714d2cdd12bd19cfae54870b48b3 GIT binary patch literal 4508 zcmb7Idu$v>8J|6S_wIatoFB2Bhf@6ifAL#mKM}VL<%6pUlxxxsI3SnM5dK$e!tmS z*LO{+8Tp&cP4^@a%#Fv)%b@3(> zNf}~gd_JDqjuqe~3Wcm?<`R<(?<4d5y^612g=2kUd>&qY?5Nz}%J>>pe%z?=zP~~| z8DAlhti;<@f%mHw;<+aa*PZXZ3h!HL)&IUiJRCX+SsCA3DnI=Bo~U2iS6`^u-(-Fg z^K{K(?nEY+GR*@+z9V@w>}j1I6Hfq-DftuRpW5>ZJS%OE+t^*NgK3uE2fYe!ufm&C zcuEzRe%hDG{qvU1|jB8Db zWIpFwIoEVDr_h4RbeTp88~H7b(6jm6L}xMQWF~S}s*`Y8YupufW+Lqh$4%J8&So%# z<1qy)a{St5VbA4L7JLwel$<4r#}W;a$zf#0AyNr9;dPNxkzJ%@Td9nV7LPlM=R`7_ zcPw!tZ>P{GSznne`lzwCzENvJ z3Iuv!Y|{4DRMp=Sxizx6c7OAyYjLu55m2W6&G^9VEK~IxMOFQtNCaoYXb^M=wt{&O zI6loZ9UkKr7&w?+~)Dq|t;Rhk{jtH!ROZXR1I;gb< zx}xDZUuz3=wTqfy1TBxkR=qyh3h}!TtG=K!{$R-9NXBNEjcurcH>0`$lfF8139Maj z3jYb51M6i2>vG^f!+sQ9bPg;G_BLGNJb>y78ja@AdtmLxj&L~8=}|B}6#OMv7cHwI-C$8;TbS@yY3dZ*dUT7k?2z7w2 zEumqssIf782ly;Q+D!k?`P!C1S9N$4+IIHdDx(>IcmyV+HIe`e88=7|iT^3~p7eWf z;AqAK{Pi?DXohr}f+0AK>I{s*+d>b5wFmdeHF%zFdx^p|pnGtToA^y=vxqOak88QK zBEcryqjwF)(JDU*THW#2`V<@lfE!_OJ-`W8B( z@FT4W16;>Lk)JcScHDcQ2N^!7hbzxzSW{m;#B`o~MB zcfH?x_8XBSPaHe71g4(!O+9-;yCL-Kf6Y##YO*f zAO`EBUkiMu&O3BM@E!?>AHh@8-mkAit#J&H_Tj?=?}%i!n8L$6R&?x`(qfq%yKgGD zI47N${GvO!|M_O|Um|#{08&0edeTe<&kHinpL%RSsTO=Qcpl!H$CIF~>ovxR-q^1P`}KfvyIu#a#whAx@Myno^y^Kqwm}Px=!UCrgtir0$A}*I zs=jsvO?&ipFw~9c8$#dHtE409&4(!mjQ#p*v^K!29lUKsUyp(M^?Ku8IaW)*z6Ne1 z##4b>ETFiA&@hwk7a1b>SHN+744eYTDhyz8u*IU=1jkZz-wuu|ru$~E-H0i^N%8fH zgR#HyoZ<(;8({DYucu|Iz|~%+Z>!L6snFSXd4In5m+M0nx-iG_dUWk%+LmG>m9mqQ p1>c;-8;c$ZH=mILwif@j$Y#c+CifS4z_%EF3E_2WmZgjk{{?8=q09gP literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_separator.o b/42sh/obj/parse_separator.o new file mode 100644 index 0000000000000000000000000000000000000000..0635d658b93f4526996606fe5d8633856389c899 GIT binary patch literal 4300 zcma)9ZEPIH8J<0Rckg`m`FwV4Cn3(YHjuRB&LP3I$|bdFLN6v%lwwFrs_pr1?YnTk zJ9hW-L6Zo{ZIx3{3*u8kNc<@IffSk_v{hB1rZoLTDprdMzp6<6P%1!th!(4;q|Y-u zYx|B+Jn}p5ywAMz%*^fk&WvCF&zm2bLTGIQ6{HxkYi8+ z8=QjDO%TPhJo~8Uw|)DLy$9}Cv4hqb)gT|Iy$AwH-7fAAe5fs}V9(U&EZ1`+Y*~Bm zn!NqyWtV{G32q8y%<%Q9I<%_2%vY}FCEUulyUAOKKX7x+rO6{$Uv6f`u@7^-&Fc&J z9#b4^9Yti7!6v>`igw> zxx8Fr>-qvd^*PqSm#fvvwpGc^b9o=xZ$qswqn5M&6W8bSRc8*#58S%GUn#y3#W%f1 zKDoYHF5k-c&lbL8Yvl8e)vmbTE)~DuQ@{FCYve=HNy^ssJ*na&*zad!%ilFhp>(sleO7$1`OM;!l0^7CyUZ%{utH{s7BrJ`XM`z6r%w zQ+&!4*nTl+QwRB0E>$FB>wc3F-#euib58Ad^kde?-vwPlMEwJfiywrH1LUVY1cS}~?W@5xwx_d=zh@WT7|k|LEM*(@x3i7uOWD(u1pgY-7hx?eTd%&w9cs%@sZ2 zdO3&OLR3|eZ2_PolT}bBHCiRqftb+(Jkm;_Cxs; zLWFy@wpcVuJ|QAq@ZHx-V;s5C!5cq1u*yN4L-P2^AC}qIDXwDxqU`gPtb-eS`Ira* z?aqU6(7LrpsMTmX)!sg2a?ekp*>+Gr3uT54&Sb0yYz(0?x1w4Eq^}RZ3N@%FB7cGA#Cp@j zx}5kQzz<@G&WVM=(Z(!!?nU)4bQ(8@IsKrqJE8;n0Uai|fz4?BnARjWz=8Zljho10 z{t#vdI}>^jlpZ#IMm0i6GkybQ{t?v-4IL=!uK=BFu@9?Ibe1H z{Sy7wMZW?SH?ND_4Lw2U6o-Bv)^oJdv>t)Qm71flgn0`(_zlgza0x1IULE0Pxq9G|)T=$n1}P2P$lCmL8J-Qyl$3F#6M+&0q%(%dbvm*$4zV zBa3hQxA9`}LY$#2;}bgNyEKg@)H?Pu%4+^k^5GT4qq~oeD7;uTVLfT-2*`m3-5u_rZdy`p1Hf{(uQaL_TKjQ&Q>=)`sWLqf2yZn+OVUtY3a8+ zPsTeBKR>nQjo&?YqyEyL@_ic{ufKEr%?~?H{^;U0Z@qB*h7U&XKNbD@)AyWt_}#^g z`Q)R=m%tmvkHS#i4%q{_3vvi@0`fTIS;z~JMaW+v|As`c;Hw~M$W4%GND=Za2(tk$ zlCvKgg>grSfv6w`5+TOc0DXjDSQ28Sa>FS6@`M-=Y9OP45CcOEWZn>BA}KE>0~}=j z0AiG@9%dJv8G~w;9yAFti$UOWWU!2cJqCZds1hY@~J zhc_vjN)W=@eYXqkXk3eTn&Ai499PlvebQXM931{)G8X@C=!?PgS9}J(A@M96HSL2~ z7ix`jK(v*I2Hp($a=n0ubh_?3X=SBLJI2SF5%-vzmKV5-|9bgGS$TKhaRO5L`lcy;B%_C>;1vFvJ_vkZN*@A}f#X8pxB-Kw zjI*Im{5C>7%t?jV#-PF`w#`Cg&ATjUbniN#`akE}Mq24>lpazVivGq=ltx=#f5cf5 z5Mn`5;{sFO_^bQJ(6ibWR?F`%tXVvd3I!)WUz2V8%=n+bT$+`Z^u{;g%MAZV;9V%h F{{T>rdI$gj literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_subshell.o b/42sh/obj/parse_subshell.o new file mode 100644 index 0000000000000000000000000000000000000000..90ea1422b51e395c5555ae9cac4df8f303be6893 GIT binary patch literal 4644 zcmb7IeQX>@6`wtO_wIcDIDf@X(0s=*%MSv73w1F0aNCYb44TEnZqJ+zTp-=6C>{Yz_7W(iP)# zv(BXLeHiccnjCs55#UwTSHzpi=46Pq@r8J5JH*xTva_>A+j6oq4DUnpeM7}Jr~-QV zs__MQrSWOG!L{+NR{613;a$2$JQ?3?Hdl*xXANFYW7Wz9&6@QK;`1M#z2bZ)72emC z*In0$heIqOYvcQu%HMFluQgvSzFcVr^YpEMC}zGg#Pz^1h;V)ckqPtg$)s8NrE+NsdOMZT z+va>3Mw|Ip89QrMevJUnRz`j!%{QDh51$(P;>&$GG0bzH+Ogxlds6#s*DI8q)IhpF z-Jj~s6>(Yh4fI1uZ@M|XVZHF&TxK@wdbS%d%PWt2Q+BbK&WX$z)Lv$Ce`z|O&1|~a zn-bD=(MA*;Ut~RB_|~}Z+P3f%FZlM1$dw%5c6`e#96%2$%V&~hU1YyhLN1n^$yC|# z3X_hVPZ6$YPx!(uOiua2^Rq6oivr{Do-Ov5+&nrZD+eq$m375LUU>Y7lKj#`w!={+ z_d?DU&|0;1&Fy+!bJAGR+^V%9zawcV+q9vEy5>(OZcW_SxV`;$+)8!2h$z+eb|mDc zC8EAo)HUChNZ{NUErJHoWncjWj#j%?*PKWYPl$LEY`3>l7{DoP;E_#qRT+rm$oSw| ziOF-_C~ji9p_l=ab@;XjETIY&+I6kTa@Y} zNA{ej)S5*fq+O4IYi%}1(5G3|8%M#6=TJqDqv9(i(i1xXmWs5+9|ylcRY#;p#J`Nz zJCr(M5FE{?(f>kbxb>@|oU;sdxBh)-qA`Ob8OxzIR-uZn zNA+8%^yRVFz`FIe_@BTzu)btqT@L&v^t<7rb6{c6+n6BEUQ~?FXpj8|tlQWaH=yF% z%D9CSNTKySrOlXth<+Q*1jR0$iK54%KLT4vO=ltlmNagPe+vAsRHcdFqO}LhXJjbt zhqRMYKO_;o0P%L3cEs)iOB(Cqp8@AG7&p@XbD`85>8X$34{0sE*UM-!XmVP{vP2Fn zW~`PL5`PW7OQH8CIGXVQ?Dc6nXofVJh9X)<^(82y+hP^4?&xiD4W4J;5K*`WG>;B* z6OTY*e9=3&mWwMAZ9{5)e%M5>{6vt4U-Cc~eCOA^_=_`4WtpGgX%I`bFXdX_ODG@5 zh95WH&>aLr;U`-Y2Dpw-2|sSgLr^`4*erZ`@zch!@f8#}!@~b+Vdb&0y~iGGJ$K!6 zZ@#aTi z$6j2x;U6as-tvC`p|2#qaP*;LPrh?@MK1O9!Hd9U7BQ7KfVP6TwcMIVLC=D|2RZ>d z3wi_e9w?50uLp78?*NT~ra+H?cp6|LF_(d(FtMp(rYjXwlqzOz7dQ&@o~pg5IAIj# z6je+$<;eV^ibE?$<_uL#B4x!%L6YYODyER?VP?^o$)-l(0iud$ijNW$7eo~=7v;#) zK@|^_Qt`x7#bd0nc>7SrYeK1bo~XKT*@{;RRlI2w7Oxkoc;l!bc*{}6Bv&dPaH@C{ zC`a~E#YI*sZXZ=VX3FvZWo#7L$gG1$bx|^bmXt7&wFCDGZ7!)L8>6vrz=|VX4?6lD z!B9f4;pXHMkvp5z^IC3dM0^*$n)ZHk6KaiPfV9hx4ZIw3#d01G^-S4wGfK)7HV$lF zs_`E7GV&YliJHd;9w@++?~e2ovmr1;8%I#RFCf$lJ`)0q;Gq+=i}sxD2F)PhgXz?@ zXnJEq>^pkG7}eVb_1GXRxJw5VVW{ literal 0 HcmV?d00001 diff --git a/42sh/obj/parse_word.o b/42sh/obj/parse_word.o new file mode 100644 index 0000000000000000000000000000000000000000..22a0503cff60c484e7ce242fd8b3aec0c2722f98 GIT binary patch literal 4296 zcma)9ZERat89vwcz1NQO;W%lMu3v_Q0nzds?w~l?2ICbpo z-s^tRj-g7^taf8l+4#W^il$Z5B&KR?KL(m8q8gwHQHctH#E+tFsDe(cQw0$dEzfiA zxvuSXG)I2#`*Gg$oUivi=lJ*k`S7|agccU~fFhuI9iJ2kWhrQZ#?L4lTl|XW*ajug zfhkBGG@@9RXCLx>+1GdP+`Idx9!Nh_0`b`Gc>qZ0h0hnvuf3!UL+opPC_=1?2iiMIyY@Tl-=6m<606eYc+x;2i^44umy zKR@`bUyU*$Q{&?ge=T*ucHBa_l-fElI53!6mn-5F*|2pG%D|?(2Zq)Q*U6>lvyN*! zKC=#%o%}#fq$gl<)6)mbv-xa#)7|cjkZ!VG6iS}Rx}NZ?Nzbuu;VNG6>^YGumpr@V zS#IG7YVff=e%ZYJx9sl0G`tC76&e!Ik8C3geP70^1hHSJw`xIJMkYwy&O2)NJyj7e>zCEWg{ z_`UJ9t-HGJZ$%pFBBV^ax^Nq8YEbpnBHVsoJdQv%Is_fe9xxw5h-jA+yL9CVgr2cVK;bGIkN19qSDp>$2m&!2TGT=CLqioLkv^x)my;ysQFW{6|^jguLVmO zcg2Rl|3=dQ5oRIn!}1wvYGr7@nc3Klh1Ne_wtIkuh-T7RCs8IQnUpJW5gkWRBOm=$~u!)QJb z{VrIad7oT^S6DYf6s`f?%~5V*6&lB9Zs%IoR>Vx=jQqxE2DS3cCP&W5;@kX(2Fni69uPz280ZI}S3z%sE`Z(x{Rddrc9@l7f%|6 z#p8uuJaN<@CY6anu1rjDdhsMs4NodBo^Hy-%%T_5Of~#}5o;nE8Fgq;SJVkkoQ4v_ zv3BGkp&d$SiB>cE9K6`ka!}&m#JX`KxB;lFKsxo97<9bfcg-Cuxkho-l-L`U_wF{USn_2@99uj(z(I)`<0SPwyK zgSN`3=wARI9MiXq>D^;`Xs@0elg?diI;Jm$^O)XYL?6-nVCfyxSHd!E{3v8#LB#ja zAx6F7FgVVFZ7Qm^?T3yTY#0Z};5Tdm$3%^^;&&>(QgJX@|GMHs;Jo*OLa|O2d^6VT z%bN6UP5PQ9U073iY31`yZf;)6SYG_CFBYbxCf68y!M6|oD&Re6-P|+j!FLkc16KSG DZcuCG literal 0 HcmV?d00001 diff --git a/42sh/obj/print_and_del.o b/42sh/obj/print_and_del.o new file mode 100644 index 0000000000000000000000000000000000000000..92cf2afdafc3bfff69c37f2aba19b1f057aecf27 GIT binary patch literal 7520 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/process_cmp_pid.o b/42sh/obj/process_cmp_pid.o new file mode 100644 index 0000000000000000000000000000000000000000..a7d27a7644b45b631b801ad7b1d7ac863db39997 GIT binary patch literal 3152 zcma)8U2GIp6uvXNGo9|V+bzXf!jDU~{Drbx3SuKfsRG$zH3a!FF*un{ciS!7-DPLC z6ru(aV;~rV5)+;bF_8y-fryET4FbSmxIZ z5JGLyn|S4_`b zTX4M}O1xL(20p$>JRCY7GMZmZo`-O~7ZUdplUgJ{r#gdmdRC)yyi}R6tg&6KGuBJI zv~+$3Jf^&&Be++fM(_$#R_csqli#g7tCngVS-73!4XeNZk{e8lK_ z&q%yq<)l6Ukoq5xANM8205jMaCf^4hknuYpm-1)uK5#3sL}8z|`WK@g%%A-&fA+Oo z`Lm6i`E!k1=l1kL+}x-ixjw=Jkscd6^n7}@Po>7cgi@$n}!ErWVa4w zH*XMb-N{W?$2U3EidV0ebG3TaDY&lX%+#z}X(H>0+(8#0xyj?z=?Ocxb;z9(kswj3 zc%mjeOZtV|)a+T|Oxbl&v%M)%m@7C%gas1l0&ICKiCssp@Pobyye&h}iW8*@hHAqT zu4j7{zzw}u zI6j~sgZFo+vB%;!_@kk50YcYCKxsWaxgW5t#Fx6gQwb{Ez<>Gxi}gxF8OUx9xD{|V*?cplb(hr!Q*xtkDzo7@Wt zVu9#l#iZ-BbW!49khs%~;^xbjfkmQ=yDulQE$L#lWE3k!7n?;!v5s`Hywb(~rE3-} zU2G(}*d7w=|0>Xi-Q`YVMnLjd5n>*NB~ec97s^~pNp-Xt=jAt6AoAkvpdjI~6eG#h zo9eTjK?4c#3u099DMm%PlkCK(@Ec$ya<}4|bjpnhTwS?_ThB==SK2bXZNA4n5eb1K zXUPXYa`)nb#;16rW~bOLepH|aGoYi}nmW2ExMtz^U%K|@#S`mNv_#@_tyABtE#0AY o@6~V%s92DAB3O`~lX9(;tE7Zr7W$V`as#?JgcQC9;j;q&f3I|@u>b%7 literal 0 HcmV?d00001 diff --git a/42sh/obj/process_format.o b/42sh/obj/process_format.o new file mode 100644 index 0000000000000000000000000000000000000000..208d854eb3bf2908fbf013045f5c4a6d3da1c4bc GIT binary patch literal 5316 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 IqyWeM2hJ3BbN~PV literal 0 HcmV?d00001 diff --git a/42sh/obj/process_free.o b/42sh/obj/process_free.o new file mode 100644 index 0000000000000000000000000000000000000000..7df5f946e4a5410c8630de1bbb990444a1eb7e7f GIT binary patch literal 3528 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/process_redirect.o b/42sh/obj/process_redirect.o new file mode 100644 index 0000000000000000000000000000000000000000..233c6b13bf2f760512943f9f29969dac8f720e5c GIT binary patch literal 3340 zcma)8U2GIp6uvXNGo5zZ-GwTm7M*0vU!=QjA<`&O3e;@1B#Qjh_%m*2x7~$hce6WN zih)Q{AT%WgH9q)Yf)74vBu1W;7!AZIiQ&P-MBjKI;Qlg& zob%mt&%JYJFWtWWPm>TzNMHbm!4(aI2?jk3o~3gE`c3y9oMH~hw}C0hF*-q(<>V$D zPxtJd1H(J-*uGYi3h_8?vDK3>j`%T@mX*zo)W@uvQ+3^zwQW!Tj_2k=e4H8S3CTL= z0)$W-^f|m@*>>GQyaJokKz}Y0FEcVy&5g6(`StmDCne@$@d~BUGE;(hw`6_$q&&vv zgHHPWTVTD_Old5KW(D!yoB8UH}$!lhM>hNrO z`ta=J+Z`fy)I>(lOnQ1?c6y@YD$~=`+h?Z_c1#WY?wV5rH~4gN!c<~M6L|g&3-A)m zh6HnJ;F?Uh+VgFC@`CyL`F_4==FrgY?dEu{S}T-GW?!;9*=??|i?|)S`nq8xH}ocZ z){0uyPUR+YcB)b>+qqiJs^+qVYR-0&wn*)&Aw4yApu9JmNp0w@`JP`c}7^FpW#T)uSdljbC65Gp|=otPvXFHGY=EQy6qbQ}Il1 z!|);OklF06q9p-GOP4B@tpi)Vg;Hi|Ws7_!;^!Edm+Zq&4fW zXsw>A>z`{eKj6$=0#yB?s$=~^WW5G-?SjN4UF)UIp3>gv*?LOKRZ>1CB?Q-|pOX^0 fh;fj_L)c)7M*=n$8u)4n%Py8{Ibmh%m0s~5+3whF literal 0 HcmV?d00001 diff --git a/42sh/obj/process_reset.o b/42sh/obj/process_reset.o new file mode 100644 index 0000000000000000000000000000000000000000..980e0521f6cb97d05eb5639cb8a3ec2b4f55f962 GIT binary patch literal 5116 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 B?(YBq literal 0 HcmV?d00001 diff --git a/42sh/obj/prompt.o b/42sh/obj/prompt.o new file mode 100644 index 0000000000000000000000000000000000000000..8d0bcf53963d78750e66d46f9f47272f8441f324 GIT binary patch literal 4764 zcmb7IZERE589w*g=f+NgZ3tzoRK%?brCM!=gwlwQ5k%bG09i61e01tAjz1D3f62av zq-(0EW>wrQB53M{HfimoYRc3h(P}^FHlfh6@v$HD$G)WfSTzl;Oq~F=9af8)J@38e z8t0M?c9L_S^SC4C}$^Rw!8_kLjgpDPG zlTr4GcABOqMs*LW@*6d z(xkgiFpG=wMTdq8iK8@r3;nbBek5oflrNP{=BSCCZ-+7XjJ+k|4TyQJVm?IZi~3iH zW``5Sd-*=Gt)bsH2}ke3qI{WX%y7}}pT#HKWB2Ea=JV--F932XZ|l{Fac@y-gqQLz9gJ!b0x_$O2g z{G)L(&cY^hBT?l_r#VNCRYc>P@Eq97Tss&$N)5#2jou&i8Br%Q8cW&EsKxvf@yYg$i@ zpSAj)h2>P~($wIEslGYOy~~xWmB=p)lk)f_S0!@B``tFML0ImcUWF2Zei1Ftv9-0J zDv_UGUtw0osEXHD&DLD4MBYF&hY?LOWQ)gtF>(h4)+nh{3^CnQr=MyC-&rSWD(|YX zzB}sF_)T?c%T?3CD)Szvbz+R1gi*hKWqy8MjYVMBM|S58yUM$j!Rq?C$@As$Dx2)P z;XO__Ak3;JztmOR;9b?zcKC0!pc?|URw-@x` zJP(qpDqT{`bCPOJO3j5utKrc57zzJ#@2&b~N5|&QjTvSZIy21QwnGR{TiT8cYYTP6 zH`PA=nt9s}KN~pEvz2Y9)7Zaz_x?Wr(L|w`%4Pjsq4rR_e_bq%D^7#=?U|G!73R%N>bF!y7t^BP^+FW;KIo{x zN`*oK2TeRxV5zLm3JIOzCzVNPI&Jr80q2k=?bQdgI}$fh!JE`S%Q&VsbGll z=$L^yLp_#=8tP+0Jti6fcF6&!`yET#EeBlg^On>n2b$fNE$QoWz~_G7lKSPq zayRiAoC9)TrTYU*`i2~M#7zf*QMX49_}#Z4k#Ekua$ueNbCg~~1kQbOpq(|ofuiD| zkJLzN92I-Ft5l#%gR*tElTKm^!+|i5qH(eK=WjK9d#~s9{%zWs9_Z*z9!EAN4H!bE zWK0e4pdm44j5*3QT$HRn4F@1E*606Yqkx0*a%4&r2l?(`9DfVYHEH@!>y7H@%%#K6 zzv`nCsSovA?GuwtU;AwJ>Yt7sVln@#FXT~IM*cqX&yatOd=;7InS7?rDeWC*~!<;aC{w#>rvP1T>cZ64sqt%#+{A*+;y5itmqu{%TdkU)a^l-p5*cg z?t9ko!>L1G;!WW2%ikpB@Tm&v60S>A#+U(&g}6BK2>3R0`i8+UT|OI!}gE{yVa zgorr}J_f}037)~&kUR;*6Fis)qUxa`AVw$H1;p3{p9JEL2>M0+QXz98{{zEEc7Fkq z-S2?Ja{);G{0fNoZ15*S|3jb)@-z^eJ2(ua{tf`iz8^^KRUq+h0TOS!&_4kryGMom zFc7W;9};?>(4$XE!BhC4UYQXX6)289@1+EpiT41+8zd(S&_XB}Rpa&gH04cR1 zlWgrv^1}<+N}Exr6WM;7O#8LIewR%aenM-eBB0)$%JuTMY_fI0nXU2FGKowqKgP7X z4=STr(&=9$RIGnckqmt{mdP`EaYeNv9%|`?j;E2RODCw9OqcLT!xIgUtE5p?d!uRi NUr97g`_J5w>_2+b2loH~ literal 0 HcmV?d00001 diff --git a/42sh/obj/put_job_in_background.o b/42sh/obj/put_job_in_background.o new file mode 100644 index 0000000000000000000000000000000000000000..ba69bfe9d14e9d478d76b165625b70aa60e4ff9d GIT binary patch literal 4044 zcmb7GTWlLe6rEjr*XyifyGdFKrL7?a0yJ?*fkr&q21;=uJXBiB2i4-N9cPQ<4ZG{o zB8oueRRI#ukMhAoLINQk5(0@IP$iJs@(@V;fIx^JN)a!CDp4MyoU=P?ViTZ@bmz{! zbMM(Zv-i%-2fu#zM@k4KA<%)6puHNp0toGRP>J$Cw9C`c#23;gmVqfqdFf|aL3Mi| z1u)Cnc*%7e|B~a;)p9^Q#YwhN-4eMG~mK?pzO+s7Ufd^F^WQpdjnyFiAs|3Bl4@Z5>5;ScVN zZ<(xzWfCuGw$>RBI@UWYzL~P!i5J&kj5lzMc)^aDIoDg4@r}qR#*YyXMI1tQ#`lEG z-#EV8y5nWGc*lBecN*&qtY+h8r%|!2@wF{W4E9UBf>b^SJe~s;m88w&@Y2AvXOWFAL8S_glC}{B^HBU z2nt}&bv*+<0M6eKpIsP+jh`U3EjXI`&wf*B_m`zz-{woZcOKc@JiKe?VUfGD2)8$T z(Vexobl(+6&Kyhb-gk&lyN-z50~riT4_w#-7An8y3@mrOo!|1-jZVE@7`SHrr59gy z<;K&+7>lYfK7Q>Lg>6;Ocicu{bZB^JxG-SXaS{xU4nr6^dt~UW(}nNZ#jWndpzSsS z&#f0{nt=t`avIh|*}k#nxy?pp$QH#-KA?)Vo87IIa`EgDe@e`0Dx5|j03bpb;S)?a z6){s|=TxkKf3fT#y{uS-%Zd?9lmlEI6U_j%5m=M;a!u6TMy(Kbgq?IeKd@#z*RJ|B zsXKmvFNBQoS79T$I7A;JBs_cbdXIT=-pQ%tvbKQzU^z2DMUkR`rKWv(-SQp2k z0HPW&!m7)N}I|C#3EJyFp!SJOoZdb*b7fj7Ks0kWxYIPa3ad^dqH{)PBSG7^4J$)sxl! zys;7^hf=@VzfkC(VsZ~iTcRHXdlHl^=>&cWlvu9+4)zvEUz&UeOfxjDT<=9kht%<@ z@4yzOdW^&1>!42cF(Ue1N@+f07{RDQX#rvoX?+96X^^o*-vX8gC9Y2vz*2@r?55D)iXH8Lp*t%~%O6JSWL{h_OYw z=&?4qCD_S~3DW?4hz4l0eJOYP9!2{#QXE`zwW z+|S2BFM{@hJ^~#C{Q}Bh`JE@}WHC|2 z>XKGWII372(uyTW70W@sDi}0X%t+~2kSeB+v|>fkiX|znSVL5?E~Sc@Llsj}s+e9> zG36u{Q;RAVleFTFQN<*cDpn9xEG(&FEmOr3mnv2;RV+>k|8H59LdGyVU_GnJ!;Cm> zEzULNmJLGLo>%gjl);MQhfV|?`I%TpkH&|g7|Z7GRxj?3Dg*x*wyO9NmWuLQwi~^| zZ-A7JdmGoTU2pRGDmHzuD5avaV)Wd0jlZMA1d5_1AEa~M=(zmxLB0v(8)0aQ|043i z7=_dtCov9hb?9+#gs_o$-4CQ+bO}p?=&pqTPaGP+jank7XnNN{{W2}9AJDqNQx|9_ z2ketjEZeN9+f*GJB38ozZiDAVeEu2Wh<9*h#C1NaAnT_}zC?1cQ2&$UybyCRj2r8J ZmKcs_%UEdD^IT6@e0@Qh>)`~9KLMKjMa=*J literal 0 HcmV?d00001 diff --git a/42sh/obj/put_job_in_foreground.o b/42sh/obj/put_job_in_foreground.o new file mode 100644 index 0000000000000000000000000000000000000000..d6b9d13d8bbd68a6570028054355bd35accb2cf3 GIT binary patch literal 5456 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 M=8;n~{caNCf4=*J>i_@% literal 0 HcmV?d00001 diff --git a/42sh/obj/quotes_gest.o b/42sh/obj/quotes_gest.o new file mode 100644 index 0000000000000000000000000000000000000000..17f7be69df6751c59fa4d0e8f54f0ec4e40faf10 GIT binary patch literal 4408 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 Vxc1wCYFd<*zcuXPY=Qs7`!5uNM!En1 literal 0 HcmV?d00001 diff --git a/42sh/obj/reduce_bquotes.o b/42sh/obj/reduce_bquotes.o new file mode 100644 index 0000000000000000000000000000000000000000..3aaa01ac36a7f7281c8441ce0a42b7c14d0e0777 GIT binary patch literal 4400 zcmb7IZERat89vw7$97^nNt3iqmu?t!lyz$2evSyzQnzt;lO|h8nyy1kw~lj@cysK` zzHZXdlC2qNp2yT`LJ09SAtw5xOq2L3ph=}5bz);w1Bvnn_0OgTiYOo2qIDuX&%Ngs z$Lm-)%6s1Pyyrd7dGGmle*5lU{~Z)U(*-h!A2KbG#UM!QAd579KzggrtvJOtNFD~K zpfu8mWSX`$YrAC^A50!T_+RXmCKv<~`Pl6&2*Nb@#p6_7GR-k-v@~HB?Sf-6&7KDm zL;JmI;qg4D_}&TJtnvyzuR!hbW%FsrT+8?FGH)TC4pp~y%F8@FzSQVw!8%I*RrKT9(`@Z-4D!y(N(ykAU&*jUHKI}|zZF~!g?@q;c zY=wMIeAB6PEnifvH;?a|E9A3}P2ci+w<^AGr~&-N3i+_<9Ln1Ge#6a)zNA%-^K!rv^)=e z3Yya}2&qo&f}*xyb=8NKM~w2D#{9J-M#Wi>#+L_PGs-8f8|Bi~i^Oe7qMg!-(k2}u_#o%=b+rU+$46YN`ovN*Gu!!d89f&|V z1?A*-7q~J38EYl^o-zNcBM<#D!NVoi-+yQzcGM~qGx=Pst8+`|me^hCEKbCZt}Ota zJGOOh-6V>IbUbU#T7`JQ8Y`tObM(Jj&i4D3w~iF=2ViG!j)IXvtZ6ZiEvi25@l_a97( z9#`#6>^m^rpBOg8p~R3F9!&1*P4o-fwDXTxIZ;%ayPQUw@E zIo|cWnlTUsTUfa<;YMpeg1Q+op0UN~qqw|Tivk_ARocfITBP346liZ)r8Q&ve11)D z2!}rz{uH*EewWZ2)??fH8%1x65ONKa-r!aSTB7V*7Z{Ol!?sY9m`+@M+CMBP5}1=3vpqIh}cYpbg!$N+kF#E%M=td;@__y<@}T}zhTJ=5TK!6R{AZELpCD_2=<5QvLAB}4!H+`!nWk2b%_fxoLbRG=W1y8 zd=Et4AvKtHq3HiyXaFi0@{`-|bSRABgaPCn_S6vwlWTKt?70`FE1O~C$kF~!2vc=i z;@Y-6X8#`_wx{qMXX53ni2$_31CZC0+dp~nO@i7F%_v#sDM`)53(kHfbNi33Z2a5r z(yi^!{o_*mPi6eomyhqfaohIX?OPsyD!lm0jxRJtj{dNvT5xSF_% z{P@_lkh>uqz(GhFauiaAaC-13IA3d^k?2MfhhLdEdo(!{N*{M(XyWuKuM2=QabGAC zCyOS|pL*js%N-`}5aq>nPOoba<;A^36So)60w#VEP24lei`$!~P6$U4i62c9_mT4Y zU-K8l$aAdWU7gfcBhj+tO{@0UkkDqEw5CWfbP8VVX+7kXcSyFh>rZYdrs#+{o6Cz^9J zc21IM`K^NM5o3>=#jSMxQO3el7Y6{x&hHa-T#-)F8#O8G_4?4acz3sq^vQK-+XnQJZn+6$eV{#nMtyQq;6b?!`V)P!y-(Jil);m7E$Y_8wy{rk z!UoF2H~s4aKbL;gq0eYwmqXDQD9P0@>3!hxy(P7huMT4`L=Oa8u45-OMx=ws6VBUR zT<{V&3XQGV@h^-DiXB{`7_5%V(DZ*1n*Lj$F?b!^;2~f>bJ$e13v5*Q4yB=-`sbDA zx@trNFR@q!#S=AndkyCLtM=brgZb;cy1ustAF9FQHCUMV-7%HI4~_}T&X?@z65b!n z7n(4~ZT=r%)UszRyod;~?8dCDSK}3(HwfQA?wiR>PffcICWXff7V2EKf;F8@rCkU% La~wZ<5ZiwM6}rt1 literal 0 HcmV?d00001 diff --git a/42sh/obj/reduce_parens.o b/42sh/obj/reduce_parens.o new file mode 100644 index 0000000000000000000000000000000000000000..9ee29c88d08ef194c34760f0c61153c13b563b6e GIT binary patch literal 3980 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 literal 0 HcmV?d00001 diff --git a/42sh/obj/sigtstp_handler.o b/42sh/obj/sigtstp_handler.o new file mode 100644 index 0000000000000000000000000000000000000000..bff39d8ca36278979952e1c37b2be073b3e5fde7 GIT binary patch literal 4128 zcma)9Yit}>6}~g;*@ySxb?gLJZqqG^LrS~5sqIp?g%CsBZiGRlahiaNM(f$x-HFCC z+nsS+sDTC%zHjD^ zyE{#ZuXOG?=ey^Ab7tn8xx2r9_pSe?gisO!6J!ALf`+LC!MF}mqyGV;mI)VLmobqK zPC+TkeY)H5Olk%jmC$ohgb$j4lE4+)VZHXzohqM_@C=XWiqC4o3!#M6-L zcLpTUZXwk7%)rw1hPk-h(m^Wy{fB4ozh@)rd1*b#hlKH+7$2ZM%81W)jUZmv`}r37 zqJ@}F2VuQaUqr-LUtH{($N2oN&i9IB*esvrG+l0q^WDgTz_=vu_lnH#2;K+Z3&vIR z>(-r?>AjzCTdaoO84O8!=Bx58)r}yaaaG$=u>>Rh8hOW==?}-%`BwtB_=fTI4Jc0U? z?>xq5w)JKgZ#Uc!{~r8H^6is+7bKr_1#Z6`+0;?L*_IP9#_xAV_Crx7Ggb(9uYEv% zd@jMaFdG&YlOKbeK|Ei@1?UFd*H~@2e(B(WdlwEa+*h)kQm5-0rstI=tYCFe zcwM7<)LkqauH$!IyXsjj-}5_qyY4h>vs*F5EL*lTKmWjIOUKNvXSq&krn0B9r?lI! z@trBp?1596o~+z<^CsA;hdhu}TgTm_je2!@(rb&@CFwh^upD0?F+=!zpuA8ut*#d! zz-`O(g%>L3Z(@tox@Vm-!F0;heU?$Zi~0^g__ph`O3MzfV>a+qeBtm|^xCFv>z$U> z5FM-0yDxGPIyH#}W4YVK#dJi5oBSoWfe!c0?vmwt!qBazU2h5BpyCGI4FE$A5cqcF z8^SOUv5}6^u6KjP+2LgJI;M&1a1NP5Kp9ph3L{#gP)v>&hLtU-O|=4Wi?VMpQMfC6 zclIN>Pv+3CnouQhU5Z3Jix$Zs%Vt)M7mAG!(bcYv(O3um)?*=qk_?$Ed%J51!ntyCDF z3so>jKPEQ5I1!*cP)C3=q$mmX@zW0lb`$e}`gmuB-tZD;p&jQmkmOH`)GDSmNM=0! zRj4D{uFPZ5KY?hw)g2=97g#%yjdruTBb^z6MM~|X>W*AyJG?or-J8GH^)Ge83p%sLwqa^%37wK&!;T!O7q_>R}gQ-019|IfMo*IMsGnk17wckLc z(n)fss(}AVV|(f@nD4?&)>2F=12=JN_71a~a=Al#QA=_1@xZWZQV=?=r4$vqaiTj1^!d8T?dms3jNRp_BVVHy?rKS0%q zrxmS9trUH#RIuX_noPQOaJB{&d{(JZt-%PfWMH4GeEuy~LmfiA5}^Hi3B~tb!RY0` zRt%2?$|wUd_yJb%qc?$rVIVjVgdiseE0D(kkBl^ghY9PLIfN16T!7Cep|@x4O!n#T zzVh$i8l&T9-+p!6|AuwLvN};bv^X;Uqt|!+?VYc+Z%F>~Q~u!}e&y1c@1=kL^7+yI zFF*A2XP!TO`{h3lK5?4I!evMS58)=rG~`~$7a>cKHON`WvykT?zks|3c^jf3VHQ8k zpo(`w(}YimZ%aZfT|%rlbSnp|k`QZm8-cLS39;}c#L6VZmXQ$qiV#~(aY%lghPIbNYOWay3ZO0Q~7&3vpM@lJYGJ^Ve|7YSU% zPhuSYxRmYrl{UZ6;WpUl4SAHp84x_Cb@}@t7KskggTpfnl;s{X)^M&5@^-kSy>yGO;tS%p0-_I+7 eUnYJXsME4d-*tiwjSl`&`%R&@Odk&qoc{w%J9hH` literal 0 HcmV?d00001 diff --git a/42sh/obj/sigttin_handler.o b/42sh/obj/sigttin_handler.o new file mode 100644 index 0000000000000000000000000000000000000000..f6fdc33eed828e97bb186d29b7d1148c991706ef GIT binary patch literal 2552 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 KRCHe)HvbEMgj4PS literal 0 HcmV?d00001 diff --git a/42sh/obj/token_expand_var.o b/42sh/obj/token_expand_var.o new file mode 100644 index 0000000000000000000000000000000000000000..134684b1015acba04d7b0a0eda100ea9bac9531b GIT binary patch literal 3048 zcma)8U1%It6h1SXne1kh-A$sk)+!5$(SX^FHDau_Cfd|V+G40}t)PsP&2)F`W_H<~ zq-nJpn<@hW3X!c&Ye5S?zA;IaPGP1 z+;hKs?z!jQnTvn@`ENau5+XFwEg1f&F_{bia36b{J1A8ue7w0e;<<-Q*WK?n ziFe6^rJvS_hf60QgYk8U%e4~U#}NsX;nEoSqmIE+m zjxHJ}nO_di^HgJIV8J*!urM{LQ2bSnp=2~050PxZpmCKO&}VBVNHZ%m)Z^j-7uv)uw>X5jLbAD5Pvyh+nvC!hVQpRZR-c)z0J9&4efcK=Uw;M{TXH)9lPO6kM>4H6Jm(y@Qy$-=OS!2180*Q9|nM?uK4GneHPQ~F(T}6y zw^ZF;{{qB%b!&JUlKs>^wT;5>pvV4dzuFcKzmML}tUao>B}o4g-4m>~MBaqZ!rBiI zk@wK(O5{T}q2P@t`whSTSt6B!Je&8??E0s};XR9uK&CvGnz?KW&P5R}RpYPb!>cjh z#Eu|-j}%x!xWRSe<`OX`$HtP0@9c*AoZGvnPDB^K>3J#9IPp;?`PPePwDk8SjB&!= z27dtl415vHSz!!L&Lf*RwbF~z$tKRNH1UzKiO*2N z|6dmBu|wVoysJo-598F3pBv@KZc-)_N}{nodp<uESO_g7Fo2uD69$G97_^(c4-E-Ym+OSlJ$7P3NLg@50i75(2ww-rIs$;fSDf=$l-u}$s@J{tuD4g%5=NFmZ zQh-i%hR&HaMxgp>DzC!Jj*OI@!`y#;ehTkZIbpeY1$VT>DUEpV z$@~^2-X<0wv>)}8?Yn7y<*YmAcsJs`TNf?FhDd-{GuB0@{T|BZ{1hAWQ+TS3cgD+3 zOcWj4%^qTUH|+PUTz#`lXyYC83-C%K2mA&%=J&J2>y&uzGV%QUCbGFkJe@BTNa3AX zCSK*}#7+0xCGob(0-j$c9$q>hvN1nL9txG;-_1e3HDg16bEQMrXT`3%M+$D+ge)B;J6;8<2R?6o4I9I;A>)#e(Z2 zHtzR|#QRQ8ngSl_#4Ymc#Iqy=VnHC2Uk!d8@!Z!1NZJtMDR3=uzvQ|N*9P21-)qhM zYE55GSu@WsSToft*2ya6JS2FN_2O@$UkGdZsz|)d{H&8Z=B?>3Bi78<^Mv(nrBBbM zp8IN$?@?-KXy22m!%o>Nl-yK*x+mR}dN5bS%irDK10&tHF}>j-;gxflqBH4~GnLXo z$3=r2C!G_Sy&h&}#*UN@ll!E8~neH7tI$%9HKg+Iq17@r%@mIW29Rl7glZiM1Vb8Wm;YeSj!G@NbP zKr|G8H1=5RftIZ;Xptdw>Dbkd8?dj=H276ASBYKi!5n<5Iz=eHB^EE76^Y--=L*)pd8x1eF)GJnikSePiB3c z-$qyyqrO$e*rcBxf0I`08H~a(r!XD_ht`=VA*+y@n^uf!`xMy0XYrEO`!OrxZxb>dgw)NYt8wl%P%ZwQVt8qhS27U9H&YWPq=Bzq zOc0O6XF52ru3cjsF9iM+^h~`L`{MY+i+A_B_rCGxk83}j>-r;?dh7VY#l9DkEr&n( z%*cGpHoOo19Lzt8IWP-nV$*BD>%puKYd}A54-i{J7rP~0tS?<`$tp02Ev1V+moB!J zuBq#;S?OX+Bo&lx`JoXv$BesRg?1ZZbK20MYUZ?VB6ABfu~IkxNr2P+ uNMM^8DZ8XxCnW^q&C^oyZAieOs0~Vu>Fc$&utzKW0nR%`Y;Wnp7XJh72BFaa literal 0 HcmV?d00001 diff --git a/42sh/obj/token_init.o b/42sh/obj/token_init.o new file mode 100644 index 0000000000000000000000000000000000000000..4bb6a561ce71ba28430da4b19973b4a1ae6bde44 GIT binary patch literal 2760 zcmb7GO>7%Q6n?YzZrnI=HVIUr6l9U|CmK7nk%$0=nEv2|R6?Z|Xuzw|_c_M2xs$jx$$vZqm$5w=g$h+=f0-10N*M7>c z{%T&vVr%Qaz%{>iq?td@ye=oAyFP9rE@^cdX5e=I`DT9Yv4k|Per-PeRSs7uJvB9b zEWPB`>ZOX89?cAAhST>rWxn@Aqrz z&&mN*o08{K!S-!(igu0ar86$Uv;`h?N%V?4 zQ~i1@Wg54pdPN^6PV1qGeopgl7O~WW$%i<}@qQ6YC6j@ocT+4i(GLaR2V)i=JE(XWZtNxKo33u?_C`E6ng^@>=&g+ z`&^i!b2pe;@o(gV)xbBwkqLK1uq8%1e}8aGh=7S0AVIj2dk%WH4X>O_HoqNt!R%W4 z%t^m<_H#Y^U6sd>OvL*!^A+Z+%rb{8k@nrpOft(#;@UEyKv)SiL%o@hb(l~H<%Q(K zgi0urEHJC6xPrf47CLx`*a>?pQl$fI8-;lhXO5F-n8NJpNL*kqth<*v@i%ZbHp0?V zE@i%=9qJCMNQC30QI1<7{z`RoE3gK$D0xnKvA|!A%_~eKZ*r!H@vR%j*BOUCuF))U5zt{IQ(DPxl5qLh1Bn#N1IHlwE|^-dnuj7iPlwTT`G79YYJ$zVet z1iJCAl6NV2yOJyrjDfcj66dXlJ0YRlqRO|nRVQoC$IqVUE>rOC$QO#N1-p!YwtoQ) C|63^l literal 0 HcmV?d00001 diff --git a/42sh/obj/token_print.o b/42sh/obj/token_print.o new file mode 100644 index 0000000000000000000000000000000000000000..3170b43363af0749981073fcc52306ff930f8bce GIT binary patch literal 3536 zcma)8ZERCj7(VxQx9!@|bsr#zkR~wDz}7N8BnrrIBV|B>$bcBhwQIYrP;QsrTNsQQ z!i-oaMl}BN7l{#n5M!by@!<3EoOic4SuRe`?KFoi%EGeA-54;X8(m}5lx6m^xL>sE5Wa%4x} z(y@KZq+XPcOM!TdW$qM*LpfOVA=mY|X=PJJuQcjn|z&EBVC=JebQMi+Jfw++I7Ffynq`E|L#QUCi zcPws)SQ%dtub9S1>(@EWk?PhrQocFAZZ-or&_#@+U@G{*y?F+7q&&A@!nCmcc z^)d16`1)hm^=ZCUC)H;^7h7kd^VBlkdNH-cS9L zfk~+%zIbLg&S~j6V{ghx==z5C(iLM8FC>i@fX6FJp#EgY6?n-$y(f#?brw|igP?q` zt0mr;#FMIk+EEL-uWd|;Gc!=B;EnJHZjYgt{{CIRIKQ3zDcpL6#J4WwfM29=Zqr)Ov=oo_t zqBsI^WO(Cf;g_M)N}+3X=zF#BbMz9Hb2abf`em*?vT^|OAKd&Dj}SewbSc=$r!ch- zcZ^1dyT&#QcY33R)1NzTuwc8*!DyjtywGvw`Yyr@{TSKt!(htTlONodOy`?g7nz~K z?o2vA*qzSho0=CV29ue1zA4h03e9ga=i8c3nAvzZog7GJ!&YWj($M?yF|b6jiEisteMIfq2(=+mPqL7cpAN_d3gj%%aYcXMbA7CBiv$Bs&bLM*nZ3}SxF`{`Vj|ub%i8-0no>fkQ0+_-NpY^(f!7Vt*y3l2}#t*Eg}n^Nf;FMgsY%DQM!wr+!~QmZH~_2>ZGt5SOi zbCr6u|7&V>EIMfEJJjmeVH0Stou}5YfLm((4!YmR)C*E)cnq-VYP~lH{u51&>Kx(C zLpnoksyfH({Q}ZeYSYv?K~e3#2$_$iYPS0d*in${Ro^i%k5?nMb_0`p9MiYd)_RCF zU0da4B#c8_&0QGnN@{J~g&l(tYiqcRdl|$_FlqI^%Vb_{4JBG)JnS&AYix>}mcpzA_=gY4~=KcBPVq?}f2bSK69DK`vDc(5qgIgD7TJNN0 zjh|cc`bjPP>k0Uu0{srU24dd*NXBf?B2YVM8)zqp=>rqYC0j2Bvr7{bE={~qnt0LE zKp4CVns|HCbWEC919Bm+guC@!%_>U7B62`ZZY?nVY|1P z_z;$Lap0lLw)C-$I3AEuM6!uOse%XFzvF{ynrI`gT18WRr!?&|&7aeP?oO?Gh30dw z*Xkg89kCJO6DPFV6`E_i+xv=EtuAcP0x)_yHP!7J=+qRK?~v-o`GhDq2W;jQW0$Gj z4sYHe^=F;m-C@b+Nj_V0Feb?Tk>rp?EhjmoUr`kSNF_fr1Cz-SdXJ^|$E-fx$XJO~ N*47jD*RKcb{s(|cAQ}Jw literal 0 HcmV?d00001 diff --git a/42sh/obj/toolz.o b/42sh/obj/toolz.o new file mode 100644 index 0000000000000000000000000000000000000000..fc36374683f06f9e3899bab7293224dd0cf974aa GIT binary patch literal 4676 zcmb7IeQX>@6`$F=**kya&d!%wwS^O;F%k7gODaY2wb+WU+FWc>+S)i!vp%oS_Eq-T z*mtq1Vqts^_~JOCK&n=vq7b205Q69*C^aS6DT*y5)F={&O8ns>P<)b+3_9RiLe1~Z z&bs!VL(@@a-@LEiym|9xZk)H?``i0I#<+*!gYHG27x;wG(e6e!h`&v{P--idm5sv# zlToiwex{jcSidt5H!N0Sf&6#IAA7-IL$Pzk<@S^*{cL@JO@X? zF>i_EX;W=0i+H-@UFlvEpi*O+OUeS6r72ib_&YwRtJ{xba z>lwMh?)WY#ynPDqoJ!ipYK!V+Q+z`)%Z+!#h45lJdc}N*^)*IfjX{GkiwZGQj0M?l@)5+09vfDJ9n>Kq)D7=@IuoHN6WbUnGOkFiD zym+74GmPD}9o+Xp$ZyM+ZNgZ<#&cL~cb_vRx^aFJNr~uQFH`6Bf-1me;8ANrd`h$> zKFW){3(M?-M9RC+n_*8-e*&cdsO%m`-`r@u)V-U9cQ|e}vVS!)tD%PJ!gORkn=ULy z^5i-b$=62;!PzQ|e@y`!v+4EAG{|0E!I#a9=QE2uJDxYPk(J!<*4NjK%x^*+Z}!Mm z6a4rTSuurQVPwZ0Xv2!+jhU8$F;ik>!V4@o^$8emmd=D1>^WNVnX5e8n$Il}{!9cu z%*ZZErLh<(&5s*V;swV;-s?%p)biE4z8-y^`SRJw?J$ zaEhvZF>;I6nuVbqE#QN15mZgTSwqq+dDe=On0pI;6o#Q%<78`v!0YWlujir z8uSdu<7O(>Mehu-i4k+OFOiCm;3~vD4G9#$4BR0NB?;>;B6fk z@gV0yd+uvLkYln3H+DgC&tnQ*doJ}O;wp(_-cEd|E!l+eHu?qQ_ehknSLFDm&3^Yu zKi_p_-$*EEye&=N1Dw{U+HS;$%#|V?UGpE6{^W z$>WzlSb&5cDuQH5or>Gl8SY9D`n#9Ak2?FrHAn%p=C~CkfPvRk=Ga zP5FyTu~K{=#fH{JeK$HaS|j0jkPWZ=ttFnZx{2vBD|G%;1IACHQ$9&fxu#16jjEVL zlvE}9f06i9w6K;suAuDHI@or0R6Pv^8&9ogTf6VV z?geG1*0rtO8?a;V+IVVxMRwoES~OM*L(cyb*nuyn9H4XeJfa+u(xOZc3oR@>y8nwOgf=VqdBOZGQ2)x-Mn!3q4E*{fQL0BpNmTe@9@V9_zeD&S zgkIM(f@cJK8?L9xRnsS-dszhZIk7h^?(PwxIpGTnuih&>zZBZpFAJW=Tn%to5mjk% z0Fmqui+y2H5fys7eoSviSbdnaU6fl#_Zh=86iYOQ`N9mW#{BD`IgIS}io|I{F3`&GmK2QJJm4*&oF literal 0 HcmV?d00001 diff --git a/42sh/obj/toolz2.o b/42sh/obj/toolz2.o new file mode 100644 index 0000000000000000000000000000000000000000..f267b6a32870a59f93003b1b59b1c9a3ba481ce3 GIT binary patch literal 3420 zcmb7HZ)jUp6u&RYdr6ZtNxRK|6PL-<32WMwA=PcV>LPEm1*u!DLU~Qo*CZoNLh{nq zu}Ywu7`w_Q8~Y$4=n#j_`9V+wL78ly)Q{>nKPYrCVPY9&8>_!_-+68NTHQQw@43Ho z&;8wV?!E8cpL^6d=TxS@9C zn=XzaPs^wlCUS)l!|2)D;43DXZ-|Wp;G>Z9IDZ_vi_gp&qh;)_J-~e*{K9-EnC~m* zV<>RVWSutYrSCUakc{qpv$&r~KDCw5K|pd8@$s2l5g)CKybDA2!cgaZD98DG3O5V! zA~4aAZWPLw3QyVCb;tHWz5a(jeKoGns$arcuTL%L^~-ZKPM@vL>GkBCJ~Opo8|ukx z`t*W`9;2DAY(TaBx;{f%!0DQFswaQfr@xO6UL1{X!j4J)+1*2Mk=?M9B%+&+(lFUy zpSo4AE?iE|lR>|noTCMrNzU&~E<|THk}aLQrAIFy6ofO=J3sxMQtzF=^6TQ_qCS(H z8@zZR+1D%5MbS;)aJ;9dzc)T^mMghpA>NhfNOZ)vrt`RX+PXRb5<5B*+aDK|a=JZ_ z-D@*PauyzncB@#-AMQ+~Mf<@D2DfJ>iibv0?K?UvSutuErK)9_<*{_CR3TW&9X9c1 zmB(aXaYEz@mdFPs}Wgi^6bOl!_B(S>#}|gwmos5?QBuBQb4b zq(x~(-kvD(^(N5Ms_Y4RBTt2Ph8_z)gHzyBg@+CM)?u@EtbkfVtQ@j$9S!oknQU`l zi||IC4ux=jyi7JZEb8_-+ z*}j2V^_(o7A=JVs`!1nYLP8s&8e%`Hu=i(yln0cnr2IA1B+j%-e-%jCr2I_^6CHV9 zV)CYGKU_kX);dRMGxY&wKOyum4HSVRWb*}TqykNgWO@gchRpSsx^-FrN{~tzg@kO1 zuwQj*(^`FA?LK>|?}^*@oPDbsXI;?ml@Sz~12hFoB7=rLC6N$vrO<9??955LB#?>%Tltes~4I&1tKmG&;yauwkB zDC37%?_nKh4JF6zW=*RRMOA|)iK7s9muo-x?m3J>;`cgOKFVdrSr7*kN097qM58CAZ8kczE z5>K)W%ezN!6P?|^(YQb~#@itG!;hsGqvB9uEC&DNnk@2<@*-56nj_S?3^fCN+E0xS zG4=~kf^9>kLO4`QP-#0Fwh$!uFYSTcjlkgT=0L80Dwn+-$hD7O_Wy&%jbv{(4^IvI zuU+#0odpK_r~gOjA|IIazk&P@{iRJROpuFv1S4FWm~%1bzY2q>{)xcgr~+qzQ{;^9L;uxftEou-Tbj^7NW=nV3}~N_X4`=Puv|4#F^)8NU^y@1pKoi^ z=u7era;bSZ zd-Jsa=CJ?PY5%RCDehCWye2Dj<-ySz_%Jc~t(lpbNeEeixf|}GExH80Qw;74CDnt| zp5a#XEoksnGI-;(|Hk5`z5`PFDu@ znxWG-n8LN7Nf(S=psfjK@TbyQGDru&~RcdEO)9@RL1e9hIYh zsU;e|zD6ibicE+G)Kmo2R0Q<60J4lq0DU@?{pSg2Ux7ROict0u3bT3fG10S&m)P&Y znLndxUS+qS^D1>6G|_2fwK+)9xg25>76KG)R-3TQ0#EM@P!x1%Q>FI<6_P2;BHB12 zX2={-dO!U9zZ>8B^84?;x8+~wI?o)ber@}6Z(ckIc?|Ug>Px8KLlsL0^f6Q_A~~QT z0!I-sf}WMUm;&$*OI}PoczrSIzRK=-zLJ0ckB%NQo=u|An~-8QBNHWfJrN!i>ZJIo z|Bdn5J8z$O>|VpkVdpphb7e)y^XiE(8m73me=so(8 zrYGZI3+d6?%u78P&w_fdK<}#5lW{Gm_Z#S)|5&ptI#jx@FteVoCb>biFG7e;Myu;Avgn9$KdIo&!VcmD%MaVEMWg zUgEGd@`@~XT72B@vpm7Ad$`5Y!OJYKL)Ky0!_Af!zSQy!z7n*wi#yJO+rvx2IXbu% zO_NYKz&)Tf&_Tz*Y=_lyKqxpQRWN|rHo@-4+?o}poR)5BuN>f?_wfyRUfaU!2e`@R1OB_*^s8rKE6?2>yn2jRw(u1L ze2tH<&-1k{+zY)Aq#AdSB7F05W-*t4z}*hpBisdv-Nzpq;46K6ZJv_3+Q&DFaZ4>o?u&3M&t2NcvwYPUf4GG&^YNMizR|}U^Lz_T`}p?HM&ZhfCJWXh zV;8VU@L#ZQouog749|zUmq1bKGN9ORbzV@Mmvw6;T?UH3)pegh3I9UtegsPW-7><9{?r&CQuvb8^FQOa!%5iq+v;GC8a%vpJf!|h`uH14oSC4S}W-)Nl!|8 zNYZ9WJ(7Y5ycZ>Qdwlst$iG)(AA{uHQ$5|SeZ-e=$g z23|GrPaF8J8F;3OCw9S$S`!q$xk<9ni<;zklZ%Hsweb)RXOjXE&3Hlka3UHPa$zTv cP&*^t-6ZNuMKclfq$2d4XQn_l_iAVV15jT!ssI20 literal 0 HcmV?d00001 diff --git a/42sh/obj/toolz_termcaps.o b/42sh/obj/toolz_termcaps.o new file mode 100644 index 0000000000000000000000000000000000000000..c5c7fe9b8766888d9d333cd77de9752edc9faa03 GIT binary patch literal 5264 zcmc&%eQZ4;!Z)JkQ)bKiN6 z{SsQH{jn?GckcPPzjMw#_uY5>=Z`-4#3h906nLOlp^r&C{OD+l&_l%Ep$*oVigC8F zcwh?ZKAvY7x#;d3Ga!cXba2blGrTqW0R@6acoa*|JjSRJ`$=v!!-!;anRqhB0z00C zqq9C)ZOt^Pqmo5DebL^0%mAp;7{-QY+MoJr$?AEIOQS_X%h~WCs(`fc5~+x?x8oh9 z5KZ>OF7|5JDrt>Ci~$E$?p^XoZhz+Pp{KZX3>DJrun9g62I)J|`P2v%=Wz zP%$_?`Rm)aZ_~Wunc{`+v*q}q^T7!UtIW@pPxEu-Q1D90&*yA@;9??F7}MZ$V)B=! z&k56Ke}8|#yYv9L63TyJ%5UX(J~&0<&(MyvvB@@@?U&+CIWl@Emr~3N zm%In=gK#z&Z=*|xf|p9=^~3Vc@b69j3>BWk$3^dfg_wx~VEdsOg)s+J^XQr3&WneF z7fbMJmmXe!47Mu%$&(hI3a_w6cn|D>a(1xZgHI|s?H76(M5r)9 zI5+_ewM!4LUv2rp4ua}D7HM!|^1TY5BkoY)3>5CkJ+ylZ=UTeYCi_G_E!ycz1CM-OWHXWG1kRwQXkR>s>rQhnl}hZz zWh%2H5>96W5z)Lk3y|j6uGIFvaPz81vjd_(XT+j8gO1fS-4>Y7#`i``f@H5jxTK?D zIGZc+J5oENMlNOaMq{yfQpA%vLD!)Nv~Jgu$9=~-9%c-En}pFLVAb-Mof(G*AmiULJHWB z0u@Ms3Zxc=B*z)SS}LvUr-Zatn^~2$6)0=}h#8dG2W0m+WA@!3u2o^`FJmmLTra>- zKZUWbxnIY43`6G<_gfgA$I$Vtei6jwcB$17p>MW_pi&=6I^?hmR3n)tbbL>?f}zH3|9tgQ!*R!z;}1Lwc>;YO`uEZ4I0>T@P5_;nT6fS_6(@vR zJ&ZqLUR4<5?aZq+!B_=Ilw&1KYIDW<-`G&T)Ny}Mjq;Xe3Dht{yeGf~rchHZs z{w0&nnr|(;w)ZKa?e=NDI+uGCR+QrX==*P)%im+-3(@ZJeb@1odh72H*=<1o4cl=Z zbK23?^nGaJaXxd}JrBD9w&T3!w0jeFV{FIy&9YmIJ>wAHfu*K>?5W37{R2jZn*Gxx zn)BIAb37SIyV3vq~q_>ssBMbUXwN3WVPNQ9RVryC#7C-H+ z6UH~>J$ZRQrn@?%J|t`On0!FbNmr}955uKUR70^vDSUdX^uY5qIC7Jx|6#JP=B9iY zjy$b^UN2n*sl$sCK5Mr^0-vqYH$+dT{*rWU1wo4XJJ5|%NS+SaI4T!*$c9$Am{-I7 z;Edr8hhvSEmxi}V4N_mU2|4Ec7* zl|wYOu2oj)Uz5`P;8t06N;P;?S{GP_b{Je)y}|)CGznE?fs%1^zl1 zlK%^oz8@5=X*DS6SAgQzg*VJ}KByNCtVToP zdssmK{fHlD8+y-`p7|k5&-QJgtWuIyHlEIxa(%?c3uD&h(2|s{k0eOvbJm?xO#!d& ngSZ3c!gyPgu|zbNN-CZ0{z%i!D +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/19 12:45:06 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:42:34 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void ft_v(char *tmp, size_t *pos, char **str) +{ + int i; + int j; + int len; + + i = 0; + j = 0; + len = *pos; + if (!tmp) + return ; + while (tmp[i]) + { + *str = ft_realloc_imput(*str, tmp[i], *pos); + ++(*pos); + ++i; + } + ft_putstr((*str) + *pos - i); + if (ft_nb_last_line(*str, *pos) == ft_size_term() - 1) + { + ft_putchar(' '); + ft_putchar('\b'); + } + *pos = ft_strlen(*str); + ft_move_to_beggin(*str, pos); + *pos = len; + write(1, *str, *pos); +} + +static void ft_x(char **tmp, size_t *pos, char **str) +{ + int i; + + i = ft_strlen(*str) - 1; + if (*tmp) + ft_strdel(tmp); + *tmp = ft_strdup(&(*str)[(*pos)]); + while (i >= 0 && i >= (int)*pos) + { + *str = ft_remove_imput(*str, i); + --i; + } + ft_move_to_beggin(*str, pos); + ft_puttermcaps("cd"); + ft_putstr(*str); + *pos = ft_strlen(*str); +} + +void ft_cxv(int ret, size_t *pos, char **str) +{ + static char *tmp = NULL; + + if (!*str) + return ; + if (ret == TOUCHE_OPT_X) + ft_x(&tmp, pos, str); + else if (ret == TOUCHE_OPT_C) + { + if (tmp) + ft_strdel(&tmp); + tmp = ft_strdup(&(*str)[(*pos)]); + } + else if (ret == TOUCHE_OPT_V) + ft_v(tmp, pos, str); +} diff --git a/42sh/src/line-editing/curs_ask.c b/42sh/src/line-editing/curs_ask.c deleted file mode 100644 index e465b8c7..00000000 --- a/42sh/src/line-editing/curs_ask.c +++ /dev/null @@ -1,57 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* curs_ask.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 17:03:49 by sbenning #+# #+# */ -/* Updated: 2016/12/09 16:47:13 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_curs.h" - -/* - * Read the line number for cursor's coordonate -*/ - -int curs_li_ask(void) -{ - char buff; - int li; - - li = 0; - buff = 0; - while (buff != ';') - { - buff = 0; - if (read(0, &buff, 1) < 0) - return (-1); - if (ft_isdigit(buff)) - li = li * 10 + (buff - '0'); - } - return (li); -} - -/* - * Read the colomn number for cursor's coordonate -*/ - -int curs_co_ask(void) -{ - char buff; - int co; - - co = 0; - buff = 0; - while (buff != 'R') - { - buff = 0; - if (read(0, &buff, 1) < 0) - return (-1); - if (ft_isdigit(buff)) - co = co * 10 + (buff - '0'); - } - return (co); -} diff --git a/42sh/src/line-editing/curs_move.c b/42sh/src/line-editing/curs_move.c deleted file mode 100644 index d96d0ec1..00000000 --- a/42sh/src/line-editing/curs_move.c +++ /dev/null @@ -1,45 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* curs_forward.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 17:21:08 by sbenning #+# #+# */ -/* Updated: 2016/12/09 16:56:41 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_curs.h" - -/* - * Move the cursor forward (right/down) -*/ - -void curs_forward(t_curs *curs, int offset) -{ - int size; - int div; - int mod; - - size = (curs->li * curs->win_co + curs->co) + offset; - div = size / curs->win_co; - mod = size % curs->win_co; - curs_goto(curs, div, mod); -} - -/* - * Move the cursor backward (left/up) -*/ - -void curs_backward(t_curs *curs, int offset) -{ - int size; - int div; - int mod; - - size = (curs->li * curs->win_co + curs->co) - offset; - div = size / curs->win_co; - mod = size % curs->win_co; - curs_goto(curs, div, mod); -} diff --git a/42sh/src/line-editing/curs_setup.c b/42sh/src/line-editing/curs_setup.c deleted file mode 100644 index c9842a54..00000000 --- a/42sh/src/line-editing/curs_setup.c +++ /dev/null @@ -1,82 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* curs_setup.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 16:36:43 by sbenning #+# #+# */ -/* Updated: 2017/01/11 13:55:42 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_curs.h" - -/* - * Set coordonate cursor data - * "\033[6n" ask for terminal to write on standard entry the cursor's coordonate -*/ - -int curs_coo_setup(t_curs *curs) -{ - ft_putstr("\033[6n"); - curs->li = curs_li_ask() - 1; - curs->co = curs_co_ask() - 1; - return ((curs->li < 0 || curs->co < 0 ? -1 : 0)); -} - -/* - * Set windows cursor data -*/ - -void curs_win_setup(t_curs *curs) -{ - struct winsize ws; - - ioctl(0, TIOCGWINSZ, &ws); - curs->win_li = ws.ws_row; - curs->win_co = ws.ws_col; -} - -/* - * Reset saved cursor data -*/ - -void curs_reset(int sig) -{ - t_curs *curs; - - curs = curs_single(NULL, 0); - curs_win_setup(curs); - curs_coo_setup(curs); - return ; - (void)sig; -} - -/* - * Save the cursor reference, init termcap and set cursor data -*/ - -int curs_setup(t_curs *curs) -{ - curs_single(curs, 1); - signal(SIGWINCH, curs_reset); - if (tgetent(NULL, "xterm") != 1) - return (-1); - if (curs_term_setup() < 0) - return (-1); - curs_win_setup(curs); - if (curs_coo_setup(curs) < 0) - return (-1); - return (0); -} - -/* - * Erase cursor data and reset terminal -*/ - -int curs_cleanup(t_curs *curs) -{ - ft_bzero(curs, sizeof(t_curs)); - return (curs_term_cleanup()); -} diff --git a/42sh/src/line-editing/curs_term_setup.c b/42sh/src/line-editing/curs_term_setup.c deleted file mode 100644 index 9a18bc72..00000000 --- a/42sh/src/line-editing/curs_term_setup.c +++ /dev/null @@ -1,62 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* curs_term_setup.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 16:50:26 by sbenning #+# #+# */ -/* Updated: 2017/01/11 13:55:40 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_curs.h" - -/* - * Return a static termios structure reference -*/ - -static struct termios *curs_term(void) -{ - static struct termios term; - - return (&term); -} - -/* - * Save the current termios state and set termios to RAW -*/ - -int curs_term_setup(void) -{ - struct termios *single; - struct termios term; - - single = curs_term(); - if (tcgetattr(0, single) < 0) - return (-1); - term = *single; - term.c_lflag &= ~(ECHO | ICANON | ISIG); - term.c_cc[VTIME] = 0; - term.c_cc[VMIN] = 1; - if (tcsetattr(0, TCSADRAIN, &term) < 0) - return (-1); - return (0); -} - -/* - * Set termios to the saved state -*/ - -int curs_term_cleanup(void) -{ - struct termios *single; - struct termios term; - - single = curs_term(); - term = *single; - term.c_lflag |= ECHO | ICANON | ISIG; - if (tcsetattr(0, TCSADRAIN, single) < 0) - return (-1); - return (0); -} diff --git a/42sh/src/line-editing/curs_write.c b/42sh/src/line-editing/curs_write.c deleted file mode 100644 index efe19c72..00000000 --- a/42sh/src/line-editing/curs_write.c +++ /dev/null @@ -1,63 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* curs_write.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 17:52:20 by sbenning #+# #+# */ -/* Updated: 2016/12/09 17:03:41 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_curs.h" - -/* - * Write some buffer to stdout and recalc coordonate (go to next line and scroll if necessary) -*/ - -void curs_write(t_curs *curs, char *str, size_t len) -{ - int size; - int div; - int mod; - - size = (curs->li * curs->win_co + curs->co) + len; - div = size / curs->win_co; - mod = size % curs->win_co; - write(1, str, len); - curs_goto(curs, div, mod); -} - -/* - * curs_write in video mode -*/ - -void curs_video_write(t_curs *curs, char *str, size_t len) -{ - ft_putstr(tgetstr("so", NULL)); - curs_write(curs, str, len); - ft_putstr(tgetstr("me", NULL)); -} - -/* - * curs_write in video mode without moving the cursor -*/ - -void curs_video_write_static(t_curs *curs, char *str, size_t len) -{ - ft_putstr(tgetstr("so", NULL)); - curs_write(curs, str, len); - ft_putstr(tgetstr("me", NULL)); - curs_backward(curs, len); -} - -/* - * curs_write without moving the cursor -*/ - -void curs_write_static(t_curs *curs, char *str, size_t len) -{ - curs_write(curs, str, len); - curs_backward(curs, len); -} diff --git a/42sh/src/line-editing/ft_readline.c b/42sh/src/line-editing/ft_readline.c deleted file mode 100644 index 90620a39..00000000 --- a/42sh/src/line-editing/ft_readline.c +++ /dev/null @@ -1,106 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_readline.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 18:03:48 by sbenning #+# #+# */ -/* Updated: 2017/01/11 17:35:14 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -static t_input g_input[] = {\ - {RL_NL_CODE, rl_nl_function},\ - {RL_COMP_CODE, rl_comp_function},\ - {RL_INSERT_CODE, rl_insert_function},\ - {RL_CLEAR_CODE, rl_clear_function},\ - {RL_RETARR_CODE, rl_retarr_function},\ - {RL_SUPPR_CODE, rl_suppr_function},\ - {RL_ESC_CODE, rl_esc_function},\ - {RL_QUOTE_CODE, rl_quote_function},\ - {RL_DQUOTE_CODE, rl_dquote_function},\ - {RL_LEFT_CODE, rl_left_function},\ - {RL_SELECT_LEFT_CODE, rl_select_left_function},\ - {RL_RIGHT_CODE, rl_right_function},\ - {RL_SELECT_RIGHT_CODE, rl_select_right_function},\ - {RL_WLEFT_CODE, rl_wleft_function},\ - {RL_SELECT_WLEFT_CODE, rl_select_wleft_function},\ - {RL_WRIGHT_CODE, rl_wright_function},\ - {RL_SELECT_WRIGHT_CODE, rl_select_wright_function},\ - {RL_HOME_CODE, rl_home_function},\ - {RL_SELECT_HOME_CODE, rl_select_home_function},\ - {RL_END_CODE, rl_end_function},\ - {RL_SELECT_END_CODE, rl_select_end_function},\ - {RL_PAGEUP_CODE, rl_pageup_function},\ - {RL_SELECT_PAGEUP_CODE, rl_select_pageup_function},\ - {RL_PAGEDOWN_CODE, rl_pagedown_function},\ - {RL_SELECT_PAGEDOWN_CODE, rl_select_pagedown_function},\ - {RL_COPY_CODE, rl_copy_function},\ - {RL_CUT_CODE, rl_cut_function},\ - {RL_PASTE_CODE, rl_paste_function},\ - {0x0, rl_default_function}\ -}; - -static t_input_function rl_get_function(long int input) -{ - int i; - - i = -1; - while (g_input[++i].code) - { - if (input == g_input[i].code) - break ; - } - return (g_input[i].function); -} - -static long int rl_read(void) -{ - long int input; - - ft_bzero(&input, sizeof(long int)); - if (read(0, &input, sizeof(long int)) < 0) - return (0); - return (input); -} - -static int rl_loop(t_line *line) -{ - long int input; - int ret; - - rl_put_prompt(line); - while (42) - { - input = rl_read(); - if (input == 0) - continue ; - rl_toogle_bitset(line, 0); - if (rl_get_function(input)(line, input) < 0) - return (-1); - if ((ret = rl_finish(line))) - break ; - rl_toogle_bitset(line, 1); - } - return ((ret < 0 ? -1 : 0)); -} - -int ft_readline() -{ - t_line *line; - - line = &data_singleton()->line; - if (rl_setup(line) < 0) - return (-1); - if (rl_loop(line) < 0) - { - rl_teardown(line); - return (-1); - } - if (rl_cleanup(line) < 0) - return (-1); - return (0); -} diff --git a/42sh/src/line-editing/ft_split_whitespaces.c b/42sh/src/line-editing/ft_split_whitespaces.c new file mode 100644 index 00000000..ccca5b34 --- /dev/null +++ b/42sh/src/line-editing/ft_split_whitespaces.c @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split_whitespaces.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/02 17:52:52 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:42:38 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static char *ft_strdupi_w(char const *s) +{ + int i; + char *str; + + i = 0; + while (s[i] && s[i] != ' ' && s[i] != '\t') + i++; + str = (char *)malloc(sizeof(char) * (i + 1)); + if (str) + { + str[i--] = '\0'; + while (i >= 0) + { + str[i] = s[i]; + i--; + } + } + return (str); +} + +static int ft_len_words(char const *s) +{ + int i; + int len; + + i = 0; + len = 0; + while (s[i]) + { + if ((i == 0 && s[i] != ' ' && s[i] != '\t') || ((s[i] != ' ' + && s[i] != '\t') && (s[i - 1] == ' ' || s[i - 1] == '\t'))) + len++; + i++; + } + return (len); +} + +char **ft_split_whitespaces(char const *s) +{ + int i; + char **str; + int j; + + str = NULL; + if (!(s)) + return (str); + str = (char **)malloc(sizeof(char *) * (ft_len_words(s) + 1)); + i = 0; + j = 0; + if (!(str)) + return (str); + while (s[i]) + { + if ((i == 0 && s[i] != ' ' && s[i] != '\t') || ((s[i] != ' ' + && s[i] != '\t') && (s[i - 1] == ' ' || s[i - 1] == '\t'))) + { + str[j] = ft_strdupi_w((s + i)); + j++; + } + i++; + } + str[j] = NULL; + return (str); +} diff --git a/42sh/src/line-editing/get_touch.c b/42sh/src/line-editing/get_touch.c new file mode 100644 index 00000000..d1d46075 --- /dev/null +++ b/42sh/src/line-editing/get_touch.c @@ -0,0 +1,92 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_touch.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/19 16:28:49 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:42:49 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static int ft_lecture_3(int ret, char **str, size_t *i) +{ + if (ret == 127 && (*i) > 0) + { + if ((*str)[*i - 1] != '\n') + ft_suppr_1(str, i); + else + ft_suppr_2(str, i); + } + else if (ret == TOUCHE_DELETE && (*str) && (*i) < ft_strlen((*str))) + { + if ((*str)[*i] != '\n') + ft_del_1(str, i); + else + ft_del_2(str, i); + } + else + return (0); + return (1); +} + +static int ft_lecture_2(int ret, char **str, size_t *i) +{ + if (ret == TOUCHE_OPT_LEFT || ret == TOUCHE_OPT_RIGHT) + ft_move_to_word(ret, i, *str); + else if (ret == TOUCHE_OPT_X || ret == TOUCHE_OPT_C + || ret == TOUCHE_OPT_V) + ft_cxv(ret, i, str); + else if (ret == FLECHE_DROITE || ret == FLECHE_GAUCHE) + ft_move_term(ret, i, *str); + else if (ret == TOUCHE_OPT_UP || ret == TOUCHE_OPT_DOWN) + ft_move_to_line(ret, i, *str); + else if (ft_isprint(ret)) + ft_print(str, ret, i); + else + return (0); + return (1); +} + +char *ft_lecture(t_list_history *head) +{ + char *str; + int ret; + size_t i; + + str = NULL; + i = 0; + while (42) + { + ret = 0; + read(0, &ret, sizeof(int)); +// if (ret == TOUCHE_TAB) +// ret = ft_completion(&str, &i); + if (ft_lecture_2(ret, &str, &i)) + continue ; + else if (ret == FLECHE_BAS || ret == FLECHE_HAUT) + { + if (str) + ft_putstr(str + i); + ft_history(&str, ret, &head); + if (str) + i = ft_strlen(str); + else + i = 0; + } + else if (ret == TOUCHE_HOME || ret == TOUCHE_END) + ft_home_end(str, ret, &i); + else if (ft_lecture_3(ret, &str, &i)) + continue ; + else if (ret == 10) + break ; + else if (ft_isascii(ret) == 0) + ft_read_it(ret, &i, &str); + } + if (str) + ft_putstr(str + i); + return (str); +} diff --git a/42sh/src/line-editing/get_touch_toolz.c b/42sh/src/line-editing/get_touch_toolz.c new file mode 100644 index 00000000..8a715fcc --- /dev/null +++ b/42sh/src/line-editing/get_touch_toolz.c @@ -0,0 +1,61 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_touch_toolz.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/19 16:42:54 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:42:45 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void ft_history_2(char **str, int ret, t_list_history **head) +{ + if (*str) + { + ft_curse_move(*str); + ft_strdel(str); + } + if (ret == FLECHE_BAS) + { + if ((*head)->next) + (*head) = (*head)->next; + if (!(*head)->str) + *str = NULL; + else + *str = ft_strdup((*head)->str); + if (*str) + ft_putstr(*str); + } +} + +void ft_history(char **str, int ret, t_list_history **head) +{ + if (!*head) + return ; + ft_history_2(str, ret, head); + if (ret == FLECHE_HAUT) + { + if ((*head)->prev) + (*head) = (*head)->prev; + if (!(*head)->str) + *str = NULL; + else + *str = ft_strdup((*head)->str); + if (*str) + ft_putstr(*str); + } +} + +void ft_move_to_word(int ret, size_t *pos, char *str) +{ + if (!str) + return ; + if (ret == TOUCHE_OPT_LEFT) + ft_found_prev_word(str, pos); + else if (ret == TOUCHE_OPT_RIGHT) + ft_found_next_word(str, pos); +} diff --git a/42sh/src/line-editing/get_touch_toolz_2.c b/42sh/src/line-editing/get_touch_toolz_2.c new file mode 100644 index 00000000..778ac3d4 --- /dev/null +++ b/42sh/src/line-editing/get_touch_toolz_2.c @@ -0,0 +1,94 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_touch_toolz_2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/19 16:43:58 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:42:41 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int ft_put(int nb) +{ + write(1, &nb, 1); + return (1); +} + +void ft_home_end(char *str, int ret, size_t *pos) +{ + if (ret == TOUCHE_END && str) + { + ft_putstr(str + *pos); + (*pos) = ft_strlen(str); + } + else if (ret == TOUCHE_HOME) + ft_move_to_beggin(str, pos); +} + + +void ft_move_left(size_t pos, char *str) +{ + int i; + int nb; + int prompt_size; + + prompt_size = data_singleton()->line.prompt_size; + i = 1; + nb = ft_nb_last_line(str, pos - 1) + 3; + while (i < nb) + { + ft_puttermcaps("nd"); + ++i; + } + if (!(pos - i) || i == 1) + { + while (--prompt_size + 3) + ft_puttermcaps("nd"); + } +} + +void ft_move_term(int ret, size_t *pos, char *str) +{ + int len; + int str_len; + + len = 0; + str_len = 0; + if (ret == FLECHE_DROITE && str && ft_strlen(str) > *pos + && str[(*pos)] == '\n') + { + ft_puttermcaps("do"); + ++(*pos); + } + else if (ret == FLECHE_GAUCHE && *pos > 0 + && str[(*pos) - 1] == '\n') + { + ft_puttermcaps("up"); + --(*pos); + str_len = ft_nb_line(str, *pos - 1); + len = ft_get_size_prev(str, *pos - 1) - (ft_size_term() * str_len); + if (ft_get_ind_prev(str, *pos - 1) == 0) + len += data_singleton()->line.prompt_size + 2; + while (--len + 1) + ft_puttermcaps("nd"); + } + else if (ret == FLECHE_DROITE && str && ft_strlen(str) > *pos) + { + ft_putchar(str[*pos]); + ++(*pos); + if (ft_nb_last_line(str, *pos) == ft_size_term() - 1) + { + ft_putchar(' '); + ft_putchar('\b'); + } + } + else if (ret == FLECHE_GAUCHE && *pos > 0) + { + ft_puttermcaps("le"); + --(*pos); + } +} diff --git a/42sh/src/line-editing/libftprintf.a b/42sh/src/line-editing/libftprintf.a new file mode 100644 index 0000000000000000000000000000000000000000..430239f15acf8a914387be4b1043d25005e17191 GIT binary patch literal 337424 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 E7gUFMm;e9( literal 0 HcmV?d00001 diff --git a/42sh/src/line-editing/line_return_toolz.c b/42sh/src/line-editing/line_return_toolz.c new file mode 100644 index 00000000..7a2e60ef --- /dev/null +++ b/42sh/src/line-editing/line_return_toolz.c @@ -0,0 +1,143 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* line_return_toolz.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/06 14:32:12 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:42:54 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static int ft_found_prev_char(char *str, size_t i) +{ + while (i) + { + if (str[i] == '\n') + return (1); + --i; + } + return (0); +} + +void ft_move_dell(char *str, size_t pos) +{ + size_t i; + int count; + + count = 1; + i = 0; + while (str[i + pos + 1]) + { + if (str[i + pos] == '\n') + ++count; + ++i; + } + while (i && str[i + pos + 1] != '\n') + { + ft_puttermcaps("le"); + --i; + } + if (i) + { + while (i && count) + { + if (str[i + pos + 1] == '\n') + { + ft_puttermcaps("up"); + --count; + } + --i; + } + while (pos && str[pos] != '\n') + { + ft_puttermcaps("nd"); + --pos; + } + } +} + +void ft_move_suppr(char *str, size_t pos) +{ + size_t i; + int count; + int prompt_size; + + prompt_size = data_singleton()->line.prompt_size; + count = 0; + i = 0; + while (str[i + pos]) + { + if (str[i + pos] == '\n') + ++count; + ++i; + } + while (i && str[i + pos] != '\n') + { + ft_puttermcaps("le"); + --i; + } + if (i) + { + while (i && count) + { + if (str[i + pos] == '\n') + { + ft_puttermcaps("up"); + --count; + } + --i; + } + if (pos > 2) + pos -= 2; + if (!ft_found_prev_char(str, pos)) + { + while (--prompt_size + 3) + ft_puttermcaps("nd"); + } + while (pos && str[pos] != '\n') + { + ft_puttermcaps("nd"); + --pos; + } + } +} + +void ft_curse_move(char *str) +{ + int i; + int count; + int prompt_size; + + prompt_size = data_singleton()->line.prompt_size; + count = 0; + i = 0; + while (str[i]) + { + if (str[i] == '\n') + { + count += ft_nb_line(str, i - 1); + count++; + } + ++i; + } + while (i && str[i] != '\n') + { + ft_putchar('\b'); + --i; + } + if (count) + { + while (count) + { + ft_puttermcaps("up"); + --count; + } + while (--prompt_size + 2) + ft_puttermcaps("nd"); + } + ft_puttermcaps("cd"); +} diff --git a/42sh/src/line-editing/list_toolz.c b/42sh/src/line-editing/list_toolz.c new file mode 100644 index 00000000..47a389a2 --- /dev/null +++ b/42sh/src/line-editing/list_toolz.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* list_toolz.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/17 11:37:47 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:42:57 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +t_list_history *ft_create_history_list(char *str) +{ + t_list_history *list; + + list = (t_list_history *)malloc(sizeof(t_list_history)); + if (!list) + return (NULL); + if (!str) + list->str = NULL; + else + list->str = ft_strdup(str); + list->prev = NULL; + list->next = NULL; + return (list); +} + +void ft_push_back_history(t_list_history **head, t_list_history *new) +{ + if (!*head) + { + *head = new; + (*head)->prev = ft_create_history_list(NULL); + (*head)->prev->next = (*head); + (*head)->next = ft_create_history_list(NULL); + (*head)->next->prev = (*head); + (*head) = (*head)->next; + return ; + } + while ((*head)->next) + (*head) = (*head)->next; + new->prev = (*head)->prev; + (*head)->prev->next = new; + new->next = (*head); + (*head)->prev = new; +} + +void ft_get_head(t_list_history **head) +{ + if (head && *head) + { + while ((*head)->next && (*head)->next->str) + (*head) = (*head)->next; + } +} diff --git a/42sh/src/line-editing/move_to_line.c b/42sh/src/line-editing/move_to_line.c new file mode 100644 index 00000000..ec451eae --- /dev/null +++ b/42sh/src/line-editing/move_to_line.c @@ -0,0 +1,99 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* move_to_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/09 13:21:40 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:01 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void ft_up(size_t *pos, char *str) +{ + int i; + int j; + int len; + int tmp; + int size_window; + + size_window = ft_size_term(); + i = 0; + len = 0; + j = 0; + if (!*pos) + return ; + while (len < size_window && *pos - i) + { + if (i && str[*pos - i] == '\n') + { + ft_puttermcaps("up"); + tmp = ft_nb_last_line(str, *pos - 1 - i) + 3; + if (ft_get_ind_prev(str, *pos - 1 - i)) + tmp -= 2; + while (j < tmp - 1) + { + ft_puttermcaps("nd"); + ++j; + } + if (!ft_get_ind_prev(str, *pos - 1 - i)) + ft_putchar('\b'); + len += ft_size_term() - tmp; + } + else + { + ft_putchar('\b'); + len++; + } + i++; + } + if (!(*pos - i)) + { + (*pos) = 0; + return ; + } + if (j) + { + ft_puttermcaps("nd"); + ++(*pos); + } + *pos -= i; +} + +static void ft_down(size_t *pos, char *str) +{ + int len; + int size_window; + char boolean; + + len = 0; + boolean = 0; + size_window = ft_size_term(); + while (str[*pos] && len < size_window) + { + if (str[*pos] == '\n' && !boolean) + { + len += size_window - ft_nb_last_line(str, *pos - 1) - 2; + boolean = 1; + } + else if (str[*pos] == '\n' && boolean) + return ; + else + ++len; + ft_putchar(str[*pos]); + ++(*pos); + } +} + +void ft_move_to_line(int ret, size_t *pos, char *str) +{ + if (!str) + return ; + if (ret == TOUCHE_OPT_UP) + ft_up(pos, str); + else if (ret == TOUCHE_OPT_DOWN) + ft_down(pos, str); +} diff --git a/42sh/src/line-editing/print_and_del.c b/42sh/src/line-editing/print_and_del.c new file mode 100644 index 00000000..2aea0b92 --- /dev/null +++ b/42sh/src/line-editing/print_and_del.c @@ -0,0 +1,138 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* print_and_del.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/05 16:02:43 by gwojda #+# #+# */ +/* Updated: 2017/01/19 18:08:54 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" +/* +void ft_print(char **str, int ret, size_t *i) +{ + int j; + + j = 0; + *str = ft_realloc_imput(*str, ret, *i); + while (*((*str) + *i + j) && *((*str) + *i + j) != '\n') + { + ft_putchar(*((*str) + *i + j)); + ++j; + } + ft_putnc('\b', j - 1); + ++(*i); +} +*/ +void ft_print(char **str, int ret, size_t *i) +{ + size_t len; + size_t tmp_len; + char boolean; + char boolean2; + + len = 0; + boolean = 0; + boolean2 = 0; + *str = ft_realloc_imput(*str, ret, *i); + tmp_len = ft_strlen(*str); + ft_puttermcaps("cd"); + write(1, *str + *i, 1); + if ((ft_nb_last_line(*str, *i + 1) + + (len % ft_size_term()) == ft_size_term() - 1) && (*str)[*i + 1] == '\n') + { + ft_putchar(' '); + boolean2 = 1; + } + if ((*str)[*i + 1] == '\n' && (*str)[*i + 2] && ft_strlen(*str) > *i + 2) + write(1, *str + *i + 1, ft_strlen(*str + *i + 2)); + else + write(1, *str + *i + 1, ft_strlen(*str + *i + 1)); + ++(*i); + while ((*str)[*i + len] && (*str)[*i + len] != '\n') + ++len; + if ((*i && !(ft_nb_last_line(*str, *i) + + (len % ft_size_term()))) || ft_nb_last_line(*str, *i) + + (len % ft_size_term()) == ft_size_term() - 1) + { + --(tmp_len); + ft_move_to_beggin(*str, &tmp_len); + boolean = 1; + } + else + ft_move_to_beggin(*str, &tmp_len); + if (boolean2) + ft_puttermcaps("up"); + write(1, *str, *i); + if (boolean) + ft_putstr(" \b"); +} + +void ft_suppr_1(char **str, size_t *i) +{ + int j; + + j = 0; + write(1, "\b", 1); + while (*((*str) + *i + j) && *((*str) + *i + j) != '\n') + { + ft_putchar(*((*str) + *i + j)); + ++j; + } + --(*i); + write(1, " ", 1); + if (ft_nb_last_line(*str, *i) + j == ft_size_term() - 2) + { + ft_puttermcaps("nd"); + ft_putnc('\b', j); + } + else + ft_putnc('\b', j + 1); + *str = ft_remove_imput((*str), (*i)); +} + +void ft_suppr_2(char **str, size_t *i) +{ + int j; + + j = 0; + ft_puttermcaps("up"); + ft_move_left(*i - 1, *str); + ft_puttermcaps("cd"); + ft_putstr(*str + *i); + ft_move_suppr(*str, *i); + --(*i); + *str = ft_remove_imput((*str), (*i)); +} + +void ft_del_1(char **str, size_t *i) +{ + int j; + + j = 0; + while (*((*str) + *i + j + 1) && *((*str) + *i + j + 1) != '\n') + { + ft_putchar(*((*str) + *i + j + 1)); + ++j; + } + write(1, " ", 1); + if (ft_nb_last_line(*str, *i) + j == ft_size_term() - 2) + ft_putnc('\b', j); + else + ft_putnc('\b', j + 1); + (*str) = ft_remove_imput((*str), (*i)); +} + +void ft_del_2(char **str, size_t *i) +{ + int j; + + j = 1; + ft_puttermcaps("cd"); + ft_putstr(*str + *i + 1); + ft_move_dell(*str, *i); + *str = ft_remove_imput((*str), (*i)); +} diff --git a/42sh/src/line-editing/prompt.c b/42sh/src/line-editing/prompt.c new file mode 100644 index 00000000..f72dbc7a --- /dev/null +++ b/42sh/src/line-editing/prompt.c @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* prompt.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/13 13:51:33 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:48:32 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +/* ft_printf de la lib bug avec unicode */ + +static void ft_get_date(void) +{ + time_t t; + struct tm tm; + + t = time(NULL); + tm = *localtime(&t); + ft_putstr("\033[22;32m"); + printf("%.2d:%.2d:%.2d ", tm.tm_hour, tm.tm_min, tm.tm_sec); + fflush(NULL); + if (tm.tm_hour >= 8 && tm.tm_hour < 20) + printf("\033[22;33m%C ", L'☀'); + else + printf("\033[22;33m%C ", L'★'); + fflush(NULL); +} + +static int ft_currend_dir(void) +{ + int i; + int j; + char **env; + + i = 0; + env = data_singleton()->env; + while (ft_strncmp(env[i], "PWD=", 4)) + ++i; + j = ft_strlen(env[i]); + while (j && env[i][j] != '/') + --j; + ft_putstr(env[i] + j + 1); + return (ft_strlen(env[i] + j + 1)); +} + +void ft_prompt(void) +{ + int ret; + + ft_get_date(); + ft_putstr("\033[22;36m"); + ret = ft_currend_dir(); + ft_putstr("\033[22;33m"); + printf(" %C", L'›'); + fflush(NULL); + ft_putstr("\033[22;37m"); + data_singleton()->line.prompt_size = ret + 12; +} diff --git a/42sh/src/line-editing/quotes_gest.c b/42sh/src/line-editing/quotes_gest.c new file mode 100644 index 00000000..f5ca96e9 --- /dev/null +++ b/42sh/src/line-editing/quotes_gest.c @@ -0,0 +1,83 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* quotes_gest.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/05 12:20:19 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:10 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int ft_check_quotes_num(char *s) +{ + int i; + char simp; + char doub; + + i = 0; + simp = 0; + doub = 0; + while (s[i]) + { + if (s[i] == '\'') + { + simp = 1; + ++i; + while (s[i] && s[i] != '\'') + ++i; + if (s[i] == '\'') + simp = 0; + } + else if (s[i] == '"') + { + doub = 1; + ++i; + while (s[i] && s[i] != '"') + ++i; + if (s[i] == '"') + doub = 0; + } + if (s[i]) + ++i; + } + if (doub) + return (2); + else if (simp) + return (1); + return (0); +} + +void ft_check_quotes(char **s, t_list_history *head) +{ + int ret; + char *tmp; + char *tmp2; + int prompt_size_mem; + + if (!*s) + return ; + while ((ret = (ft_check_quotes_num(*s)))) + { + if (ret == 1) + ft_putstr("squote> "); + else if (ret == 2) + ft_putstr("dquote> "); + tmp = *s; + *s = ft_strjoin(*s, "\n"); + ft_strdel(&tmp); + tmp = *s; + prompt_size_mem = data_singleton()->line.prompt_size; + tmp2 = ft_lecture(head); + data_singleton()->line.prompt_size = prompt_size_mem; + ft_putchar('\n'); + if (!tmp2) + continue ; + *s = ft_strjoin(tmp, tmp2); + ft_strdel(&tmp); + ft_strdel(&tmp2); + } +} diff --git a/42sh/src/line-editing/reader.c b/42sh/src/line-editing/reader.c new file mode 100644 index 00000000..48bc68e7 --- /dev/null +++ b/42sh/src/line-editing/reader.c @@ -0,0 +1,61 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* reader.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/19 16:52:57 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:13 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void ft_read_it_2(int input, char t[5]) +{ + t[3] = (input / ft_pow(256, 3)) ? (input / ft_pow(256, 3)) : '\0'; + if (t[3]) + input = input % ft_pow(256, 3); + t[2] = (input / ft_pow(256, 2)) ? (input / ft_pow(256, 2)) : '\0'; + if (t[2]) + input = input % ft_pow(256, 2); + t[1] = (input / ft_pow(256, 1)) ? (input / ft_pow(256, 1)) : '\0'; + if (t[1]) + input = input % ft_pow(256, 1); + t[0] = (input / ft_pow(256, 0)) ? (input / ft_pow(256, 0)) : '\0'; + if (t[0]) + input = input % ft_pow(256, 0); + t[4] = '\0'; +} + +void ft_read_it(int input, size_t *pos, char **str) +{ + int i; + int j; + char t[5]; + + j = 0; + i = 0; + if (input == TOUCHE_DELETE || input < 0 || input == 892427035 || input == 126 || + input == 993090331 || input == 925981467 || input == 21298 || + input == 892427035 || input == 8270395 || input == 942758683 || + input == 993090331 || input == 18489 || input == 17977) + + return ; + ft_read_it_2(input, t); + while (i < 4 && t[i] == '\0') + ++i; + while (i < 4) + { + if (t[i]) + { + *str = ft_realloc_imput(*str, t[i], *pos); + ++(*pos); + ++j; + } + ++i; + } + ft_putstr((*str) + (*pos) - j); + ft_putnc('\b', ft_strlen((*str)) - ((*pos))); +} diff --git a/42sh/src/line-editing/readline.c b/42sh/src/line-editing/readline.c new file mode 100644 index 00000000..40c33543 --- /dev/null +++ b/42sh/src/line-editing/readline.c @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* readline.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/15 14:19:48 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:16 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_init_line(void) +{ + data_singleton()->line.input = NULL; + data_singleton()->line.prompt_size = 0; +} + +struct termios *ft_save_stats_term(void) +{ + static struct termios *term_save = NULL; + + if (!term_save) + { + term_save = (struct termios *)malloc(sizeof(struct termios)); + tcgetattr(0, term_save); + } + return (term_save); +} + +struct termios *ft_stats_term_termcaps(void) +{ + static struct termios *term = NULL; + + if (!term) + { + term = (struct termios *)malloc(sizeof(struct termios)); + tcgetattr(0, term); + (*term).c_lflag &= ~(ECHO | ICANON | ISIG); + (*term).c_cc[VMIN] = 1; + (*term).c_cc[VTIME] = 0; + } + return (term); +} + +int ft_readline(void) +{ + static t_list_history *head = NULL; + + ft_prompt(); + if (tcsetattr(0, TCSADRAIN, ft_stats_term_termcaps()) == -1) + return (-1); + data_singleton()->line.input = ft_lecture(head); + ft_putstr("\n"); + ft_check_quotes(&data_singleton()->line.input, head); + if (data_singleton()->line.input) + ft_push_back_history(&head, ft_create_history_list(data_singleton()->line.input)); + if (tcsetattr(0, TCSADRAIN, ft_save_stats_term()) == -1) + return (-1); + return (0); +} diff --git a/42sh/src/line-editing/rl_bitset.c b/42sh/src/line-editing/rl_bitset.c deleted file mode 100644 index 60190f51..00000000 --- a/42sh/src/line-editing/rl_bitset.c +++ /dev/null @@ -1,71 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_bitset.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 10:31:34 by sbenning #+# #+# */ -/* Updated: 2016/12/12 13:26:06 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -static void rl_toogle_esc(t_line *line, int set) -{ - static int esc; - - if (!set) - esc = RL_IS(line->bitset, RL_ESC); - else if (set && esc) - { - RL_UNSET(line->bitset, RL_ESC); - esc = 0; - } -} - -static void rl_toogle_select(t_line *line, int set) -{ - static int select; - - if (!set) - select = RL_IS(line->bitset, RL_SELECT); - else if (set &&\ - ((select && RL_NOT(line->bitset, RL_SELECT)) ||\ - (!select && RL_IS(line->bitset, RL_SELECT)))) - rl_reset_display(line); -} - -void rl_toogle_bitset(t_line *line, int set) -{ - rl_toogle_esc(line, set); - rl_toogle_select(line, set); -} - -int rl_finish(t_line *line) -{ - int finish; - int stack; - - stack = RL_IS(line->bitset, RL_STACK); - finish = RL_IS(line->bitset, RL_FINISH); - if (!stack && !finish) - return (0); - rl_end_function(line, 0); - write(1, "\n", 1); - if (stack) - { - RL_UNSET(line->bitset, RL_STACK); - if (rl_stack_line(line) < 0) - return (-1); - } - if (finish) - return (1); - if (curs_coo_setup(&line->curs) < 0) - return (-1); - rl_set_prompt(line); - rl_put_prompt(line); - return (0); -} - diff --git a/42sh/src/line-editing/rl_clipboard_function.c b/42sh/src/line-editing/rl_clipboard_function.c deleted file mode 100644 index 5b884d97..00000000 --- a/42sh/src/line-editing/rl_clipboard_function.c +++ /dev/null @@ -1,62 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_clipboard_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:32:11 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:34:12 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_copy_function(t_line *line, long int input) -{ - if (line->clipboard) - ft_memdel((void **)&line->clipboard); - if (rl_clipboard_new(line) < 0) - return (-1); - return (0); - (void)input; -} - -int rl_cut_function(t_line *line, long int input) -{ - if (line->clipboard) - ft_memdel((void **)&line->clipboard); - if (rl_clipboard_new_cut(line) < 0) - return (-1); - rl_reset_display_post(line); - return (0); - (void)input; -} - -int rl_paste_function(t_line *line, long int input) -{ - int len; - - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (!line->clipboard) - return (0); - len = ft_strlen(line->clipboard); - if (!len) - return (0); - if (RL_IS(line->bitset, RL_INSERT)) - { - if (input_move(line, line->clipboard, len) < 0) - return (-1); - } - else - { - if (input_maj(line, line->clipboard, len) < 0) - return (-1); - } - rl_reset_display_post(line); - curs_forward(&line->curs, len); - line->pos += len; - return (0); - (void)input; -} diff --git a/42sh/src/line-editing/rl_clipboard_utility.c b/42sh/src/line-editing/rl_clipboard_utility.c deleted file mode 100644 index 86b1987e..00000000 --- a/42sh/src/line-editing/rl_clipboard_utility.c +++ /dev/null @@ -1,95 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_clipboard.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/09 14:04:33 by sbenning #+# #+# */ -/* Updated: 2016/12/09 15:57:47 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_clipboard_new_selected(t_line *line) -{ - int start; - int size; - - RL_UNSET(line->bitset, RL_SELECT); - start = (line->select > line->pos) ? line->pos : line->select; - size = (line->select > line->pos ? line->select - line->pos : line->pos - line->select); - if ((line->clipboard = ft_strsub(line->input, start, (size_t)size)) == NULL) - return (-1); - return (0); -} - -int rl_clipboard_new_selected_cut(t_line *line) -{ - int start; - int size; - - RL_UNSET(line->bitset, RL_SELECT); - start = (line->select > line->pos) ? line->pos : line->select; - size = (line->select > line->pos ? line->select - line->pos : line->pos - line->select); - if ((line->clipboard = ft_strsub(line->input, start, (size_t)size)) == NULL) - return (-1); - if (line->pos != start) - { - curs_backward(&line->curs, line->pos - start); - line->pos = line->pos - (line->pos - start); - } - input_remove(line, -size); - return (0); -} - -int rl_clipboard_new(t_line *line) -{ - int start; - int real_pos; - int size; - - if (RL_IS(line->bitset, RL_SELECT)) - return (rl_clipboard_new_selected(line)); - size = line->curs.win_co; - RL_UNSET(line->bitset, RL_SELECT); - real_pos = line->pos + ft_strlen(line->prompt); - start = (real_pos / line->curs.win_co) * line->curs.win_co; - if (start) - start -= ft_strlen(line->prompt); - else - size -= ft_strlen(line->prompt); - if ((line->clipboard = ft_strsub(line->input, start, size)) == NULL) - return (-1); - return (0); -} - -int rl_clipboard_new_cut(t_line *line) -{ - int start; - int real_pos; - int size; - - if (RL_IS(line->bitset, RL_SELECT)) - return (rl_clipboard_new_selected_cut(line)); - size = line->curs.win_co; - RL_UNSET(line->bitset, RL_SELECT); - real_pos = line->pos + ft_strlen(line->prompt); - start = (real_pos / line->curs.win_co) * line->curs.win_co; - if (start) - start -= ft_strlen(line->prompt); - else - size -= ft_strlen(line->prompt); - if ((line->clipboard = ft_strsub(line->input, start, size)) == NULL) - return (-1); - if (line->pos != start) - { - curs_backward(&line->curs, line->pos - start); - line->pos = line->pos - (line->pos - start); - } - if (size > line->used - start) - size = line->used - start; - input_remove(line, -size); - return (0); -} diff --git a/42sh/src/line-editing/rl_comp_function.c b/42sh/src/line-editing/rl_comp_function.c deleted file mode 100644 index dd1d9729..00000000 --- a/42sh/src/line-editing/rl_comp_function.c +++ /dev/null @@ -1,41 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_comp_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 10:49:03 by sbenning #+# #+# */ -/* Updated: 2017/01/10 11:51:19 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -static int ft_autocomp(t_data *data) -{ - return (0); - int li; - int co; - - li = data->line.curs.li; - co = data->line.curs.co; - ft_putstr("\nTeeeeeeest"); - data->line.input = ft_strjoin(data->line.input, " JOIN "); - curs_goto(&data->line.curs, li, co + 6); - return (0); -} - -int rl_comp_function(t_line *line, long int input) -{ - t_data *data; - - data = data_singleton(); - if (ft_autocomp(data) < 0) - return (-1); - line->size = ft_strlen(line->input); - line->used = line->size; - curs_reset(0); - return (0); - (void)input; -} diff --git a/42sh/src/line-editing/rl_default_function.c b/42sh/src/line-editing/rl_default_function.c deleted file mode 100644 index 5c953981..00000000 --- a/42sh/src/line-editing/rl_default_function.c +++ /dev/null @@ -1,38 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_default_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 18:30:38 by sbenning #+# #+# */ -/* Updated: 2016/12/12 11:50:26 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_default_function(t_line *line, long int input) -{ - if (!ft_isprint(input)) - return (0); - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (RL_IS(line->bitset, RL_INSERT)) - { - if (input_move(line, (char *)&input, sizeof(char)) < 0) - return (-1); - } - else - { - if (input_maj(line, (char *)&input, sizeof(char)) < 0) - return (-1); - } - rl_reset_display_post(line); - curs_forward(&line->curs, sizeof(char)); - line->pos += 1; -/* curs_write(&line->curs, (char *)&input, sizeof(char)); - line->pos += 1; - rl_reset_display_post(line); -*/ return (0); -} diff --git a/42sh/src/line-editing/rl_display.c b/42sh/src/line-editing/rl_display.c deleted file mode 100644 index 26f787f5..00000000 --- a/42sh/src/line-editing/rl_display.c +++ /dev/null @@ -1,61 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_display.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 18:38:39 by sbenning #+# #+# */ -/* Updated: 2016/12/10 11:52:18 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -void rl_reset_display_post(t_line *line) -{ - size_t len; - - len = ft_strlen(line->input + line->pos); - curs_clear_post(&line->curs); - if (len == 0) - return ; - if (RL_NOT(line->bitset, RL_SELECT) || (RL_IS(line->bitset, RL_SELECT) && line->select < line->pos)) - { - curs_write_static(&line->curs, line->input + line->pos, len); - return; - } - if (line->select == line->used) - { - curs_video_write_static(&line->curs, line->input + line->pos, len); - return ; - } - curs_video_write(&line->curs, line->input + line->pos, line->select - line->pos); - curs_write(&line->curs, line->input + line->select, line->used - line->select); - curs_backward(&line->curs, line->used - line->pos); -} - -void rl_reset_display_ante(t_line *line) -{ - if (!line->pos) - return ; - curs_backward(&line->curs, line->pos); - if (RL_NOT(line->bitset, RL_SELECT) || (RL_IS(line->bitset, RL_SELECT) && line->select > line->pos)) - { - curs_write(&line->curs, line->input, line->pos); - return ; - } - if (line->select == 0) - { - curs_video_write(&line->curs, line->input, line->pos); - return ; - } - curs_write(&line->curs, line->input, line->select); - curs_video_write(&line->curs, line->input + line->select, line->pos - line->select); -} - -void rl_reset_display(t_line *line) -{ - rl_reset_display_ante(line); - rl_reset_display_post(line); -} diff --git a/42sh/src/line-editing/rl_dynamic_buffer.c b/42sh/src/line-editing/rl_dynamic_buffer.c deleted file mode 100644 index d6f1a673..00000000 --- a/42sh/src/line-editing/rl_dynamic_buffer.c +++ /dev/null @@ -1,99 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* input_buffer.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 18:42:31 by sbenning #+# #+# */ -/* Updated: 2016/12/12 10:28:59 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - - -int input_extend(t_line *line, int size) -{ - char *tmp; - - size = (RL_OFFSET > size ? RL_OFFSET : size) + line->size; - if ((tmp = ft_strnew(size)) == NULL) - return (-1); - if (line->input) - { - ft_memcpy(tmp, line->input, line->size); - free(line->input); - } - line->input = tmp; - line->size = size; - return (0); -} - -int rl_dynamic_buffer_extend(t_line *line, int size) -{ - return (input_extend(line, size)); -} - -int input_maj(t_line *line, char *str, int size) -{ - if (line->used + size >= line->size) - { - if (rl_dynamic_buffer_extend(line, size) < 0) - return (-1); - } - ft_memcpy(line->input + line->pos, str, size); - if (line->pos + size > line->used) - line->used = line->pos + size; - return (0); -} - -int input_move(t_line *line, char *str, int size) -{ - char *dup; - - if (line->used + size >= line->size) - { - if (rl_dynamic_buffer_extend(line, size) < 0) - return (-1); - } - if ((dup = ft_strdup(line->input + line->pos)) == NULL) - return (-1); - ft_memcpy(line->input + line->pos, str, size); - ft_memcpy(line->input + line->pos + size, dup, ft_strlen(dup)); - free(dup); - line->used += size; - return (0); -} - -void input_remove(t_line *line, int size) -{ - char *start; - - if (size < 0) - { - start = line->input + line->pos; - size *= -1; - } - else - start = (line->input + line->pos) - size; - ft_strcpy(start, start + size); - line->used -= size; - ft_bzero(line->input + line->used, line->size - line->used); -} - - -int rl_dynamic_buffer_replace(t_line *line, char *str, int size) -{ - return (input_maj(line, str, size)); -} - -int rl_dynamic_buffer_insert(t_line *line, char *str, int size) -{ - return (input_move(line, str, size)); -} - -void rl_dynamic_buffer_remove(t_line *line, int size) -{ - input_remove(line, size); -} diff --git a/42sh/src/line-editing/rl_long_move_function.c b/42sh/src/line-editing/rl_long_move_function.c deleted file mode 100644 index 5769b90e..00000000 --- a/42sh/src/line-editing/rl_long_move_function.c +++ /dev/null @@ -1,65 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_long_move_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:55:48 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:57:16 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_home_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (!line->pos) - return (0); - curs_backward(&line->curs, line->pos); - line->pos = 0; - return (0); - (void)input; -} - -int rl_end_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (line->pos == line->used) - return (0); - curs_forward(&line->curs, line->used - line->pos); - line->pos = line->used; - return (0); - (void)input; -} - -int rl_select_home_function(t_line *line, long int input) -{ - int ret; - - if (!line->pos) - return (0); - if (RL_NOT(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_home_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_post(line); - return (ret); -} - -int rl_select_end_function(t_line *line, long int input) -{ - int ret; - - if (line->pos == line->used) - return (0); - if (RL_NOT(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_end_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_ante(line); - return (ret); -} diff --git a/42sh/src/line-editing/rl_merge_line.c b/42sh/src/line-editing/rl_merge_line.c deleted file mode 100644 index ed0b0ea3..00000000 --- a/42sh/src/line-editing/rl_merge_line.c +++ /dev/null @@ -1,40 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_merge_line.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/09 01:25:03 by sbenning #+# #+# */ -/* Updated: 2016/12/12 11:34:02 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_merge_line(t_line *line) -{ - t_list *next; - char *chunk; - size_t size; - - while (line->stack) - { - next = line->stack->next; - chunk = (char *)line->stack->content; - size = line->stack->content_size - 1; - if (input_maj(line, chunk, size) < 0) - return (-1); - line->pos += size; - /* if (next) - { - if (input_maj(line, "\n", 1) < 0) - return (-1); - line->pos += 1; - } - */ free(chunk); - free(line->stack); - line->stack = next; - } - return (0); -} diff --git a/42sh/src/line-editing/rl_page_move_function.c b/42sh/src/line-editing/rl_page_move_function.c deleted file mode 100644 index efd20d87..00000000 --- a/42sh/src/line-editing/rl_page_move_function.c +++ /dev/null @@ -1,72 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_page_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:39:57 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:42:37 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_pagedown_function(t_line *line, long int input) -{ - int len; - - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (line->pos == line->used) - return (0); - len = line->used - line->pos; - len = (line->curs.win_co > len ? len : line->curs.win_co); - curs_forward(&line->curs, len); - line->pos += len; - return (0); - (void)input; -} - -int rl_pageup_function(t_line *line, long int input) -{ - int len; - - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (!line->pos) - return (0); - len = (line->curs.win_co > line->pos ? line->pos : line->curs.win_co); - curs_backward(&line->curs, len); - line->pos -= len; - return (0); - (void)input; -} - -int rl_select_pagedown_function(t_line *line, long int input) -{ - int ret; - - if (line->pos == line->used) - return (0); - if (RL_NOT(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_pagedown_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_ante(line); - return (ret); -} - -int rl_select_pageup_function(t_line *line, long int input) -{ - int ret; - - if (!line->pos) - return (0); - if (RL_NOT(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_pageup_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_post(line); - return (ret); -} diff --git a/42sh/src/line-editing/rl_prompt.c b/42sh/src/line-editing/rl_prompt.c deleted file mode 100644 index 3dc9e4f0..00000000 --- a/42sh/src/line-editing/rl_prompt.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_prompt.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/09 01:45:09 by sbenning #+# #+# */ -/* Updated: 2017/01/10 16:41:28 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" -#include "job_control.h" - -void rl_set_prompt(t_line *line) -{ - if (RL_IS(line->bitset, RL_ESC)) - line->prompt = RL_PROMPT_ESC; - else if (RL_IS(line->bitset, RL_QUOTE)) - line->prompt = RL_PROMPT_QUOTE; - else if (RL_IS(line->bitset, RL_DQUOTE)) - line->prompt = RL_PROMPT_DQUOTE; - else - line->prompt = RL_PROMPT_DEFAULT; -} - -void rl_put_prompt(t_line *line) -{ - curs_write(&line->curs, line->prompt, ft_strlen(line->prompt)); -} diff --git a/42sh/src/line-editing/rl_quoting_function.c b/42sh/src/line-editing/rl_quoting_function.c deleted file mode 100644 index 57ce891e..00000000 --- a/42sh/src/line-editing/rl_quoting_function.c +++ /dev/null @@ -1,44 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_quoting_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:35:25 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:36:41 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_esc_function(t_line *line, long int input) -{ - if (RL_NOT(line->bitset, RL_ESC)) - RL_SET(line->bitset, RL_ESC); - return (rl_default_function(line, input)); -} - -int rl_quote_function(t_line *line, long int input) -{ - if (RL_NOT(line->bitset, RL_ESC)) - { - if (RL_IS(line->bitset, RL_QUOTE)) - RL_UNSET(line->bitset, RL_QUOTE); - else - RL_SET(line->bitset, RL_QUOTE); - } - return (rl_default_function(line, input)); -} - -int rl_dquote_function(t_line *line, long int input) -{ - if (RL_NOT(line->bitset, RL_ESC)) - { - if (RL_IS(line->bitset, RL_DQUOTE)) - RL_UNSET(line->bitset, RL_DQUOTE); - else - RL_SET(line->bitset, RL_DQUOTE); - } - return (rl_default_function(line, input)); -} diff --git a/42sh/src/line-editing/rl_remove_function.c b/42sh/src/line-editing/rl_remove_function.c deleted file mode 100644 index feeab949..00000000 --- a/42sh/src/line-editing/rl_remove_function.c +++ /dev/null @@ -1,39 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_remove_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:45:08 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:46:39 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_retarr_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (!line->pos) - return (0); - input_remove(line, 1); - curs_backward(&line->curs, 1); - line->pos -= 1; - rl_reset_display_post(line); - return (0); - (void)input; -} - -int rl_suppr_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (line->pos == line->used) - return (0); - input_remove(line, -1); - rl_reset_display_post(line); - return (0); - (void)input; -} diff --git a/42sh/src/line-editing/rl_setup.c b/42sh/src/line-editing/rl_setup.c deleted file mode 100644 index 3e68d63a..00000000 --- a/42sh/src/line-editing/rl_setup.c +++ /dev/null @@ -1,46 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_setup.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 18:07:47 by sbenning #+# #+# */ -/* Updated: 2017/01/11 17:35:12 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_setup(t_line *line) -{ - if (SHELL_HAS_JOBC(data_singleton()->opts)) - do_job_notification(); - data_singleton()->opts &= ~SHELL_MODE_MASK; - data_singleton()->opts |= SHELL_MODE_INPUT; - ft_bzero(line, sizeof(t_line)); - if (curs_setup(&line->curs) < 0) - return (-1); - RL_SET(line->bitset, RL_INSERT); - rl_set_prompt(line); - return (0); -} - -int rl_cleanup(t_line *line) -{ - data_singleton()->opts &= ~SHELL_MODE_MASK; - data_singleton()->opts |= SHELL_MODE_EXEC; - if (curs_cleanup(&line->curs) < 0) - return (-1); - if (rl_merge_line(line) < 0) - return (-1); - return (0); -} - -void rl_teardown(t_line *line) -{ - rl_cleanup(line); - if (line->input) - ft_memdel((void **)&line->input); - line->pos = 0; -} diff --git a/42sh/src/line-editing/rl_short_move_function.c b/42sh/src/line-editing/rl_short_move_function.c deleted file mode 100644 index 8399cf19..00000000 --- a/42sh/src/line-editing/rl_short_move_function.c +++ /dev/null @@ -1,65 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_move_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:53:18 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:54:52 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_left_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (!line->pos) - return (0); - curs_backward(&line->curs, 1); - line->pos -= 1; - return (0); - (void)input; -} - -int rl_right_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - if (line->pos == line->used) - return (0); - curs_forward(&line->curs, 1); - line->pos += 1; - return (0); - (void)input; -} - -int rl_select_left_function(t_line *line, long int input) -{ - int ret; - - if (!line->pos) - return (0); - if (RL_NOT(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_left_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_post(line); - return (ret); -} - -int rl_select_right_function(t_line *line, long int input) -{ - int ret; - - if (line->pos == line->used) - return (0); - if (!RL_IS(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_right_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_ante(line); - return (ret); -} diff --git a/42sh/src/line-editing/rl_stack_line.c b/42sh/src/line-editing/rl_stack_line.c deleted file mode 100644 index 3e1a538b..00000000 --- a/42sh/src/line-editing/rl_stack_line.c +++ /dev/null @@ -1,34 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_stack_line.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/09 01:06:54 by sbenning #+# #+# */ -/* Updated: 2017/01/10 13:07:37 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_stack_line(t_line *line) -{ - t_list *elem; - - elem = ft_lstnew(line->input, line->used + 1); - if (elem == NULL) - return (-1); - ft_lsteadd(&line->stack, elem); - ft_memdel((void **)&line->input); - line->pos = 0; - line->size = 0; - line->used = 0; - if (RL_NOT(line->bitset, RL_ESC)) - return (0); - elem = ft_lstnew("\n", 2); - if (elem == NULL) - return (-1); - ft_lsteadd(&line->stack, elem); - return (0); -} diff --git a/42sh/src/line-editing/rl_state_function.c b/42sh/src/line-editing/rl_state_function.c deleted file mode 100644 index 200961d8..00000000 --- a/42sh/src/line-editing/rl_state_function.c +++ /dev/null @@ -1,34 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_state_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 13:00:59 by sbenning #+# #+# */ -/* Updated: 2016/12/12 13:01:51 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_insert_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_INSERT)) - RL_UNSET(line->bitset, RL_INSERT); - else - RL_SET(line->bitset, RL_INSERT); - return (0); - (void)input; -} - -int rl_nl_function(t_line *line, long int input) -{ - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - RL_SET(line->bitset, RL_STACK); - if (RL_NOT(line->bitset, RL_QUOTING)) - RL_SET(line->bitset, RL_FINISH); - return (0); - (void)input; -} diff --git a/42sh/src/line-editing/rl_word_move_function.c b/42sh/src/line-editing/rl_word_move_function.c deleted file mode 100644 index 205d9046..00000000 --- a/42sh/src/line-editing/rl_word_move_function.c +++ /dev/null @@ -1,67 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_word_function.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:47:31 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:51:53 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_wleft_function(t_line *line, long int input) -{ - size_t len; - - if (!line->pos) - return (0); - len = rl_previous_word(line); - curs_backward(&line->curs, len); - line->pos -= len; - return (0); - (void)input; -} - -int rl_wright_function(t_line *line, long int input) -{ - size_t len; - - if (line->pos == line->used) - return (0); - len = rl_next_word(line); - curs_forward(&line->curs, len); - line->pos += len; - return (0); - (void)input; -} - -int rl_select_wleft_function(t_line *line, long int input) -{ - int ret; - - if (!line->pos) - return (0); - if (RL_NOT(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_wleft_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_post(line); - return (ret); -} - -int rl_select_wright_function(t_line *line, long int input) -{ - int ret; - - if (line->pos == line->used) - return (0); - if (RL_NOT(line->bitset, RL_SELECT)) - line->select = line->pos; - ret = rl_wright_function(line, input); - RL_SET(line->bitset, RL_SELECT); - rl_reset_display_ante(line); - return (ret); -} diff --git a/42sh/src/line-editing/rl_word_utility.c b/42sh/src/line-editing/rl_word_utility.c deleted file mode 100644 index 46010b9f..00000000 --- a/42sh/src/line-editing/rl_word_utility.c +++ /dev/null @@ -1,51 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* rl_word_utility.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/12 12:48:07 by sbenning #+# #+# */ -/* Updated: 2016/12/12 12:50:44 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_readline.h" - -int rl_previous_word(t_line *line) -{ - int i; - int len; - - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - i = 0; - while (line->input[i] && i < line->pos) - { - if (!i && line->input[i] != ' ') - len = i; - if (i && line->input[i - 1] == ' ' && line->input[i] != ' ') - len = i; - i++; - } - return (line->pos - len); -} - -int rl_next_word(t_line *line) -{ - int i; - int flag; - - if (RL_IS(line->bitset, RL_SELECT)) - RL_UNSET(line->bitset, RL_SELECT); - i = line->pos; - flag = 0; - while (line->input[i] && (line->input[i] == ' ' || !flag)) - { - if (line->input[i] == ' ') - flag = 1; - i++; - } - return (i - line->pos); -} - diff --git a/42sh/src/line-editing/toolz.c b/42sh/src/line-editing/toolz.c new file mode 100644 index 00000000..45bab9f5 --- /dev/null +++ b/42sh/src/line-editing/toolz.c @@ -0,0 +1,95 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* toolz.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/16 17:06:30 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:28 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_putnc(char c, int n) +{ + int i; + + i = 0; + while (i < n) + { + write(1, &c, 1); + ++i; + } +} + +void ft_free_tabstr(char ***env) +{ + int i; + + i = 0; + while ((*env)[i]) + { + free((*env)[i]); + ++i; + } + free(*env); + env = NULL; +} + +int ft_is_whitespaces(char *str) +{ + int i; + + i = 0; + while (str[i]) + { + if (str[i] != '\t' || str[i] != ' ') + return (1); + ++i; + } + return (0); +} + + +char *ft_strndup(char const *s, int n) +{ + int i; + char *str; + + i = 0; + str = (char *)malloc(sizeof(char) * (n + 1)); + if (str) + { + while (i < n) + { + str[i] = s[i]; + i++; + } + str[i] = '\0'; + } + return (str); +} + +char *ft_strdupi(char const *s) +{ + int i; + char *str; + + i = 0; + while (s[i] && s[i] != ';' && s[i] != '>' && s[i] != '<' + && ft_strncmp(s + i, "||", 2)) + i++; + str = (char *)malloc(sizeof(char) * (i + 1)); + if (str) + { + str[i--] = '\0'; + while (i >= 0) + { + str[i] = s[i]; + i--; + } + } + return (str); +} diff --git a/42sh/src/line-editing/curs_goto.c b/42sh/src/line-editing/toolz2.c similarity index 50% rename from 42sh/src/line-editing/curs_goto.c rename to 42sh/src/line-editing/toolz2.c index 389c982d..bb667269 100644 --- a/42sh/src/line-editing/curs_goto.c +++ b/42sh/src/line-editing/toolz2.c @@ -1,31 +1,44 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* curs_goto.c :+: :+: :+: */ +/* toolz2.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ +/* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/08 17:10:22 by sbenning #+# #+# */ -/* Updated: 2016/12/09 16:58:26 by sbenning ### ########.fr */ +/* Created: 2017/01/07 11:00:28 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:32 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ -#include "ft_curs.h" +#include "minishell.h" -/* - * Move the cursor to the given coordonate // scroll screen if line is unreachable -*/ - -void curs_goto(t_curs *curs, int li, int co) +void ft_puttermcaps(char *str) { - if (co >= curs->win_co) - co = curs->win_co - 1; - if (li >= curs->win_li) - { - ft_putstr(tgetstr("sf", NULL)); - li = curs->win_li - 1; - } - ft_putstr(tgoto(tgetstr("cm", NULL), co, li)); - curs->li = li; - curs->co = co; + char *res; + char *env; + + env = getenv("TERM"); + if ((res = tgetstr(str, &env)) == NULL) + return ; + tputs(res, 0, ft_put); +} + +int ft_size_term(void) +{ + return (tgetnum("co")); +} + +long long ft_pow(int nbr, int power) +{ + int i; + long long ret; + + i = 0; + ret = 1; + while (i < power) + { + ret *= nbr; + i++; + } + return (ret); } diff --git a/42sh/src/line-editing/toolz_parseur.c b/42sh/src/line-editing/toolz_parseur.c new file mode 100644 index 00000000..55c1881c --- /dev/null +++ b/42sh/src/line-editing/toolz_parseur.c @@ -0,0 +1,91 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* toolz_parseur.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/16 16:14:46 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:19 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +char *ft_realloc_imput(char *str, int a, size_t pos) +{ + int i; + char tmp[2]; + char *str_tmp; + char *new_str; + + i = 0; + tmp[0] = (char)a; + tmp[1] = '\0'; + if (!str) + { + new_str = ft_strdup(tmp); + return (new_str); + } + str_tmp = ft_strndup(str, pos); + new_str = ft_strjoin(str_tmp, tmp); + free(str_tmp); + str_tmp = ft_strjoin(new_str, str + pos); + free(new_str); + free(str); + return (str_tmp); +} + +char *ft_remove_imput(char *str, size_t pos) +{ + int i; + char *new_str; + char *new_str2; + + i = 0; + if (!str) + return (str); + new_str = ft_strndup(str, pos); + new_str2 = ft_strjoin(new_str, &str[pos + 1]); + free(str); + free(new_str); + return (new_str2); +} + +static int ft_found_prev_word_pos(char *str, size_t *pos) +{ + size_t tmp; + + tmp = *pos; + while ((tmp) && (str[tmp] == ' ' || str[tmp] == '\n')) + --tmp; + while ((tmp) && str[tmp] != ' ' && str[tmp] != '\n') + --tmp; + return (tmp); +} + +void ft_found_prev_word(char *str, size_t *pos) +{ + size_t tmp; + + tmp = *pos; + ft_move_to_beggin(str, pos); + *pos = tmp; + tmp = ft_found_prev_word_pos(str, pos); + write(1, str, tmp); + *pos = tmp; +} + +void ft_found_next_word(char *str, size_t *pos) +{ + while (str[(*pos)] == ' ' || str[(*pos)] == '\n') + { + ft_putchar(str[(*pos)]); + ++(*pos); + } + while (str[(*pos)] && str[(*pos)] != ' ' && str[(*pos)] != '\n') + { + ft_putchar(str[(*pos)]); + ++(*pos); + } +} diff --git a/42sh/src/line-editing/toolz_termcaps.c b/42sh/src/line-editing/toolz_termcaps.c new file mode 100644 index 00000000..4607aeab --- /dev/null +++ b/42sh/src/line-editing/toolz_termcaps.c @@ -0,0 +1,91 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* toolz_termcaps.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/08 12:35:11 by gwojda #+# #+# */ +/* Updated: 2017/01/19 16:43:23 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int ft_get_ind_prev(char *str, size_t pos) +{ + while (pos && str[pos] != '\n') + --pos; + return (pos); +} + +int ft_get_size_prev(char *str, size_t pos) +{ + size_t len; + + len = 0; + while (pos && str[pos] != '\n') + { + --pos; + ++len; + } + return (len); +} + +int ft_nb_line(char *str, size_t pos) +{ + int len; + + len = 0; + if (!ft_get_ind_prev(str, pos)) + len += data_singleton()->line.prompt_size; + len += ft_get_size_prev(str, pos); + return (len / ft_size_term()); +} + +int ft_nb_last_line(char *str, size_t pos) +{ + int len; + + len = 0; + if (!ft_get_ind_prev(str, pos)) + len += data_singleton()->line.prompt_size; + len += ft_get_size_prev(str, pos); + return (len % ft_size_term()); +} + +void ft_move_to_beggin(char *str, size_t *pos) +{ + size_t str_len; + int prompt_size; + + prompt_size = data_singleton()->line.prompt_size; + str_len = 0; + if (!str) + return ; + if (str[*pos] == '\n') + { + ft_putchar('\b'); + --(*pos); + } + while (*pos && str[*pos] != '\n') + { + ft_putchar('\b'); + --(*pos); + } + while (*pos && --prompt_size + 2) + ft_puttermcaps("nd"); + while (*pos) + { + if (str[*pos] == '\n') + { + str_len = ft_nb_line(str, *pos - 1) + 1; + while (str_len) + { + ft_puttermcaps("up"); + --str_len; + } + } + --(*pos); + } +} diff --git a/42sh/src/main/data_init.c b/42sh/src/main/data_init.c index 1829cbd1..5a0791ae 100644 --- a/42sh/src/main/data_init.c +++ b/42sh/src/main/data_init.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* data_init.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ +/* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 19:26:32 by jhalford #+# #+# */ -/* Updated: 2017/01/11 14:03:16 by jhalford ### ########.fr */ +/* Updated: 2017/01/19 16:26:35 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,6 @@ int data_init(void) t_data *data; data = data_singleton(); - data->line.input = NULL; data->env = ft_sstrdup(environ); data->opts = SHELL_OPTS_JOBC; diff --git a/42sh/src/main/main.c b/42sh/src/main/main.c index 27e00034..0a8c2043 100644 --- a/42sh/src/main/main.c +++ b/42sh/src/main/main.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ +/* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */ -/* Updated: 2017/01/12 14:02:30 by jhalford ### ########.fr */ +/* Updated: 2017/01/19 16:46:55 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,6 +43,7 @@ int shell_single_command(char *command) int main(int ac, char **av) { + setlocale(LC_ALL, ""); DG("{inv}{bol}{gre}start of shell{eoc} job_control is %s", data_singleton()->opts & SHELL_OPTS_JOBC ? "ON" : "OFF"); shell_init(ac, av); if (data_singleton()->opts & SHELL_OPTS_LC)