diff --git a/42sh/Makefile b/42sh/Makefile index e558b851..dac89603 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -6,14 +6,14 @@ # By: wescande +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2016/08/29 21:32:58 by wescande #+# #+# # -# Updated: 2017/03/23 01:59:31 by wescande ### ########.fr # +# Updated: 2017/03/23 03:25:35 by wescande ### ########.fr # # # # **************************************************************************** # NAME = 42sh CC = gcc -FLAGS = -Wall -Wextra -Werror -fsanitize=address +FLAGS = -Wall -Wextra -Werror #-fvisibility=hidden #-fsanitize=address D_FLAGS = -g DELTA = $$(echo "$$(tput cols)-47"|bc) @@ -267,8 +267,12 @@ line_editing/print_and_del.c\ line_editing/queue.c\ line_editing/readline.c\ line_editing/resize.c\ +line_editing/underline_end.c\ line_editing/underline_function.c\ +line_editing/underline_home.c\ +line_editing/underline_left.c\ line_editing/underline_reset.c\ +line_editing/underline_right.c\ main/data_exit.c\ main/data_init.c\ main/data_singleton.c\ diff --git a/42sh/includes/ft_curs.h b/42sh/includes/ft_curs.h index d411b2c5..8d0bf2eb 100644 --- a/42sh/includes/ft_curs.h +++ b/42sh/includes/ft_curs.h @@ -6,7 +6,7 @@ /* By: sbenning +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/08 16:34:51 by sbenning #+# #+# */ -/* Updated: 2017/03/20 12:33:06 by gwojda ### ########.fr */ +/* Updated: 2017/03/23 00:03:16 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,7 +27,7 @@ typedef struct s_curs t_curs; ** Cursor data : cursor's coordonate and windows size */ -struct s_curs +struct s_curs { int co; int li; diff --git a/42sh/includes/ft_readline.h b/42sh/includes/ft_readline.h index 9536c4ab..38113343 100644 --- a/42sh/includes/ft_readline.h +++ b/42sh/includes/ft_readline.h @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/23 10:35:44 by gwojda #+# #+# */ -/* Updated: 2017/03/22 21:14:55 by gwojda ### ########.fr */ +/* Updated: 2017/03/23 00:30:06 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -53,7 +53,7 @@ # define TOUCHE_F5 892427035 # define TOUCHE_F6 925981467 -# define SIZE_LINE 512 +# define SIZE_LINE 16384 # define CORRUPT 1 @@ -127,11 +127,14 @@ int ft_nb_of_line(char *str, size_t pos); int ft_get_size_prev(char *str, size_t pos); void sigwinch_resize(int sig); size_t ft_hist_len(void); -void underline_right(char **str, size_t *pos, size_t pos_ref); -void underline_left(char **str, size_t *pos, size_t pos_ref); + +int underline_right(char **str, size_t *pos, size_t pos_ref); +int underline_left(char **str, size_t *pos, size_t pos_ref); +void underline_home(char **str, size_t *pos, size_t pos_ref); +void underline_end(char **str, size_t *pos, size_t pos_ref); +void underline_check_end_of_line(char *str, size_t pos); void reset_term(char **str, size_t *pos); void reset_and_remove_term(char **str, size_t *pos, char *copy_tmp); -int reset_term_hard(void); int ft_read_stdin(char **input); diff --git a/42sh/includes/parser.h b/42sh/includes/parser.h index d3a0cbb7..0af3c493 100644 --- a/42sh/includes/parser.h +++ b/42sh/includes/parser.h @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/22 17:22:51 by ariard #+# #+# */ -/* Updated: 2017/03/22 17:25:11 by ariard ### ########.fr */ +/* Updated: 2017/03/23 00:32:27 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/libft/src/sstr/ft_sstrfree.c b/42sh/libft/src/sstr/ft_sstrfree.c index 1e10d105..7855228d 100644 --- a/42sh/libft/src/sstr/ft_sstrfree.c +++ b/42sh/libft/src/sstr/ft_sstrfree.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/05 11:53:36 by jhalford #+# #+# */ -/* Updated: 2017/01/11 14:42:45 by jhalford ### ########.fr */ +/* Updated: 2017/03/22 23:19:24 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/libft/src/sstr/ft_sstrstr.c b/42sh/libft/src/sstr/ft_sstrstr.c index 7170a6e6..d6618563 100644 --- a/42sh/libft/src/sstr/ft_sstrstr.c +++ b/42sh/libft/src/sstr/ft_sstrstr.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/07 11:29:54 by ariard #+# #+# */ -/* Updated: 2017/03/21 18:14:45 by ariard ### ########.fr */ +/* Updated: 2017/03/22 21:54:40 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/libft/src/str/ft_atoi.c b/42sh/libft/src/str/ft_atoi.c index b583a198..546c58f6 100644 --- a/42sh/libft/src/str/ft_atoi.c +++ b/42sh/libft/src/str/ft_atoi.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/08/03 16:17:21 by jhalford #+# #+# */ -/* Updated: 2017/03/17 20:36:22 by wescande ### ########.fr */ +/* Updated: 2017/03/22 22:21:21 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/libft/src/str/ft_strdupchr.c b/42sh/libft/src/str/ft_strdupchr.c index aee98aaf..3fd5d0d5 100644 --- a/42sh/libft/src/str/ft_strdupchr.c +++ b/42sh/libft/src/str/ft_strdupchr.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/07 11:01:15 by ariard #+# #+# */ -/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* Updated: 2017/03/22 23:12:37 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/libft/src/str/ft_strlenchr.c b/42sh/libft/src/str/ft_strlenchr.c index 34882af2..1ea82cfa 100644 --- a/42sh/libft/src/str/ft_strlenchr.c +++ b/42sh/libft/src/str/ft_strlenchr.c @@ -6,7 +6,7 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 16:10:54 by ariard #+# #+# */ -/* Updated: 2017/03/07 11:30:02 by ariard ### ########.fr */ +/* Updated: 2017/03/22 22:12:03 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/log b/42sh/log index 385a758d..4bb9c0c4 100644 --- a/42sh/log +++ b/42sh/log @@ -1,462 +1,63 @@ -On branch master -Your branch is up-to-date with 'origin/master'. -Changes to be committed: - (use "git reset HEAD ..." to unstage) - - deleted: libft/objs/btree/btree_apply_by_level.d - deleted: libft/objs/btree/btree_apply_infix.d - deleted: libft/objs/btree/btree_apply_prefix.d - deleted: libft/objs/btree/btree_apply_suffix.d - deleted: libft/objs/btree/btree_create_node.d - deleted: libft/objs/btree/btree_del.d - deleted: libft/objs/btree/btree_delone.d - deleted: libft/objs/btree/btree_insert_data.d - deleted: libft/objs/btree/btree_level_count.d - deleted: libft/objs/btree/btree_map.d - deleted: libft/objs/btree/btree_print.d - deleted: libft/objs/btree/btree_search_item.d - deleted: libft/objs/char/ft_isalnum.d - deleted: libft/objs/char/ft_isalpha.d - deleted: libft/objs/char/ft_isascii.d - deleted: libft/objs/char/ft_isdigit.d - deleted: libft/objs/char/ft_isprint.d - deleted: libft/objs/char/ft_tolower.d - deleted: libft/objs/char/ft_toupper.d - deleted: libft/objs/cliopts/cliopts_get.d - deleted: libft/objs/cliopts/cliopts_has.d - deleted: libft/objs/color/ft_color_mk.d - deleted: libft/objs/color/ft_color_mkif.d - deleted: libft/objs/color/ft_color_reset.d - deleted: libft/objs/color/ft_color_set.d - deleted: libft/objs/dlst/ft_dlstadd_after.d - deleted: libft/objs/dlst/ft_dlstadd_before.d - deleted: libft/objs/dlst/ft_dlstdel.d - deleted: libft/objs/dlst/ft_dlstdelone.d - deleted: libft/objs/dlst/ft_dlstlast.d - deleted: libft/objs/dlst/ft_dlstnew.d - deleted: libft/objs/dlst/ft_dlstrtostr.d - deleted: libft/objs/dlst/ft_dlstsize.d - deleted: libft/objs/error/error.d - deleted: libft/objs/ft_printf/ft_conversion.d - deleted: libft/objs/ft_printf/ft_fmt_simplify.d - deleted: libft/objs/ft_printf/ft_fmt_validate_conv.d - deleted: libft/objs/ft_printf/ft_fmt_validate_flags.d - deleted: libft/objs/ft_printf/ft_fmt_validate_mod.d - deleted: libft/objs/ft_printf/ft_printf.d - deleted: libft/objs/ft_printf/ft_printf_color.d - deleted: libft/objs/ft_printf/ft_printf_parse.d - deleted: libft/objs/ft_printf/ft_transform.d - deleted: libft/objs/ft_printf/ft_vprintf.d - deleted: libft/objs/ft_printf/lib_fmt.d - deleted: libft/objs/ft_printf/lib_fmt_error.d - deleted: libft/objs/ft_printf/lib_pad.d - deleted: libft/objs/ft_printf/lib_pad_sharp.d - deleted: libft/objs/get_next_line/get_next_line.d - deleted: libft/objs/lst/ft_id.d - deleted: libft/objs/lst/ft_lst_at.d - deleted: libft/objs/lst/ft_lst_bfree.d - deleted: libft/objs/lst/ft_lst_cfree.d - deleted: libft/objs/lst/ft_lst_delif.d - deleted: libft/objs/lst/ft_lst_delsub.d - deleted: libft/objs/lst/ft_lst_filter.d - deleted: libft/objs/lst/ft_lst_find.d - deleted: libft/objs/lst/ft_lst_merge.d - deleted: libft/objs/lst/ft_lst_order_delsub.d - deleted: libft/objs/lst/ft_lst_print.d - deleted: libft/objs/lst/ft_lst_print2.d - deleted: libft/objs/lst/ft_lst_removeif.d - deleted: libft/objs/lst/ft_lst_reverse.d - deleted: libft/objs/lst/ft_lst_size.d - deleted: libft/objs/lst/ft_lst_sorted_insert.d - deleted: libft/objs/lst/ft_lst_sorted_merge.d - deleted: libft/objs/lst/ft_lstadd.d - deleted: libft/objs/lst/ft_lstdel.d - deleted: libft/objs/lst/ft_lstdelone.d - deleted: libft/objs/lst/ft_lsteadd.d - deleted: libft/objs/lst/ft_lstiter.d - deleted: libft/objs/lst/ft_lstlast.d - deleted: libft/objs/lst/ft_lstmap.d - deleted: libft/objs/lst/ft_lstnadd.d - deleted: libft/objs/lst/ft_lstnew.d - deleted: libft/objs/lst/ft_lstnew_range.d - deleted: libft/objs/lst/ft_lstsort.d - deleted: libft/objs/lst/pop.d - deleted: libft/objs/lst/push.d - deleted: libft/objs/math/ft_addrcmp.d - deleted: libft/objs/math/ft_ilen.d - deleted: libft/objs/math/ft_ilen_base.d - deleted: libft/objs/math/ft_itoa.d - deleted: libft/objs/math/ft_itoa_base.d - deleted: libft/objs/math/ft_lllen.d - deleted: libft/objs/math/ft_lllen_base.d - deleted: libft/objs/math/ft_lltoa_base.d - deleted: libft/objs/math/ft_uilen.d - deleted: libft/objs/math/ft_uitoa_base.d - deleted: libft/objs/math/ft_ulltoa_base.d - deleted: libft/objs/math/id.d - deleted: libft/objs/mem/ft_bzero.d - deleted: libft/objs/mem/ft_malloc.d - deleted: libft/objs/mem/ft_memalloc.d - deleted: libft/objs/mem/ft_memccpy.d - deleted: libft/objs/mem/ft_memchr.d - deleted: libft/objs/mem/ft_memcmp.d - deleted: libft/objs/mem/ft_memcpy.d - deleted: libft/objs/mem/ft_memdel.d - deleted: libft/objs/mem/ft_memmove.d - deleted: libft/objs/mem/ft_memset.d - deleted: libft/objs/mem/ft_realloc.d - deleted: libft/objs/path/ft_path_notdir.d - deleted: libft/objs/printing/ft_putchar.d - deleted: libft/objs/printing/ft_putendl.d - deleted: libft/objs/printing/ft_putnbr.d - deleted: libft/objs/printing/ft_putstr.d - deleted: libft/objs/sstr/ft_sstradd.d - deleted: libft/objs/sstr/ft_sstrcat.d - deleted: libft/objs/sstr/ft_sstrdel.d - deleted: libft/objs/sstr/ft_sstrdup.d - deleted: libft/objs/sstr/ft_sstrfree.d - deleted: libft/objs/sstr/ft_sstrprint.d - deleted: libft/objs/sstr/ft_sstrprint_fd.d - deleted: libft/objs/sstr/ft_sstrsort.d - deleted: libft/objs/sstr/ft_sstrstr.d - deleted: libft/objs/str/ft_atoi.d - deleted: libft/objs/str/ft_convert_base.d - deleted: libft/objs/str/ft_putaddr_fd.d - deleted: libft/objs/str/ft_split_whitespaces.d - deleted: libft/objs/str/ft_str3join.d - deleted: libft/objs/str/ft_strappend.d - deleted: libft/objs/str/ft_strbetween.d - deleted: libft/objs/str/ft_strcat.d - deleted: libft/objs/str/ft_strcatf.d - deleted: libft/objs/str/ft_strchr.d - deleted: libft/objs/str/ft_strchrcpy.d - deleted: libft/objs/str/ft_strclr.d - deleted: libft/objs/str/ft_strcmp.d - deleted: libft/objs/str/ft_strcpy.d - deleted: libft/objs/str/ft_strcspn.d - deleted: libft/objs/str/ft_strcut.d - deleted: libft/objs/str/ft_strdel.d - deleted: libft/objs/str/ft_strdup.d - deleted: libft/objs/str/ft_strdupchr.d - deleted: libft/objs/str/ft_strduptr.d - deleted: libft/objs/str/ft_strequ.d - deleted: libft/objs/str/ft_strinsert.d - deleted: libft/objs/str/ft_stris.d - deleted: libft/objs/str/ft_striter.d - deleted: libft/objs/str/ft_striteri.d - deleted: libft/objs/str/ft_strjoin.d - deleted: libft/objs/str/ft_strlcat.d - deleted: libft/objs/str/ft_strlen.d - deleted: libft/objs/str/ft_strlenchr.d - deleted: libft/objs/str/ft_strmap.d - deleted: libft/objs/str/ft_strmapi.d - deleted: libft/objs/str/ft_strncat.d - deleted: libft/objs/str/ft_strncmp.d - deleted: libft/objs/str/ft_strncpy.d - deleted: libft/objs/str/ft_strnequ.d - deleted: libft/objs/str/ft_strnew.d - deleted: libft/objs/str/ft_strnstr.d - deleted: libft/objs/str/ft_strrchr.d - deleted: libft/objs/str/ft_strreplace.d - deleted: libft/objs/str/ft_strrev.d - deleted: libft/objs/str/ft_strsplit.d - deleted: libft/objs/str/ft_strstr.d - deleted: libft/objs/str/ft_strsub.d - deleted: libft/objs/str/ft_strtok.d - deleted: libft/objs/str/ft_strtrim.d - deleted: libft/objs/sys/dup2_close.d - deleted: libft/objs/sys/fd_replace.d - deleted: libft/objs/sys/ft_getenv.d - deleted: libft/objs/sys/ft_xattr_count.d - deleted: libft/objs/sys/ft_xattr_print.d - deleted: libft/objs/time/ft_mytime_free.d - deleted: libft/objs/time/ft_mytime_get.d - deleted: libft/objs/time/ft_time_isrecent.d - deleted: objs/builtin/bt_read_get.d - deleted: objs/builtin/bt_read_term.d - deleted: objs/builtin/builtin_cd.d - deleted: objs/builtin/builtin_echo.d - deleted: objs/builtin/builtin_env.d - deleted: objs/builtin/builtin_exit.d - deleted: objs/builtin/builtin_export.d - deleted: objs/builtin/builtin_hash.d - deleted: objs/builtin/builtin_history.d - deleted: objs/builtin/builtin_math.d - deleted: objs/builtin/builtin_read.d - deleted: objs/builtin/builtin_return_status.d - deleted: objs/builtin/builtin_setenv.d - deleted: objs/builtin/builtin_unset.d - deleted: objs/builtin/builtin_unsetenv.d - deleted: objs/builtin/error_msg.d - deleted: objs/builtin/is_builtin.d - deleted: objs/completion/c_arrow.d - deleted: objs/completion/c_clear.d - deleted: objs/completion/c_find_abspath.d - deleted: objs/completion/c_find_binary.d - deleted: objs/completion/c_find_env.d - deleted: objs/completion/c_find_files.d - deleted: objs/completion/c_init.d - deleted: objs/completion/c_match.d - deleted: objs/completion/c_match_glob.d - deleted: objs/completion/c_match_update.d - deleted: objs/completion/c_misc.d - deleted: objs/completion/c_output.d - deleted: objs/completion/c_parser.d - deleted: objs/completion/c_pathsolver.d - deleted: objs/completion/c_printer.d - deleted: objs/completion/c_sizing.d - deleted: objs/completion/c_terminal.d - deleted: objs/completion/completion.d - deleted: objs/exec/ast_free.d - deleted: objs/exec/bad_fd.d - deleted: objs/exec/error_badidentifier.d - deleted: objs/exec/exec_ampersand.d - deleted: objs/exec/exec_and_if.d - deleted: objs/exec/exec_bang.d - deleted: objs/exec/exec_case_branch.d - deleted: objs/exec/exec_elif.d - deleted: objs/exec/exec_else.d - deleted: objs/exec/exec_leaf.d - deleted: objs/exec/exec_or_if.d - deleted: objs/exec/exec_pipe.d - deleted: objs/exec/exec_reset.d - deleted: objs/exec/exec_semi.d - deleted: objs/exec/exec_var.d - deleted: objs/exec/fd_is_valid.d - deleted: objs/exec/ft_exec.d - deleted: objs/exec/ft_findexec.d - deleted: objs/exec/is_function.d - deleted: objs/exec/mark_process_status.d - deleted: objs/exec/node_copy.d - deleted: objs/exec/pfree_cmd.d - deleted: objs/exec/pfree_cond.d - deleted: objs/exec/pfree_func.d - deleted: objs/exec/pfree_list.d - deleted: objs/exec/pfree_subshell.d - deleted: objs/exec/plaunch_brace.d - deleted: objs/exec/plaunch_builtin.d - deleted: objs/exec/plaunch_case.d - deleted: objs/exec/plaunch_empty.d - deleted: objs/exec/plaunch_file.d - deleted: objs/exec/plaunch_for.d - deleted: objs/exec/plaunch_function.d - deleted: objs/exec/plaunch_if.d - deleted: objs/exec/plaunch_subshell.d - deleted: objs/exec/plaunch_until.d - deleted: objs/exec/plaunch_while.d - deleted: objs/exec/process_launch.d - deleted: objs/exec/process_redirect.d - deleted: objs/exec/process_resetfds.d - deleted: objs/exec/process_set.d - deleted: objs/exec/process_setgroup.d - deleted: objs/exec/process_setsig.d - deleted: objs/exec/pset_brace.d - deleted: objs/exec/pset_case.d - deleted: objs/exec/pset_cmd.d - deleted: objs/exec/pset_for.d - deleted: objs/exec/pset_if.d - deleted: objs/exec/pset_subshell.d - deleted: objs/exec/pset_until.d - deleted: objs/exec/pset_while.d - deleted: objs/exec/redir_copy.d - deleted: objs/exec/redir_free.d - deleted: objs/exec/redirect_dgreat.d - deleted: objs/exec/redirect_dless.d - deleted: objs/exec/redirect_great.d - deleted: objs/exec/redirect_greatand.d - deleted: objs/exec/redirect_less.d - deleted: objs/exec/redirect_lessand.d - deleted: objs/exec/set_exitstatus.d - deleted: objs/exec/token_to_argv.d - deleted: objs/glob/command_getoutput.d - deleted: objs/glob/dir_glob.d - deleted: objs/glob/esc_print.d - deleted: objs/glob/expand_bquote.d - deleted: objs/glob/expand_brace.d - deleted: objs/glob/expand_esc.d - deleted: objs/glob/expand_home.d - deleted: objs/glob/expand_var.d - deleted: objs/glob/ft_strsplit_esc.d - deleted: objs/glob/ft_strsplit_spe.d - deleted: objs/glob/gen_tab_esc.d - deleted: objs/glob/glob.d - deleted: objs/glob/is_char_esc.d - deleted: objs/glob/lib_perso/ft_ld_back.d - deleted: objs/glob/lib_perso/ft_ld_clear.d - deleted: objs/glob/lib_perso/ft_ld_copy.d - deleted: objs/glob/lib_perso/ft_ld_del.d - deleted: objs/glob/lib_perso/ft_ld_front.d - deleted: objs/glob/lib_perso/ft_ld_new.d - deleted: objs/glob/lib_perso/ft_ld_order.d - deleted: objs/glob/lib_perso/ft_ld_pushback.d - deleted: objs/glob/lib_perso/ft_ld_pushfront.d - deleted: objs/glob/lib_perso/ft_ld_reverse.d - deleted: objs/glob/lib_perso/ft_ld_size.d - deleted: objs/glob/lib_perso/ft_ld_swap.d - deleted: objs/glob/lib_perso/ft_ld_to_tab.d - deleted: objs/glob/lib_perso/ft_memrealloc.d - deleted: objs/glob/lib_perso/ft_strjoinf.d - deleted: objs/glob/lib_perso/ft_strsubf.d - deleted: objs/glob/lib_perso/ft_tabdel.d - deleted: objs/glob/lib_perso/ft_tablen.d - deleted: objs/glob/match_pattern.d - deleted: objs/glob/tab_esc_copy.d - deleted: objs/glob/word_is_assignment.d - deleted: objs/hash_table/ft_add_hash.d - deleted: objs/hash_table/hash.d - deleted: objs/hash_table/hash_free.d - deleted: objs/hash_table/hash_str.d - deleted: objs/hash_table/is_hash.d - deleted: objs/history/add_str_in_history.d - deleted: objs/history/history.d - deleted: objs/history/history_parsing.d - deleted: objs/history/history_parsing_toolz.d - deleted: objs/history/history_parsing_toolz_2.d - deleted: objs/history/list_toolz.d - deleted: objs/history/surch_in_history.d - deleted: objs/job_control/builtin_bg.d - deleted: objs/job_control/builtin_fg.d - deleted: objs/job_control/builtin_jobs.d - deleted: objs/job_control/do_job_notification.d - deleted: objs/job_control/has_running_job.d - deleted: objs/job_control/has_stopped_job.d - deleted: objs/job_control/job_addprocess.d - deleted: objs/job_control/job_cmp_id.d - deleted: objs/job_control/job_format.d - deleted: objs/job_control/job_format_head.d - deleted: objs/job_control/job_free.d - deleted: objs/job_control/job_getprocess.d - deleted: objs/job_control/job_getrank.d - deleted: objs/job_control/job_hup_all.d - deleted: objs/job_control/job_is_completed.d - deleted: objs/job_control/job_is_stopped.d - deleted: objs/job_control/job_notify_change.d - deleted: objs/job_control/job_notify_new.d - deleted: objs/job_control/job_remove.d - deleted: objs/job_control/job_run.d - deleted: objs/job_control/job_update_id.d - deleted: objs/job_control/job_update_status.d - deleted: objs/job_control/job_wait.d - deleted: objs/job_control/mark_job_as_running.d - deleted: objs/job_control/pprint_brace.d - deleted: objs/job_control/pprint_case.d - deleted: objs/job_control/pprint_cmd.d - deleted: objs/job_control/pprint_for.d - deleted: objs/job_control/pprint_function.d - deleted: objs/job_control/pprint_if.d - deleted: objs/job_control/pprint_subshell.d - deleted: objs/job_control/pprint_until.d - deleted: objs/job_control/pprint_while.d - deleted: objs/job_control/process_cmp_pid.d - deleted: objs/job_control/process_format.d - deleted: objs/job_control/process_free.d - deleted: objs/job_control/put_job_in_background.d - deleted: objs/job_control/put_job_in_foreground.d - deleted: objs/job_control/sigchld_handler.d - deleted: objs/job_control/sigint_handler.d - deleted: objs/job_control/sigtstp_handler.d - deleted: objs/job_control/sigttin_handler.d - deleted: objs/job_control/sigttou_handler.d - deleted: objs/lexer/do_lexer_routine.d - deleted: objs/lexer/get_lexer_stack.d - deleted: objs/lexer/get_reserved_words.d - deleted: objs/lexer/get_state_global.d - deleted: objs/lexer/get_state_redir.d - deleted: objs/lexer/insert_newline.d - deleted: objs/lexer/isrw_delim.d - deleted: objs/lexer/keep_last_type.d - deleted: objs/lexer/lexer_backslash.d - deleted: objs/lexer/lexer_bquote.d - deleted: objs/lexer/lexer_curly_braces.d - deleted: objs/lexer/lexer_default.d - deleted: objs/lexer/lexer_delim.d - deleted: objs/lexer/lexer_destroy.d - deleted: objs/lexer/lexer_dquote.d - deleted: objs/lexer/lexer_end.d - deleted: objs/lexer/lexer_great.d - deleted: objs/lexer/lexer_heredoc.d - deleted: objs/lexer/lexer_init.d - deleted: objs/lexer/lexer_less.d - deleted: objs/lexer/lexer_lex.d - deleted: objs/lexer/lexer_newline.d - deleted: objs/lexer/lexer_number.d - deleted: objs/lexer/lexer_paren.d - deleted: objs/lexer/lexer_quote.d - deleted: objs/lexer/lexer_sep.d - deleted: objs/lexer/lexer_word.d - deleted: objs/lexer/token_append.d - deleted: objs/lexer/token_cmp_type.d - deleted: objs/lexer/token_free.d - deleted: objs/lexer/token_init.d - deleted: objs/lexer/token_print.d - deleted: objs/line_editing/completion.d - deleted: objs/line_editing/control_features.d - deleted: objs/line_editing/copy_cut_paste.d - deleted: objs/line_editing/ft_prompt.d - deleted: objs/line_editing/get_key.d - deleted: objs/line_editing/home_end.d - deleted: objs/line_editing/init_history.d - deleted: objs/line_editing/init_line.d - deleted: objs/line_editing/init_termcaps.d - deleted: objs/line_editing/lib_line_editing/ft_nb_line.d - deleted: objs/line_editing/lib_line_editing/tool_line.d - deleted: objs/line_editing/lib_line_editing/tool_line_2.d - deleted: objs/line_editing/lib_line_editing/toolz.d - deleted: objs/line_editing/lib_line_editing/toolz2.d - deleted: objs/line_editing/lib_line_editing/toolz_parseur.d - deleted: objs/line_editing/lib_line_editing/toolz_termcaps.d - deleted: objs/line_editing/move_left_and_right.d - deleted: objs/line_editing/move_to_word.d - deleted: objs/line_editing/move_up_and_down.d - deleted: objs/line_editing/print_and_del.d - deleted: objs/line_editing/queue.d - deleted: objs/line_editing/readline.d - deleted: objs/line_editing/resize.d - deleted: objs/main/data_exit.d - deleted: objs/main/data_init.d - deleted: objs/main/data_singleton.d - deleted: objs/main/ft_putast.d - deleted: objs/main/main.d - deleted: objs/main/shell_init.d - deleted: objs/parser/add_bang.d - deleted: objs/parser/add_case.d - deleted: objs/parser/add_cmd.d - deleted: objs/parser/add_condition.d - deleted: objs/parser/add_func.d - deleted: objs/parser/add_loop.d - deleted: objs/parser/add_number.d - deleted: objs/parser/add_redir.d - deleted: objs/parser/add_sep.d - deleted: objs/parser/add_subshell.d - deleted: objs/parser/aggregate_sym.d - deleted: objs/parser/build_tree.d - deleted: objs/parser/do_parser_routine.d - deleted: objs/parser/error_syntax.d - deleted: objs/parser/eval_sym.d - deleted: objs/parser/ft_parse.d - deleted: objs/parser/heredoc_parser.d - deleted: objs/parser/parser_destroy.d - deleted: objs/parser/parser_init.d - deleted: objs/parser/pop_stack.d - deleted: objs/parser/produce_sym.d - deleted: objs/parser/push_stack.d - deleted: objs/parser/read_stack.d - deleted: objs/parser/redir_init.d - deleted: objs/parser/stack_init.d - deleted: objs/parser/sym_free.d - deleted: objs/parser/tree_func_free.d - deleted: objs/parser/tree_wrapper.d - modified: src/parser/add_bang.c - modified: src/parser/add_case.c - modified: src/parser/add_condition.c - modified: src/parser/add_loop.c - modified: src/parser/add_number.c - modified: src/parser/add_sep.c - modified: src/parser/add_subshell.c - -Changes not staged for commit: - (use "git add ..." to update what will be committed) - (use "git checkout -- ..." to discard changes in working directory) - - modified: log - +env lvl 2 +env lvl 3 +env lvl 4 +env lvl 5 +env lvl 6 +env lvl 7 +env lvl 8 +env lvl 7 +env lvl 8 +env lvl 9 +env lvl 6 +env lvl 7 +env lvl 8 +env lvl 9 +env lvl 8 +env lvl 9 +env lvl 10 +env lvl 5 +env lvl 6 +env lvl 7 +env lvl 8 +env lvl 9 +env lvl 8 +env lvl 9 +env lvl 10 +env lvl 7 +env lvl 8 +env lvl 9 +env lvl 10 +env lvl 9 +env lvl 10 +env lvl 11 +env lvl 4 +env lvl 5 +env lvl 6 +env lvl 7 +env lvl 8 +env lvl 9 +env lvl 8 +env lvl 9 +env lvl 10 +env lvl 7 +env lvl 8 +env lvl 9 +env lvl 10 +env lvl 9 +env lvl 10 +env lvl 11 +env lvl 6 +env lvl 7 +env lvl 8 +env lvl 9 +env lvl 10 +env lvl 9 +env lvl 10 +env lvl 11 +env lvl 8 +env lvl 9 +env lvl 10 +env lvl 11 +env lvl 10 +env lvl 11 +env lvl 12 diff --git a/42sh/src/builtin/builtin_math.c b/42sh/src/builtin/builtin_math.c index 77072563..d2916c52 100644 --- a/42sh/src/builtin/builtin_math.c +++ b/42sh/src/builtin/builtin_math.c @@ -6,103 +6,60 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/17 18:54:00 by ariard #+# #+# */ -/* Updated: 2017/03/21 18:08:31 by ariard ### ########.fr */ +/* Updated: 2017/03/23 01:08:14 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -#define MATHERR_0 "math : invalid number of arguments" -#define MATHERR_1 "math : invalid variable name" -#define MATHERR_2 "math : invalid operator" -#define MATHERR_3 "math : invalid operand" -#define MATHERR_4 "math : division by 0" +#define MATHERR_0 "usage: math variable operator(+-/*%) operand" +#define MATHERR_2 "math: %c: invalid operator" +#define MATHERR_3 "math: %s: operand must be digits only" +#define MATHERR_4 "math: division by 0" +#define MATHERR_5 "math: modulo by 0" -static int init_math(char **var, char **value, char **operator, - char **operand) -{ - *var = NULL; - *value = NULL; - *operator = NULL; - *operand = NULL; - return (0); -} - -static int get_value(char *var, char **value) -{ - char *temp; - char *esc; - int ret; - - esc = ft_strnew((ft_strlen(var) >> 3) + 1); - ret = word_is_assignment((char *[]) {var, (esc + 1)}); - ft_strdel(&esc); - if (!ret) - return (SH_ERR(MATHERR_1)); - temp = ft_sstrstr(data_singleton()->local_var, var); - if (temp) - { - temp += ft_strlenchr(temp, '=') + 1; - *value = ft_strdup(temp); - if (!(ft_stris(*value, &ft_isdigit))) - { - ft_strdel(value); - *value = ft_itoa(0); - } - } - else - *value = ft_itoa(0); - return (0); -} - -static int do_math(char **value, char *operator, char *operand) +static char *do_math(char *value, char operator, char *operand) { long ope1; long ope2; - ope1 = ft_atoi(*value); - if (operand) - ope2 = ft_atoi(operand); - else - ope2 = 0; - if ((operator[0] == '/' || operator[0] == '%') && ope2 == 0) - return (SH_ERR(MATHERR_4)); - else - { - ope1 = (operator[0] == '+') ? ope1 + ope2 : ope1; - ope1 = (operator[0] == '-') ? ope1 - ope2 : ope1; - ope1 = (operator[0] == '/') ? ope1 / ope2 : ope1; - ope1 = (operator[0] == '*') ? ope1 * ope2 : ope1; - ope1 = (operator[0] == '%') ? ope1 % ope2 : ope1; - } - ft_strdel(value); - *value = ft_itoa(ope1); - return (0); + ope1 = ft_atoi(value); + ope2 = ft_atoi(operand); + DG("value %s -> %i", value, ope1); + DG("operand %s -> %i", operand, ope2); + if ((operator == '/') && ope2 == 0) + return (SH_ERR(MATHERR_4) ? NULL : NULL); + if ((operator == '%') && ope2 == 0) + return (SH_ERR(MATHERR_5) ? NULL : NULL); + ope1 = (operator == '+') ? ope1 + ope2 : ope1; + ope1 = (operator == '-') ? ope1 - ope2 : ope1; + ope1 = (operator == '/') ? ope1 / ope2 : ope1; + ope1 = (operator == '*') ? ope1 * ope2 : ope1; + ope1 = (operator == '%') ? ope1 % ope2 : ope1; + DG("output=%s (%i)", ft_itoa(ope1), ope1); + return (ft_itoa(ope1)); } int builtin_math(const char *path, char *const av[], char *const envp[]) { - char *var; char *value; - char *operator; + char operator; char *operand; (void)path; (void)envp; if (!av || !av[1] || !av[2] || !av[3] || av[4]) return (SH_ERR(MATHERR_0)); - init_math(&var, &value, &operator, &operand); - var = av[1]; - if (get_value(var, &value)) - return (1); - operator = av[2]; - if (ft_strlen(operator) != 1 || !(ft_strchr("+-/*%", operator[0]))) - return (SH_ERR(MATHERR_2)); + value = ft_getenv(data_singleton()->local_var, av[1]); + operator = av[2][0]; + if (!(ft_strchr("+-/*%", operator))) + return (SH_ERR(MATHERR_2, operator)); operand = av[3]; if (!ft_stris(operand, &ft_isdigit)) - return (SH_ERR(MATHERR_3)); - if (do_math(&value, operator, operand)) + return (SH_ERR(MATHERR_3, operand)); + if (!(value = do_math(value, operator, operand))) return (1); - builtin_setenv("setenv", (char *[]){"local", var, value, 0}, NULL); + builtin_setenv("setenv", (char *[]){"math", av[1], value, 0}, NULL); + ft_strdel(&value); return (0); } diff --git a/42sh/src/builtin/builtin_setenv.c b/42sh/src/builtin/builtin_setenv.c index a00dd611..8cd00b78 100644 --- a/42sh/src/builtin/builtin_setenv.c +++ b/42sh/src/builtin/builtin_setenv.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 14:25:17 by jhalford #+# #+# */ -/* Updated: 2017/03/22 16:21:49 by gwojda ### ########.fr */ +/* Updated: 2017/03/22 22:08:20 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/completion/c_match_glob.c b/42sh/src/completion/c_match_glob.c index 016473cb..43d2cf9c 100644 --- a/42sh/src/completion/c_match_glob.c +++ b/42sh/src/completion/c_match_glob.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/08 17:20:01 by gwojda #+# #+# */ -/* Updated: 2017/03/22 14:51:44 by gwojda ### ########.fr */ +/* Updated: 2017/03/23 00:06:08 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -76,7 +76,7 @@ static int c_check_glob(char **ss_glob, char *current_word, str = data_singleton()->line.input; free(current_word); free(glob_echap); - if (!*ss_glob || !**ss_glob || + if (!ss_glob || !*ss_glob || !**ss_glob || !ft_strncmp(str + pos, *ss_glob, ft_strlen(*ss_glob))) { ft_sstrfree(ss_glob); diff --git a/42sh/src/exec/ast_free.c b/42sh/src/exec/ast_free.c index 756ea439..ec5599be 100644 --- a/42sh/src/exec/ast_free.c +++ b/42sh/src/exec/ast_free.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/05 11:50:51 by jhalford #+# #+# */ -/* Updated: 2017/03/21 19:14:31 by ariard ### ########.fr */ +/* Updated: 2017/03/22 21:50:11 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/exec/exec_case_branch.c b/42sh/src/exec/exec_case_branch.c index a705fad8..91fa3e1e 100644 --- a/42sh/src/exec/exec_case_branch.c +++ b/42sh/src/exec/exec_case_branch.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/07 20:33:45 by wescande #+# #+# */ -/* Updated: 2017/03/22 22:06:11 by ariard ### ########.fr */ +/* Updated: 2017/03/22 22:10:26 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/exec/exec_leaf.c b/42sh/src/exec/exec_leaf.c index a95f54c2..9fb93b0e 100644 --- a/42sh/src/exec/exec_leaf.c +++ b/42sh/src/exec/exec_leaf.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/07 15:47:30 by wescande #+# #+# */ -/* Updated: 2017/03/22 18:27:03 by jhalford ### ########.fr */ +/* Updated: 2017/03/22 21:48:12 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/exec/exec_var.c b/42sh/src/exec/exec_var.c index 496a3fcc..8fa2f3b9 100644 --- a/42sh/src/exec/exec_var.c +++ b/42sh/src/exec/exec_var.c @@ -6,33 +6,30 @@ /* By: ariard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/07 11:12:05 by ariard #+# #+# */ -/* Updated: 2017/03/22 21:34:39 by ariard ### ########.fr */ +/* Updated: 2017/03/23 00:51:22 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -static int set_var(char *stream, char **var, char **value) -{ - *var = ft_strdupchr(stream, '='); - stream += ft_strlenchr(stream, '=') + 1; - *value = ft_strdup(stream); - return (0); -} - int exec_var(t_btree **ast) { t_astnode *node; char **av; char *var; char *value; + char *equal; node = (*ast)->item; - av = token_to_argv(node->data.cmd.token, 1); - set_var(av[0], &var, &value); + DG("before"); + if (!(av = token_to_argv(node->data.cmd.token, 1))) + return (0); + DG("after"); + var = av[0]; + if ((equal = ft_strchr(av[0], '='))) + *equal = 0; + value = equal ? equal + 1 : NULL; builtin_setenv("internal", (char*[]){"local", var, value, 0}, NULL); - ft_strdel(&var); - ft_strdel(&value); - ft_tabdel(&av); + ft_sstrfree(av); return (0); } diff --git a/42sh/src/exec/node_copy.c b/42sh/src/exec/node_copy.c index 5b829c78..e5e662ec 100644 --- a/42sh/src/exec/node_copy.c +++ b/42sh/src/exec/node_copy.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/08 03:38:36 by wescande #+# #+# */ -/* Updated: 2017/03/21 18:44:57 by ariard ### ########.fr */ +/* Updated: 2017/03/22 21:50:06 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/exec/pfree_cmd.c b/42sh/src/exec/pfree_cmd.c index 2047d654..58ebe736 100644 --- a/42sh/src/exec/pfree_cmd.c +++ b/42sh/src/exec/pfree_cmd.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/08 00:58:02 by wescande #+# #+# */ -/* Updated: 2017/03/20 16:29:37 by gwojda ### ########.fr */ +/* Updated: 2017/03/22 23:17:54 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/exec/pfree_list.c b/42sh/src/exec/pfree_list.c index 22c8a012..966344e2 100644 --- a/42sh/src/exec/pfree_list.c +++ b/42sh/src/exec/pfree_list.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/08 02:37:04 by wescande #+# #+# */ -/* Updated: 2017/03/20 15:50:03 by gwojda ### ########.fr */ +/* Updated: 2017/03/23 00:31:18 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,5 +16,6 @@ int pfree_list(t_process *p) { ft_ld_del(&p->data.d_for.token, &ft_tabdel); btree_del(&p->data.d_for.content, &ast_free); + sleep(5); return (0); } diff --git a/42sh/src/exec/plaunch_for.c b/42sh/src/exec/plaunch_for.c index 30c28c9e..bfaab55d 100644 --- a/42sh/src/exec/plaunch_for.c +++ b/42sh/src/exec/plaunch_for.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/15 00:49:20 by wescande #+# #+# */ -/* Updated: 2017/03/22 15:51:04 by ariard ### ########.fr */ +/* Updated: 2017/03/22 22:20:02 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,6 +32,5 @@ int plaunch_for(t_process *p) ft_exec(&p->data.d_for.content); } ft_tabdel(&av); - sleep(10); - return (0); + return (1); } diff --git a/42sh/src/exec/plaunch_function.c b/42sh/src/exec/plaunch_function.c index c1b7ca60..8b5da368 100644 --- a/42sh/src/exec/plaunch_function.c +++ b/42sh/src/exec/plaunch_function.c @@ -6,36 +6,34 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/08 03:23:59 by wescande #+# #+# */ -/* Updated: 2017/03/22 19:37:08 by jhalford ### ########.fr */ +/* Updated: 2017/03/23 03:15:20 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -#define FUNCERR_0 SHELL_NAME ":maximum nested function level reached" +#define FUNCERR_0 ":maximum nested function level reached" +#define FUNC_LVL 200 int plaunch_function(t_process *p) { - char *temp; - char *func_lvl; - int value; + static int protection= 0; - func_lvl = ft_sstrstr(data_singleton()->env, "FUNC_LVL"); - if ((temp = func_lvl)) - { - func_lvl += ft_strlenchr(func_lvl, '=') + 1; - if ((value = ft_atoi(func_lvl)) >= 199) - { - ft_strdel(&temp); - return (SH_ERR(FUNCERR_0)); - } - value += 1; - } - else - value = 0; + if (ft_atoi(ft_getenv(data_singleton()->env, "FUNC_LVL")) > 10) + return(SH_ERR(FUNCERR_0)); + + if (protection >= FUNC_LVL) + return(SH_ERR(FUNCERR_0)); + protection++; + +// jack faut qu on parle builtin_setenv("setenv", (char *[]){"env", "FUNC_LVL", - ft_itoa(value), 0}, NULL); + ft_itoa(ft_atoi(ft_getenv(data_singleton()->env, "FUNC_LVL")) + 1), + NULL}, NULL); ft_exec(&p->data.function.content); - builtin_setenv("setenv", (char *[]){"env", "FUNC_LVL", "0", 0}, NULL); + builtin_setenv("setenv", (char *[]){"env", "FUNC_LVL", + ft_itoa(ft_atoi(ft_getenv(data_singleton()->env, "FUNC_LVL")) - 1), + NULL}, NULL); + protection--; return (ft_atoi(ft_getenv(data_singleton()->env, "?"))); } diff --git a/42sh/src/exec/pset_case.c b/42sh/src/exec/pset_case.c index 8719f5d8..c439fb2e 100644 --- a/42sh/src/exec/pset_case.c +++ b/42sh/src/exec/pset_case.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/07 20:36:04 by wescande #+# #+# */ -/* Updated: 2017/03/20 15:59:05 by gwojda ### ########.fr */ +/* Updated: 2017/03/23 00:31:39 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/exec/pset_for.c b/42sh/src/exec/pset_for.c index c1b14dbb..edca1f97 100644 --- a/42sh/src/exec/pset_for.c +++ b/42sh/src/exec/pset_for.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/07 19:38:05 by wescande #+# #+# */ -/* Updated: 2017/03/20 15:59:25 by gwojda ### ########.fr */ +/* Updated: 2017/03/22 22:25:55 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/lexer/lexer_bquote.c b/42sh/src/lexer/lexer_bquote.c index 084db882..e16cba63 100644 --- a/42sh/src/lexer/lexer_bquote.c +++ b/42sh/src/lexer/lexer_bquote.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/09 22:03:48 by jhalford #+# #+# */ -/* Updated: 2017/03/17 21:01:50 by jhalford ### ########.fr */ +/* Updated: 2017/03/22 23:59:05 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,7 +25,10 @@ int lexer_bquote(t_list **alst, t_lexer *lexer) if (get_lexer_stack(*lexer) != BQUOTE) push(&lexer->stack, lexer->state); else - lexer->state = pop(&lexer->stack) == DQUOTE ? DQUOTE : DEFAULT; + { + lexer->state = pop(&lexer->stack) && + get_lexer_stack(*lexer) == DQUOTE ? DQUOTE : DEFAULT; + } } else if (lexer->str[lexer->pos] == '\\' && (back = 1)) { diff --git a/42sh/src/lexer/lexer_dquote.c b/42sh/src/lexer/lexer_dquote.c index f4df5b90..1786990d 100644 --- a/42sh/src/lexer/lexer_dquote.c +++ b/42sh/src/lexer/lexer_dquote.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 18:36:58 by jhalford #+# #+# */ -/* Updated: 2017/03/17 20:08:02 by jhalford ### ########.fr */ +/* Updated: 2017/03/22 23:56:49 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/line_editing/copy_cut_paste.c b/42sh/src/line_editing/copy_cut_paste.c index 23411367..37ba5f96 100644 --- a/42sh/src/line_editing/copy_cut_paste.c +++ b/42sh/src/line_editing/copy_cut_paste.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/19 12:45:06 by gwojda #+# #+# */ -/* Updated: 2017/03/22 21:14:34 by gwojda ### ########.fr */ +/* Updated: 2017/03/22 23:53:57 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,13 +27,15 @@ int ft_x(char **str, size_t *pos) ret = 0; if (read(STDIN, &ret, sizeof(int)) < 0) return (-1); - if ((*str)[*pos] == '\n') - return (reset_term_hard()); - if (ret == FLECHE_GAUCHE) - underline_left(str, pos, pos_ref); - else if (ret == FLECHE_DROITE) - underline_right(str, pos, pos_ref); - else + if (ret == FLECHE_GAUCHE && !underline_left(str, pos, pos_ref)) + return (0); + else if (ret == FLECHE_DROITE && !underline_right(str, pos, pos_ref)) + return (0); + else if (ret == TOUCHE_HOME) + underline_home(str, pos, pos_ref); + else if (ret == TOUCHE_END) + underline_end(str, pos, pos_ref); + else if (ret != FLECHE_DROITE && ret != FLECHE_GAUCHE) break ; } if (data_singleton()->line.copy_tmp && *data_singleton()->line.copy_tmp) @@ -56,13 +58,15 @@ int ft_c(char **str, size_t *pos) ret = 0; if (read(STDIN, &ret, sizeof(int)) < 0) return (-1); - if ((*str)[*pos] == '\n') - return (reset_term_hard()); - if (ret == FLECHE_GAUCHE) - underline_left(str, pos, pos_ref); - else if (ret == FLECHE_DROITE) - underline_right(str, pos, pos_ref); - else + if (ret == FLECHE_GAUCHE && !underline_left(str, pos, pos_ref)) + return (0); + else if (ret == FLECHE_DROITE && !underline_right(str, pos, pos_ref)) + return (0); + else if (ret == TOUCHE_HOME) + underline_home(str, pos, pos_ref); + else if (ret == TOUCHE_END) + underline_end(str, pos, pos_ref); + else if (ret != FLECHE_DROITE && ret != FLECHE_GAUCHE) break ; } reset_term(str, pos); diff --git a/42sh/src/line_editing/underline_end.c b/42sh/src/line_editing/underline_end.c new file mode 100644 index 00000000..c43e9ce5 --- /dev/null +++ b/42sh/src/line_editing/underline_end.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* underline_end.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/22 23:18:15 by gwojda #+# #+# */ +/* Updated: 2017/03/22 23:42:27 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void underline_end(char **str, size_t *pos, size_t pos_ref) +{ + size_t pos_tmp; + + pos_tmp = *pos; + if ((*str)[pos_tmp] == '\n') + { + underline_right(str, pos, pos_ref); + ++pos_tmp; + } + while ((*str)[pos_tmp] && (*str)[pos_tmp] != '\n') + { + underline_right(str, pos, pos_ref); + ++pos_tmp; + } + if ((*str)[pos_tmp] == '\n') + { + underline_left(str, pos, pos_ref); + --pos_tmp; + } +} diff --git a/42sh/src/line_editing/underline_function.c b/42sh/src/line_editing/underline_function.c index 5412e6af..34c0f318 100644 --- a/42sh/src/line_editing/underline_function.c +++ b/42sh/src/line_editing/underline_function.c @@ -6,13 +6,13 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/22 20:55:24 by gwojda #+# #+# */ -/* Updated: 2017/03/22 21:28:31 by gwojda ### ########.fr */ +/* Updated: 2017/03/22 22:59:02 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -static void underline_check_end_of_line(char *str, size_t pos) +void underline_check_end_of_line(char *str, size_t pos) { if (!str) return ; @@ -22,61 +22,3 @@ static void underline_check_end_of_line(char *str, size_t pos) ft_puttermcaps("le"); } } - -void underline_right(char **str, size_t *pos, size_t pos_ref) -{ - if (!(*pos < ft_strlen(*str))) - return ; - if (*pos >= pos_ref) - { - ft_puttermcaps("mr"); - data_singleton()->line.copy_tmp = ft_realloc_imput(data_singleton()-> - line.copy_tmp, (*str)[*pos], data_singleton()->line.pos_tmp); - ft_putchar((*str)[*pos]); - ft_puttermcaps("me"); - ++(data_singleton()->line.pos_tmp); - ++(*pos); - underline_check_end_of_line(*str, *pos); - } - else - { - data_singleton()->line.copy_tmp = ft_remove_imput(data_singleton()-> - line.copy_tmp, data_singleton()->line.pos_tmp); - ft_putchar((*str)[*pos]); - if (data_singleton()->line.pos_tmp) - --(data_singleton()->line.pos_tmp); - ++(*pos); - underline_check_end_of_line(*str, *pos); - } -} - -void underline_left(char **str, size_t *pos, size_t pos_ref) -{ - if (!*pos) - return ; - if (*pos > pos_ref) - { - --(*pos); - ft_putchar('\b'); - ft_putchar((*str)[*pos]); - underline_check_end_of_line(*str, *pos + 1); - ft_putchar('\b'); - data_singleton()->line.copy_tmp = ft_remove_imput(data_singleton()-> - line.copy_tmp, data_singleton()->line.pos_tmp); - if (data_singleton()->line.pos_tmp) - --(data_singleton()->line.pos_tmp); - } - else - { - data_singleton()->line.pos_tmp = 0; - --(*pos); - ft_putchar('\b'); - ft_puttermcaps("mr"); - data_singleton()->line.copy_tmp = ft_realloc_imput(data_singleton()-> - line.copy_tmp, (*str)[*pos], data_singleton()->line.pos_tmp); - ft_putchar((*str)[*pos]); - underline_check_end_of_line(*str, *pos + 1); - ft_puttermcaps("me"); - ft_putchar('\b'); - } -} diff --git a/42sh/src/line_editing/underline_home.c b/42sh/src/line_editing/underline_home.c new file mode 100644 index 00000000..0c6fe355 --- /dev/null +++ b/42sh/src/line_editing/underline_home.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* underline_home.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/22 23:11:05 by gwojda #+# #+# */ +/* Updated: 2017/03/22 23:44:44 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void underline_home(char **str, size_t *pos, size_t pos_ref) +{ + size_t pos_tmp; + + pos_tmp = *pos; + if ((*str)[pos_tmp] == '\n') + { + underline_left(str, pos, pos_ref); + --pos_tmp; + } + while ((pos_tmp && (*str)[pos_tmp] != '\n') + && (pos_tmp + 1 > 0 && (*str)[pos_tmp - 1] != '\n')) + { + underline_left(str, pos, pos_ref); + --pos_tmp; + } + *pos = pos_tmp; +} diff --git a/42sh/src/line_editing/underline_left.c b/42sh/src/line_editing/underline_left.c new file mode 100644 index 00000000..0d3cd41a --- /dev/null +++ b/42sh/src/line_editing/underline_left.c @@ -0,0 +1,62 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* underline_left.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/22 22:54:28 by gwojda #+# #+# */ +/* Updated: 2017/03/22 23:08:58 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static int reset_term_hard(void) +{ + ft_putstr(data_singleton()->line.copy_tmp); + ft_putnc('\b', ft_strlen(data_singleton()->line.copy_tmp)); + ft_strdel(&data_singleton()->line.copy_tmp); + data_singleton()->line.pos_tmp = 0; + return (0); +} + +static void left_abs(char **str, size_t *pos) +{ + --(*pos); + ft_putchar('\b'); + data_singleton()->line.pos_tmp = 0; + ft_puttermcaps("mr"); + data_singleton()->line.copy_tmp = ft_realloc_imput(data_singleton()-> + line.copy_tmp, (*str)[*pos], data_singleton()->line.pos_tmp); + ft_putchar((*str)[*pos]); + underline_check_end_of_line(*str, *pos + 1); + ft_puttermcaps("me"); + ft_putchar('\b'); +} + +static void left_mv_back(char **str, size_t *pos) +{ + --(*pos); + ft_putchar('\b'); + ft_putchar((*str)[*pos]); + underline_check_end_of_line(*str, *pos + 1); + data_singleton()->line.copy_tmp = ft_remove_imput(data_singleton()-> + line.copy_tmp, data_singleton()->line.pos_tmp); + if (data_singleton()->line.pos_tmp) + --(data_singleton()->line.pos_tmp); + ft_putchar('\b'); +} + +int underline_left(char **str, size_t *pos, size_t pos_ref) +{ + if (!*pos) + return (1); + if ((*str)[*pos - 1] == '\n') + return (reset_term_hard()); + if (*pos > pos_ref) + left_mv_back(str, pos); + else + left_abs(str, pos); + return (1); +} diff --git a/42sh/src/line_editing/underline_reset.c b/42sh/src/line_editing/underline_reset.c index bddcf88c..6fd150a5 100644 --- a/42sh/src/line_editing/underline_reset.c +++ b/42sh/src/line_editing/underline_reset.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/22 21:14:07 by gwojda #+# #+# */ -/* Updated: 2017/03/22 21:16:24 by gwojda ### ########.fr */ +/* Updated: 2017/03/22 23:40:39 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ void reset_term(char **str, size_t *pos) { - size_t pos_ref; + size_t pos_ref; pos_ref = *pos; if (*pos) @@ -26,39 +26,30 @@ void reset_term(char **str, size_t *pos) ft_current_str(*str, *pos); ft_get_next_str(*str, pos); ft_putnc('\b', *pos - pos_ref); - (*pos) = pos_ref; + (*pos) = pos_ref + (((*str)[*pos]) ? 1 : 0); } void reset_and_remove_term(char **str, size_t *pos, char *copy_tmp) { - size_t pos_ref; + size_t pos_ref; pos_ref = *pos; if (!data_singleton()->line.pos_tmp) pos_ref += ft_strlen(data_singleton()->line.copy_tmp); + if (*pos) + { + --(*pos); + ft_get_beggin_with_curs(*str, pos); + } while (*copy_tmp) { --pos_ref; *str = ft_remove_imput(*str, pos_ref); ++copy_tmp; } - if (*pos) - { - --(*pos); - ft_get_beggin_with_curs(*str, pos); - } ft_puttermcaps("cd"); ft_current_str(*str, *pos); ft_get_next_str(*str, pos); ft_putnc('\b', *pos - pos_ref); - (*pos) = pos_ref; -} - -int reset_term_hard(void) -{ - ft_putnc('\b', ft_strlen(data_singleton()->line.copy_tmp)); - ft_putstr(data_singleton()->line.copy_tmp); - ft_strdel(&data_singleton()->line.copy_tmp); - data_singleton()->line.pos_tmp = 0; - return (0); + (*pos) = pos_ref + (((*str)[*pos]) ? 1 : 0); } diff --git a/42sh/src/line_editing/underline_right.c b/42sh/src/line_editing/underline_right.c new file mode 100644 index 00000000..85ba5b41 --- /dev/null +++ b/42sh/src/line_editing/underline_right.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* underline_right.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/22 22:50:52 by gwojda #+# #+# */ +/* Updated: 2017/03/22 23:00:32 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static int reset_term_hard(void) +{ + ft_putnc('\b', ft_strlen(data_singleton()->line.copy_tmp)); + ft_putstr(data_singleton()->line.copy_tmp); + ft_strdel(&data_singleton()->line.copy_tmp); + data_singleton()->line.pos_tmp = 0; + return (0); +} + +static void right_abs(char **str, size_t *pos) +{ + ft_puttermcaps("mr"); + data_singleton()->line.copy_tmp = ft_realloc_imput(data_singleton()-> + line.copy_tmp, (*str)[*pos], data_singleton()->line.pos_tmp); + ft_putchar((*str)[*pos]); + ft_puttermcaps("me"); + ++(data_singleton()->line.pos_tmp); + ++(*pos); + underline_check_end_of_line(*str, *pos); +} + +static void right_mv_back(char **str, size_t *pos) +{ + data_singleton()->line.copy_tmp = ft_remove_imput(data_singleton()-> + line.copy_tmp, data_singleton()->line.pos_tmp); + ft_putchar((*str)[*pos]); + if (data_singleton()->line.pos_tmp) + --(data_singleton()->line.pos_tmp); + ++(*pos); + underline_check_end_of_line(*str, *pos); +} + +int underline_right(char **str, size_t *pos, size_t pos_ref) +{ + if (!(*pos < ft_strlen(*str))) + return (1); + if ((*str)[*pos] == '\n') + return (reset_term_hard()); + if (*pos >= pos_ref) + right_abs(str, pos); + else + right_mv_back(str, pos); + return (1); +} diff --git a/42sh/src/main/data_init.c b/42sh/src/main/data_init.c index 0abc6637..7921b68a 100644 --- a/42sh/src/main/data_init.c +++ b/42sh/src/main/data_init.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 19:26:32 by jhalford #+# #+# */ -/* Updated: 2017/03/22 15:55:07 by jhalford ### ########.fr */ +/* Updated: 2017/03/23 03:16:08 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -66,6 +66,9 @@ int data_init(int ac, char **av) data->lst_func = NULL; lexer_init(&data->lexer); parser_init(&data->parser); + if (!ft_getenv(data_singleton()->env, "FUNC_LVL")) + builtin_setenv("setenv", (char *[]){"env", "FUNC_LVL", "-1", + NULL}, NULL); if ((term_name = ft_getenv(data->env, "TERM")) == NULL) { term_name = "dumb"; diff --git a/42sh/src/main/main.c b/42sh/src/main/main.c index 7996a840..69fedd03 100644 --- a/42sh/src/main/main.c +++ b/42sh/src/main/main.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/20 14:45:40 by gwojda #+# #+# */ -/* Updated: 2017/03/22 22:02:30 by ariard ### ########.fr */ +/* Updated: 2017/03/23 00:28:58 by ariard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -45,7 +45,7 @@ static int handle_instruction(t_list **token, t_btree **ast) continue ; if ((ret = do_parser_routine(token, ast)) == 1 && SH_NO_INTERACTIVE(data->opts)) - return (ret); + return (ret); else if (ret > 0) break ; } @@ -66,6 +66,7 @@ int main(int ac, char **av) t_btree *ast; g_argv = av; + DG("----------------"); setlocale(LC_ALL, ""); if (shell_init(ac, av) != 0) return (1);