merge
This commit is contained in:
commit
54f0610bd1
35 changed files with 390 additions and 699 deletions
|
|
@ -6,14 +6,14 @@
|
||||||
# By: wescande <wescande@student.42.fr> +#+ +:+ +#+ #
|
# By: wescande <wescande@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2016/08/29 21:32:58 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
|
NAME = 42sh
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
FLAGS = -Wall -Wextra -Werror -fsanitize=address
|
FLAGS = -Wall -Wextra -Werror #-fvisibility=hidden #-fsanitize=address
|
||||||
D_FLAGS = -g
|
D_FLAGS = -g
|
||||||
|
|
||||||
DELTA = $$(echo "$$(tput cols)-47"|bc)
|
DELTA = $$(echo "$$(tput cols)-47"|bc)
|
||||||
|
|
@ -267,8 +267,12 @@ line_editing/print_and_del.c\
|
||||||
line_editing/queue.c\
|
line_editing/queue.c\
|
||||||
line_editing/readline.c\
|
line_editing/readline.c\
|
||||||
line_editing/resize.c\
|
line_editing/resize.c\
|
||||||
|
line_editing/underline_end.c\
|
||||||
line_editing/underline_function.c\
|
line_editing/underline_function.c\
|
||||||
|
line_editing/underline_home.c\
|
||||||
|
line_editing/underline_left.c\
|
||||||
line_editing/underline_reset.c\
|
line_editing/underline_reset.c\
|
||||||
|
line_editing/underline_right.c\
|
||||||
main/data_exit.c\
|
main/data_exit.c\
|
||||||
main/data_init.c\
|
main/data_init.c\
|
||||||
main/data_singleton.c\
|
main/data_singleton.c\
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
|
/* By: sbenning <sbenning@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/08 16:34:51 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/23 10:35:44 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_F5 892427035
|
||||||
# define TOUCHE_F6 925981467
|
# define TOUCHE_F6 925981467
|
||||||
|
|
||||||
# define SIZE_LINE 512
|
# define SIZE_LINE 16384
|
||||||
|
|
||||||
# define CORRUPT 1
|
# 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);
|
int ft_get_size_prev(char *str, size_t pos);
|
||||||
void sigwinch_resize(int sig);
|
void sigwinch_resize(int sig);
|
||||||
size_t ft_hist_len(void);
|
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_term(char **str, size_t *pos);
|
||||||
void reset_and_remove_term(char **str, size_t *pos, char *copy_tmp);
|
void reset_and_remove_term(char **str, size_t *pos, char *copy_tmp);
|
||||||
int reset_term_hard(void);
|
|
||||||
|
|
||||||
int ft_read_stdin(char **input);
|
int ft_read_stdin(char **input);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/22 17:22:51 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/05 11:53:36 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 11:29:54 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/08/03 16:17:21 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 11:01:15 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: ariard <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/01 16:10:54 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
525
42sh/log
525
42sh/log
|
|
@ -1,462 +1,63 @@
|
||||||
On branch master
|
env lvl 2
|
||||||
Your branch is up-to-date with 'origin/master'.
|
env lvl 3
|
||||||
Changes to be committed:
|
env lvl 4
|
||||||
(use "git reset HEAD <file>..." to unstage)
|
env lvl 5
|
||||||
|
env lvl 6
|
||||||
deleted: libft/objs/btree/btree_apply_by_level.d
|
env lvl 7
|
||||||
deleted: libft/objs/btree/btree_apply_infix.d
|
env lvl 8
|
||||||
deleted: libft/objs/btree/btree_apply_prefix.d
|
env lvl 7
|
||||||
deleted: libft/objs/btree/btree_apply_suffix.d
|
env lvl 8
|
||||||
deleted: libft/objs/btree/btree_create_node.d
|
env lvl 9
|
||||||
deleted: libft/objs/btree/btree_del.d
|
env lvl 6
|
||||||
deleted: libft/objs/btree/btree_delone.d
|
env lvl 7
|
||||||
deleted: libft/objs/btree/btree_insert_data.d
|
env lvl 8
|
||||||
deleted: libft/objs/btree/btree_level_count.d
|
env lvl 9
|
||||||
deleted: libft/objs/btree/btree_map.d
|
env lvl 8
|
||||||
deleted: libft/objs/btree/btree_print.d
|
env lvl 9
|
||||||
deleted: libft/objs/btree/btree_search_item.d
|
env lvl 10
|
||||||
deleted: libft/objs/char/ft_isalnum.d
|
env lvl 5
|
||||||
deleted: libft/objs/char/ft_isalpha.d
|
env lvl 6
|
||||||
deleted: libft/objs/char/ft_isascii.d
|
env lvl 7
|
||||||
deleted: libft/objs/char/ft_isdigit.d
|
env lvl 8
|
||||||
deleted: libft/objs/char/ft_isprint.d
|
env lvl 9
|
||||||
deleted: libft/objs/char/ft_tolower.d
|
env lvl 8
|
||||||
deleted: libft/objs/char/ft_toupper.d
|
env lvl 9
|
||||||
deleted: libft/objs/cliopts/cliopts_get.d
|
env lvl 10
|
||||||
deleted: libft/objs/cliopts/cliopts_has.d
|
env lvl 7
|
||||||
deleted: libft/objs/color/ft_color_mk.d
|
env lvl 8
|
||||||
deleted: libft/objs/color/ft_color_mkif.d
|
env lvl 9
|
||||||
deleted: libft/objs/color/ft_color_reset.d
|
env lvl 10
|
||||||
deleted: libft/objs/color/ft_color_set.d
|
env lvl 9
|
||||||
deleted: libft/objs/dlst/ft_dlstadd_after.d
|
env lvl 10
|
||||||
deleted: libft/objs/dlst/ft_dlstadd_before.d
|
env lvl 11
|
||||||
deleted: libft/objs/dlst/ft_dlstdel.d
|
env lvl 4
|
||||||
deleted: libft/objs/dlst/ft_dlstdelone.d
|
env lvl 5
|
||||||
deleted: libft/objs/dlst/ft_dlstlast.d
|
env lvl 6
|
||||||
deleted: libft/objs/dlst/ft_dlstnew.d
|
env lvl 7
|
||||||
deleted: libft/objs/dlst/ft_dlstrtostr.d
|
env lvl 8
|
||||||
deleted: libft/objs/dlst/ft_dlstsize.d
|
env lvl 9
|
||||||
deleted: libft/objs/error/error.d
|
env lvl 8
|
||||||
deleted: libft/objs/ft_printf/ft_conversion.d
|
env lvl 9
|
||||||
deleted: libft/objs/ft_printf/ft_fmt_simplify.d
|
env lvl 10
|
||||||
deleted: libft/objs/ft_printf/ft_fmt_validate_conv.d
|
env lvl 7
|
||||||
deleted: libft/objs/ft_printf/ft_fmt_validate_flags.d
|
env lvl 8
|
||||||
deleted: libft/objs/ft_printf/ft_fmt_validate_mod.d
|
env lvl 9
|
||||||
deleted: libft/objs/ft_printf/ft_printf.d
|
env lvl 10
|
||||||
deleted: libft/objs/ft_printf/ft_printf_color.d
|
env lvl 9
|
||||||
deleted: libft/objs/ft_printf/ft_printf_parse.d
|
env lvl 10
|
||||||
deleted: libft/objs/ft_printf/ft_transform.d
|
env lvl 11
|
||||||
deleted: libft/objs/ft_printf/ft_vprintf.d
|
env lvl 6
|
||||||
deleted: libft/objs/ft_printf/lib_fmt.d
|
env lvl 7
|
||||||
deleted: libft/objs/ft_printf/lib_fmt_error.d
|
env lvl 8
|
||||||
deleted: libft/objs/ft_printf/lib_pad.d
|
env lvl 9
|
||||||
deleted: libft/objs/ft_printf/lib_pad_sharp.d
|
env lvl 10
|
||||||
deleted: libft/objs/get_next_line/get_next_line.d
|
env lvl 9
|
||||||
deleted: libft/objs/lst/ft_id.d
|
env lvl 10
|
||||||
deleted: libft/objs/lst/ft_lst_at.d
|
env lvl 11
|
||||||
deleted: libft/objs/lst/ft_lst_bfree.d
|
env lvl 8
|
||||||
deleted: libft/objs/lst/ft_lst_cfree.d
|
env lvl 9
|
||||||
deleted: libft/objs/lst/ft_lst_delif.d
|
env lvl 10
|
||||||
deleted: libft/objs/lst/ft_lst_delsub.d
|
env lvl 11
|
||||||
deleted: libft/objs/lst/ft_lst_filter.d
|
env lvl 10
|
||||||
deleted: libft/objs/lst/ft_lst_find.d
|
env lvl 11
|
||||||
deleted: libft/objs/lst/ft_lst_merge.d
|
env lvl 12
|
||||||
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 <file>..." to update what will be committed)
|
|
||||||
(use "git checkout -- <file>..." to discard changes in working directory)
|
|
||||||
|
|
||||||
modified: log
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,103 +6,60 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/17 18:54:00 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"
|
#include "minishell.h"
|
||||||
|
|
||||||
#define MATHERR_0 "math : invalid number of arguments"
|
#define MATHERR_0 "usage: math variable operator(+-/*%) operand"
|
||||||
#define MATHERR_1 "math : invalid variable name"
|
#define MATHERR_2 "math: %c: invalid operator"
|
||||||
#define MATHERR_2 "math : invalid operator"
|
#define MATHERR_3 "math: %s: operand must be digits only"
|
||||||
#define MATHERR_3 "math : invalid operand"
|
#define MATHERR_4 "math: division by 0"
|
||||||
#define MATHERR_4 "math : division by 0"
|
#define MATHERR_5 "math: modulo by 0"
|
||||||
|
|
||||||
static int init_math(char **var, char **value, char **operator,
|
static char *do_math(char *value, char operator, char *operand)
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
long ope1;
|
long ope1;
|
||||||
long ope2;
|
long ope2;
|
||||||
|
|
||||||
ope1 = ft_atoi(*value);
|
ope1 = ft_atoi(value);
|
||||||
if (operand)
|
|
||||||
ope2 = ft_atoi(operand);
|
ope2 = ft_atoi(operand);
|
||||||
else
|
DG("value %s -> %i", value, ope1);
|
||||||
ope2 = 0;
|
DG("operand %s -> %i", operand, ope2);
|
||||||
if ((operator[0] == '/' || operator[0] == '%') && ope2 == 0)
|
if ((operator == '/') && ope2 == 0)
|
||||||
return (SH_ERR(MATHERR_4));
|
return (SH_ERR(MATHERR_4) ? NULL : NULL);
|
||||||
else
|
if ((operator == '%') && ope2 == 0)
|
||||||
{
|
return (SH_ERR(MATHERR_5) ? NULL : NULL);
|
||||||
ope1 = (operator[0] == '+') ? ope1 + ope2 : ope1;
|
ope1 = (operator == '+') ? ope1 + ope2 : ope1;
|
||||||
ope1 = (operator[0] == '-') ? ope1 - ope2 : ope1;
|
ope1 = (operator == '-') ? ope1 - ope2 : ope1;
|
||||||
ope1 = (operator[0] == '/') ? ope1 / ope2 : ope1;
|
ope1 = (operator == '/') ? ope1 / ope2 : ope1;
|
||||||
ope1 = (operator[0] == '*') ? ope1 * ope2 : ope1;
|
ope1 = (operator == '*') ? ope1 * ope2 : ope1;
|
||||||
ope1 = (operator[0] == '%') ? ope1 % ope2 : ope1;
|
ope1 = (operator == '%') ? ope1 % ope2 : ope1;
|
||||||
}
|
DG("output=%s (%i)", ft_itoa(ope1), ope1);
|
||||||
ft_strdel(value);
|
return (ft_itoa(ope1));
|
||||||
*value = ft_itoa(ope1);
|
|
||||||
return (0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int builtin_math(const char *path, char *const av[], char *const envp[])
|
int builtin_math(const char *path, char *const av[], char *const envp[])
|
||||||
{
|
{
|
||||||
char *var;
|
|
||||||
char *value;
|
char *value;
|
||||||
char *operator;
|
char operator;
|
||||||
char *operand;
|
char *operand;
|
||||||
|
|
||||||
(void)path;
|
(void)path;
|
||||||
(void)envp;
|
(void)envp;
|
||||||
if (!av || !av[1] || !av[2] || !av[3] || av[4])
|
if (!av || !av[1] || !av[2] || !av[3] || av[4])
|
||||||
return (SH_ERR(MATHERR_0));
|
return (SH_ERR(MATHERR_0));
|
||||||
init_math(&var, &value, &operator, &operand);
|
value = ft_getenv(data_singleton()->local_var, av[1]);
|
||||||
var = av[1];
|
operator = av[2][0];
|
||||||
if (get_value(var, &value))
|
if (!(ft_strchr("+-/*%", operator)))
|
||||||
return (1);
|
return (SH_ERR(MATHERR_2, operator));
|
||||||
operator = av[2];
|
|
||||||
if (ft_strlen(operator) != 1 || !(ft_strchr("+-/*%", operator[0])))
|
|
||||||
return (SH_ERR(MATHERR_2));
|
|
||||||
operand = av[3];
|
operand = av[3];
|
||||||
if (!ft_stris(operand, &ft_isdigit))
|
if (!ft_stris(operand, &ft_isdigit))
|
||||||
return (SH_ERR(MATHERR_3));
|
return (SH_ERR(MATHERR_3, operand));
|
||||||
if (do_math(&value, operator, operand))
|
if (!(value = do_math(value, operator, operand)))
|
||||||
return (1);
|
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);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/28 14:25:17 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/08 17:20:01 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;
|
str = data_singleton()->line.input;
|
||||||
free(current_word);
|
free(current_word);
|
||||||
free(glob_echap);
|
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_strncmp(str + pos, *ss_glob, ft_strlen(*ss_glob)))
|
||||||
{
|
{
|
||||||
ft_sstrfree(ss_glob);
|
ft_sstrfree(ss_glob);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/05 11:50:51 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 20:33:45 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 15:47:30 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,33 +6,30 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 11:12:05 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"
|
#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)
|
int exec_var(t_btree **ast)
|
||||||
{
|
{
|
||||||
t_astnode *node;
|
t_astnode *node;
|
||||||
char **av;
|
char **av;
|
||||||
char *var;
|
char *var;
|
||||||
char *value;
|
char *value;
|
||||||
|
char *equal;
|
||||||
|
|
||||||
node = (*ast)->item;
|
node = (*ast)->item;
|
||||||
av = token_to_argv(node->data.cmd.token, 1);
|
DG("before");
|
||||||
set_var(av[0], &var, &value);
|
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);
|
builtin_setenv("internal", (char*[]){"local", var, value, 0}, NULL);
|
||||||
ft_strdel(&var);
|
ft_sstrfree(av);
|
||||||
ft_strdel(&value);
|
|
||||||
ft_tabdel(&av);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/08 03:38:36 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/08 00:58:02 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/08 02:37:04 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);
|
ft_ld_del(&p->data.d_for.token, &ft_tabdel);
|
||||||
btree_del(&p->data.d_for.content, &ast_free);
|
btree_del(&p->data.d_for.content, &ast_free);
|
||||||
|
sleep(5);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/15 00:49:20 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_exec(&p->data.d_for.content);
|
||||||
}
|
}
|
||||||
ft_tabdel(&av);
|
ft_tabdel(&av);
|
||||||
sleep(10);
|
return (1);
|
||||||
return (0);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,36 +6,34 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/08 03:23:59 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"
|
#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)
|
int plaunch_function(t_process *p)
|
||||||
{
|
{
|
||||||
char *temp;
|
static int protection= 0;
|
||||||
char *func_lvl;
|
|
||||||
int value;
|
|
||||||
|
|
||||||
func_lvl = ft_sstrstr(data_singleton()->env, "FUNC_LVL");
|
if (ft_atoi(ft_getenv(data_singleton()->env, "FUNC_LVL")) > 10)
|
||||||
if ((temp = func_lvl))
|
return(SH_ERR(FUNCERR_0));
|
||||||
{
|
|
||||||
func_lvl += ft_strlenchr(func_lvl, '=') + 1;
|
if (protection >= FUNC_LVL)
|
||||||
if ((value = ft_atoi(func_lvl)) >= 199)
|
return(SH_ERR(FUNCERR_0));
|
||||||
{
|
protection++;
|
||||||
ft_strdel(&temp);
|
|
||||||
return (SH_ERR(FUNCERR_0));
|
// jack faut qu on parle
|
||||||
}
|
|
||||||
value += 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
value = 0;
|
|
||||||
builtin_setenv("setenv", (char *[]){"env", "FUNC_LVL",
|
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);
|
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, "?")));
|
return (ft_atoi(ft_getenv(data_singleton()->env, "?")));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 20:36:04 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 19:38:05 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 22:03:48 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)
|
if (get_lexer_stack(*lexer) != BQUOTE)
|
||||||
push(&lexer->stack, lexer->state);
|
push(&lexer->stack, lexer->state);
|
||||||
else
|
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))
|
else if (lexer->str[lexer->pos] == '\\' && (back = 1))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/28 18:36:58 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/19 12:45:06 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;
|
ret = 0;
|
||||||
if (read(STDIN, &ret, sizeof(int)) < 0)
|
if (read(STDIN, &ret, sizeof(int)) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if ((*str)[*pos] == '\n')
|
if (ret == FLECHE_GAUCHE && !underline_left(str, pos, pos_ref))
|
||||||
return (reset_term_hard());
|
return (0);
|
||||||
if (ret == FLECHE_GAUCHE)
|
else if (ret == FLECHE_DROITE && !underline_right(str, pos, pos_ref))
|
||||||
underline_left(str, pos, pos_ref);
|
return (0);
|
||||||
else if (ret == FLECHE_DROITE)
|
else if (ret == TOUCHE_HOME)
|
||||||
underline_right(str, pos, pos_ref);
|
underline_home(str, pos, pos_ref);
|
||||||
else
|
else if (ret == TOUCHE_END)
|
||||||
|
underline_end(str, pos, pos_ref);
|
||||||
|
else if (ret != FLECHE_DROITE && ret != FLECHE_GAUCHE)
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
if (data_singleton()->line.copy_tmp && *data_singleton()->line.copy_tmp)
|
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;
|
ret = 0;
|
||||||
if (read(STDIN, &ret, sizeof(int)) < 0)
|
if (read(STDIN, &ret, sizeof(int)) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if ((*str)[*pos] == '\n')
|
if (ret == FLECHE_GAUCHE && !underline_left(str, pos, pos_ref))
|
||||||
return (reset_term_hard());
|
return (0);
|
||||||
if (ret == FLECHE_GAUCHE)
|
else if (ret == FLECHE_DROITE && !underline_right(str, pos, pos_ref))
|
||||||
underline_left(str, pos, pos_ref);
|
return (0);
|
||||||
else if (ret == FLECHE_DROITE)
|
else if (ret == TOUCHE_HOME)
|
||||||
underline_right(str, pos, pos_ref);
|
underline_home(str, pos, pos_ref);
|
||||||
else
|
else if (ret == TOUCHE_END)
|
||||||
|
underline_end(str, pos, pos_ref);
|
||||||
|
else if (ret != FLECHE_DROITE && ret != FLECHE_GAUCHE)
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
reset_term(str, pos);
|
reset_term(str, pos);
|
||||||
|
|
|
||||||
35
42sh/src/line_editing/underline_end.c
Normal file
35
42sh/src/line_editing/underline_end.c
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* underline_end.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,13 +6,13 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/22 20:55:24 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"
|
#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)
|
if (!str)
|
||||||
return ;
|
return ;
|
||||||
|
|
@ -22,61 +22,3 @@ static void underline_check_end_of_line(char *str, size_t pos)
|
||||||
ft_puttermcaps("le");
|
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');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
32
42sh/src/line_editing/underline_home.c
Normal file
32
42sh/src/line_editing/underline_home.c
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* underline_home.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
62
42sh/src/line_editing/underline_left.c
Normal file
62
42sh/src/line_editing/underline_left.c
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* underline_left.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* 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);
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/22 21:14:07 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ void reset_term(char **str, size_t *pos)
|
||||||
ft_current_str(*str, *pos);
|
ft_current_str(*str, *pos);
|
||||||
ft_get_next_str(*str, pos);
|
ft_get_next_str(*str, pos);
|
||||||
ft_putnc('\b', *pos - pos_ref);
|
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)
|
void reset_and_remove_term(char **str, size_t *pos, char *copy_tmp)
|
||||||
|
|
@ -36,29 +36,20 @@ void reset_and_remove_term(char **str, size_t *pos, char *copy_tmp)
|
||||||
pos_ref = *pos;
|
pos_ref = *pos;
|
||||||
if (!data_singleton()->line.pos_tmp)
|
if (!data_singleton()->line.pos_tmp)
|
||||||
pos_ref += ft_strlen(data_singleton()->line.copy_tmp);
|
pos_ref += ft_strlen(data_singleton()->line.copy_tmp);
|
||||||
|
if (*pos)
|
||||||
|
{
|
||||||
|
--(*pos);
|
||||||
|
ft_get_beggin_with_curs(*str, pos);
|
||||||
|
}
|
||||||
while (*copy_tmp)
|
while (*copy_tmp)
|
||||||
{
|
{
|
||||||
--pos_ref;
|
--pos_ref;
|
||||||
*str = ft_remove_imput(*str, pos_ref);
|
*str = ft_remove_imput(*str, pos_ref);
|
||||||
++copy_tmp;
|
++copy_tmp;
|
||||||
}
|
}
|
||||||
if (*pos)
|
|
||||||
{
|
|
||||||
--(*pos);
|
|
||||||
ft_get_beggin_with_curs(*str, pos);
|
|
||||||
}
|
|
||||||
ft_puttermcaps("cd");
|
ft_puttermcaps("cd");
|
||||||
ft_current_str(*str, *pos);
|
ft_current_str(*str, *pos);
|
||||||
ft_get_next_str(*str, pos);
|
ft_get_next_str(*str, pos);
|
||||||
ft_putnc('\b', *pos - pos_ref);
|
ft_putnc('\b', *pos - pos_ref);
|
||||||
(*pos) = pos_ref;
|
(*pos) = pos_ref + (((*str)[*pos]) ? 1 : 0);
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
58
42sh/src/line_editing/underline_right.c
Normal file
58
42sh/src/line_editing/underline_right.c
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* underline_right.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* 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);
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/28 19:26:32 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;
|
data->lst_func = NULL;
|
||||||
lexer_init(&data->lexer);
|
lexer_init(&data->lexer);
|
||||||
parser_init(&data->parser);
|
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)
|
if ((term_name = ft_getenv(data->env, "TERM")) == NULL)
|
||||||
{
|
{
|
||||||
term_name = "dumb";
|
term_name = "dumb";
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
/* By: gwojda <gwojda@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/20 14:45:40 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 */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -66,6 +66,7 @@ int main(int ac, char **av)
|
||||||
t_btree *ast;
|
t_btree *ast;
|
||||||
|
|
||||||
g_argv = av;
|
g_argv = av;
|
||||||
|
DG("----------------");
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
if (shell_init(ac, av) != 0)
|
if (shell_init(ac, av) != 0)
|
||||||
return (1);
|
return (1);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue