diff --git a/libft/.gitignore b/libft/.gitignore new file mode 100644 index 00000000..75a55b30 --- /dev/null +++ b/libft/.gitignore @@ -0,0 +1 @@ +libft.a diff --git a/libft/Makefile b/libft/Makefile new file mode 100644 index 00000000..8086a31a --- /dev/null +++ b/libft/Makefile @@ -0,0 +1,255 @@ +#* ************************************************************************** *# +#* *# +#* ::: :::::::: *# +#* Makefile :+: :+: :+: *# +#* +:+ +:+ +:+ *# +#* By: wescande +#+ +:+ +#+ *# +#* +#+#+#+#+#+ +#+ *# +#* Created: 2016/08/29 21:32:58 by wescande #+# #+# *# +#* Updated: 2016/12/24 02:14:21 by wescande ### ########.fr *# +#* *# +#* ************************************************************************** *# + +NAME = libft.a + +CC = gcc +FLAGS = -Wall -Wextra -Werror -O3 + +LEN_NAME = `printf "%s" $(NAME) |wc -c` +DELTA = $$(echo "$$(tput cols)-31-$(LEN_NAME)"|bc) + +SRC_DIR = srcs/ +INC_DIR = includes/ +OBJ_DIR = objs/ + +SRC_BASE = \ +btree/btree_apply_by_level.c\ +btree/btree_apply_infix.c\ +btree/btree_apply_prefix.c\ +btree/btree_apply_suffix.c\ +btree/btree_create_node.c\ +btree/btree_del.c\ +btree/btree_delone.c\ +btree/btree_insert_data.c\ +btree/btree_level_count.c\ +btree/btree_map.c\ +btree/btree_print.c\ +btree/btree_search_item.c\ +char/ft_isalnum.c\ +char/ft_isalpha.c\ +char/ft_isascii.c\ +char/ft_isdigit.c\ +char/ft_isprint.c\ +char/ft_tolower.c\ +char/ft_toupper.c\ +cliopts/cliopts_get.c\ +cliopts/cliopts_getmap.c\ +color/ft_color_mk.c\ +color/ft_color_mkif.c\ +color/ft_color_reset.c\ +color/ft_color_set.c\ +dlst/ft_dlstadd_after.c\ +dlst/ft_dlstadd_before.c\ +dlst/ft_dlstdel.c\ +dlst/ft_dlstdelone.c\ +dlst/ft_dlstlast.c\ +dlst/ft_dlstnew.c\ +dlst/ft_dlstrtostr.c\ +dlst/ft_dlstsize.c\ +error/error.c\ +error/ft_usage.c\ +ft_printf/ft_conversion.c\ +ft_printf/ft_fmt_simplify.c\ +ft_printf/ft_fmt_validate_conv.c\ +ft_printf/ft_fmt_validate_flags.c\ +ft_printf/ft_fmt_validate_mod.c\ +ft_printf/ft_printf.c\ +ft_printf/ft_printf_color.c\ +ft_printf/ft_printf_parse.c\ +ft_printf/ft_transform.c\ +ft_printf/ft_vprintf.c\ +ft_printf/lib_fmt.c\ +ft_printf/lib_fmt_error.c\ +ft_printf/lib_pad.c\ +ft_printf/lib_pad_sharp.c\ +get_next_line/get_next_line.c\ +lst/ft_id.c\ +lst/ft_lst2str.c\ +lst/ft_lst_at.c\ +lst/ft_lst_bfree.c\ +lst/ft_lst_cfree.c\ +lst/ft_lst_delif.c\ +lst/ft_lst_delsub.c\ +lst/ft_lst_filter.c\ +lst/ft_lst_filterout.c\ +lst/ft_lst_find.c\ +lst/ft_lst_merge.c\ +lst/ft_lst_order_delsub.c\ +lst/ft_lst_pop.c\ +lst/ft_lst_print.c\ +lst/ft_lst_print2.c\ +lst/ft_lst_removeif.c\ +lst/ft_lst_reverse.c\ +lst/ft_lst_size.c\ +lst/ft_lst_sorted_insert.c\ +lst/ft_lst_sorted_merge.c\ +lst/ft_lstadd.c\ +lst/ft_lstdel.c\ +lst/ft_lstdelone.c\ +lst/ft_lsteadd.c\ +lst/ft_lstiter.c\ +lst/ft_lstlast.c\ +lst/ft_lstmap.c\ +lst/ft_lstnadd.c\ +lst/ft_lstnew.c\ +lst/ft_lstnew_range.c\ +lst/ft_lstsort.c\ +lst/lst_insert_sort.c\ +lst/pop.c\ +lst/push.c\ +lst/top.c\ +math/ft_addrcmp.c\ +math/ft_ilen.c\ +math/ft_ilen_base.c\ +math/ft_itoa.c\ +math/ft_itoa_base.c\ +math/ft_lllen.c\ +math/ft_lllen_base.c\ +math/ft_lltoa_base.c\ +math/ft_uilen.c\ +math/ft_uitoa_base.c\ +math/ft_ulltoa_base.c\ +math/id.c\ +mem/ft_bzero.c\ +mem/ft_malloc.c\ +mem/ft_memalloc.c\ +mem/ft_memccpy.c\ +mem/ft_memchr.c\ +mem/ft_memcmp.c\ +mem/ft_memcpy.c\ +mem/ft_memdel.c\ +mem/ft_memmove.c\ +mem/ft_memset.c\ +mem/ft_realloc.c\ +net/cksum.c\ +net/create_client.c\ +net/create_server.c\ +net/host.c\ +net/ip.c\ +net/net_get.c\ +net/net_send.c\ +net/reserve_port.c\ +net/tcp.c\ +path/ft_path_notdir.c\ +printing/ft_putchar.c\ +printing/ft_putendl.c\ +printing/ft_putnbr.c\ +printing/ft_putstr.c\ +printing/hexdump.c\ +rs/rs.c\ +sstr/ft_sstradd.c\ +sstr/ft_sstrcat.c\ +sstr/ft_sstrdel.c\ +sstr/ft_sstrdup.c\ +sstr/ft_sstrfree.c\ +sstr/ft_sstrmerge.c\ +sstr/ft_sstrprint.c\ +sstr/ft_sstrprint_fd.c\ +sstr/ft_sstrsort.c\ +sstr/ft_sstrstr.c\ +str/ft_atoi.c\ +str/ft_convert_base.c\ +str/ft_putaddr_fd.c\ +str/ft_split_whitespaces.c\ +str/ft_str3join.c\ +str/ft_strappend.c\ +str/ft_strbetween.c\ +str/ft_strcat.c\ +str/ft_strcatf.c\ +str/ft_strchr.c\ +str/ft_strchrcpy.c\ +str/ft_strclr.c\ +str/ft_strcmp.c\ +str/ft_strcpy.c\ +str/ft_strcspn.c\ +str/ft_strcut.c\ +str/ft_strdel.c\ +str/ft_strdup.c\ +str/ft_strdupchr.c\ +str/ft_strduptr.c\ +str/ft_strequ.c\ +str/ft_strinsert.c\ +str/ft_stris.c\ +str/ft_striter.c\ +str/ft_striteri.c\ +str/ft_strjoin.c\ +str/ft_strlcat.c\ +str/ft_strlen.c\ +str/ft_strlenchr.c\ +str/ft_strmap.c\ +str/ft_strmapi.c\ +str/ft_strncat.c\ +str/ft_strncmp.c\ +str/ft_strncpy.c\ +str/ft_strndup.c\ +str/ft_strnequ.c\ +str/ft_strnew.c\ +str/ft_strnstr.c\ +str/ft_strrchr.c\ +str/ft_strreplace.c\ +str/ft_strrev.c\ +str/ft_strsepjoin.c\ +str/ft_strsplit.c\ +str/ft_strstr.c\ +str/ft_strsub.c\ +str/ft_strtok.c\ +str/ft_strtrim.c\ +sys/open_new.c\ +time/epoch.c + +SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) +OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) +NB = $(words $(SRC_BASE)) +INDEX = 0 +SHELL := /bin/bash + +all : + @$(MAKE) -j $(NAME) + +$(NAME) : $(OBJ_DIR) $(OBJS) + @ar rcs $(NAME) $(OBJS) + @printf "\r\033[38;5;117m✓ MAKE $(NAME)\033[0m\033[K\n" + +$(OBJ_DIR) : + @mkdir -p $(OBJ_DIR) + @mkdir -p $(dir $(OBJS)) + +$(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) + @$(eval DONE=$(shell echo $$(($(INDEX)*20/$(NB))))) + @$(eval PERCENT=$(shell echo $$(($(INDEX)*100/$(NB))))) + @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB) - 1)))) + @$(eval COLOR=$(shell list=(160 196 202 208 215 221 226 227 190 154 118 82 46); index=$$(($(PERCENT) * $${#list[@]} / 100)); echo "$${list[$$index]}")) + @printf "\r\033[38;5;%dm⌛ [%s]: %2d%% `printf '█%.0s' {0..$(DONE)}`%*s❙%*.*s\033[0m\033[K" $(COLOR) $(NAME) $(PERCENT) $(TO_DO) "" $(DELTA) $(DELTA) "$(shell echo "$@" | sed 's/^.*\///')" + @$(CC) $(FLAGS) -MMD -c $< -o $@\ + -I $(INC_DIR) + @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) + +clean : + @if [ -e $(OBJ_DIR) ]; \ + then \ + rm -rf $(OBJ_DIR); \ + printf "\r\033[38;5;202m✗ clean $(NAME).\033[0m\033[K\n"; \ + fi; + +fclean : clean + @if [ -e $(NAME) ]; \ + then \ + rm -rf $(NAME); \ + printf "\r\033[38;5;196m✗ fclean $(NAME).\033[0m\033[K\n"; \ + fi; + +re : fclean all + +.PHONY : fclean clean re + +-include $(OBJS:.o=.d) diff --git a/libft/README.md b/libft/README.md new file mode 100644 index 00000000..aaf37755 --- /dev/null +++ b/libft/README.md @@ -0,0 +1,22 @@ +# libft + +## libc + +malloc interface functions, string manipulation + +## data structures + +- string anipulation (`char *`) +- string array manipulation (`char **`) +- linked list (`t_list`) +- double linked list (`t_dlist`) +- binary trees (`t_btree`) +- time struct (`t_mytime`) + +## ft_printf + +printf rewrite + +## get_next_line + +read one line from a file descriptor, supports calls between multiple file descriptors. diff --git a/libft/STDBUG b/libft/STDBUG new file mode 100644 index 00000000..e69de29b diff --git a/libft/includes/btree.h b/libft/includes/btree.h new file mode 100644 index 00000000..eede027a --- /dev/null +++ b/libft/includes/btree.h @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/16 11:13:15 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:31:13 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef BTREE_H +# define BTREE_H + +# include "libft.h" + +struct s_btree +{ + void *item; + size_t content_size; + struct s_btree *left; + struct s_btree *right; +}; + +struct s_printdata +{ + int is_left; + int offset; + int depth; + int left; + int right; +}; + +typedef struct s_btree t_btree; +typedef struct s_printdata t_printdata; + +t_btree *btree_create_node(void const *item, size_t content_size); +t_btree *btree_map(t_btree *root, void *(*f)(void *)); +void btree_insert_data( + t_btree **root, + void *item, + size_t content_size, + int (*cmpf)(void *, void *)); +void *btree_search_item(t_btree *root, + void *data_ref, int (*cmpf)(void *, void *)); +int btree_level_count(t_btree *root); +void btree_apply_prefix(t_btree *root, void (*applyf)(void *)); +void btree_apply_infix(t_btree *root, void (*applyf)(void *)); +void btree_apply_suffix(t_btree *root, void (*applyf)(void *)); +void btree_print(int fd, t_btree *tree, char *(*printer)(void *)); +void btree_del(t_btree **root, void (*del)(void *, size_t)); +void btree_delone(t_btree **root, void (*del)(void *, size_t)); + +#endif diff --git a/libft/includes/cliopts.h b/libft/includes/cliopts.h new file mode 100644 index 00000000..31eecca6 --- /dev/null +++ b/libft/includes/cliopts.h @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cliopts.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 20:22:56 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:04:53 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CLIOPTS_H +# define CLIOPTS_H + +# include "libft.h" +# include "error.h" + +typedef struct s_cliopts t_cliopts; +typedef struct s_data_template t_data_template; +typedef long long t_flag; + +struct s_cliopts +{ + char c; + char *str; + t_flag flag_on; + t_flag flag_off; + int (*get)(); + int arg_required:1; +}; + +struct s_data_template +{ + t_flag flag; + char **av_data; +}; + +int cliopts_get(char **av, t_cliopts opt_map[], void *data); +t_cliopts *cliopts_getmap_long(t_cliopts opt_map[], char *arg); +t_cliopts *cliopts_getmap_short(t_cliopts opt_map[], char arg); +int cliopts_has(char **av, char c); + +#endif diff --git a/libft/includes/color.h b/libft/includes/color.h new file mode 100644 index 00000000..698e6c51 --- /dev/null +++ b/libft/includes/color.h @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* color.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 13:36:48 by jhalford #+# #+# */ +/* Updated: 2017/02/18 20:01:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef COLOR_H +# define COLOR_H +# include "libft.h" + +struct s_color +{ + char fg[7]; + char bg[7]; +}; + +typedef struct s_color t_color; + +# define FG_DEFAULT "\e[0m" +# define ON_BOLD "\e[1m" + +# define ON_UNDERLINED "\e[4m" +# define ON_INVERTED "\e[7m" + +# define FG_BLACK "\e[30m" +# define FG_RED "\e[31m" +# define FG_GREEN "\e[32m" +# define FG_YELLOW "\e[33m" +# define FG_BLUE "\e[34m" +# define FG_MAGENTA "\e[35m" +# define FG_CYAN "\e[36m" + +# define BG_BLACK "\e[40m" +# define BG_RED "\e[41m" +# define BG_GREEN "\e[42m" +# define BG_YELLOW "\e[43m" +# define BG_BLUE "\e[44m" +# define BG_MAGENTA "\e[45m" +# define BG_CYAN "\e[46m" +# define BG_DEFAULT "\e[49m" + +# define FBG_DEFAULT FG_DEFAULT BG_DEFAULT + +void ft_color_reset(void); +void ft_color_set(t_color color); + +void ft_color_mk(t_color *color, char fg[7], char bg[7]); +void ft_color_mkif(t_color *color, int cond, char fg[7], char bg[7]); + +#endif diff --git a/libft/includes/dlst.h b/libft/includes/dlst.h new file mode 100644 index 00000000..79470a87 --- /dev/null +++ b/libft/includes/dlst.h @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* dlst.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:21:04 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:30:42 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef DLST_H +# define DLST_H + +struct s_dlist +{ + void *content; + size_t content_size; + struct s_dlist *next; + struct s_dlist *prev; +}; + +typedef struct s_dlist t_dlist; + +void ft_dlstadd_after(t_dlist **alst, t_dlist *new); +void ft_dlstadd_before(t_dlist **alst, t_dlist *new); +void ft_dlstdel(t_dlist **alst, void (*del)(void *, size_t)); +void ft_dlstdelone(t_dlist **alst, void (*del)(void *, size_t)); +int ft_dlstsize(t_dlist *list); +t_dlist *ft_dlstnew(void const *content, size_t content_size); +t_dlist *ft_dlstlast(t_dlist *list); +char *ft_dlsttostr(t_dlist *list); + +#endif diff --git a/libft/includes/error.h b/libft/includes/error.h new file mode 100644 index 00000000..3780ad8f --- /dev/null +++ b/libft/includes/error.h @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* error.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 15:34:21 by jhalford #+# #+# */ +/* Updated: 2017/05/15 17:37:29 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef ERROR_H +# define ERROR_H + +# include "libft.h" +# include + +/* +** DEBUG with malloc +*/ +# define DG_MSG "{inv}{ran}%5i{yel}%21s {bol}{blu}%-3d{eoc}" +# define DG_ARGS getpid(), getpid(), ft_path_notdir(__FILE__), __LINE__ +# define DG(s, ...) ft_dprintf(STDBUG,DG_MSG s "{eoc}\n",DG_ARGS,##__VA_ARGS__) + +/* +** DEBUG with no malloc +*/ +# define DG2 ft_putstr(__FILE__"\t");ft_putnbr(__LINE__) +# define DGW(d) DG2;d;ft_putchar('\n') +# define DGS(s) DGW(ft_putstr(": "s"=")) +# define DGSN(s, n) DGW(ft_putstr(": "s"=");ft_putnbr(n)) +# define DGSH(s, n) DGW(ft_putstr(": "s"=");ft_putnbr_hex(n)) + +# define ERR_PROTO(u, m) "{red}%s: %s{eoc}\n", u, m +# define ERR_MSG(u, m) ft_dprintf(2, ERR_PROTO(u, m)) +# define ERR_SET(n, ...) error_set(n, ##__VA_ARGS__) +# define ERRMSG_MAX_SIZE 150 + +enum e_errors +{ + E_NOERR, + E_CO_INV, + E_CO_INVL, + E_CO_MULT, + E_CO_MISS, + E_CO_MISSL, + E_SYS_NOFILE, + E_SYS_ISDIR, + E_SYS_NOPERM, + E_MAX, +}; + +extern char g_error_msg[E_MAX][ERRMSG_MAX_SIZE]; +extern char *g_errmsg; +extern int g_errnum; +extern char **g_argv; + +int error_set(int n, ...); +int ft_perror(char *utility); +void ft_usage(char *format, ...); + +#endif diff --git a/libft/includes/ft_printf.h b/libft/includes/ft_printf.h new file mode 100644 index 00000000..e9299538 --- /dev/null +++ b/libft/includes/ft_printf.h @@ -0,0 +1,80 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ftprintf.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:22:54 by jhalford #+# #+# */ +/* Updated: 2017/03/20 09:23:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H + +# include "libft.h" +# include + +# define ALL_FLAGS "#0- +" +# define ALL_CONVERSIONS "sSpdDioOuUxXcCb" + +typedef struct s_fmt t_fmt; +typedef struct s_conv t_conv; +typedef char *(t_converter)(t_fmt *fmt, va_list ap); +typedef void (t_pad_func)(char *str, t_fmt *fmt); + +struct s_conv +{ + char id; + char allowed_flags[6]; + char base[20]; + t_converter *converter; + t_pad_func *sharp_func; +}; + +struct s_fmt +{ + char flags[6]; + int width; + int precision; + char modifier[3]; + char conversion; + int valid; + t_conv conv; + +}; + +int ft_vdprintf(int fd, const char *format, va_list ap); +int ft_fmtcalc(char **final, char **str, va_list ap); + +extern t_conv g_convs[]; + +t_fmt *ft_fmt_init(void); +void ft_fmt_print(t_fmt *fmt); +void ft_printf_color(char **final, char **str, va_list ap); +t_fmt *ft_printf_parse(char **format, va_list ap); + +char *ft_transform(t_fmt *fmt, va_list ap); + +void ft_fmt_error_conv(char conv); +void ft_fmt_error_mod_conv(char *mod, char conv); +void ft_fmt_error_flag_conv(char flag, char conv); +void ft_fmt_error_flag_flag(char flag1, char flag2); + +void ft_fmt_simplify(t_fmt *fmt); +int ft_fmt_validate_conv(t_fmt *fmt); +void ft_fmt_validate_flags(t_fmt *fmt); +void ft_fmt_validate_mod(t_fmt *fmt); + +char *ft_signed_conversion(t_fmt *fmt, va_list ap); +char *ft_unsigned_conversion(t_fmt *fmt, va_list ap); +char *ft_str_conversion(t_fmt *fmt, va_list ap); +char *ft_char_conversion(t_fmt *fmt, va_list ap); + +void ft_pad_sharp_o(char *str, t_fmt *fmt); +void ft_pad_sharp_xb(char *str, t_fmt *fmt); +void ft_pad_left(char *str, t_fmt *fmt); +void ft_pad_right(char *str, t_fmt *fmt); + +#endif diff --git a/libft/includes/ft_types.h b/libft/includes/ft_types.h new file mode 100644 index 00000000..a8f001cc --- /dev/null +++ b/libft/includes/ft_types.h @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_types.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/25 01:56:58 by jhalford #+# #+# */ +/* Updated: 2017/03/25 02:02:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_TYPES_H +# define FT_TYPES_H + +typedef struct s_stos t_stos; +typedef struct s_stof t_stof; +typedef struct s_itof t_itof; +typedef long long int t_flag; +typedef long long int t_type; + +#endif diff --git a/libft/includes/get_next_line.h b/libft/includes/get_next_line.h new file mode 100644 index 00000000..b63d0ac2 --- /dev/null +++ b/libft/includes/get_next_line.h @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/05 12:21:36 by jhalford #+# #+# */ +/* Updated: 2016/12/15 13:07:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_H +# define GET_NEXT_LINE_H +# define BUFF_SIZE 32 + +# include "libft.h" +# include +# include + +typedef struct s_save t_save; + +struct s_save +{ + int fd; + char *str; +}; + +int get_next_line(int const fd, char **line); + +#endif diff --git a/libft/includes/libft.h b/libft/includes/libft.h new file mode 100644 index 00000000..586112bf --- /dev/null +++ b/libft/includes/libft.h @@ -0,0 +1,97 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:49:04 by jhalford #+# #+# */ +/* Updated: 2017/10/08 15:59:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H + +# define FT_TRY(a,b) ((a) ? (a) : (b)) + +# include +# include +# include +# include +# include +# include +# include + +# include "ft_types.h" +# include "error.h" +# include "color.h" +# include "cliopts.h" +# include "rs.h" + +# include "lst.h" +# include "dlst.h" +# include "btree.h" + +# include "str.h" +# include "sstr.h" +# include "math.h" +# include "mytime.h" +# include "get_next_line.h" +# include "net.h" +# include "sys.h" + +struct s_stos +{ + char *key; + char *val; +}; + +struct s_stof +{ + char *key; + int (*f)(); +}; + +struct s_itof +{ + int id; + int (*f)(); +}; + +int ft_printf(const char *format, ...); +int ft_dprintf(int fd, const char *format, ...); +int ft_vdprintf(int fd, const char *format, va_list ap); +int ft_asprintf(char **ret, const char *format, ...); +int ft_vasprintf(char **ret, const char *format, va_list ap); + +void *ft_malloc(size_t size); +void *ft_memset(void *b, int c, size_t len); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dst, const void *src, size_t n); +void *ft_memccpy(void *dst, const void *src, int c, size_t n); +void *ft_memmove(void *dst, const void *src, size_t len); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +void *ft_memalloc(size_t size); +void ft_memdel(void **ap); + +int ft_putchar(int c); +int ft_putstr(char const *s); +int ft_putendl(char const *s); +int ft_putnbr(long n); +int ft_putnbr_hex(long n); + +int ft_error_message(char *message); + +int ft_putchar_fd(int c, int fd); +int ft_putstr_fd(char const *s, int fd); +int ft_putendl_fd(char const *s, int fd); +int ft_putnbr_fd(long n, int fd); +int ft_putnbr_hex_fd(long n, int fd); + +void *hexdump(void *addr, unsigned int offset, unsigned int size); + +void *ft_realloc(void *data, int size); + +#endif diff --git a/libft/includes/lst.h b/libft/includes/lst.h new file mode 100644 index 00000000..8188f934 --- /dev/null +++ b/libft/includes/lst.h @@ -0,0 +1,94 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lst.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:46 by jhalford #+# #+# */ +/* Updated: 2017/10/08 16:00:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LST_H +# define LST_H + +# include "libft.h" + +struct s_list +{ + void *content; + size_t content_size; + struct s_list *next; +}; + +typedef struct s_list t_list; + +int pop(t_list **lst); +t_list *push(t_list **stack, int elem); + +t_list *ft_lstnew(void const *content, size_t content_size); +void ft_lstdel(t_list **alst, void (*del)(void *, size_t)); +void ft_lstdelone(t_list **alst, void (*del)(void *, size_t)); +void ft_lstadd(t_list **alst, t_list *new); +int ft_lstiter(t_list *lst, int (*f)(), void *data); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *)); + +t_list *ft_lstnew_range(int a, int b); +void ft_lsteadd(t_list **alst, t_list *new); +void ft_lstnadd(t_list **alst, t_list *new, int n); +void ft_lstsort(t_list **begin_list, int (*cmp)()); +void ft_lst_print(t_list *list, void (*printer)()); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lst_sorted_merge( + t_list **begin_list1, + t_list *begin_list2, + int (*cmp)()); +void ft_lst_sorted_insert( + t_list **begin_list, + t_list *insert, + int (*cmp)()); +void ft_lst_delif( + t_list **alist, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)); +void ft_lst_delsub( + t_list **alst, + t_list *sub, int (*cmp)(), + void (*del)(void *, size_t)); +void ft_lst_cfree(void *ptr, size_t size); +void ft_lst_bfree(void *ptr, size_t size); +t_list *ft_lst_filter( + t_list *lst, + void const *data_ref, + t_list *(*f)(t_list *elem, void const *)); +t_list *ft_lst_removeif( + t_list **alst, + void *data_ref, + int (*cmp)()); +t_list *ft_lst_find( + t_list *begin_list, + void *data_ref, + int (*cmp)()); +t_list *ft_lstpop(t_list **lst); +void ft_lst_merge(t_list **begin_list1, t_list *begin_list2); +void ft_lst_reverse(t_list **begin_list); +void ft_lst_filterout( + t_list **alst, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)); + +int ft_diff(void *a, void *b); +t_list *ft_id(t_list *a); +t_list *ft_lst_at(t_list *list, unsigned int nbr); + +void lst_insert_sort(t_list **head, + int (cmp)()); + +t_list *ft_lst_pop(t_list **lst); +char *ft_lst2str(t_list *list); + +#endif diff --git a/libft/includes/math.h b/libft/includes/math.h new file mode 100644 index 00000000..a42049e1 --- /dev/null +++ b/libft/includes/math.h @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* math.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 15:41:59 by jhalford #+# #+# */ +/* Updated: 2017/10/08 12:57:23 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef MATH_H +# define MATH_H + +# define FT_WS(x) (x == ' ' || x == '\t' || x == '\n') +# define FT_ABS(x) (((x) < 0) ? -(x) : (x)) +# define FT_NEG(x) ((x) < 0) +# define FT_POS(x) ((x) > 0) +# define FT_MIN(a, b) ((a) < (b) ? (a) : (b)) +# define FT_MAX(a, b) ((a) > (b) ? (a) : (b)) +# define FT_DIST(a, b) FT_ABS((a) - (b)) +# define FT_PCT(a, t) (t ? 100 * (float)(t - a)/(float)t : 0) + +char *ft_itoa(int n); +char *ft_itoa_base(int nbr, char *base, char *flags); +char *ft_lltoa_base(long long nbr, char *base, char *flags); +char *ft_ulltoa_base(unsigned long long nbr, char *base); +char *ft_uitoa_base(unsigned int nbr, char *base); +size_t ft_ilen(int n); +size_t ft_ilen_base(int n, int base); +size_t ft_uilen(unsigned int n); +size_t ft_lllen(long long n); +size_t ft_lllen_base(long long n, int base); + +int ft_addrcmp(void *a, void *b); +void *id(void *data); + +#endif diff --git a/libft/includes/mytime.h b/libft/includes/mytime.h new file mode 100644 index 00000000..ce8c9a83 --- /dev/null +++ b/libft/includes/mytime.h @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* mytime.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 11:43:12 by jhalford #+# #+# */ +/* Updated: 2017/10/08 13:16:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef MYTIME_H +# define MYTIME_H + +# include + +# include "libft.h" + +uint64_t epoch_micro(void); +double time_milli(void); + +#endif diff --git a/libft/includes/net.h b/libft/includes/net.h new file mode 100644 index 00000000..553b5031 --- /dev/null +++ b/libft/includes/net.h @@ -0,0 +1,67 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* net.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:06:12 by jhalford #+# #+# */ +/* Updated: 2017/10/08 16:52:48 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef NET_H +# define NET_H + +# define ACK 2 +# define NACK 3 +# define NET_MAXSIZE 512 + +# include +# include +# include +# include +# include +# include +# include +# include + +# include "mytime.h" + +/* +** utilities +*/ + +int reserve_port(int *port); +unsigned short cksum(void *b, int len); +int host_format(struct sockaddr *addr); + +/* +** lazy setup +*/ +int create_server(int port, int backlog, char *protoname); +int create_client(char *addr, int port, char *protoname); +void listener(int domain, int sock, int proto, + void (*handler)(void *buf, int bytes, struct sockaddr *addr)); + +/* +** lazy framing +*/ +int net_send(int sock, char *msg, int size); +int net_send_large(int sock, char *msg, int size); +int net_get(int sock, char *msg, int size); +int net_get_fd(int sock, int fd, int size); +int net_get_large(int sock, int fd); + +/* +** ip +*/ +void ip_hdrinit(struct ip *hdr); +void ip_load_icmp(struct icmp *icmp, void *buf); + +/* +** tcp +*/ +void tcp_hdrinit(struct tcphdr *header); + +#endif diff --git a/libft/includes/rs.h b/libft/includes/rs.h new file mode 100644 index 00000000..ad7ddd74 --- /dev/null +++ b/libft/includes/rs.h @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* rs.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:05:30 by jhalford #+# #+# */ +/* Updated: 2017/10/08 15:59:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_RS_H +# define LIBFT_RS_H + +# include +# include +# include + +typedef struct s_rs t_rs; + +struct s_rs { + int count; + double min; + double max; + double avg; + double m; + double stdev; + double var; +}; + +void rs_init(t_rs *rs); +void rs_push(t_rs *rs, double n); +void rs_final(t_rs *rs); + +#endif diff --git a/libft/includes/sstr.h b/libft/includes/sstr.h new file mode 100644 index 00000000..b1f10bc2 --- /dev/null +++ b/libft/includes/sstr.h @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sstr.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 13:16:25 by jhalford #+# #+# */ +/* Updated: 2017/03/24 17:46:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef SSTR_H +# define SSTR_H + +char **ft_sstradd(char **list, char *new); +void ft_sstrsort(char **list, int (*cmp)()); +void ft_sstrprint(char **list, char sep); +void ft_sstrprint_fd(int fd, char **list, char sep); +char **ft_sstrdup(char **list); +char **ft_sstrmerge(char **s1, char **s2); +void ft_sstrdel(char **sstr, int index); +void ft_sstrfree(char **sstr); +char *ft_sstrcat(char **sstr, char sep); +char *ft_sstrstr(char **sstr, char *find); + +#endif diff --git a/libft/includes/str.h b/libft/includes/str.h new file mode 100644 index 00000000..0d08a4b6 --- /dev/null +++ b/libft/includes/str.h @@ -0,0 +1,78 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* str.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 13:05:53 by jhalford #+# #+# */ +/* Updated: 2017/03/07 11:36:58 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef STR_H +# define STR_H + +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +int ft_toupper(int c); +int ft_tolower(int c); + +size_t ft_strlen(const char *s); +size_t ft_strlenchr(const char *s, char c); +char *ft_strdup(const char *s1); +char *ft_strdupchr(const char *str, char c); +char *ft_strduptr(char *str, int (*is)(int c)); +char *ft_strcpy(char *dst, const char *src); +char *ft_strncpy(char *dst, const char *src, size_t len); +char *ft_strchrcpy(char *dst, const char *str, char c); +char *ft_strcat(char *s1, const char *s2); +char *ft_strncat(char *s1, const char *s2, size_t n); +size_t ft_strlcat(char *dst, const char *src, size_t size); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +char *ft_strstr(const char *big, const char *little); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_strcmp(const char *s1, const char *s2); +int ft_strncmp(const char *s1, const char *s2, size_t n); +int ft_atoi(const char *str); + +char *ft_strnew(size_t size); +void ft_strdel(char **as); +void ft_strclr(char *s); +void ft_striter(char *s, void (*f)(char *)); +void ft_striteri(char *s, void (*f)(unsigned int, char *)); +char *ft_strmap(char const *s, char (*f)(char)); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +int ft_strequ(char const *s1, char const *s2); +int ft_strnequ(char const *s1, char const *s2, size_t n); +char *ft_strsub(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strsepjoin(char **tab, char sep); +char *ft_strtrim(char const *s); +char **ft_strsplit(char const *s, char c); + +char *ft_strrev(char *str); +char **ft_strsplit(char const *s, char c); +char *ft_str3join(char const *s1, char const *s2, char const *s3); +char *ft_strcut(char *str, char *cut); +char **ft_split_whitespaces(char const *str); +char *ft_convert_base( + char *str, char *base_from, char *base_to, char *flags); +char *ft_strcatf(char *s1, const char *s2); +char *ft_strinsert(char *str, char c, int n); +int ft_strappend(char **dst, char *src); +char *ft_strbetween(char *start, char *end); +char *ft_strreplace(char **str, char *start, char *end, char *new); +char *ft_strtok(char *s, const char *delim); +size_t ft_strcspn(char *s, const char *delim); + +char *ft_path_notdir(char *path); +int ft_stris(char *str, int (*f)()); + +char *ft_strndup(const char *s1, size_t n); + +#endif diff --git a/libft/includes/sys.h b/libft/includes/sys.h new file mode 100644 index 00000000..4cb977e8 --- /dev/null +++ b/libft/includes/sys.h @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sys.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 17:24:23 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:10:34 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef SYS_H +# define SYS_H + +# define FT_XATTR_SIZE 10000 +# define STDIN STDIN_FILENO +# define STDOUT STDOUT_FILENO +# define STDERR STDERR_FILENO +# define STDBUG 9 + +# define PIPE_READ 0 +# define PIPE_WRITE 1 + +# include +# include +# include +# include + +int open_new(char *filename, int oflag); + +#endif diff --git a/libft/pdf/ft_printf.pdf b/libft/pdf/ft_printf.pdf new file mode 100644 index 00000000..b4fd9669 Binary files /dev/null and b/libft/pdf/ft_printf.pdf differ diff --git a/libft/pdf/get_next_line.fr.pdf b/libft/pdf/get_next_line.fr.pdf new file mode 100644 index 00000000..03d33367 Binary files /dev/null and b/libft/pdf/get_next_line.fr.pdf differ diff --git a/libft/pdf/libft.fr.pdf b/libft/pdf/libft.fr.pdf new file mode 100644 index 00000000..b3951a0a Binary files /dev/null and b/libft/pdf/libft.fr.pdf differ diff --git a/libft/srcs/btree/btree_apply_by_level.c b/libft/srcs/btree/btree_apply_by_level.c new file mode 100644 index 00000000..14e537f7 --- /dev/null +++ b/libft/srcs/btree/btree_apply_by_level.c @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_apply_by_level.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/19 12:06:15 by jhalford #+# #+# */ +/* Updated: 2017/03/14 17:25:46 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +int g_level = 0; + +static void btree_apply_to_level( + t_btree *root, + int level, + int is_first_elem, + void (*applyf)(void *item, int current_level, int is_first_elem)) +{ + if (level == g_level) + { + (*applyf)(root->item, level, is_first_elem); + return ; + } + if (root->left) + btree_apply_to_level(root->left, level + 1, is_first_elem, applyf); + if (root->right) + btree_apply_to_level(root->right, level + 1, 0, applyf); +} + +void btree_apply_by_level( + t_btree *root, + void (*applyf)(void *item, int current_level, int is_first_elem)) +{ + int height; + + height = btree_level_count(root); + while (g_level < height) + { + btree_apply_to_level(root, 0, 1, applyf); + g_level++; + } +} diff --git a/libft/srcs/btree/btree_apply_infix.c b/libft/srcs/btree/btree_apply_infix.c new file mode 100644 index 00000000..93a18b7d --- /dev/null +++ b/libft/srcs/btree/btree_apply_infix.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2017/03/06 18:22:31 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_apply_infix(t_btree *root, void (*applyf)(void *)) +{ + if (root->left) + btree_apply_infix(root->left, applyf); + (*applyf)(root->item); + if (root->right) + btree_apply_infix(root->right, applyf); + return ; +} diff --git a/libft/srcs/btree/btree_apply_prefix.c b/libft/srcs/btree/btree_apply_prefix.c new file mode 100644 index 00000000..e7e4332c --- /dev/null +++ b/libft/srcs/btree/btree_apply_prefix.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/08/18 21:06:44 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_apply_prefix(t_btree *root, void (*applyf)(void *)) +{ + (*applyf)(root->item); + if (root->left) + btree_apply_prefix(root->left, applyf); + if (root->right) + btree_apply_prefix(root->right, applyf); +} diff --git a/libft/srcs/btree/btree_apply_suffix.c b/libft/srcs/btree/btree_apply_suffix.c new file mode 100644 index 00000000..ae103242 --- /dev/null +++ b/libft/srcs/btree/btree_apply_suffix.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_apply_suffix.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:43:08 by jhalford #+# #+# */ +/* Updated: 2016/12/05 11:43:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_apply_suffix(t_btree *root, void (*applyf)(void *)) +{ + if (root->left) + btree_apply_suffix(root->left, applyf); + if (root->right) + btree_apply_suffix(root->right, applyf); + (*applyf)(root->item); + return ; +} diff --git a/libft/srcs/btree/btree_create_node.c b/libft/srcs/btree/btree_create_node.c new file mode 100644 index 00000000..cc365537 --- /dev/null +++ b/libft/srcs/btree/btree_create_node.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:50 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +t_btree *btree_create_node(void const *item, size_t content_size) +{ + t_btree *new; + + if (!(new = (t_btree *)ft_malloc(sizeof(t_btree)))) + return (NULL); + new->left = 0; + new->right = 0; + if (!item) + { + new->content_size = 0; + new->item = NULL; + } + else + { + new->content_size = content_size; + new->item = ft_memalloc(content_size + 1); + ft_memcpy(new->item, item, content_size); + } + return (new); +} diff --git a/libft/srcs/btree/btree_del.c b/libft/srcs/btree/btree_del.c new file mode 100644 index 00000000..8b72f78a --- /dev/null +++ b/libft/srcs/btree/btree_del.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_del.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:43:03 by jhalford #+# #+# */ +/* Updated: 2017/03/21 19:43:51 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_del(t_btree **root, void (*del)(void *, size_t)) +{ + if (root && *root && del) + { + btree_del(&(*root)->left, del); + btree_del(&(*root)->right, del); + btree_delone(root, del); + } +} diff --git a/libft/srcs/btree/btree_delone.c b/libft/srcs/btree/btree_delone.c new file mode 100644 index 00000000..17ce1c4a --- /dev/null +++ b/libft/srcs/btree/btree_delone.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_delone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:45:51 by jhalford #+# #+# */ +/* Updated: 2016/12/15 12:48:55 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_delone(t_btree **root, void (*del)(void *, size_t)) +{ + if (root && *root) + { + if (del) + (*del)((*root)->item, (*root)->content_size); + free(*root); + *root = NULL; + } +} diff --git a/libft/srcs/btree/btree_insert_data.c b/libft/srcs/btree/btree_insert_data.c new file mode 100644 index 00000000..a6e262fc --- /dev/null +++ b/libft/srcs/btree/btree_insert_data.c @@ -0,0 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/11/14 16:12:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_insert_data( + t_btree **root, + void *item, + size_t content_size, + int (*cmpf)(void *, void *)) +{ + t_btree *node; + + if (!*root) + { + *root = btree_create_node(item, content_size); + return ; + } + node = *root; + if ((*cmpf)(item, node->item) < 0) + { + if (node->left) + btree_insert_data(&node->left, item, content_size, cmpf); + else + node->left = btree_create_node(item, content_size); + } + else + { + if (node->right) + btree_insert_data(&node->right, item, content_size, cmpf); + else + node->right = btree_create_node(item, content_size); + } +} diff --git a/libft/srcs/btree/btree_level_count.c b/libft/srcs/btree/btree_level_count.c new file mode 100644 index 00000000..41248654 --- /dev/null +++ b/libft/srcs/btree/btree_level_count.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/08/25 17:46:00 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +int btree_level_count(t_btree *root) +{ + return (root + ? 1 + FT_MAX(btree_level_count(root->left), + btree_level_count(root->right)) + : 0); +} diff --git a/libft/srcs/btree/btree_map.c b/libft/srcs/btree/btree_map.c new file mode 100644 index 00000000..47b92852 --- /dev/null +++ b/libft/srcs/btree/btree_map.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_map.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/08 11:50:46 by jhalford #+# #+# */ +/* Updated: 2017/03/24 15:49:42 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +t_btree *btree_map(t_btree *root, void *(*f)(void *)) +{ + t_btree *new; + + if (!root) + return (NULL); + if (!(new = (t_btree *)ft_malloc(sizeof(*new)))) + return (NULL); + new->item = (*f)(root->item); + new->left = btree_map(root->left, f); + new->right = btree_map(root->right, f); + return (new); +} diff --git a/libft/srcs/btree/btree_print.c b/libft/srcs/btree/btree_print.c new file mode 100644 index 00000000..10b46735 --- /dev/null +++ b/libft/srcs/btree/btree_print.c @@ -0,0 +1,82 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_print.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/14 18:06:24 by jhalford #+# #+# */ +/* Updated: 2017/05/15 19:08:35 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +static int print_t2(t_printdata data, char s[20][255], char b[20]) +{ + int width; + int i; + + width = 5; + i = -1; + while (++i < width) + s[2 * data.depth][data.offset + data.left + i] = b[i]; + i = -1; + if (data.depth && data.is_left) + { + while (++i < width + data.right) + s[2 * data.depth - 1] + [data.offset + data.left + width / 2 + i] = '-'; + s[2 * data.depth - 1][data.offset + data.left + width / 2] = '+'; + s[2 * data.depth - 1] + [data.offset + data.left + data.right + 3 * width / 2] = '+'; + } + else if (data.depth && !data.is_left) + { + while (++i < width + data.left) + s[2 * data.depth - 1][data.offset - width / 2 + i] = '-'; + s[2 * data.depth - 1][data.offset + data.left + width / 2] = '+'; + s[2 * data.depth - 1][data.offset - width / 2 - 1] = '+'; + } + return (data.left + width + data.right); +} + +static int print_t(t_btree *tree, + t_printdata data, char s[20][255], char *(*printer)(void *)) +{ + char b[20]; + int width; + + width = 5; + if (!tree) + return (0); + sprintf(b, "%5s", printer(tree->item)); + data.left = print_t(tree->left, (t_printdata){ + 1, data.offset, data.depth + 1, data.left, data.right}, s, printer); + data.right = print_t(tree->right, (t_printdata){ + 0, data.offset + data.left + width, data.depth + 1, + data.left, data.right}, s, printer); + return (print_t2(data, s, b)); +} + +void btree_print(int fd, t_btree *tree, char *(*printer)(void *)) +{ + char s[20][255]; + char empty[255]; + int i; + + i = -1; + while (++i < 20) + sprintf(s[i], "%80s", " "); + sprintf(empty, "%80s", " "); + print_t(tree, (t_printdata){0, 0, 0, 0, 0}, s, printer); + i = -1; + while (++i < 20) + { + if (ft_strcmp(s[i], empty) == 0) + break ; + if (i == 0 && ft_strcmp(s[1], empty) == 0) + break ; + ft_dprintf(fd, "%s\n", s[i]); + } +} diff --git a/libft/srcs/btree/btree_search_item.c b/libft/srcs/btree/btree_search_item.c new file mode 100644 index 00000000..a7a1eb68 --- /dev/null +++ b/libft/srcs/btree/btree_search_item.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/08/23 19:04:56 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void *btree_search_item(t_btree *root, + void *data_ref, int (*cmpf)(void *, void *)) +{ + void *out; + + out = NULL; + if (root) + { + out = btree_search_item(root->left, data_ref, cmpf); + if (!out && ((*cmpf)(root->item, data_ref) == 0)) + out = root->item; + if (!out) + out = btree_search_item(root->right, data_ref, cmpf); + } + return (out); +} diff --git a/libft/srcs/char/ft_isalnum.c b/libft/srcs/char/ft_isalnum.c new file mode 100644 index 00000000..673b6e89 --- /dev/null +++ b/libft/srcs/char/ft_isalnum.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:18 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:31:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + if ((c >= 'a' && c <= 'z') + || (c >= 'A' && c <= 'Z') + || (c >= '0' && c <= '9')) + return (c); + return (0); +} diff --git a/libft/srcs/char/ft_isalpha.c b/libft/srcs/char/ft_isalpha.c new file mode 100644 index 00000000..ac5d276e --- /dev/null +++ b/libft/srcs/char/ft_isalpha.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:24 by jhalford #+# #+# */ +/* Updated: 2017/03/07 11:59:16 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) + return (c); + return (0); +} diff --git a/libft/srcs/char/ft_isascii.c b/libft/srcs/char/ft_isascii.c new file mode 100644 index 00000000..52a85067 --- /dev/null +++ b/libft/srcs/char/ft_isascii.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:28 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:35:42 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + if (c >= 0 && c <= 127) + return (1); + return (0); +} diff --git a/libft/srcs/char/ft_isdigit.c b/libft/srcs/char/ft_isdigit.c new file mode 100644 index 00000000..510371c2 --- /dev/null +++ b/libft/srcs/char/ft_isdigit.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:33 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:56:34 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + unsigned char a; + + a = (unsigned char)c; + if (a >= '0' && a <= '9') + return (a); + return (0); +} diff --git a/libft/srcs/char/ft_isprint.c b/libft/srcs/char/ft_isprint.c new file mode 100644 index 00000000..74a46640 --- /dev/null +++ b/libft/srcs/char/ft_isprint.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:38 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:32:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + if (c >= 32 && c <= 126) + return (c); + return (0); +} diff --git a/libft/srcs/char/ft_tolower.c b/libft/srcs/char/ft_tolower.c new file mode 100644 index 00000000..3992c4c9 --- /dev/null +++ b/libft/srcs/char/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:46 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:24:09 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if (c >= 'A' && c <= 'Z') + return (c + 32); + return (c); +} diff --git a/libft/srcs/char/ft_toupper.c b/libft/srcs/char/ft_toupper.c new file mode 100644 index 00000000..3aa9ea10 --- /dev/null +++ b/libft/srcs/char/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:53:58 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:24:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + return (c - 32); + return (c); +} diff --git a/libft/srcs/cliopts/cliopts_get.c b/libft/srcs/cliopts/cliopts_get.c new file mode 100644 index 00000000..f226e6f3 --- /dev/null +++ b/libft/srcs/cliopts/cliopts_get.c @@ -0,0 +1,110 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cliopts_get.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 20:04:04 by jhalford #+# #+# */ +/* Updated: 2017/04/02 20:45:11 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** void *data must be a structure starting with `int flag` +** to do polymorphism with t_data_template ! +*/ + +#include "cliopts.h" + +static char *check_required(char ***av, char *arg) +{ + char *ret; + + if (!av || !*av) + return (NULL); + if (!arg || !*arg || !*(arg + 1)) + return (*++(*av)); + ret = arg + 1; + return (ret); +} + +static int cliopts_parse_short( + char ***av, t_cliopts opt_map[], void *data) +{ + t_cliopts *map; + char *arg; + int i; + char *tmp; + + arg = **av + 1; + i = -1; + while (arg[++i] && !(tmp = NULL)) + { + if (!(map = cliopts_getmap_short(opt_map, arg[i]))) + return (ERR_SET(E_CO_INV, arg[i])); + ((t_data_template*)data)->flag |= map->flag_on; + ((t_data_template*)data)->flag &= ~map->flag_off; + if (map->get) + { + if (map->arg_required && !(tmp = check_required(av, arg + i))) + return (ERR_SET(E_CO_MISS, *arg)); + tmp = tmp ? tmp : **av; + if ((map->get)(tmp, data)) + return (ERR_SET(E_CO_MISS, *arg)); + if (map->arg_required) + break ; + } + } + return (++(*av) ? 0 : 0); +} + +static int cliopts_parse_long( + char ***av, t_cliopts opt_map[], void *data) +{ + t_cliopts *map; + char *arg; + char *tmp; + + arg = **av + 2; + tmp = NULL; + if (!(map = cliopts_getmap_long(opt_map, arg))) + return (ERR_SET(E_CO_INVL, arg)); + ((t_data_template*)data)->flag |= map->flag_on; + ((t_data_template*)data)->flag &= ~map->flag_off; + if (map->get) + { + if (map->arg_required && !(tmp = check_required(av, NULL))) + return (ERR_SET(E_CO_MISS, *arg)); + if ((map->get)(tmp, data)) + return (ERR_SET(E_CO_MISSL, arg)); + } + ++(*av); + return (0); +} + +int cliopts_get(char **av, t_cliopts opt_map[], void *data) +{ + if (!av) + return (1); + av++; + while (av && *av) + { + if (ft_strcmp(*av, "-") == 0 || (ft_strcmp(*av, "--") == 0 && av++)) + break ; + else if ((*av)[0] == '-' && (*av)[1] == '-') + { + if (cliopts_parse_long(&av, opt_map, data)) + return (1); + } + else if ((*av)[0] == '-') + { + if (cliopts_parse_short(&av, opt_map, data)) + return (1); + } + else + break ; + } + ((t_data_template*)data)->av_data = av; + return (0); +} diff --git a/libft/srcs/cliopts/cliopts_getmap.c b/libft/srcs/cliopts/cliopts_getmap.c new file mode 100644 index 00000000..189e22ba --- /dev/null +++ b/libft/srcs/cliopts/cliopts_getmap.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cliopts_getmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/25 14:59:03 by jhalford #+# #+# */ +/* Updated: 2017/03/25 15:01:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cliopts.h" + +t_cliopts *cliopts_getmap_long(t_cliopts opt_map[], char *arg) +{ + int i; + + i = -1; + while (opt_map[++i].c) + if (!ft_strcmp(opt_map[i].str, arg)) + return (&opt_map[i]); + return (NULL); +} + +t_cliopts *cliopts_getmap_short(t_cliopts opt_map[], char arg) +{ + int i; + + i = -1; + while (opt_map[++i].c) + if (opt_map[i].c == arg) + return (&opt_map[i]); + return (NULL); +} diff --git a/libft/srcs/color/ft_color_mk.c b/libft/srcs/color/ft_color_mk.c new file mode 100644 index 00000000..db75d7cc --- /dev/null +++ b/libft/srcs/color/ft_color_mk.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_mk.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/27 11:35:18 by jhalford #+# #+# */ +/* Updated: 2016/12/12 11:54:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_mk(t_color *color, char fg[7], char bg[7]) +{ + ft_strcpy(color->fg, fg); + ft_strcpy(color->bg, bg); +} diff --git a/libft/srcs/color/ft_color_mkif.c b/libft/srcs/color/ft_color_mkif.c new file mode 100644 index 00000000..707a5c8c --- /dev/null +++ b/libft/srcs/color/ft_color_mkif.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_mk.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/27 11:35:18 by jhalford #+# #+# */ +/* Updated: 2016/12/03 12:17:14 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_mkif(t_color *color, int cond, char fg[7], char bg[7]) +{ + if (cond) + ft_color_mk(color, fg, bg); +} diff --git a/libft/srcs/color/ft_color_reset.c b/libft/srcs/color/ft_color_reset.c new file mode 100644 index 00000000..4b557bff --- /dev/null +++ b/libft/srcs/color/ft_color_reset.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_reset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 13:48:05 by jhalford #+# #+# */ +/* Updated: 2016/11/25 14:06:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_reset(void) +{ + ft_putstr(FG_DEFAULT); + ft_putstr(BG_DEFAULT); +} diff --git a/libft/srcs/color/ft_color_set.c b/libft/srcs/color/ft_color_set.c new file mode 100644 index 00000000..99d9c0d0 --- /dev/null +++ b/libft/srcs/color/ft_color_set.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_set.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 13:53:46 by jhalford #+# #+# */ +/* Updated: 2016/12/12 11:55:03 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_set(t_color color) +{ + char out[20]; + + ft_strcpy(out, color.fg); + ft_strcat(out, color.bg); + ft_putstr(out); +} diff --git a/libft/srcs/dlst/ft_dlstadd_after.c b/libft/srcs/dlst/ft_dlstadd_after.c new file mode 100644 index 00000000..19dc852a --- /dev/null +++ b/libft/srcs/dlst/ft_dlstadd_after.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_add_after.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:04 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_dlstadd_after(t_dlist **alst, t_dlist *new) +{ + if (new) + { + new->prev = (*alst); + if (*alst) + new->next = (*alst)->next; + else + new->next = NULL; + if (new->next) + new->next->prev = new; + if (new->prev) + new->prev->next = new; + *alst = new; + } +} diff --git a/libft/srcs/dlst/ft_dlstadd_before.c b/libft/srcs/dlst/ft_dlstadd_before.c new file mode 100644 index 00000000..e2d6b2e8 --- /dev/null +++ b/libft/srcs/dlst/ft_dlstadd_before.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_add_before.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:09 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_dlstadd_before(t_dlist **alst, t_dlist *new) +{ + if (new) + { + new->next = (*alst); + if (*alst) + new->prev = (*alst)->prev; + if (new->next) + new->next->prev = new; + if (new->prev) + new->prev->next = new; + *alst = new; + } +} diff --git a/libft/srcs/dlst/ft_dlstdel.c b/libft/srcs/dlst/ft_dlstdel.c new file mode 100644 index 00000000..94b43f6b --- /dev/null +++ b/libft/srcs/dlst/ft_dlstdel.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlstdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/14 17:55:40 by jhalford #+# #+# */ +/* Updated: 2016/12/07 17:29:54 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static void ft_dlstdelback(t_dlist **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_dlstdelback(&(*alst)->prev, del); + ft_dlstdelone(alst, del); + } +} + +static void ft_dlstdelfront(t_dlist **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_dlstdelfront(&(*alst)->next, del); + ft_dlstdelone(alst, del); + } +} + +void ft_dlstdel(t_dlist **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_dlstdelback(&(*alst)->prev, del); + ft_dlstdelfront(&(*alst)->next, del); + ft_dlstdelone(alst, del); + } +} diff --git a/libft/srcs/dlst/ft_dlstdelone.c b/libft/srcs/dlst/ft_dlstdelone.c new file mode 100644 index 00000000..55826853 --- /dev/null +++ b/libft/srcs/dlst/ft_dlstdelone.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_delone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:13 by jhalford #+# #+# */ +/* Updated: 2016/11/14 17:52:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_dlstdelone(t_dlist **alst, void (*del)(void *, size_t)) +{ + t_dlist *tmp; + + tmp = *alst; + if (tmp) + { + if (del) + (*del)(tmp->content, tmp->content_size); + if (tmp->next) + tmp->next->prev = tmp->prev; + if (tmp->prev) + tmp->prev->next = tmp->next; + if (tmp->prev) + *alst = tmp->prev; + else + *alst = tmp->next; + free(tmp); + } +} diff --git a/libft/srcs/dlst/ft_dlstlast.c b/libft/srcs/dlst/ft_dlstlast.c new file mode 100644 index 00000000..1286c32c --- /dev/null +++ b/libft/srcs/dlst/ft_dlstlast.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_last.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:15 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_dlist *ft_dlstlast(t_dlist *list) +{ + while (list && list->next) + list = list->next; + return (list); +} diff --git a/libft/srcs/dlst/ft_dlstnew.c b/libft/srcs/dlst/ft_dlstnew.c new file mode 100644 index 00000000..411bffca --- /dev/null +++ b/libft/srcs/dlst/ft_dlstnew.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_new.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:20 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:50 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_dlist *ft_dlstnew(void const *content, size_t content_size) +{ + t_dlist *new; + + if (!content) + { + new = ft_malloc(sizeof(*new)); + if (!new) + return (NULL); + new->content_size = 0; + new->content = NULL; + } + else + { + new = (t_dlist *)ft_malloc(sizeof(*new)); + if (!new) + return (NULL); + new->content_size = content_size; + new->content = ft_memalloc(content_size + 1); + ft_memcpy(new->content, content, content_size); + } + new->next = NULL; + new->prev = NULL; + return (new); +} diff --git a/libft/srcs/dlst/ft_dlstrtostr.c b/libft/srcs/dlst/ft_dlstrtostr.c new file mode 100644 index 00000000..e92e4d8a --- /dev/null +++ b/libft/srcs/dlst/ft_dlstrtostr.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlstrtostr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:29 by jhalford #+# #+# */ +/* Updated: 2016/11/14 16:13:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_dlsttostr(t_dlist *list) +{ + char *str; + + if (!list) + return (NULL); + while (list->prev) + list = list->prev; + str = (char *)ft_strnew(sizeof(char) * (ft_dlstsize(list) + 2)); + while (list) + { + ft_strcat(str, (char *)list->content); + list = list->next; + } + return (str); +} diff --git a/libft/srcs/dlst/ft_dlstsize.c b/libft/srcs/dlst/ft_dlstsize.c new file mode 100644 index 00000000..b536efa2 --- /dev/null +++ b/libft/srcs/dlst/ft_dlstsize.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_size.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:23 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:23 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_dlstsize(t_dlist *list) +{ + int size; + t_dlist *tmp; + + size = 0; + if (list) + size++; + tmp = list; + while (tmp->next) + { + size++; + tmp = tmp->next; + } + tmp = list; + while (tmp->prev) + { + size++; + tmp = tmp->prev; + } + return (size); +} diff --git a/libft/srcs/error/error.c b/libft/srcs/error/error.c new file mode 100644 index 00000000..6900c094 --- /dev/null +++ b/libft/srcs/error/error.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 16:47:00 by jhalford #+# #+# */ +/* Updated: 2017/03/25 01:53:25 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "error.h" + +char g_error_msglist[E_MAX][ERRMSG_MAX_SIZE] = +{ + "unknown error 0", + "invalid option -%c", + "invalid option --%s", + "option '%c' awaits argument(s): please don't combine", + "option '%c': missing argument", + "option '%s': missing argument", + "%s: no such file or directory", + "%s: Is a directory", + "%s: Permission denied", +}; + +int g_errnum = 0; +char *g_errmsg = NULL; +char **g_argv; + +int error_set(int n, ...) +{ + va_list ap; + + g_errnum = n; + va_start(ap, n); + ft_strdel(&g_errmsg); + ft_vasprintf(&g_errmsg, g_error_msglist[n], ap); + return (g_errnum); +} + +int ft_perror(char *utility) +{ + utility = utility ? utility : g_argv[0]; + ERR_MSG(utility, g_errmsg); + return (g_errnum); +} diff --git a/libft/srcs/error/ft_usage.c b/libft/srcs/error/ft_usage.c new file mode 100644 index 00000000..0c78fa12 --- /dev/null +++ b/libft/srcs/error/ft_usage.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_usage.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/04/02 15:08:56 by jhalford #+# #+# */ +/* Updated: 2017/10/08 13:31:29 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_usage(char *format, ...) +{ + va_list ap; + char *usage; + + va_start(ap, format); + usage = NULL; + ft_vasprintf(&usage, format, ap); + ft_dprintf(2, "usage: %s\n", usage); + ft_strdel(&usage); + exit(-1); +} diff --git a/libft/srcs/ft_printf/ft_conversion.c b/libft/srcs/ft_printf/ft_conversion.c new file mode 100644 index 00000000..99f0cc08 --- /dev/null +++ b/libft/srcs/ft_printf/ft_conversion.c @@ -0,0 +1,69 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_conversion.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:31:48 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +char *ft_signed_conversion(t_fmt *fmt, va_list ap) +{ + static char base10[] = "0123456789"; + long long arg; + + arg = va_arg(ap, int); + (void)fmt; + return (ft_lltoa_base(arg, base10, fmt->flags)); +} + +char *ft_unsigned_conversion(t_fmt *fmt, va_list ap) +{ + unsigned int uiarg; + unsigned long long ullarg; + int i; + + i = 0; + while (fmt->conversion != g_convs[i].id) + i++; + if (!*fmt->modifier + || ft_strequ(fmt->modifier, "hh") + || ft_strequ(fmt->modifier, "h") + || ft_strequ(fmt->modifier, "z")) + { + uiarg = va_arg(ap, int); + return (ft_uitoa_base(uiarg, g_convs[i].base)); + } + ullarg = va_arg(ap, long long); + return (ft_ulltoa_base(ullarg, g_convs[i].base)); +} + +char *ft_char_conversion(t_fmt *fmt, va_list ap) +{ + char *ret; + + (void)fmt; + ret = (char *)ft_malloc(sizeof(char) + 1); + ret[0] = (char)va_arg(ap, int); + ret[1] = '\0'; + return (ret); +} + +char *ft_str_conversion(t_fmt *fmt, va_list ap) +{ + char *ret; + + (void)fmt; + ret = va_arg(ap, char *); + if (ret == NULL) + return (ft_strdup("NULL")); + ret = ft_strdup(ret); + if (fmt->precision && fmt->precision < (int)ft_strlen(ret)) + ret[fmt->precision] = '\0'; + return (ret); +} diff --git a/libft/srcs/ft_printf/ft_fmt_simplify.c b/libft/srcs/ft_printf/ft_fmt_simplify.c new file mode 100644 index 00000000..f35d2ffa --- /dev/null +++ b/libft/srcs/ft_printf/ft_fmt_simplify.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_fmt_validate.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:43 by jhalford #+# #+# */ +/* Updated: 2016/11/07 16:53:54 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_fmt_simplify(t_fmt *fmt) +{ + char hashtag; + + hashtag = '#'; + if (fmt->conversion == 'p') + { + fmt->conversion = 'x'; + if (!ft_strchr(fmt->flags, '#')) + ft_strncat(fmt->flags, &hashtag, 1); + } + if (ft_strchr("DOUCS", fmt->conversion)) + { + fmt->conversion += 32; + ft_strcpy(fmt->modifier, "l"); + } +} diff --git a/libft/srcs/ft_printf/ft_fmt_validate_conv.c b/libft/srcs/ft_printf/ft_fmt_validate_conv.c new file mode 100644 index 00000000..a10b619c --- /dev/null +++ b/libft/srcs/ft_printf/ft_fmt_validate_conv.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_fmt_validate_conv.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 16:55:36 by jhalford #+# #+# */ +/* Updated: 2016/11/07 16:55:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +int ft_fmt_validate_conv(t_fmt *fmt) +{ + if (!ft_strchr(ALL_CONVERSIONS, fmt->conversion)) + { + if (fmt->conversion != '%') + ft_fmt_error_conv(fmt->conversion); + return (1); + } + return (0); +} diff --git a/libft/srcs/ft_printf/ft_fmt_validate_flags.c b/libft/srcs/ft_printf/ft_fmt_validate_flags.c new file mode 100644 index 00000000..709e3c19 --- /dev/null +++ b/libft/srcs/ft_printf/ft_fmt_validate_flags.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_fmt_validate_flags.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 16:53:07 by jhalford #+# #+# */ +/* Updated: 2017/03/05 15:19:35 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +static void ft_fmt_validate_flag_flag(t_fmt *fmt) +{ + char *flag_ptr; + + if (ft_strchr(fmt->flags, '+') && (flag_ptr = ft_strchr(fmt->flags, ' '))) + { + ft_fmt_error_flag_flag(' ', '+'); + *flag_ptr = '.'; + } + if (ft_strchr(fmt->flags, '-') && (flag_ptr = ft_strchr(fmt->flags, '0'))) + { + ft_fmt_error_flag_flag('0', '-'); + *flag_ptr = '.'; + } + if (fmt->precision && (flag_ptr = ft_strchr(fmt->flags, '0'))) + *flag_ptr = '.'; +} + +static void ft_fmt_validate_flag_conv(t_fmt *fmt) +{ + char *flag_ptr; + char flag; + int i; + + i = 0; + flag_ptr = fmt->flags; + while (fmt->conversion != g_convs[i].id) + i++; + while (*flag_ptr) + { + flag = *flag_ptr; + if (!ft_strchr(g_convs[i].allowed_flags, flag)) + { + ft_fmt_error_flag_conv(flag, fmt->conversion); + if (flag == '#') + *flag_ptr = '.'; + } + flag_ptr++; + } +} + +void ft_fmt_validate_flags(t_fmt *fmt) +{ + ft_fmt_validate_flag_conv(fmt); + ft_fmt_validate_flag_flag(fmt); +} diff --git a/libft/srcs/ft_printf/ft_fmt_validate_mod.c b/libft/srcs/ft_printf/ft_fmt_validate_mod.c new file mode 100644 index 00000000..e5cdb60e --- /dev/null +++ b/libft/srcs/ft_printf/ft_fmt_validate_mod.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_fmt_validate_conv.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 16:53:42 by jhalford #+# #+# */ +/* Updated: 2016/11/07 16:53:52 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_fmt_validate_mod(t_fmt *fmt) +{ + if (fmt->conversion == 's' || fmt->conversion == 'c') + if (fmt->modifier[0] && ft_strcmp(fmt->modifier, "l")) + ft_fmt_error_mod_conv(fmt->modifier, fmt->conversion); +} diff --git a/libft/srcs/ft_printf/ft_printf.c b/libft/srcs/ft_printf/ft_printf.c new file mode 100644 index 00000000..53b60560 --- /dev/null +++ b/libft/srcs/ft_printf/ft_printf.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:27 by jhalford #+# #+# */ +/* Updated: 2017/04/02 15:22:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +int ft_printf(const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + return (ft_vdprintf(1, format, ap)); +} + +int ft_dprintf(int fd, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + return (ft_vdprintf(fd, format, ap)); +} + +int ft_asprintf(char **ret, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + return (ft_vasprintf(ret, format, ap)); +} diff --git a/libft/srcs/ft_printf/ft_printf_color.c b/libft/srcs/ft_printf/ft_printf_color.c new file mode 100644 index 00000000..85995f46 --- /dev/null +++ b/libft/srcs/ft_printf/ft_printf_color.c @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf_color.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 18:07:39 by jhalford #+# #+# */ +/* Updated: 2017/03/20 15:51:32 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +t_stos g_colors[] = +{ + {"{red}", FG_RED}, + {"{gre}", FG_GREEN}, + {"{yel}", FG_YELLOW}, + {"{blu}", FG_BLUE}, + {"{mag}", FG_MAGENTA}, + {"{cya}", FG_CYAN}, + {"{bla}", FG_BLACK}, + {"{eoc}", FG_DEFAULT}, + {"{bol}", ON_BOLD}, + {"{und}", ON_UNDERLINED}, + {"{inv}", ON_INVERTED}, + {NULL, NULL}, +}; + +void ft_printf_color(char **final, char **str, va_list ap) +{ + int i; + + i = 0; + if (ft_strncmp(*str, "{ran}", 5) == 0) + { + i = va_arg(ap, int) % 6; + *final = ft_strjoin(*final, g_colors[i].val); + *str += 5; + return ; + } + while (g_colors[i].key) + { + if (ft_strncmp(*str, g_colors[i].key, 5) == 0) + { + *final = ft_strjoin(*final, g_colors[i].val); + *str += 5; + return ; + } + i++; + } +} diff --git a/libft/srcs/ft_printf/ft_printf_parse.c b/libft/srcs/ft_printf/ft_printf_parse.c new file mode 100644 index 00000000..14797fbf --- /dev/null +++ b/libft/srcs/ft_printf/ft_printf_parse.c @@ -0,0 +1,123 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_parse.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:24 by jhalford #+# #+# */ +/* Updated: 2017/03/20 15:55:08 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +static void ft_printf_parse_flags(t_fmt *fmt, char **format) +{ + int i; + char *str; + + i = 0; + str = *format; + while (str[i]) + { + if (ft_strchr(ALL_FLAGS, (int)str[i])) + { + if (!ft_strchr(fmt->flags, (int)str[i])) + ft_strncat(fmt->flags, str + i, 1); + } + else + break ; + i++; + } + *format += i; +} + +static void ft_printf_parse_width(t_fmt *fmt, char **format, va_list ap) +{ + int i; + char buf[10]; + char *str; + + i = 0; + str = *format; + if (str[i] == '*') + { + i++; + fmt->width = va_arg(ap, int); + } + else + { + ft_strcpy(buf, "0"); + while (ft_isdigit((int)(str[i]))) + ft_strncat(buf, str + i++, 1); + fmt->width = ft_atoi(buf); + } + *format += i; +} + +static void ft_printf_parse_precision(t_fmt *fmt, char **format, va_list ap) +{ + int i; + char buf[10]; + char *str; + + i = 0; + str = *format; + if (str[i] == '.') + { + if (str[++i] == '*') + { + i++; + fmt->precision = va_arg(ap, int); + } + else + { + ft_strcpy(buf, "0"); + while (ft_isdigit(str[i])) + ft_strncat(buf, str + i++, 1); + fmt->precision = ft_atoi(buf); + } + } + *format += i; +} + +static void ft_printf_parse_modifiers(t_fmt *fmt, char **format) +{ + char *str; + + str = *format; + if (str[0] == 'h' && str[1] == 'h') + ft_strcpy(fmt->modifier, "hh"); + else if (str[0] == 'h' && str[1] != 'h') + ft_strcpy(fmt->modifier, "h"); + else if (str[0] == 'l' && str[1] == 'l') + ft_strcpy(fmt->modifier, "ll"); + else if (str[0] == 'l' && str[1] != 'l') + ft_strcpy(fmt->modifier, "l"); + else if (str[0] == 'j') + ft_strcpy(fmt->modifier, "j"); + else if (str[0] == 'z') + ft_strcpy(fmt->modifier, "z"); + else + ft_strcpy(fmt->modifier, ""); + *format += ft_strlen(fmt->modifier); +} + +t_fmt *ft_printf_parse(char **format, va_list ap) +{ + t_fmt *fmt; + + fmt = ft_fmt_init(); + ft_printf_parse_flags(fmt, format); + ft_printf_parse_width(fmt, format, ap); + ft_printf_parse_precision(fmt, format, ap); + ft_printf_parse_modifiers(fmt, format); + fmt->conversion = **format; + (*format)++; + ft_fmt_validate_mod(fmt); + ft_fmt_validate_flags(fmt); + ft_fmt_simplify(fmt); + fmt->valid = ft_fmt_validate_conv(fmt) ? 0 : 1; + return (fmt); +} diff --git a/libft/srcs/ft_printf/ft_transform.c b/libft/srcs/ft_printf/ft_transform.c new file mode 100644 index 00000000..67abd6e1 --- /dev/null +++ b/libft/srcs/ft_printf/ft_transform.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_transform.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:32 by jhalford #+# #+# */ +/* Updated: 2017/03/20 10:26:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +char *ft_transform(t_fmt *fmt, va_list ap) +{ + char *ret; + int i; + + i = 0; + while (fmt->conversion != g_convs[i].id) + i++; + fmt->conv = g_convs[i]; + ret = (*fmt->conv.converter)(fmt, ap); + if (fmt->width > (int)ft_strlen(ret)) + ret = ft_realloc(ret, fmt->width + 5); + else + ret = ft_realloc(ret, ft_strlen(ret) + 3); + if (ft_strchr(fmt->flags, '-')) + ft_pad_right(ret, fmt); + else + ft_pad_left(ret, fmt); + return (ret); +} diff --git a/libft/srcs/ft_printf/ft_vprintf.c b/libft/srcs/ft_printf/ft_vprintf.c new file mode 100644 index 00000000..a2b8a96a --- /dev/null +++ b/libft/srcs/ft_printf/ft_vprintf.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_vprintf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 15:52:57 by jhalford #+# #+# */ +/* Updated: 2017/04/02 15:22:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +t_conv g_convs[] = +{ + {'d', "0- +", "0123456789", &ft_signed_conversion, NULL}, + {'i', "0- +", "0123456789", &ft_signed_conversion, NULL}, + {'u', "0-", "0123456789", &ft_unsigned_conversion, NULL}, + {'o', "#0-", "01234567", &ft_unsigned_conversion, &ft_pad_sharp_o}, + {'x', "#0-", "0123456789abcdef", &ft_unsigned_conversion, &ft_pad_sharp_xb}, + {'X', "#0-", "0123456789ABCDEF", &ft_unsigned_conversion, &ft_pad_sharp_xb}, + {'b', "#0-", "01", &ft_unsigned_conversion, &ft_pad_sharp_xb}, + {'s', "-", "", &ft_str_conversion, NULL}, + {'c', "-", "", &ft_char_conversion, NULL}, +}; + +int ft_vdprintf(int fd, const char *format, va_list ap) +{ + char *ret; + char size; + + ret = NULL; + size = ft_vasprintf(&ret, format, ap); + if (size != -1) + ft_putstr_fd(ret, fd); + ft_strdel(&ret); + return (size); +} + +int ft_vasprintf(char **ret, const char *format, va_list ap) +{ + char *str; + char *tmp; + char *final; + + str = (char *)format; + final = ft_strnew(1); + while (*str) + { + tmp = final; + if (*str == '{') + ft_printf_color(&final, &str, ap); + else if (*str == '%') + { + if (ft_fmtcalc(&final, &str, ap)) + return (-1); + } + else if (!(final = ft_strjoin(final, (char[]){*str++, 0}))) + return (-1); + ft_strdel(&tmp); + } + *ret = final; + return (ft_strlen(final)); +} + +int ft_fmtcalc(char **final, char **str, va_list ap) +{ + t_fmt *fmt; + char *transform; + + *str += 1; + if (!(fmt = ft_printf_parse(str, ap))) + return (1); + if (!fmt->valid) + ft_strncat(*final, &fmt->conversion, 1); + else + { + transform = ft_transform(fmt, ap); + *final = ft_strjoin(*final, transform); + ft_strdel(&transform); + } + free(fmt); + return (0); +} diff --git a/libft/srcs/ft_printf/lib_fmt.c b/libft/srcs/ft_printf/lib_fmt.c new file mode 100644 index 00000000..28b7313d --- /dev/null +++ b/libft/srcs/ft_printf/lib_fmt.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_fmt.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:35 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +t_fmt *ft_fmt_init(void) +{ + t_fmt *fmt; + + fmt = (t_fmt *)ft_malloc(sizeof(t_fmt) + 1); + ft_bzero(fmt->flags, 6); + ft_bzero(fmt->modifier, 3); + fmt->conversion = '\0'; + fmt->width = 0; + fmt->precision = 0; + fmt->valid = 0; + return (fmt); +} + +void ft_fmt_print(t_fmt *fmt) +{ + ft_putendl("\n---"); + ft_putstr("valid: "); + ft_putnbr(fmt->valid); + ft_putendl(""); + ft_putstr("conv.: "); + ft_putchar(fmt->conversion); + ft_putendl(""); + ft_putstr("flags: "); + ft_putendl(fmt->flags); + ft_putstr("width: "); + ft_putnbr(fmt->width); + ft_putendl(""); + ft_putstr("prec.: "); + ft_putnbr(fmt->precision); + ft_putendl(""); + ft_putstr("modifier: "); + ft_putendl(fmt->modifier); + ft_putendl("---"); +} diff --git a/libft/srcs/ft_printf/lib_fmt_error.c b/libft/srcs/ft_printf/lib_fmt_error.c new file mode 100644 index 00000000..a10954ff --- /dev/null +++ b/libft/srcs/ft_printf/lib_fmt_error.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_fmt_error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:38 by jhalford #+# #+# */ +/* Updated: 2016/11/07 17:22:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_fmt_error_conv(char conv) +{ + ft_putstr("Warning: invalid or unsupported conversion specifier '"); + ft_putchar(conv); + ft_putendl("'"); +} + +void ft_fmt_error_mod_conv(char *mod, char conv) +{ + ft_putstr("warning: length modifier '"); + ft_putstr(mod); + ft_putstr("' results in undefined behaviour or no effect with '"); + ft_putchar(conv); + ft_putendl("' conversion specifier"); +} + +void ft_fmt_error_flag_conv(char flag, char conv) +{ + ft_putstr("warning: flag '"); + ft_putchar(flag); + ft_putstr("' results in undefined behaviour with '"); + ft_putchar(conv); + ft_putendl("' conversion specifier"); +} + +void ft_fmt_error_flag_flag(char flag1, char flag2) +{ + ft_putstr("warning: flag '"); + ft_putchar(flag1); + ft_putstr("' is ignored when flag '"); + ft_putchar(flag2); + ft_putendl("' is present"); +} diff --git a/libft/srcs/ft_printf/lib_pad.c b/libft/srcs/ft_printf/lib_pad.c new file mode 100644 index 00000000..57da1c1b --- /dev/null +++ b/libft/srcs/ft_printf/lib_pad.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_pad.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:45 by jhalford #+# #+# */ +/* Updated: 2017/02/18 13:14:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_pad_right(char *str, t_fmt *fmt) +{ + if (ft_strchr(fmt->flags, '#')) + (fmt->conv.sharp_func)(str, fmt); + while ((int)ft_strlen(str) < fmt->width) + ft_strcat(str, " "); +} + +void ft_pad_left(char *str, t_fmt *fmt) +{ + char sign; + + sign = 0; + if (str[0] == '-' || str[0] == '+' || str[0] == ' ') + { + sign = str[0]; + str++; + } + if (ft_strchr(fmt->flags, '0')) + while ((int)ft_strlen(str) < fmt->width - (sign ? 1 : 0)) + ft_strcatf(str, "0"); + if (sign) + str--; + if (ft_strchr(fmt->flags, '#')) + (fmt->conv.sharp_func)(str, fmt); + while ((int)ft_strlen(str) < fmt->width) + ft_strcatf(str, " "); +} diff --git a/libft/srcs/ft_printf/lib_pad_sharp.c b/libft/srcs/ft_printf/lib_pad_sharp.c new file mode 100644 index 00000000..5d065581 --- /dev/null +++ b/libft/srcs/ft_printf/lib_pad_sharp.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_pad_sharp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:48 by jhalford #+# #+# */ +/* Updated: 2017/03/20 15:54:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_pad_sharp_o(char *str, t_fmt *fmt) +{ + char buf[100]; + + (void)fmt; + ft_bzero(buf, 100); + if (str[0] != '0') + ft_strcatf(buf, "0"); +} + +void ft_pad_sharp_xb(char *str, t_fmt *fmt) +{ + char start[3]; + + start[0] = '0'; + start[1] = fmt->conversion; + start[2] = 0; + if (str[0] == '0') + { + if (str[1] == '0') + str[1] = fmt->conversion; + else + { + str[0] = fmt->conversion; + ft_strcatf(str, "0"); + } + } + else + ft_strcatf(str, start); +} diff --git a/libft/srcs/get_next_line/get_next_line.c b/libft/srcs/get_next_line/get_next_line.c new file mode 100644 index 00000000..3eed0dee --- /dev/null +++ b/libft/srcs/get_next_line/get_next_line.c @@ -0,0 +1,89 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/15 13:12:06 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" + +static int ft_fdcmp(t_save *a, int *b) +{ + return (a->fd - *b); +} + +static void ft_gnlfree(void *a, size_t size) +{ + (void)size; + ft_strdel(&((t_save*)a)->str); + free(a); +} + +static t_list *ft_newfd(t_list **head, int fd) +{ + t_save new; + + new.fd = fd; + new.str = ft_memalloc((BUFF_SIZE > 0 ? BUFF_SIZE : 0) + 1); + ft_lstadd(head, ft_lstnew(&new, sizeof(t_save))); + return (*head); +} + +static int ft_loop_read(int fd, char **line, char *save) +{ + char buf[BUFF_SIZE + 1]; + char *pos; + char *tmp; + int ret; + + while ((ret = read(fd, buf, BUFF_SIZE)) > 0) + { + buf[ret] = 0; + tmp = *line; + if ((pos = ft_strchr(buf, '\n'))) + { + ft_strcpy(save, pos + 1); + *pos = 0; + } + if (!(*line = ft_strjoin(*line, buf))) + return (-1); + ft_strdel(&tmp); + if (pos) + return (1); + } + if (ret < 0) + return (-1); + return (**line ? 1 : 0); +} + +int get_next_line(int const fd, char **line) +{ + static t_list *head; + t_list *tmp; + char *pos; + char *save; + int ret; + + if (fd < 0 || !line) + return (-1); + if (!(tmp = ft_lst_find(head, (void *)&fd, &ft_fdcmp))) + tmp = ft_newfd(&head, fd); + save = ((t_save*)tmp->content)->str; + if (!(*line = ft_strdup(save))) + return (-1); + ft_bzero(save, BUFF_SIZE + 1); + if ((pos = ft_strchr(*line, '\n'))) + { + ft_strcpy(save, pos + 1); + *pos = 0; + return (1); + } + if (!(ret = ft_loop_read(fd, line, save))) + ft_lst_delif(&head, (int *)&fd, ft_fdcmp, &ft_gnlfree); + return (ret); +} diff --git a/libft/srcs/lst/ft_id.c b/libft/srcs/lst/ft_id.c new file mode 100644 index 00000000..d5bac3fb --- /dev/null +++ b/libft/srcs/lst/ft_id.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_id.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:08:55 by jhalford #+# #+# */ +/* Updated: 2017/03/07 22:43:40 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_id(t_list *a) +{ + return (a); +} diff --git a/libft/srcs/lst/ft_lst2str.c b/libft/srcs/lst/ft_lst2str.c new file mode 100644 index 00000000..b985083d --- /dev/null +++ b/libft/srcs/lst/ft_lst2str.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst2str.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:53:18 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:53:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_lst2str(t_list *list) +{ + size_t size; + t_list *tmp; + char *new; + + size = 0; + tmp = list; + while (tmp) + { + size += ft_strlen((char *)tmp->content) + 1; + tmp = tmp->next; + } + new = ft_memalloc(size); + while (list) + { + ft_strcat(new, (char *)list->content); + if (list->next) + ft_strcat(new, " "); + list = list->next; + } + return (new); +} diff --git a/libft/srcs/lst/ft_lst_at.c b/libft/srcs/lst/ft_lst_at.c new file mode 100644 index 00000000..516c0147 --- /dev/null +++ b/libft/srcs/lst/ft_lst_at.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_list_at.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/14 13:18:48 by jhalford #+# #+# */ +/* Updated: 2017/06/21 18:33:52 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "lst.h" + +t_list *ft_lst_at(t_list *list, unsigned int nbr) +{ + unsigned int i; + + if (!list) + return (NULL); + i = 0; + while (i < nbr && list) + { + list = list->next; + i++; + } + return (list); +} diff --git a/libft/srcs/lst/ft_lst_bfree.c b/libft/srcs/lst/ft_lst_bfree.c new file mode 100644 index 00000000..82c6dec4 --- /dev/null +++ b/libft/srcs/lst/ft_lst_bfree.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_bfree.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/07 16:55:04 by jhalford #+# #+# */ +/* Updated: 2017/05/15 21:35:59 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_bfree(void *ptr, size_t size) +{ + t_list *lst; + + lst = ptr; + (void)size; + if (lst) + { + ft_strdel((char **)&lst->content); + free(lst); + } +} diff --git a/libft/srcs/lst/ft_lst_cfree.c b/libft/srcs/lst/ft_lst_cfree.c new file mode 100644 index 00000000..d70068ac --- /dev/null +++ b/libft/srcs/lst/ft_lst_cfree.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_cfree.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:10 by jhalford #+# #+# */ +/* Updated: 2017/05/15 21:36:03 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_cfree(void *ptr, size_t size) +{ + (void)size; + if (ptr) + free(ptr); +} diff --git a/libft/srcs/lst/ft_lst_delif.c b/libft/srcs/lst/ft_lst_delif.c new file mode 100644 index 00000000..b14fcd85 --- /dev/null +++ b/libft/srcs/lst/ft_lst_delif.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_delif.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:12 by jhalford #+# #+# */ +/* Updated: 2017/06/22 17:16:50 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_delif( + t_list **alst, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, data_ref) == 0) + { + tmp = (*indirect); + (*indirect) = (*indirect)->next; + ft_lstdelone(&tmp, del); + } + else + indirect = &(*indirect)->next; + } +} diff --git a/libft/srcs/lst/ft_lst_delsub.c b/libft/srcs/lst/ft_lst_delsub.c new file mode 100644 index 00000000..b3912fc2 --- /dev/null +++ b/libft/srcs/lst/ft_lst_delsub.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_delsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:15 by jhalford #+# #+# */ +/* Updated: 2017/01/12 14:33:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_delsub( + t_list **alst, + t_list *sub, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, sub->content) == 0) + { + tmp = *indirect; + (*indirect) = (*indirect)->next; + sub = sub->next; + ft_lstdelone(&tmp, del); + } + indirect = &(*indirect)->next; + } +} diff --git a/libft/srcs/lst/ft_lst_filter.c b/libft/srcs/lst/ft_lst_filter.c new file mode 100644 index 00000000..cc528142 --- /dev/null +++ b/libft/srcs/lst/ft_lst_filter.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_filter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:17 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:34:15 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_filter( + t_list *lst, + void const *data_ref, + t_list *(*f)(t_list *elem, void const *)) +{ + t_list *out; + t_list *elem; + + out = NULL; + while (lst) + { + if (f) + elem = (*f)(lst, data_ref); + else + elem = lst; + elem = ft_lstnew(elem->content, elem->content_size); + ft_lsteadd(&out, elem); + lst = lst->next; + } + return (out); +} diff --git a/libft/srcs/lst/ft_lst_filterout.c b/libft/srcs/lst/ft_lst_filterout.c new file mode 100644 index 00000000..9a97c09d --- /dev/null +++ b/libft/srcs/lst/ft_lst_filterout.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_filterout.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/26 16:56:02 by jhalford #+# #+# */ +/* Updated: 2017/03/26 19:10:03 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_filterout( + t_list **alst, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, data_ref) == 0) + { + tmp = *indirect; + (*indirect) = (*indirect)->next; + ft_lstdelone(&tmp, del); + } + else + indirect = &(*indirect)->next; + } +} diff --git a/libft/srcs/lst/ft_lst_find.c b/libft/srcs/lst/ft_lst_find.c new file mode 100644 index 00000000..da738ceb --- /dev/null +++ b/libft/srcs/lst/ft_lst_find.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_find.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:20 by jhalford #+# #+# */ +/* Updated: 2017/06/21 18:20:30 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_find(t_list *begin_list, void *data_ref, int (*cmp)()) +{ + t_list *list_ptr; + + list_ptr = begin_list; + while (list_ptr) + { + if ((cmp)(list_ptr->content, data_ref) == 0) + return (list_ptr); + list_ptr = list_ptr->next; + } + return (NULL); +} diff --git a/libft/srcs/lst/ft_lst_merge.c b/libft/srcs/lst/ft_lst_merge.c new file mode 100644 index 00000000..f8160381 --- /dev/null +++ b/libft/srcs/lst/ft_lst_merge.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_list_merge.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/14 13:50:32 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_merge(t_list **begin_list1, t_list *begin_list2) +{ + t_list *list_ptr; + + if (*begin_list1) + { + list_ptr = *begin_list1; + while (list_ptr->next) + list_ptr = list_ptr->next; + list_ptr->next = begin_list2; + } + else + *begin_list1 = begin_list2; +} diff --git a/libft/srcs/lst/ft_lst_order_delsub.c b/libft/srcs/lst/ft_lst_order_delsub.c new file mode 100644 index 00000000..5bf2067c --- /dev/null +++ b/libft/srcs/lst/ft_lst_order_delsub.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_order_delsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:25 by jhalford #+# #+# */ +/* Updated: 2016/11/04 12:01:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_order_delsub( + t_list **alst, + t_list *sub, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, sub->content) > 0) + { + sub = sub->next; + continue ; + } + if ((*cmp)((*indirect)->content, sub->content) == 0) + { + tmp = *indirect; + (*indirect) = (*indirect)->next; + ft_lstdelone(&tmp, del); + sub = sub->next; + } + indirect = &(*indirect)->next; + } +} diff --git a/libft/srcs/lst/ft_lst_pop.c b/libft/srcs/lst/ft_lst_pop.c new file mode 100644 index 00000000..1e22b0d7 --- /dev/null +++ b/libft/srcs/lst/ft_lst_pop.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_pop.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:53:30 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:53:31 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_pop(t_list **lst) +{ + t_list *top; + + top = *lst; + if (lst && *lst) + *lst = (*lst)->next; + return (top); +} diff --git a/libft/srcs/lst/ft_lst_print.c b/libft/srcs/lst/ft_lst_print.c new file mode 100644 index 00000000..18493eb3 --- /dev/null +++ b/libft/srcs/lst/ft_lst_print.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_print.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:27 by jhalford #+# #+# */ +/* Updated: 2017/05/16 21:00:09 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_print(t_list *list, void (*printer)()) +{ + while (list) + { + ft_putstr("["); + (*printer)(list->content); + ft_putstr("]->"); + list = list->next; + } + ft_putendl("X\n"); +} diff --git a/libft/srcs/lst/ft_lst_print2.c b/libft/srcs/lst/ft_lst_print2.c new file mode 100644 index 00000000..2016c78c --- /dev/null +++ b/libft/srcs/lst/ft_lst_print2.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_print2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:29 by jhalford #+# #+# */ +/* Updated: 2017/05/16 21:00:19 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_print2(t_list *list, void (*printer)()) +{ + t_list *list2; + + while (list) + { + ft_putendl("---"); + list2 = *(t_list**)list->content; + while (list2) + { + ft_putstr("["); + (*printer)(*(int *)list2->content); + ft_putstr("]->"); + list2 = list2->next; + } + ft_putendl("X"); + ft_putendl("---"); + ft_putendl(" |"); + ft_putendl(" V"); + list = list->next; + } + ft_putendl(" X\n"); +} diff --git a/libft/srcs/lst/ft_lst_removeif.c b/libft/srcs/lst/ft_lst_removeif.c new file mode 100644 index 00000000..e27041d2 --- /dev/null +++ b/libft/srcs/lst/ft_lst_removeif.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_removeif.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:30 by jhalford #+# #+# */ +/* Updated: 2017/06/22 22:04:23 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_removeif(t_list **alst, void *data_ref, int (*cmp)()) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, data_ref) == 0) + { + tmp = (*indirect); + (*indirect) = (*indirect)->next; + tmp->next = NULL; + return (tmp); + } + indirect = &(*indirect)->next; + } + return (NULL); +} diff --git a/libft/srcs/lst/ft_lst_reverse.c b/libft/srcs/lst/ft_lst_reverse.c new file mode 100644 index 00000000..7765d598 --- /dev/null +++ b/libft/srcs/lst/ft_lst_reverse.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_list_reverse.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/14 13:20:13 by jhalford #+# #+# */ +/* Updated: 2017/03/08 00:31:33 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_reverse(t_list **begin_list) +{ + t_list *new_start; + t_list *tmp; + + new_start = NULL; + while (*begin_list) + { + tmp = (*begin_list)->next; + (*begin_list)->next = new_start; + new_start = *begin_list; + *begin_list = tmp; + } + *begin_list = new_start; +} diff --git a/libft/srcs/lst/ft_lst_size.c b/libft/srcs/lst/ft_lst_size.c new file mode 100644 index 00000000..1f8c03b8 --- /dev/null +++ b/libft/srcs/lst/ft_lst_size.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_size.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:35 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int i; + + i = 0; + if (lst) + { + i = 1; + while (lst->next) + { + lst = lst->next; + i++; + } + } + return (i); +} diff --git a/libft/srcs/lst/ft_lst_sorted_insert.c b/libft/srcs/lst/ft_lst_sorted_insert.c new file mode 100644 index 00000000..f4821326 --- /dev/null +++ b/libft/srcs/lst/ft_lst_sorted_insert.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_sorted_insert.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:39 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:39 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_sorted_insert(t_list **begin_list, t_list *insert, int (*cmp)()) +{ + t_list *link; + + link = *begin_list; + if (!link || (*cmp)(insert->content, link->content) < 0) + { + *begin_list = insert; + insert->next = link ? link : NULL; + return ; + } + while (link->next) + { + if ((*cmp)(insert->content, link->content) > 0 + && (*cmp)(insert->content, link->next->content) <= 0) + { + insert->next = link->next; + link->next = insert; + return ; + } + link = link->next; + } + link->next = insert; + insert->next = NULL; +} diff --git a/libft/srcs/lst/ft_lst_sorted_merge.c b/libft/srcs/lst/ft_lst_sorted_merge.c new file mode 100644 index 00000000..38308849 --- /dev/null +++ b/libft/srcs/lst/ft_lst_sorted_merge.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_sorted_merge.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:40 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_sorted_merge( + t_list **begin_list1, + t_list *begin_list2, + int (*cmp)()) +{ + t_list *tail; + t_list *head1; + t_list *head2; + int comp; + + if (!*begin_list1 || !begin_list2) + { + *begin_list1 = begin_list2 ? begin_list2 : *begin_list1; + return ; + } + comp = (*cmp)(begin_list2->content, (*begin_list1)->content); + head1 = (comp < 0) ? *begin_list1 : (*begin_list1)->next; + head2 = (comp < 0) ? begin_list2->next : begin_list2; + *begin_list1 = (comp < 0) ? begin_list2 : *begin_list1; + tail = *begin_list1; + while (head1 && head2) + { + comp = (*cmp)(head2->content, head1->content); + tail->next = (comp < 0 ? head2 : head1); + head1 = comp < 0 ? head1 : head1->next; + head2 = comp < 0 ? head2->next : head2; + tail = tail->next; + } + tail->next = head2 ? head2 : head1; +} diff --git a/libft/srcs/lst/ft_lstadd.c b/libft/srcs/lst/ft_lstadd.c new file mode 100644 index 00000000..94d32d0d --- /dev/null +++ b/libft/srcs/lst/ft_lstadd.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:13 by jhalford #+# #+# */ +/* Updated: 2017/05/15 19:31:42 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd(t_list **alst, t_list *new) +{ + if (new) + { + new->next = *alst; + *alst = new; + } +} diff --git a/libft/srcs/lst/ft_lstdel.c b/libft/srcs/lst/ft_lstdel.c new file mode 100644 index 00000000..f63c3f6b --- /dev/null +++ b/libft/srcs/lst/ft_lstdel.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 15:18:57 by jhalford #+# #+# */ +/* Updated: 2017/06/22 16:57:53 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdel(t_list **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_lstdel(&(*alst)->next, del); + ft_lstdelone(alst, del); + } +} diff --git a/libft/srcs/lst/ft_lstdelone.c b/libft/srcs/lst/ft_lstdelone.c new file mode 100644 index 00000000..7b950442 --- /dev/null +++ b/libft/srcs/lst/ft_lstdelone.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 13:39:33 by jhalford #+# #+# */ +/* Updated: 2017/06/22 22:36:02 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdelone(t_list **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst) + { + if (del) + (*del)((*alst)->content, (*alst)->content_size); + free(*alst); + *alst = NULL; + } +} diff --git a/libft/srcs/lst/ft_lsteadd.c b/libft/srcs/lst/ft_lsteadd.c new file mode 100644 index 00000000..142f9660 --- /dev/null +++ b/libft/srcs/lst/ft_lsteadd.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lsteadd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:17 by jhalford #+# #+# */ +/* Updated: 2017/03/13 15:37:23 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lsteadd(t_list **alst, t_list *new) +{ + t_list *lst; + + lst = *alst; + if (lst) + { + while (lst->next) + lst = lst->next; + lst->next = new; + } + else + *alst = new; +} diff --git a/libft/srcs/lst/ft_lstiter.c b/libft/srcs/lst/ft_lstiter.c new file mode 100644 index 00000000..40ebc9c3 --- /dev/null +++ b/libft/srcs/lst/ft_lstiter.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:19 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:18:12 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstiter(t_list *lst, int (*f)(), void *data) +{ + if (!lst) + return (0); + if ((*f)(lst->content, data)) + return (1); + return (ft_lstiter(lst->next, f, data)); +} diff --git a/libft/srcs/lst/ft_lstlast.c b/libft/srcs/lst/ft_lstlast.c new file mode 100644 index 00000000..addae8fc --- /dev/null +++ b/libft/srcs/lst/ft_lstlast.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:48 by jhalford #+# #+# */ +/* Updated: 2017/02/09 20:46:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (lst) + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/libft/srcs/lst/ft_lstmap.c b/libft/srcs/lst/ft_lstmap.c new file mode 100644 index 00000000..e0edbbaa --- /dev/null +++ b/libft/srcs/lst/ft_lstmap.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:21 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *)) +{ + t_list *elem; + + if (!lst) + return (NULL); + if (!(elem = (t_list *)ft_malloc(sizeof(*elem)))) + return (NULL); + elem->content = (*f)(lst->content); + elem->next = ft_lstmap(lst->next, f); + return (elem); +} diff --git a/libft/srcs/lst/ft_lstnadd.c b/libft/srcs/lst/ft_lstnadd.c new file mode 100644 index 00000000..3f542fad --- /dev/null +++ b/libft/srcs/lst/ft_lstnadd.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnadd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:51 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:52 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstnadd(t_list **alst, t_list *new, int n) +{ + t_list *lst; + int i; + + lst = *alst; + if (lst) + { + i = 0; + while (lst->next && i < n) + { + lst = lst->next; + i++; + } + while (lst->next) + lst = lst->next; + lst->next = new; + } + else + *alst = new; +} diff --git a/libft/srcs/lst/ft_lstnew.c b/libft/srcs/lst/ft_lstnew.c new file mode 100644 index 00000000..e72d9ab7 --- /dev/null +++ b/libft/srcs/lst/ft_lstnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/29 15:57:38 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew(void const *content, size_t content_size) +{ + t_list *new; + + if (!(new = (t_list *)ft_malloc(sizeof(*new)))) + return (NULL); + new->next = NULL; + new->content_size = content_size; + new->content = ft_memalloc(content_size + 1); + if (content) + ft_memcpy(new->content, content, content_size); + return (new); +} diff --git a/libft/srcs/lst/ft_lstnew_range.c b/libft/srcs/lst/ft_lstnew_range.c new file mode 100644 index 00000000..26632a3b --- /dev/null +++ b/libft/srcs/lst/ft_lstnew_range.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew_range.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:54 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:54 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew_range(int a, int b) +{ + t_list *lst; + + if (a >= b) + return (NULL); + lst = NULL; + while (a < b) + { + b--; + ft_lstadd(&lst, ft_lstnew(&b, sizeof(int))); + } + return (lst); +} diff --git a/libft/srcs/lst/ft_lstsort.c b/libft/srcs/lst/ft_lstsort.c new file mode 100644 index 00000000..950d6fd3 --- /dev/null +++ b/libft/srcs/lst/ft_lstsort.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:58 by jhalford #+# #+# */ +/* Updated: 2017/01/09 12:29:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstsort(t_list **begin_list, int (*cmp)()) +{ + t_list **indirect; + t_list *tmp; + t_list *tmp2; + + indirect = begin_list; + if (!*begin_list) + return ; + while (*indirect && (*indirect)->next) + { + if ((*cmp)((*indirect)->content, (*indirect)->next->content) > 0) + { + tmp = *indirect; + tmp2 = (*indirect)->next; + (*indirect)->next = (*indirect)->next->next; + *indirect = tmp2; + (*indirect)->next = tmp; + indirect = begin_list; + } + else + indirect = &(*indirect)->next; + } +} diff --git a/libft/srcs/lst/lst_insert_sort.c b/libft/srcs/lst/lst_insert_sort.c new file mode 100644 index 00000000..d1a62412 --- /dev/null +++ b/libft/srcs/lst/lst_insert_sort.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lst_insert_sort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/05/20 19:59:41 by ariard #+# #+# */ +/* Updated: 2017/05/20 20:05:32 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void lst_insert_sort(t_list **head, + int (cmp)()) +{ + t_list *new; + t_list *ptr; + + new = NULL; + while (*head) + { + ptr = *head; + *head = (*head)->next; + ft_lst_sorted_insert(&new, ptr, cmp); + } + *head = new; +} diff --git a/libft/srcs/lst/pop.c b/libft/srcs/lst/pop.c new file mode 100644 index 00000000..df3be22e --- /dev/null +++ b/libft/srcs/lst/pop.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* pop.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:56 by jhalford #+# #+# */ +/* Updated: 2017/03/24 20:05:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int pop(t_list **lst) +{ + t_list *top; + int item; + + top = *lst; + item = top ? *(int*)top->content : 0; + if (lst && *lst) + *lst = (*lst)->next; + ft_lstdelone(&top, ft_lst_cfree); + return (item); +} diff --git a/libft/srcs/lst/push.c b/libft/srcs/lst/push.c new file mode 100644 index 00000000..111b3505 --- /dev/null +++ b/libft/srcs/lst/push.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* push.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/09 15:59:39 by jhalford #+# #+# */ +/* Updated: 2017/03/02 20:59:42 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *push(t_list **stack, int elem) +{ + ft_lstadd(stack, ft_lstnew(&elem, sizeof(elem))); + return (*stack); +} diff --git a/libft/srcs/lst/top.c b/libft/srcs/lst/top.c new file mode 100644 index 00000000..2c3186e2 --- /dev/null +++ b/libft/srcs/lst/top.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* top.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/24 20:04:27 by jhalford #+# #+# */ +/* Updated: 2017/03/24 20:09:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int top(t_list *top) +{ + return (top ? *(int*)top->content : 0); +} diff --git a/libft/srcs/math/ft_addrcmp.c b/libft/srcs/math/ft_addrcmp.c new file mode 100644 index 00000000..5c430c71 --- /dev/null +++ b/libft/srcs/math/ft_addrcmp.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_addrcmp.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/14 15:59:10 by jhalford #+# #+# */ +/* Updated: 2017/01/11 16:28:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_addrcmp(void *a, void *b) +{ + return (a - b); +} diff --git a/libft/srcs/math/ft_ilen.c b/libft/srcs/math/ft_ilen.c new file mode 100644 index 00000000..bbce37b5 --- /dev/null +++ b/libft/srcs/math/ft_ilen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ilen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:53:53 by jhalford #+# #+# */ +/* Updated: 2017/02/18 15:41:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_ilen(int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/libft/srcs/math/ft_ilen_base.c b/libft/srcs/math/ft_ilen_base.c new file mode 100644 index 00000000..3c6f9ae4 --- /dev/null +++ b/libft/srcs/math/ft_ilen_base.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ilen_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:53:53 by jhalford #+# #+# */ +/* Updated: 2016/11/07 14:45:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_ilen_base(int n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} diff --git a/libft/srcs/math/ft_itoa.c b/libft/srcs/math/ft_itoa.c new file mode 100644 index 00000000..b1342f1c --- /dev/null +++ b/libft/srcs/math/ft_itoa.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:10 by jhalford #+# #+# */ +/* Updated: 2017/03/07 12:08:47 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static size_t ft_size(int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} + +char *ft_itoa(int n) +{ + int i; + char *str; + int neg; + + i = 0; + str = ft_strnew(ft_size(n) + 1); + neg = FT_NEG(n) ? 1 : 0; + if (n == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (n) + { + str[i++] = FT_ABS(n % 10) + '0'; + n /= 10; + } + if (neg) + str[i++] = '-'; + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/libft/srcs/math/ft_itoa_base.c b/libft/srcs/math/ft_itoa_base.c new file mode 100644 index 00000000..edc60b46 --- /dev/null +++ b/libft/srcs/math/ft_itoa_base.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:51 by jhalford #+# #+# */ +/* Updated: 2017/01/22 16:38:53 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static char *ft_flags(char *str, int *i, char *flags, int neg) +{ + if (neg) + str[*i++] = '-'; + else if (ft_strchr(flags, '+')) + str[*i++] = '+'; + else if (ft_strchr(flags, ' ')) + str[*i++] = ' '; + return (str); +} + +char *ft_itoa_base(int nbr, char *base, char *flags) +{ + int i; + int neg; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_ilen_base(nbr, base_size) + 1); + neg = FT_NEG(nbr); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[FT_ABS(nbr % base_size)]; + nbr = nbr / base_size; + } + str = ft_flags(str, &i, flags, neg); + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/libft/srcs/math/ft_lllen.c b/libft/srcs/math/ft_lllen.c new file mode 100644 index 00000000..4ef07cc8 --- /dev/null +++ b/libft/srcs/math/ft_lllen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lllen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:35 by jhalford #+# #+# */ +/* Updated: 2016/11/07 14:45:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_lllen(long long n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/libft/srcs/math/ft_lllen_base.c b/libft/srcs/math/ft_lllen_base.c new file mode 100644 index 00000000..74b934eb --- /dev/null +++ b/libft/srcs/math/ft_lllen_base.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lllen_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:35 by jhalford #+# #+# */ +/* Updated: 2016/11/07 14:46:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_lllen_base(long long n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} diff --git a/libft/srcs/math/ft_lltoa_base.c b/libft/srcs/math/ft_lltoa_base.c new file mode 100644 index 00000000..69d31aff --- /dev/null +++ b/libft/srcs/math/ft_lltoa_base.c @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lltoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:10:42 by jhalford #+# #+# */ +/* Updated: 2017/02/18 15:23:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static char *ft_flags(char *str, int *i, char *flags, int neg) +{ + if (neg) + str[(*i)++] = '-'; + else if (ft_strchr(flags, '+')) + str[(*i)++] = '+'; + else if (ft_strchr(flags, ' ')) + str[(*i)++] = ' '; + return (str); +} + +char *ft_lltoa_base(long long nbr, char *base, char *flags) +{ + int i; + int neg; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_lllen_base(nbr, base_size) + 1); + neg = FT_NEG(nbr); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[FT_ABS(nbr % base_size)]; + nbr = nbr / base_size; + } + str = ft_flags(str, &i, flags, neg); + str[i] = 0; + ft_strrev(str); + return (str); +} diff --git a/libft/srcs/math/ft_uilen.c b/libft/srcs/math/ft_uilen.c new file mode 100644 index 00000000..9e87ca1f --- /dev/null +++ b/libft/srcs/math/ft_uilen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_uilen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:35 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:54:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_uilen(unsigned int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/libft/srcs/math/ft_uitoa_base.c b/libft/srcs/math/ft_uitoa_base.c new file mode 100644 index 00000000..a09cb11e --- /dev/null +++ b/libft/srcs/math/ft_uitoa_base.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_uitoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:08:10 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:10:35 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static size_t ft_size(unsigned int n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} + +char *ft_uitoa_base(unsigned int nbr, char *base) +{ + int i; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_size(nbr, base_size) + 1); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[nbr % base_size]; + nbr = nbr / base_size; + } + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/libft/srcs/math/ft_ulltoa_base.c b/libft/srcs/math/ft_ulltoa_base.c new file mode 100644 index 00000000..5a5a3675 --- /dev/null +++ b/libft/srcs/math/ft_ulltoa_base.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ulltoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:07:50 by jhalford #+# #+# */ +/* Updated: 2017/02/18 16:07:02 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static size_t ft_size(unsigned long long n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} + +char *ft_ulltoa_base(unsigned long long nbr, char *base) +{ + int i; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_size(nbr, base_size) + 1); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[nbr % base_size]; + nbr = nbr / base_size; + } + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/libft/srcs/math/id.c b/libft/srcs/math/id.c new file mode 100644 index 00000000..e23a5831 --- /dev/null +++ b/libft/srcs/math/id.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* id.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 12:20:59 by jhalford #+# #+# */ +/* Updated: 2017/03/20 12:21:01 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *id(void *data) +{ + return (data); +} diff --git a/libft/srcs/mem/ft_bzero.c b/libft/srcs/mem/ft_bzero.c new file mode 100644 index 00000000..6f1834b5 --- /dev/null +++ b/libft/srcs/mem/ft_bzero.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:08 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:56:09 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + size_t i; + + i = -1; + while (++i < n) + *(char *)s++ = 0; +} diff --git a/libft/srcs/mem/ft_malloc.c b/libft/srcs/mem/ft_malloc.c new file mode 100644 index 00000000..bb1b9b54 --- /dev/null +++ b/libft/srcs/mem/ft_malloc.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_malloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/21 15:45:00 by jhalford #+# #+# */ +/* Updated: 2017/03/23 18:31:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_malloc(size_t size) +{ + void *ptr; + + ptr = malloc(size); + if (!ptr) + { + ft_putstr_fd(strerror(errno), 2); + exit(errno); + } + return (ptr); +} diff --git a/libft/srcs/mem/ft_memalloc.c b/libft/srcs/mem/ft_memalloc.c new file mode 100644 index 00000000..c2908094 --- /dev/null +++ b/libft/srcs/mem/ft_memalloc.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memalloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:25 by jhalford #+# #+# */ +/* Updated: 2017/06/22 21:51:30 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memalloc(size_t size) +{ + void *addr; + size_t i; + + addr = ft_malloc(size); + if (addr == NULL) + return (NULL); + i = -1; + while (++i < size) + ((char *)addr)[i] = 0; + return (addr); +} diff --git a/libft/srcs/mem/ft_memccpy.c b/libft/srcs/mem/ft_memccpy.c new file mode 100644 index 00000000..ee5d8071 --- /dev/null +++ b/libft/srcs/mem/ft_memccpy.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memccpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:26 by jhalford #+# #+# */ +/* Updated: 2017/03/06 15:36:13 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memccpy(void *dst, const void *src, int c, size_t n) +{ + size_t i; + + i = -1; + while (++i < n) + { + *(char *)dst++ = *(char *)src; + if (*(char *)src++ == c) + return (dst); + } + return (NULL); +} diff --git a/libft/srcs/mem/ft_memchr.c b/libft/srcs/mem/ft_memchr.c new file mode 100644 index 00000000..96ddf009 --- /dev/null +++ b/libft/srcs/mem/ft_memchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:28 by jhalford #+# #+# */ +/* Updated: 2016/11/11 17:41:21 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + void *a; + size_t i; + + i = -1; + a = (unsigned char *)s; + while (++i < n) + { + if (*(unsigned char *)a == (unsigned char)c) + return (a); + a++; + } + return (NULL); +} diff --git a/libft/srcs/mem/ft_memcmp.c b/libft/srcs/mem/ft_memcmp.c new file mode 100644 index 00000000..9dd827ee --- /dev/null +++ b/libft/srcs/mem/ft_memcmp.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:30 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:44:21 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + size_t i; + int cmp; + + i = -1; + while (++i < n) + { + cmp = *(unsigned char *)s1++ - *(unsigned char *)s2++; + if (cmp) + return (cmp); + } + return (cmp); +} diff --git a/libft/srcs/mem/ft_memcpy.c b/libft/srcs/mem/ft_memcpy.c new file mode 100644 index 00000000..a8edafaa --- /dev/null +++ b/libft/srcs/mem/ft_memcpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:31 by jhalford #+# #+# */ +/* Updated: 2017/03/06 15:39:36 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + char *c1; + char *c2; + + if (n == 0 || dst == src) + return (dst); + c1 = (char *)dst; + c2 = (char *)src; + while (--n) + *c1++ = *c2++; + *c1 = *c2; + return (dst); +} diff --git a/libft/srcs/mem/ft_memdel.c b/libft/srcs/mem/ft_memdel.c new file mode 100644 index 00000000..59a18066 --- /dev/null +++ b/libft/srcs/mem/ft_memdel.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:33 by jhalford #+# #+# */ +/* Updated: 2017/03/20 16:19:07 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_memdel(void **ap) +{ + if (ap && *ap) + { + free(*ap); + *ap = NULL; + } +} diff --git a/libft/srcs/mem/ft_memmove.c b/libft/srcs/mem/ft_memmove.c new file mode 100644 index 00000000..904d1aca --- /dev/null +++ b/libft/srcs/mem/ft_memmove.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:34 by jhalford #+# #+# */ +/* Updated: 2016/11/11 17:41:14 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dst, const void *src, size_t len) +{ + char *srcc; + char *dstc; + size_t i; + + i = -1; + srcc = (char *)src; + dstc = (char *)dst; + if (srcc < dstc) + while ((int)(--len) >= 0) + *(dstc + len) = *(srcc + len); + else + while (++i < len) + *(dstc + i) = *(srcc + i); + return (dst); +} diff --git a/libft/srcs/mem/ft_memset.c b/libft/srcs/mem/ft_memset.c new file mode 100644 index 00000000..b99906e2 --- /dev/null +++ b/libft/srcs/mem/ft_memset.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:36 by jhalford #+# #+# */ +/* Updated: 2017/03/06 15:39:24 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *b, int c, size_t len) +{ + size_t i; + + i = -1; + while (++i < len) + ((unsigned char *)b)[i] = (unsigned char)c; + return (b); +} diff --git a/libft/srcs/mem/ft_realloc.c b/libft/srcs/mem/ft_realloc.c new file mode 100644 index 00000000..33f667a8 --- /dev/null +++ b/libft/srcs/mem/ft_realloc.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_realloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/11 17:37:53 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_realloc(void *data, int size) +{ + void *new; + + new = ft_memalloc(size); + ft_memcpy(new, data, ft_strlen(data)); + ft_memdel(&data); + return (new); +} diff --git a/libft/srcs/net/cksum.c b/libft/srcs/net/cksum.c new file mode 100644 index 00000000..b44820eb --- /dev/null +++ b/libft/srcs/net/cksum.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cksum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/08 12:45:43 by jhalford #+# #+# */ +/* Updated: 2017/10/08 12:48:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +unsigned short cksum(void *b, int len) +{ + unsigned short *buf; + unsigned int sum; + + buf = b; + sum = 0; + while (len > 1) + { + sum += *((unsigned short*)buf++); + len -= 2; + } + if (len == 1) + sum += *(unsigned char*)buf; + sum = (sum >> 16) + (sum & 0xFFFF); + return (~(sum + (sum >> 16))); +} diff --git a/libft/srcs/net/create_client.c b/libft/srcs/net/create_client.c new file mode 100644 index 00000000..2fa1a1e4 --- /dev/null +++ b/libft/srcs/net/create_client.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_client.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:59:28 by jhalford #+# #+# */ +/* Updated: 2017/10/08 13:33:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int create_client(char *addr, int port, char *protoname) +{ + int sock; + struct protoent *proto; + struct sockaddr_in sin; + + if (!(proto = getprotobyname(protoname))) + return (-1); + sock = socket(PF_INET, SOCK_STREAM, proto->p_proto); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = inet_addr(addr); + if (connect(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0) + return (-1); + return (sock); +} + +void listener(int domain, int sock, int proto, + void (*handler)(void *buf, int bytes, struct sockaddr *addr)) +{ + int sd; + struct sockaddr addr; + unsigned char buf[1024]; + int bytes; + socklen_t len; + + len = sizeof(addr); + sd = socket(domain, sock, proto); + if (sd < 0) + { + perror("listener socket"); + exit(0); + } + while (1) + { + bzero(buf, sizeof(buf)); + bytes = recvfrom(sd, buf, sizeof(buf), 0, + &addr, &len); + if (bytes > 0 && handler) + handler(buf, bytes, &addr); + else + perror("recvfrom"); + } + exit(0); +} diff --git a/libft/srcs/net/create_server.c b/libft/srcs/net/create_server.c new file mode 100644 index 00000000..ffba3385 --- /dev/null +++ b/libft/srcs/net/create_server.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_server.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:51 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:02:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int create_server(int port, int backlog, char *protoname) +{ + int sock; + struct protoent *proto; + struct sockaddr_in sin; + + if (!(proto = getprotobyname(protoname))) + return (-1); + sock = socket(PF_INET, SOCK_STREAM, proto->p_proto); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = htonl(INADDR_ANY); + if (bind(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0) + return (-1); + listen(sock, backlog); + return (sock); +} diff --git a/libft/srcs/net/host.c b/libft/srcs/net/host.c new file mode 100644 index 00000000..34ec7909 --- /dev/null +++ b/libft/srcs/net/host.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* host.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/08 15:47:45 by jhalford #+# #+# */ +/* Updated: 2017/10/08 15:58:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +int host_format(struct sockaddr *addr) +{ + char dn[1024]; + char sv[20]; + char ip[INET_ADDRSTRLEN]; + + if (getnameinfo(addr, sizeof(*addr), dn, sizeof(dn), + sv, sizeof(sv), 0)) + { + perror("getnameinfo"); + return (1); + } + printf(" %s (%s)", dn, + inet_ntop(AF_INET, &(((struct sockaddr_in*)addr)->sin_addr), + ip, INET_ADDRSTRLEN)); + return (0); +} diff --git a/libft/srcs/net/ip.c b/libft/srcs/net/ip.c new file mode 100644 index 00000000..85bd9213 --- /dev/null +++ b/libft/srcs/net/ip.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* forge_ip.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:39 by jhalford #+# #+# */ +/* Updated: 2017/10/08 15:52:39 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +void ip_hdrinit(struct ip *header) +{ + memset(header, 0, sizeof(*header)); + header->ip_v = 4; + header->ip_hl = 5; + header->ip_tos = 0; + header->ip_len = 0; + header->ip_id = ntohl(epoch_micro()); + header->ip_off = 0; + header->ip_ttl = 255; + header->ip_p = 0; + header->ip_sum = 0; + memset(&header->ip_src, 0, sizeof(struct in_addr)); + memset(&header->ip_dst, 0, sizeof(struct in_addr)); +} + +void ip_load_icmp(struct icmp *icmp, void *buf) +{ + struct ip *ip; + int hlen; + + ip = buf; + hlen = ip->ip_hl << 2; + ft_memcpy(icmp, buf + hlen, sizeof(struct icmp)); +} diff --git a/libft/srcs/net/net_get.c b/libft/srcs/net/net_get.c new file mode 100644 index 00000000..e75b58ad --- /dev/null +++ b/libft/srcs/net/net_get.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* net_get.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:59:19 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:59:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int net_get(int sock, char *msg, int size) +{ + int ack; + + ack = htons(ACK); + if (read(sock, msg, size) < 0) + return (-1); + if (write(sock, (char*)&ack, sizeof(ack)) < 0) + return (-1); + return (0); +} + +int net_get_fd(int sock, int fd, int size) +{ + int ack; + char msg[size]; + + ack = htons(ACK); + if (read(sock, msg, size) < 0) + return (-1); + if (write(sock, (char*)&ack, sizeof(ack)) < 0) + return (-1); + if (write(fd, msg, size) < 0) + return (-1); + return (0); +} + +int net_get_large(int sock, int fd) +{ + int i; + int num_blks; + int num_last_blk; + + net_get(sock, (char*)&num_blks, sizeof(num_blks)); + net_get(sock, (char*)&num_last_blk, sizeof(num_last_blk)); + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_get_fd(sock, fd, NET_MAXSIZE); + if (num_last_blk) + net_get_fd(sock, fd, num_last_blk); + return (0); +} diff --git a/libft/srcs/net/net_send.c b/libft/srcs/net/net_send.c new file mode 100644 index 00000000..c9a026a1 --- /dev/null +++ b/libft/srcs/net/net_send.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* net_send.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:03:19 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:03:31 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int net_send(int sock, char *msg, int size) +{ + int ack; + + if (write(sock, msg, size) < 0) + return (-1); + if (read(sock, (char*)&ack, sizeof(ack)) < 0) + return (-1); + if (ntohs(ack) != ACK) + return (1); + return (0); +} + +int net_send_large(int sock, char *msg, int size) +{ + int i; + int num_blks; + int num_last_blk; + + num_blks = htons(size / NET_MAXSIZE + 1); + num_last_blk = htons(size % NET_MAXSIZE); + if (net_send(sock, (char*)&num_blks, sizeof(num_blks))) + return (1); + if (net_send(sock, (char*)&num_last_blk, sizeof(num_blks))) + return (1); + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_send(sock, msg + i * NET_MAXSIZE, NET_MAXSIZE); + if (num_last_blk) + net_send(sock, msg + i * NET_MAXSIZE, num_last_blk); + return (0); +} diff --git a/libft/srcs/net/reserve_port.c b/libft/srcs/net/reserve_port.c new file mode 100644 index 00000000..53ebf566 --- /dev/null +++ b/libft/srcs/net/reserve_port.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* reserve_port.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:55 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:03:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +int reserve_port(int *port) +{ + struct sockaddr_in sa; + int sockfd; + unsigned short i; + + if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) + return (1); + sa.sin_family = AF_INET; + sa.sin_addr.s_addr = INADDR_ANY; + i = 49152; + while (i < 65535) + { + sa.sin_port = htons(i); + if (bind(sockfd, (struct sockaddr*)&sa, sizeof(sa)) == 0) + { + *port = i; + return (0); + } + ++i; + } + return (1); +} diff --git a/libft/srcs/net/tcp.c b/libft/srcs/net/tcp.c new file mode 100644 index 00000000..83c0d746 --- /dev/null +++ b/libft/srcs/net/tcp.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* forge_tcp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:34 by jhalford #+# #+# */ +/* Updated: 2017/10/08 15:54:16 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +void tcp_hdrinit(struct tcphdr *header) +{ + memset(header, 0, sizeof(*header)); + header->th_sport = htons(0); + header->th_dport = htons(0); + header->th_seq = epoch_micro(); + header->th_ack = 0; + header->th_off = 5; + header->th_flags = 0; + header->th_win = htons(1024); + header->th_sum = 0; + header->th_urp = 0; +} diff --git a/libft/srcs/path/ft_path_notdir.c b/libft/srcs/path/ft_path_notdir.c new file mode 100644 index 00000000..b59044f3 --- /dev/null +++ b/libft/srcs/path/ft_path_notdir.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_path_notdir.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:45:07 by jhalford #+# #+# */ +/* Updated: 2017/03/25 15:03:39 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_path_notdir(char *path) +{ + char *slash; + char *ret; + + ret = path; + if ((slash = ft_strrchr(path, '/')) && slash != path) + ret = slash + 1; + return (ret); +} diff --git a/libft/srcs/printing/ft_putchar.c b/libft/srcs/printing/ft_putchar.c new file mode 100644 index 00000000..b607cf9a --- /dev/null +++ b/libft/srcs/printing/ft_putchar.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:37 by jhalford #+# #+# */ +/* Updated: 2016/11/04 13:11:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putchar_fd(int c, int fd) +{ + return (write(fd, &c, 1)); +} + +int ft_putchar(int c) +{ + return (write(1, &c, 1)); +} diff --git a/libft/srcs/printing/ft_putendl.c b/libft/srcs/printing/ft_putendl.c new file mode 100644 index 00000000..615c929f --- /dev/null +++ b/libft/srcs/printing/ft_putendl.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:40 by jhalford #+# #+# */ +/* Updated: 2017/02/20 18:17:01 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putendl_fd(char const *s, int fd) +{ + char nl; + int ret; + + nl = '\n'; + if ((ret = write(fd, s, ft_strlen(s)))) + return (ret); + return (write(fd, &nl, 1)); +} + +int ft_putendl(char const *s) +{ + return (ft_putendl_fd(s, 1)); +} diff --git a/libft/srcs/printing/ft_putnbr.c b/libft/srcs/printing/ft_putnbr.c new file mode 100644 index 00000000..e0850ba8 --- /dev/null +++ b/libft/srcs/printing/ft_putnbr.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/02 21:25:03 by jhalford #+# #+# */ +/* Updated: 2017/02/18 17:47:04 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putnbr_loop(long n, int base, int fd) +{ + if (n >= base) + ft_putnbr_loop(n / base, base, fd); + return (ft_putchar_fd("0123456789abcdef"[n % base], fd)); +} + +int ft_putnbr_hex_fd(long n, int fd) +{ + ft_putstr_fd("0x", fd); + return (ft_putnbr_loop(n, 16, fd)); +} + +int ft_putnbr_fd(long n, int fd) +{ + if (n < 0) + ft_putchar_fd('-', fd); + n = FT_ABS(n); + return (ft_putnbr_loop(n, 10, fd)); +} + +int ft_putnbr_hex(long n) +{ + return (ft_putnbr_hex_fd(n, 1)); +} + +int ft_putnbr(long n) +{ + return (ft_putnbr_fd(n, 1)); +} diff --git a/libft/srcs/printing/ft_putstr.c b/libft/srcs/printing/ft_putstr.c new file mode 100644 index 00000000..985f1a99 --- /dev/null +++ b/libft/srcs/printing/ft_putstr.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/03 16:13:07 by jhalford #+# #+# */ +/* Updated: 2016/08/25 17:03:59 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putstr_fd(char const *s, int fd) +{ + return (write(fd, s, ft_strlen(s))); +} + +int ft_putstr(char const *s) +{ + return (write(1, s, ft_strlen(s))); +} diff --git a/libft/srcs/printing/hexdump.c b/libft/srcs/printing/hexdump.c new file mode 100644 index 00000000..de933085 --- /dev/null +++ b/libft/srcs/printing/hexdump.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* hexdump.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:56:14 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:56:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static void print_hex_contents(void *addr, unsigned int size) +{ + void *a; + + a = addr; + while (a - addr < 16) + { + if ((a - addr) >= size) + break ; + else + ft_printf("%02x", *(unsigned char*)a); + ft_putchar(' '); + a++; + } +} + +void *hexdump(void *addr, unsigned int offset, unsigned int size) +{ + void *a; + + addr += offset; + a = addr; + if (addr == NULL) + return (addr); + while ((a - addr) < size) + { + ft_printf("%0*llx\t", 16, (a - addr) + (unsigned long)offset); + print_hex_contents(a, (size - (a - addr))); + ft_putchar('\n'); + a += 16; + } + return (addr); +} diff --git a/libft/srcs/rs/rs.c b/libft/srcs/rs/rs.c new file mode 100644 index 00000000..55f46992 --- /dev/null +++ b/libft/srcs/rs/rs.c @@ -0,0 +1,61 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* rs.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:57:54 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:19:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include + +double sqrt(double x); + +void rs_init(t_rs *rs) +{ + bzero(rs, sizeof(t_rs)); + rs->count = 0; + rs->min = DBL_MAX; + rs->max = -DBL_MAX; +} + +void rs_push(t_rs *rs, double n) +{ + double delta; + + rs->count++; + n < rs->min ? rs->min = n : (0); + n > rs->max ? rs->max = n : (0); + if (rs->count == 1) + { + rs->avg = n; + rs->m = 0; + } + else + { + delta = n - rs->avg; + rs->avg += delta / rs->count; + rs->m += delta * (n - rs->avg); + } +} + +void rs_final(t_rs *rs) +{ + if (rs->count == 0) + { + rs->min = 0; + rs->max = 0; + } + if (rs->count < 2) + { + rs->var = 0; + rs->stdev = 0; + return ; + } + rs->var = rs->m / (rs->count - 1); + rs->stdev = sqrt(rs->var); +} diff --git a/libft/srcs/sstr/ft_sstradd.c b/libft/srcs/sstr/ft_sstradd.c new file mode 100644 index 00000000..c81a256d --- /dev/null +++ b/libft/srcs/sstr/ft_sstradd.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstradd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:03:58 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char **ft_sstradd(char **sstr, char *new) +{ + int size; + char **newlist; + + size = 0; + if (sstr) + while (sstr[size]) + size++; + if (!(newlist = (char **)ft_memalloc(sizeof(char *) * (size + 2)))) + return (NULL); + if (sstr) + ft_memcpy(newlist, sstr, sizeof(char*) * size); + newlist[size] = ft_strdup(new); + newlist[size + 1] = NULL; + free(sstr); + return (newlist); +} diff --git a/libft/srcs/sstr/ft_sstrcat.c b/libft/srcs/sstr/ft_sstrcat.c new file mode 100644 index 00000000..313fc24d --- /dev/null +++ b/libft/srcs/sstr/ft_sstrcat.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/10 16:58:06 by jhalford #+# #+# */ +/* Updated: 2016/12/10 17:03:27 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_sstrcat(char **sstr, char sep) +{ + int len; + int i; + char *out; + + i = 0; + len = 0; + if (!sstr) + return (NULL); + while (sstr[i]) + len += ft_strlen(sstr[i++]); + if (!(out = ft_strnew(sizeof(char) * (len + i + 1)))) + return (NULL); + ft_strcpy(out, sstr[0]); + i = 1; + while (sstr[i]) + { + ft_strcat(out, (char[]){sep, 0}); + ft_strcat(out, sstr[i++]); + } + return (out); +} diff --git a/libft/srcs/sstr/ft_sstrdel.c b/libft/srcs/sstr/ft_sstrdel.c new file mode 100644 index 00000000..403fcf00 --- /dev/null +++ b/libft/srcs/sstr/ft_sstrdel.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:04:07 by jhalford #+# #+# */ +/* Updated: 2017/03/25 01:38:51 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrdel(char **sstr, int index) +{ + int i; + + i = index; + ft_strdel(&sstr[index]); + while (i == index || sstr[i]) + { + sstr[i] = sstr[i + 1]; + ++i; + } +} diff --git a/libft/srcs/sstr/ft_sstrdup.c b/libft/srcs/sstr/ft_sstrdup.c new file mode 100644 index 00000000..8517a125 --- /dev/null +++ b/libft/srcs/sstr/ft_sstrdup.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/07 14:25:45 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char **ft_sstrdup(char **list) +{ + int i; + int size; + char **cpy; + + i = 0; + size = 0; + while (list[size]) + size++; + cpy = (char **)ft_malloc(sizeof(char *) * (size + 1)); + while (*list) + { + cpy[i++] = ft_strdup(*list); + list++; + } + cpy[i] = NULL; + return (cpy); +} diff --git a/libft/srcs/sstr/ft_sstrfree.c b/libft/srcs/sstr/ft_sstrfree.c new file mode 100644 index 00000000..7855228d --- /dev/null +++ b/libft/srcs/sstr/ft_sstrfree.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrfree.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:53:36 by jhalford #+# #+# */ +/* Updated: 2017/03/22 23:19:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrfree(char **sstr) +{ + int i; + + i = 0; + if (sstr) + { + while (sstr[i]) + { + ft_strdel(sstr + i); + i++; + } + ft_strdel(sstr + i); + free(sstr); + } +} diff --git a/libft/srcs/sstr/ft_sstrmerge.c b/libft/srcs/sstr/ft_sstrmerge.c new file mode 100644 index 00000000..2705a285 --- /dev/null +++ b/libft/srcs/sstr/ft_sstrmerge.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrmerge.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/24 17:40:50 by jhalford #+# #+# */ +/* Updated: 2017/03/24 18:05:08 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char **ft_sstrmerge(char **s1, char **s2) +{ + char **out; + + out = ft_sstrdup(s1); + if (!s2) + return (out); + while (*s2) + { + out = ft_sstradd(out, *s2); + s2++; + } + return (out); +} diff --git a/libft/srcs/sstr/ft_sstrprint.c b/libft/srcs/sstr/ft_sstrprint.c new file mode 100644 index 00000000..1ebc0f5e --- /dev/null +++ b/libft/srcs/sstr/ft_sstrprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 15:17:33 by jhalford #+# #+# */ +/* Updated: 2016/11/28 15:18:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrprint(char **list, char sep) +{ + ft_sstrprint_fd(STDOUT, list, sep); +} diff --git a/libft/srcs/sstr/ft_sstrprint_fd.c b/libft/srcs/sstr/ft_sstrprint_fd.c new file mode 100644 index 00000000..42225b7c --- /dev/null +++ b/libft/srcs/sstr/ft_sstrprint_fd.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrprint_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 15:17:29 by jhalford #+# #+# */ +/* Updated: 2017/03/18 03:37:16 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrprint_fd(int fd, char **list, char sep) +{ + int i; + + i = 0; + if (!list || !*list) + return ; + while (list[i]) + { + ft_putstr_fd(list[i++], fd); + if (list[i]) + ft_putchar_fd(sep, fd); + } +} diff --git a/libft/srcs/sstr/ft_sstrsort.c b/libft/srcs/sstr/ft_sstrsort.c new file mode 100644 index 00000000..25cf4134 --- /dev/null +++ b/libft/srcs/sstr/ft_sstrsort.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrsort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:03:37 by jhalford #+# #+# */ +/* Updated: 2017/03/23 14:40:25 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrsort(char **list, int (*cmp)()) +{ + int i; + char *tmp; + + i = 0; + while (list[i] && list[i + 1]) + { + if ((*cmp)(list[i], list[i + 1]) > 0) + { + tmp = list[i]; + list[i] = list[i + 1]; + list[i + 1] = tmp; + i = 0; + } + else + i++; + } +} diff --git a/libft/srcs/sstr/ft_sstrstr.c b/libft/srcs/sstr/ft_sstrstr.c new file mode 100644 index 00000000..d6618563 --- /dev/null +++ b/libft/srcs/sstr/ft_sstrstr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/07 11:29:54 by ariard #+# #+# */ +/* Updated: 2017/03/22 21:54:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_sstrstr(char **sstr, char *find) +{ + int size; + + if (!sstr) + return (NULL); + size = ft_strlen(find); + while ((*sstr)) + { + if (ft_strncmp(*sstr, find, size) == 0) + return (*sstr); + sstr++; + } + return (NULL); +} diff --git a/libft/srcs/str/ft_atoi.c b/libft/srcs/str/ft_atoi.c new file mode 100644 index 00000000..546c58f6 --- /dev/null +++ b/libft/srcs/str/ft_atoi.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/03 16:17:21 by jhalford #+# #+# */ +/* Updated: 2017/03/22 22:21:21 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_iswhitespace(char c) +{ + if (c == ' ' || c == '\t' || c == '\n') + return (1); + else if (c == '\v' || c == '\f' || c == '\r') + return (1); + return (0); +} + +int ft_atoi(const char *str) +{ + int i; + int res; + int sign; + + if (!str || !*str) + return (0); + i = 0; + res = 0; + sign = 1; + while (ft_iswhitespace(str[i])) + i++; + if (str[i] == '-' || str[i] == '+') + { + if (str[i + 1] >= '0' && str[i + 1] <= '9') + { + sign = (str[i] == '+') ? 1 : -1; + i++; + } + else + return (0); + } + while (str[i] >= '0' && str[i] <= '9') + res = res * 10 + str[i++] - '0'; + res *= sign; + return (res); +} diff --git a/libft/srcs/str/ft_convert_base.c b/libft/srcs/str/ft_convert_base.c new file mode 100644 index 00000000..633a82ef --- /dev/null +++ b/libft/srcs/str/ft_convert_base.c @@ -0,0 +1,86 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convert_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 23:31:20 by jhalford #+# #+# */ +/* Updated: 2016/11/03 18:03:07 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int get_size(char *str) +{ + int i; + int j; + + i = 0; + while (str[i] != '\0') + { + if (str[i] == '+' || str[i] == '-') + return (0); + if (str[i] < 32 || str[i] > 126) + return (0); + j = 0; + while (j < i) + { + if (str[j] == str[i]) + return (0); + j++; + } + i++; + } + return (i); +} + +static int get_pos(char c, char *str) +{ + int i; + + i = 0; + while (c != str[i] && str[i]) + i++; + return (i); +} + +static int ft_check_str(char *str, char *base, int base_size) +{ + while (*str) + { + if (!(get_pos(*str, base) < base_size || *str == '-' || *str == '+')) + return (0); + str++; + } + return (1); +} + +char *ft_convert_base( + char *str, char *base_from, char *base_to, char *flags) +{ + int base_size; + int res; + int sign; + + base_size = get_size(base_from); + res = 0; + sign = 1; + if (!ft_check_str(str, base_from, base_size)) + return (ft_itoa_base(0, "0", flags)); + if (base_size > 1) + { + if (*str == '-' || *str == '+') + { + if (get_pos(*(str + 1), base_from) < base_size) + sign = (*str == '+') ? 1 : -1; + else + return (ft_itoa_base(0, "0", flags)); + str++; + } + while (get_pos(*str, base_from) < base_size) + res = res * base_size + sign * get_pos(*str++, base_from); + } + return (ft_itoa_base(res, base_to, flags)); +} diff --git a/libft/srcs/str/ft_putaddr_fd.c b/libft/srcs/str/ft_putaddr_fd.c new file mode 100644 index 00000000..a6c52a37 --- /dev/null +++ b/libft/srcs/str/ft_putaddr_fd.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putaddr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 18:47:04 by jhalford #+# #+# */ +/* Updated: 2017/02/18 18:48:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putaddr_fd(void *a, int fd) +{ + char out[19]; + unsigned long long addr; + int i; + + ft_putnbr((long)a); + ft_putchar('\n'); + addr = (unsigned long long)a; + out[18] = 0; + i = 17; + while (addr) + { + ft_putnbr(addr); + ft_putchar('\n'); + out[i--] = "0123456789ABCDEF"[addr % 16]; + addr /= 16; + } + out[i--] = 'x'; + out[i] = '0'; + ft_putstr_fd(out + i, fd); +} diff --git a/libft/srcs/str/ft_split_whitespaces.c b/libft/srcs/str/ft_split_whitespaces.c new file mode 100644 index 00000000..ed744d0d --- /dev/null +++ b/libft/srcs/str/ft_split_whitespaces.c @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split_whitespaces.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/03 16:07:17 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdupi_w(char const *s) +{ + int i; + char *str; + + i = 0; + while (s[i] && s[i] != ' ' && s[i] != '\t') + i++; + str = (char *)ft_malloc(sizeof(char) * (i + 1)); + if (str) + { + str[i--] = '\0'; + while (i >= 0) + { + str[i] = s[i]; + i--; + } + } + return (str); +} + +static int ft_len_words(char const *s) +{ + int i; + int len; + + i = 0; + len = 0; + while (s[i]) + { + if ((i == 0 && s[i] != ' ' && s[i] != '\t') || ((s[i] != ' ' + && s[i] != '\t') && (s[i - 1] == ' ' || s[i - 1] == '\t'))) + len++; + i++; + } + return (len); +} + +char **ft_split_whitespaces(char const *s) +{ + int i; + char **str; + int j; + + str = NULL; + if (!(s)) + return (str); + str = (char **)ft_malloc(sizeof(char *) * (ft_len_words(s) + 1)); + i = 0; + j = 0; + if (!(str)) + return (str); + while (s[i]) + { + if ((i == 0 && s[i] != ' ' && s[i] != '\t') || ((s[i] != ' ' + && s[i] != '\t') && (s[i - 1] == ' ' || s[i - 1] == '\t'))) + { + str[j] = ft_strdupi_w((s + i)); + j++; + } + i++; + } + str[j] = NULL; + return (str); +} diff --git a/libft/srcs/str/ft_str3join.c b/libft/srcs/str/ft_str3join.c new file mode 100644 index 00000000..91384cbc --- /dev/null +++ b/libft/srcs/str/ft_str3join.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_str3join.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:03:26 by jhalford #+# #+# */ +/* Updated: 2017/03/13 16:07:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_str3join(char const *s1, char const *s2, char const *s3) +{ + char *join; + int size; + + size = ft_strlen(s1) + ft_strlen(s2) + ft_strlen(s3); + join = ft_strnew(size + 1); + ft_strcpy(join, s1); + ft_strcat(join, s2); + ft_strcat(join, s3); + return (join); +} diff --git a/libft/srcs/str/ft_strappend.c b/libft/srcs/str/ft_strappend.c new file mode 100644 index 00000000..2e52529d --- /dev/null +++ b/libft/srcs/str/ft_strappend.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strappend.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/13 12:16:31 by jhalford #+# #+# */ +/* Updated: 2017/02/19 05:50:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strappend(char **dst, char *src) +{ + char *out; + + if (!(out = ft_strjoin(*dst, src))) + return (-1); + ft_strdel(dst); + *dst = out; + return (0); +} diff --git a/libft/srcs/str/ft_strbetween.c b/libft/srcs/str/ft_strbetween.c new file mode 100644 index 00000000..7492077e --- /dev/null +++ b/libft/srcs/str/ft_strbetween.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strbetween.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/11 16:26:44 by jhalford #+# #+# */ +/* Updated: 2017/01/12 14:54:17 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strbetween(char *start, char *end) +{ + char *out; + + out = ft_strnew(end - start + 1); + ft_strncpy(out, start, end - start); + return (out); +} diff --git a/libft/srcs/str/ft_strcat.c b/libft/srcs/str/ft_strcat.c new file mode 100644 index 00000000..76f6f25c --- /dev/null +++ b/libft/srcs/str/ft_strcat.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:56:53 by jhalford #+# #+# */ +/* Updated: 2017/03/21 14:21:22 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcat(char *s1, const char *s2) +{ + char *start; + + start = s1; + s1 += ft_strlen(s1); + if (s2) + while (*s2) + *s1++ = *s2++; + *s1 = 0; + return (start); +} diff --git a/libft/srcs/str/ft_strcatf.c b/libft/srcs/str/ft_strcatf.c new file mode 100644 index 00000000..8caa7036 --- /dev/null +++ b/libft/srcs/str/ft_strcatf.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcatf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 15:46:03 by jhalford #+# #+# */ +/* Updated: 2016/12/09 19:02:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcatf(char *s1, const char *s2) +{ + char buf[ft_strlen(s1) + 1]; + + ft_strcpy(buf, s1); + ft_strcpy(s1, s2); + ft_strcat(s1, buf); + return (s1); +} diff --git a/libft/srcs/str/ft_strchr.c b/libft/srcs/str/ft_strchr.c new file mode 100644 index 00000000..c2ad43f6 --- /dev/null +++ b/libft/srcs/str/ft_strchr.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:53 by jhalford #+# #+# */ +/* Updated: 2017/02/20 16:43:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + char *a; + + if (!s) + return (NULL); + a = (char *)s; + while (*a) + { + if (*a == (char)c) + return (a); + a++; + } + if (*a == (char)c) + return (a); + return (NULL); +} diff --git a/libft/srcs/str/ft_strchrcpy.c b/libft/srcs/str/ft_strchrcpy.c new file mode 100644 index 00000000..06b88879 --- /dev/null +++ b/libft/srcs/str/ft_strchrcpy.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchrcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:43:59 by ariard #+# #+# */ +/* Updated: 2017/03/07 11:08:55 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchrcpy(char *dst, const char *src, char c) +{ + while (*src && *src != c) + *dst++ = *src++; + *dst = '\0'; + return (dst); +} diff --git a/libft/srcs/str/ft_strclr.c b/libft/srcs/str/ft_strclr.c new file mode 100644 index 00000000..834eb6f1 --- /dev/null +++ b/libft/srcs/str/ft_strclr.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strclr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:54 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:57:55 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_strclr(char *s) +{ + size_t size; + size_t i; + + size = ft_strlen(s); + i = -1; + while (++i < size) + s[i] = 0; +} diff --git a/libft/srcs/str/ft_strcmp.c b/libft/srcs/str/ft_strcmp.c new file mode 100644 index 00000000..de85d971 --- /dev/null +++ b/libft/srcs/str/ft_strcmp.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:49:02 by jhalford #+# #+# */ +/* Updated: 2017/03/14 18:09:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strcmp(const char *s1, const char *s2) +{ + int i; + + i = 0; + if (!s1 || !s2) + return (1); + while (*(s1 + i) && *(s1 + i) == *(s2 + i)) + i++; + return (*((unsigned char*)s1 + i) - *((unsigned char*)s2 + i)); +} diff --git a/libft/srcs/str/ft_strcpy.c b/libft/srcs/str/ft_strcpy.c new file mode 100644 index 00000000..63ee8897 --- /dev/null +++ b/libft/srcs/str/ft_strcpy.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:48:12 by jhalford #+# #+# */ +/* Updated: 2017/03/13 16:06:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcpy(char *dst, const char *src) +{ + int i; + + i = 0; + while (src && src[i]) + { + dst[i] = src[i]; + i++; + } + dst[i] = '\0'; + return (dst); +} diff --git a/libft/srcs/str/ft_strcspn.c b/libft/srcs/str/ft_strcspn.c new file mode 100644 index 00000000..d55d8081 --- /dev/null +++ b/libft/srcs/str/ft_strcspn.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcspn.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 15:55:33 by jhalford #+# #+# */ +/* Updated: 2017/03/20 16:00:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strcspn(char *s, const char *delim) +{ + char *str; + + str = s; + while (*str) + if (ft_strchr(delim, *str)) + return (str - s); + else + str++; + return (str - s); +} diff --git a/libft/srcs/str/ft_strcut.c b/libft/srcs/str/ft_strcut.c new file mode 100644 index 00000000..75b4d51b --- /dev/null +++ b/libft/srcs/str/ft_strcut.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcut.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:04:37 by jhalford #+# #+# */ +/* Updated: 2016/11/03 18:04:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcut(char *str, char *cut) +{ + char *target; + + while ((target = ft_strstr(str, cut))) + { + ft_strcpy(target, target + ft_strlen(cut)); + } + return (str); +} diff --git a/libft/srcs/str/ft_strdel.c b/libft/srcs/str/ft_strdel.c new file mode 100644 index 00000000..f9eb34e4 --- /dev/null +++ b/libft/srcs/str/ft_strdel.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:00 by jhalford #+# #+# */ +/* Updated: 2017/02/19 05:47:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_strdel(char **as) +{ + if (as && *as) + { + free(*as); + *as = NULL; + } +} diff --git a/libft/srcs/str/ft_strdup.c b/libft/srcs/str/ft_strdup.c new file mode 100644 index 00000000..556558f4 --- /dev/null +++ b/libft/srcs/str/ft_strdup.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/07 14:25:41 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdup(const char *s1) +{ + char *dup; + + if (!s1 || !(dup = (char*)ft_malloc(sizeof(*dup) * (ft_strlen(s1) + 1)))) + return (NULL); + ft_strcpy(dup, s1); + return (dup); +} diff --git a/libft/srcs/str/ft_strdupchr.c b/libft/srcs/str/ft_strdupchr.c new file mode 100644 index 00000000..3fd5d0d5 --- /dev/null +++ b/libft/srcs/str/ft_strdupchr.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdupchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/07 11:01:15 by ariard #+# #+# */ +/* Updated: 2017/03/22 23:12:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdupchr(const char *str, char c) +{ + char *new; + + if (!str || !(new = ft_memalloc(sizeof(*new) * (ft_strlenchr(str, c) + 1)))) + return (NULL); + ft_strchrcpy(new, str, c); + return (new); +} diff --git a/libft/srcs/str/ft_strduptr.c b/libft/srcs/str/ft_strduptr.c new file mode 100644 index 00000000..59cfd835 --- /dev/null +++ b/libft/srcs/str/ft_strduptr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strduptr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/06 13:37:12 by ariard #+# #+# */ +/* Updated: 2017/03/21 15:43:52 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strduptr(char *str, int (*is)(int c)) +{ + char *new; + char *tmp; + + new = ft_memalloc(sizeof(char *) * ft_strlen(str) + 1); + tmp = new; + while (*str && (is)((int)*str)) + *new++ = *str++; + *new = 0; + return (tmp); +} diff --git a/libft/srcs/str/ft_strequ.c b/libft/srcs/str/ft_strequ.c new file mode 100644 index 00000000..88e5580c --- /dev/null +++ b/libft/srcs/str/ft_strequ.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:04 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:02:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strequ(char const *s1, char const *s2) +{ + return (ft_strcmp(s1, s2) == 0); +} diff --git a/libft/srcs/str/ft_strinsert.c b/libft/srcs/str/ft_strinsert.c new file mode 100644 index 00000000..fcf8b1b6 --- /dev/null +++ b/libft/srcs/str/ft_strinsert.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strinsert.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/21 18:21:57 by jhalford #+# #+# */ +/* Updated: 2016/11/21 18:21:57 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strinsert(char *str, char c, int n) +{ + char tmp[ft_strlen(str)]; + char *out; + + ft_strcpy(tmp, str + n); + str[n] = 0; + out = ft_str3join(str, (char[]){c, 0}, tmp); + return (out); +} diff --git a/libft/srcs/str/ft_stris.c b/libft/srcs/str/ft_stris.c new file mode 100644 index 00000000..ba809f85 --- /dev/null +++ b/libft/srcs/str/ft_stris.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_stris.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/02 15:11:28 by ariard #+# #+# */ +/* Updated: 2017/03/20 16:01:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_stris(char *str, int (*f)()) +{ + while (*str) + if (!(f)(*str++)) + return (0); + return (1); +} diff --git a/libft/srcs/str/ft_striter.c b/libft/srcs/str/ft_striter.c new file mode 100644 index 00000000..8c309549 --- /dev/null +++ b/libft/srcs/str/ft_striter.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:13 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:58:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striter(char *s, void (*f)(char *)) +{ + size_t size; + size_t i; + + size = ft_strlen(s); + i = -1; + while (++i < size) + (*f)(s + i); +} diff --git a/libft/srcs/str/ft_striteri.c b/libft/srcs/str/ft_striteri.c new file mode 100644 index 00000000..80cdd8b5 --- /dev/null +++ b/libft/srcs/str/ft_striteri.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:15 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:58:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char *)) +{ + size_t size; + size_t i; + + size = ft_strlen(s); + i = -1; + while (++i < size) + (*f)(i, s + i); +} diff --git a/libft/srcs/str/ft_strjoin.c b/libft/srcs/str/ft_strjoin.c new file mode 100644 index 00000000..2c064f33 --- /dev/null +++ b/libft/srcs/str/ft_strjoin.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:18 by jhalford #+# #+# */ +/* Updated: 2017/02/19 05:50:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *join; + + if (!(join = ft_strnew(ft_strlen(s1) + ft_strlen(s2) + 1))) + return (NULL); + if (s1) + ft_strcpy(join, s1); + if (s2) + ft_strcat(join, s2); + return (join); +} diff --git a/libft/srcs/str/ft_strlcat.c b/libft/srcs/str/ft_strlcat.c new file mode 100644 index 00000000..df94eea4 --- /dev/null +++ b/libft/srcs/str/ft_strlcat.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:57:16 by jhalford #+# #+# */ +/* Updated: 2016/08/07 21:44:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + size_t i; + size_t dst_size; + size_t src_size; + + dst_size = ft_strlen(dst); + src_size = ft_strlen(src); + i = 0; + while (src[i] != '\0' && ((dst_size + i) < (size - 1))) + { + dst[dst_size + i] = src[i]; + i++; + } + dst[dst_size + i] = '\0'; + return (src_size + ((dst_size < size) ? dst_size : size)); +} diff --git a/libft/srcs/str/ft_strlen.c b/libft/srcs/str/ft_strlen.c new file mode 100644 index 00000000..9b65ad39 --- /dev/null +++ b/libft/srcs/str/ft_strlen.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:22 by jhalford #+# #+# */ +/* Updated: 2017/03/18 14:25:09 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + int i; + + i = 0; + if (!s) + return (0); + while (s[i]) + i++; + return (i); +} diff --git a/libft/srcs/str/ft_strlenchr.c b/libft/srcs/str/ft_strlenchr.c new file mode 100644 index 00000000..1ea82cfa --- /dev/null +++ b/libft/srcs/str/ft_strlenchr.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlenchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 16:10:54 by ariard #+# #+# */ +/* Updated: 2017/03/22 22:12:03 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlenchr(const char *s, char c) +{ + size_t i; + + i = 0; + while (*s && *s++ != c) + i++; + return (i); +} diff --git a/libft/srcs/str/ft_strmap.c b/libft/srcs/str/ft_strmap.c new file mode 100644 index 00000000..5c0353ae --- /dev/null +++ b/libft/srcs/str/ft_strmap.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:24 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmap(char const *s, char (*f)(char)) +{ + size_t size; + size_t i; + char *out; + + size = ft_strlen(s); + out = (char *)ft_malloc(sizeof(char) * (size + 1)); + if (out == NULL) + return (NULL); + i = -1; + while (++i < size) + out[i] = (*f)(s[i]); + return (out); +} diff --git a/libft/srcs/str/ft_strmapi.c b/libft/srcs/str/ft_strmapi.c new file mode 100644 index 00000000..7cc6d089 --- /dev/null +++ b/libft/srcs/str/ft_strmapi.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:28 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + size_t size; + size_t i; + char *out; + + size = ft_strlen(s); + out = (char *)ft_malloc(sizeof(char) * (size + 1)); + if (out == NULL) + return (NULL); + i = -1; + while (++i < size) + out[i] = (*f)(i, s[i]); + return (out); +} diff --git a/libft/srcs/str/ft_strncat.c b/libft/srcs/str/ft_strncat.c new file mode 100644 index 00000000..31ab2262 --- /dev/null +++ b/libft/srcs/str/ft_strncat.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:57:07 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:02:27 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strncat(char *s1, const char *s2, size_t n) +{ + size_t size; + size_t j; + + size = ft_strlen(s1); + j = 0; + while (s2[j] != '\0' && j < n) + { + s1[size + j] = s2[j]; + j++; + } + s1[size + j] = '\0'; + return (s1); +} diff --git a/libft/srcs/str/ft_strncmp.c b/libft/srcs/str/ft_strncmp.c new file mode 100644 index 00000000..57b55b5f --- /dev/null +++ b/libft/srcs/str/ft_strncmp.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:49:12 by jhalford #+# #+# */ +/* Updated: 2016/11/03 16:11:00 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + int i; + + i = 0; + while (*(s1 + i) && *(s1 + i) == *(s2 + i) && i < (int)n) + i++; + if (i < (int)n) + return (*((unsigned char*)s1 + i) - *((unsigned char*)s2 + i)); + else + return (0); +} diff --git a/libft/srcs/str/ft_strncpy.c b/libft/srcs/str/ft_strncpy.c new file mode 100644 index 00000000..85dd41c7 --- /dev/null +++ b/libft/srcs/str/ft_strncpy.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:48:21 by jhalford #+# #+# */ +/* Updated: 2016/08/07 10:48:25 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strncpy(char *dst, const char *src, size_t len) +{ + size_t i; + + i = 0; + while (src[i] != '\0' && i < len) + { + dst[i] = src[i]; + i++; + } + while (i < len) + { + dst[i] = '\0'; + i++; + } + return (dst); +} diff --git a/libft/srcs/str/ft_strndup.c b/libft/srcs/str/ft_strndup.c new file mode 100644 index 00000000..ee942d34 --- /dev/null +++ b/libft/srcs/str/ft_strndup.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strndup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:53:55 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:54:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strndup(const char *s1, size_t n) +{ + char *dup; + + if (!(dup = ft_memalloc(n))) + return (NULL); + ft_strncpy(dup, s1, n); + return (dup); +} diff --git a/libft/srcs/str/ft_strnequ.c b/libft/srcs/str/ft_strnequ.c new file mode 100644 index 00000000..5dfd6005 --- /dev/null +++ b/libft/srcs/str/ft_strnequ.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:32 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:02:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strnequ(char const *s1, char const *s2, size_t n) +{ + return (ft_strncmp(s1, s2, n) == 0); +} diff --git a/libft/srcs/str/ft_strnew.c b/libft/srcs/str/ft_strnew.c new file mode 100644 index 00000000..2e2ae1d6 --- /dev/null +++ b/libft/srcs/str/ft_strnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:34 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnew(size_t size) +{ + char *addr; + size_t i; + + addr = (char *)ft_malloc(size + 1); + if (addr == NULL) + return (NULL); + i = -1; + while (++i <= size) + addr[i] = '\0'; + return (addr); +} diff --git a/libft/srcs/str/ft_strnstr.c b/libft/srcs/str/ft_strnstr.c new file mode 100644 index 00000000..efa7e54f --- /dev/null +++ b/libft/srcs/str/ft_strnstr.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:36 by jhalford #+# #+# */ +/* Updated: 2016/11/03 16:34:42 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + int j; + + i = -1; + if (!*little) + return ((char *)big); + while (big[++i] && i < len) + { + j = 0; + while (big[i + j] == little[j] && i + j < len) + { + j++; + if (!little[j]) + return ((char *)big + i); + } + } + return (NULL); +} diff --git a/libft/srcs/str/ft_strrchr.c b/libft/srcs/str/ft_strrchr.c new file mode 100644 index 00000000..e41d4566 --- /dev/null +++ b/libft/srcs/str/ft_strrchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:38 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:08:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + char *a; + int i; + + a = (char *)s; + i = ft_strlen(a); + while (i >= 0) + { + if (a[i] == (char)c) + return (a + i); + i--; + } + return (NULL); +} diff --git a/libft/srcs/str/ft_strreplace.c b/libft/srcs/str/ft_strreplace.c new file mode 100644 index 00000000..7fb72527 --- /dev/null +++ b/libft/srcs/str/ft_strreplace.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strreplace.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/12 13:50:21 by jhalford #+# #+# */ +/* Updated: 2017/01/12 13:59:25 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strreplace(char **str, char *start, char *end, char *new) +{ + char *out; + + out = ft_strnew(ft_strlen(*str) - (end - start) + ft_strlen(new) + 1); + ft_strncpy(out, *str, start - *str); + ft_strcat(out, new); + ft_strcat(out, end + 1); + ft_strdel(str); + *str = out; + return (out); +} diff --git a/libft/srcs/str/ft_strrev.c b/libft/srcs/str/ft_strrev.c new file mode 100644 index 00000000..73884204 --- /dev/null +++ b/libft/srcs/str/ft_strrev.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrev.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:01:36 by jhalford #+# #+# */ +/* Updated: 2016/11/03 18:01:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrev(char *str) +{ + int len; + char tmp; + int i; + + i = 0; + len = 0; + while (str[len] != '\0') + len++; + while (i < len / 2) + { + tmp = str[len - (i + 1)]; + str[len - (i + 1)] = str[i]; + str[i] = tmp; + i++; + } + return (str); +} diff --git a/libft/srcs/str/ft_strsepjoin.c b/libft/srcs/str/ft_strsepjoin.c new file mode 100644 index 00000000..054e4061 --- /dev/null +++ b/libft/srcs/str/ft_strsepjoin.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsepjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:54:06 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:54:07 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strsepjoin(char **tab, char sep) +{ + char *join; + char **p; + int len; + + len = 0; + if (!(p = tab)) + return (NULL); + while (*p) + len += ft_strlen(*p++) + 1; + if (!(join = ft_strnew(len))) + return (NULL); + *join = 0; + p = tab; + while (*p) + { + ft_strcat(join, *p++); + ft_strcat(join, &sep); + } + join[len - 1] = 0; + return (join); +} diff --git a/libft/srcs/str/ft_strsplit.c b/libft/srcs/str/ft_strsplit.c new file mode 100644 index 00000000..049aa7ed --- /dev/null +++ b/libft/srcs/str/ft_strsplit.c @@ -0,0 +1,70 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsplit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:40 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_countwords(char const *s, char c) +{ + if (c == '\0') + return ((*s == '\0') ? 0 : 1); + while (*s == c) + s++; + if (*s == '\0') + return (0); + while (*s != c && *s != '\0') + s++; + return (1 + ft_countwords(s, c)); +} + +static int get_word_len(char const *str, char c) +{ + int i; + int len; + + i = 0; + len = 0; + while (str[i] == c) + i++; + while (str[i] != c && str[i] != '\0') + { + i++; + len++; + } + return (len); +} + +char **ft_strsplit(char const *s, char c) +{ + int i; + int j; + int k; + char **str2; + + if (!s || !(str2 = (char **)ft_malloc(sizeof(*str2) * + (ft_countwords(s, c) + 1)))) + return (NULL); + i = -1; + j = 0; + while (++i < ft_countwords(s, c)) + { + k = 0; + if (!(str2[i] = ft_strnew(get_word_len(&s[j], c) + 1))) + str2[i] = NULL; + while (s[j] == c) + j++; + while (s[j] != c && s[j]) + str2[i][k++] = s[j++]; + str2[i][k] = '\0'; + } + str2[i] = 0; + return (str2); +} diff --git a/libft/srcs/str/ft_strstr.c b/libft/srcs/str/ft_strstr.c new file mode 100644 index 00000000..bf8ab37a --- /dev/null +++ b/libft/srcs/str/ft_strstr.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:48:35 by jhalford #+# #+# */ +/* Updated: 2016/11/03 16:28:05 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strstr(const char *big, const char *little) +{ + int i; + int j; + char *a; + + a = (char *)big; + i = 0; + if (!*little) + return (a); + while (a[i]) + { + j = 0; + while (a[i + j] == little[j]) + { + j++; + if (!little[j]) + return (a + i); + } + i++; + } + return (NULL); +} diff --git a/libft/srcs/str/ft_strsub.c b/libft/srcs/str/ft_strsub.c new file mode 100644 index 00000000..0c3fb11b --- /dev/null +++ b/libft/srcs/str/ft_strsub.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:43 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strsub(char const *s, unsigned int start, size_t len) +{ + char *out; + size_t i; + + if (!(out = (char *)ft_malloc(sizeof(char) * (len + 1)))) + return (NULL); + i = -1; + while (++i < len) + out[i] = s[i + start]; + out[i] = '\0'; + return (out); +} diff --git a/libft/srcs/str/ft_strtok.c b/libft/srcs/str/ft_strtok.c new file mode 100644 index 00000000..dbb73ed9 --- /dev/null +++ b/libft/srcs/str/ft_strtok.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtok.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/07 18:08:31 by jhalford #+# #+# */ +/* Updated: 2017/03/22 22:23:33 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtok(char *s, const char *delim) +{ + static char *lasts; + int ch; + + if (s == 0) + s = lasts; + if ((ch = *s++) == 0) + return (0); + while (ft_strchr(delim, ch)) + if ((ch = *s++) == 0) + return (0); + --s; + lasts = s + ft_strcspn(s, delim); + if (*lasts != 0) + *lasts++ = 0; + return (s); +} diff --git a/libft/srcs/str/ft_strtrim.c b/libft/srcs/str/ft_strtrim.c new file mode 100644 index 00000000..22d17250 --- /dev/null +++ b/libft/srcs/str/ft_strtrim.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:45 by jhalford #+# #+# */ +/* Updated: 2016/11/04 13:11:59 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s) +{ + char *out; + char *last; + + while (*s && FT_WS(*s)) + s++; + out = ft_strdup(s); + last = out + ft_strlen(out) - 1; + while (last > out && FT_WS(*last)) + *last-- = 0; + return (out); +} diff --git a/libft/srcs/sys/open_new.c b/libft/srcs/sys/open_new.c new file mode 100644 index 00000000..2b5e24df --- /dev/null +++ b/libft/srcs/sys/open_new.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* open_new.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:56:58 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:57:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* +** If file already exists, create xxx(1) instead, etc up to 9 +*/ + +int open_new(char *filename, int oflag) +{ + char *fname; + int fd; + int i; + int len; + + len = ft_strlen(filename); + fname = ft_strnew(len + 4); + ft_strcpy(fname, filename); + i = 0; + while (i < 10 && (fd = open(fname, oflag | O_CREAT | O_EXCL, 0644)) < 0 + && errno == EEXIST) + { + fname[len] = '('; + fname[len + 1] = ++i + '0'; + fname[len + 2] = ')'; + } + ft_strdel(&fname); + return (fd); +} diff --git a/libft/srcs/time/epoch.c b/libft/srcs/time/epoch.c new file mode 100644 index 00000000..5e4deba4 --- /dev/null +++ b/libft/srcs/time/epoch.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* epoch.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:58:42 by jhalford #+# #+# */ +/* Updated: 2017/10/08 13:15:50 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "mytime.h" + +uint64_t epoch_micro(void) +{ + struct timeval tv; + + if (gettimeofday(&tv, NULL)) + return (0); + return (tv.tv_sec * 1000000 + tv.tv_usec); +} + +double time_milli(void) +{ + struct timeval tv; + + if (gettimeofday(&tv, NULL)) + return (0); + return ((double)(tv.tv_sec * 1000. + (double)tv.tv_usec / 1000.)); +}