From cd1882c3ccad081a3034e2904ed2fa1cd8a72eed Mon Sep 17 00:00:00 2001 From: Leo Firmin Date: Mon, 27 Oct 2025 23:10:48 +0100 Subject: [PATCH] github to gitea --- Makefile | 46 ---------- cub3d | Bin 59192 -> 0 bytes cub3d.h | 68 ++++++++++++++ gnl/Makefile | 60 ------------- gnl/gnl.a | Bin 6046 -> 0 bytes gnl/include/get_next_line.h | 32 ------- gnl/obj/get_next_line.o | Bin 3264 -> 0 bytes gnl/obj/get_next_line_utils.o | Bin 2408 -> 0 bytes gnl/readme.md | 41 --------- gnl/srcs/get_next_line.c | 102 --------------------- gnl/srcs/get_next_line_utils.c | 106 ---------------------- includes/cub.h | 57 ------------ includes/parsing.h | 89 ------------------ input.c | 46 ++++++++++ libft/Makefile | 68 -------------- libft/Readme.md | 55 ------------ libft/include/libft.h | 93 ------------------- libft/libft.a | Bin 135664 -> 0 bytes libft/obj/ft_arrcpy.o | Bin 2968 -> 0 bytes libft/obj/ft_atoi.o | Bin 2880 -> 0 bytes libft/obj/ft_atoll.o | Bin 2832 -> 0 bytes libft/obj/ft_bzero.o | Bin 2512 -> 0 bytes libft/obj/ft_calloc.o | Bin 2944 -> 0 bytes libft/obj/ft_isalnum.o | Bin 2216 -> 0 bytes libft/obj/ft_isalpha.o | Bin 2192 -> 0 bytes libft/obj/ft_isascii.o | Bin 2152 -> 0 bytes libft/obj/ft_isdigit.o | Bin 2152 -> 0 bytes libft/obj/ft_isprint.o | Bin 2192 -> 0 bytes libft/obj/ft_itoa.o | Bin 3400 -> 0 bytes libft/obj/ft_lstadd_back_bonus.o | Bin 2736 -> 0 bytes libft/obj/ft_lstadd_front_bonus.o | Bin 2480 -> 0 bytes libft/obj/ft_lstclear_bonus.o | Bin 2752 -> 0 bytes libft/obj/ft_lstdelone_bonus.o | Bin 2616 -> 0 bytes libft/obj/ft_lstiter_bonus.o | Bin 2512 -> 0 bytes libft/obj/ft_lstlast_bonus.o | Bin 2432 -> 0 bytes libft/obj/ft_lstmap_bonus.o | Bin 3264 -> 0 bytes libft/obj/ft_lstnew_bonus.o | Bin 2632 -> 0 bytes libft/obj/ft_lstsize_bonus.o | Bin 2552 -> 0 bytes libft/obj/ft_memchr.o | Bin 2616 -> 0 bytes libft/obj/ft_memcmp.o | Bin 2768 -> 0 bytes libft/obj/ft_memcpy.o | Bin 2736 -> 0 bytes libft/obj/ft_memmove.o | Bin 2904 -> 0 bytes libft/obj/ft_memset.o | Bin 2608 -> 0 bytes libft/obj/ft_putchar_fd.o | Bin 2344 -> 0 bytes libft/obj/ft_putendl_fd.o | Bin 2440 -> 0 bytes libft/obj/ft_putnbr_fd.o | Bin 2672 -> 0 bytes libft/obj/ft_putstr_fd.o | Bin 2472 -> 0 bytes libft/obj/ft_split.o | Bin 5832 -> 0 bytes libft/obj/ft_straddchar.o | Bin 2784 -> 0 bytes libft/obj/ft_strchr.o | Bin 2376 -> 0 bytes libft/obj/ft_strcmp.o | Bin 2448 -> 0 bytes libft/obj/ft_strcpy.o | Bin 2504 -> 0 bytes libft/obj/ft_strdup.o | Bin 2696 -> 0 bytes libft/obj/ft_striteri.o | Bin 2448 -> 0 bytes libft/obj/ft_strjoin.o | Bin 2992 -> 0 bytes libft/obj/ft_strlcat.o | Bin 3024 -> 0 bytes libft/obj/ft_strlcpy.o | Bin 2976 -> 0 bytes libft/obj/ft_strlen.o | Bin 2432 -> 0 bytes libft/obj/ft_strmapi.o | Bin 2832 -> 0 bytes libft/obj/ft_strncmp.o | Bin 2720 -> 0 bytes libft/obj/ft_strnstr.o | Bin 2936 -> 0 bytes libft/obj/ft_strrchr.o | Bin 2752 -> 0 bytes libft/obj/ft_strtrim.o | Bin 4320 -> 0 bytes libft/obj/ft_substr.o | Bin 3320 -> 0 bytes libft/obj/ft_tolower.o | Bin 2168 -> 0 bytes libft/obj/ft_toupper.o | Bin 2168 -> 0 bytes libft/srcs/ft_arrcpy.c | 41 --------- libft/srcs/ft_atoi.c | 40 --------- libft/srcs/ft_atoll.c | 38 -------- libft/srcs/ft_bzero.c | 24 ----- libft/srcs/ft_calloc.c | 31 ------- libft/srcs/ft_isalnum.c | 19 ---- libft/srcs/ft_isalpha.c | 19 ---- libft/srcs/ft_isascii.c | 19 ---- libft/srcs/ft_isdigit.c | 19 ---- libft/srcs/ft_isprint.c | 19 ---- libft/srcs/ft_itoa.c | 51 ----------- libft/srcs/ft_lstadd_back_bonus.c | 27 ------ libft/srcs/ft_lstadd_front_bonus.c | 21 ----- libft/srcs/ft_lstclear_bonus.c | 28 ------ libft/srcs/ft_lstdelone_bonus.c | 20 ----- libft/srcs/ft_lstiter_bonus.c | 23 ----- libft/srcs/ft_lstlast_bonus.c | 23 ----- libft/srcs/ft_lstmap_bonus.c | 41 --------- libft/srcs/ft_lstnew_bonus.c | 24 ----- libft/srcs/ft_lstsize_bonus.c | 27 ------ libft/srcs/ft_memchr.c | 26 ------ libft/srcs/ft_memcmp.c | 30 ------- libft/srcs/ft_memcpy.c | 32 ------- libft/srcs/ft_memmove.c | 39 -------- libft/srcs/ft_memset.c | 24 ----- libft/srcs/ft_putchar_fd.c | 17 ---- libft/srcs/ft_putendl_fd.c | 18 ---- libft/srcs/ft_putnbr_fd.c | 31 ------- libft/srcs/ft_putstr_fd.c | 24 ----- libft/srcs/ft_split.c | 95 -------------------- libft/srcs/ft_straddchar.c | 37 -------- libft/srcs/ft_strchr.c | 26 ------ libft/srcs/ft_strcmp.c | 22 ----- libft/srcs/ft_strcpy.c | 27 ------ libft/srcs/ft_strdup.c | 34 ------- libft/srcs/ft_striteri.c | 27 ------ libft/srcs/ft_strjoin.c | 34 ------- libft/srcs/ft_strlcat.c | 32 ------- libft/srcs/ft_strlcpy.c | 34 ------- libft/srcs/ft_strlen.c | 22 ----- libft/srcs/ft_strmapi.c | 32 ------- libft/srcs/ft_strncmp.c | 32 ------- libft/srcs/ft_strnstr.c | 36 -------- libft/srcs/ft_strrchr.c | 35 -------- libft/srcs/ft_strtrim.c | 68 -------------- libft/srcs/ft_substr.c | 34 ------- libft/srcs/ft_tolower.c | 19 ---- libft/srcs/ft_toupper.c | 19 ---- main.c | 69 ++++++++++++++ render.c | 140 +++++++++++++++++++++++++++++ srcs/main.c | 61 ------------- srcs/parsing/check_colors.c | 35 -------- srcs/parsing/check_file.c | 40 --------- srcs/parsing/check_map.c | 123 ------------------------- srcs/parsing/check_map_2.c | 54 ----------- srcs/parsing/get_map.c | 94 ------------------- srcs/parsing/get_textures.c | 91 ------------------- srcs/parsing/init_parsing.c | 50 ----------- srcs/parsing/line_detect.c | 104 --------------------- srcs/parsing/parsing.c | 33 ------- srcs/utils/init.c | 35 -------- srcs/utils/utils.c | 60 ------------- test | 0 test.cub | 29 ------ utils.c | 15 ++++ 131 files changed, 338 insertions(+), 3018 deletions(-) delete mode 100644 Makefile delete mode 100755 cub3d create mode 100644 cub3d.h delete mode 100644 gnl/Makefile delete mode 100644 gnl/gnl.a delete mode 100644 gnl/include/get_next_line.h delete mode 100644 gnl/obj/get_next_line.o delete mode 100644 gnl/obj/get_next_line_utils.o delete mode 100644 gnl/readme.md delete mode 100644 gnl/srcs/get_next_line.c delete mode 100644 gnl/srcs/get_next_line_utils.c delete mode 100644 includes/cub.h delete mode 100644 includes/parsing.h create mode 100644 input.c delete mode 100644 libft/Makefile delete mode 100644 libft/Readme.md delete mode 100644 libft/include/libft.h delete mode 100644 libft/libft.a delete mode 100644 libft/obj/ft_arrcpy.o delete mode 100644 libft/obj/ft_atoi.o delete mode 100644 libft/obj/ft_atoll.o delete mode 100644 libft/obj/ft_bzero.o delete mode 100644 libft/obj/ft_calloc.o delete mode 100644 libft/obj/ft_isalnum.o delete mode 100644 libft/obj/ft_isalpha.o delete mode 100644 libft/obj/ft_isascii.o delete mode 100644 libft/obj/ft_isdigit.o delete mode 100644 libft/obj/ft_isprint.o delete mode 100644 libft/obj/ft_itoa.o delete mode 100644 libft/obj/ft_lstadd_back_bonus.o delete mode 100644 libft/obj/ft_lstadd_front_bonus.o delete mode 100644 libft/obj/ft_lstclear_bonus.o delete mode 100644 libft/obj/ft_lstdelone_bonus.o delete mode 100644 libft/obj/ft_lstiter_bonus.o delete mode 100644 libft/obj/ft_lstlast_bonus.o delete mode 100644 libft/obj/ft_lstmap_bonus.o delete mode 100644 libft/obj/ft_lstnew_bonus.o delete mode 100644 libft/obj/ft_lstsize_bonus.o delete mode 100644 libft/obj/ft_memchr.o delete mode 100644 libft/obj/ft_memcmp.o delete mode 100644 libft/obj/ft_memcpy.o delete mode 100644 libft/obj/ft_memmove.o delete mode 100644 libft/obj/ft_memset.o delete mode 100644 libft/obj/ft_putchar_fd.o delete mode 100644 libft/obj/ft_putendl_fd.o delete mode 100644 libft/obj/ft_putnbr_fd.o delete mode 100644 libft/obj/ft_putstr_fd.o delete mode 100644 libft/obj/ft_split.o delete mode 100644 libft/obj/ft_straddchar.o delete mode 100644 libft/obj/ft_strchr.o delete mode 100644 libft/obj/ft_strcmp.o delete mode 100644 libft/obj/ft_strcpy.o delete mode 100644 libft/obj/ft_strdup.o delete mode 100644 libft/obj/ft_striteri.o delete mode 100644 libft/obj/ft_strjoin.o delete mode 100644 libft/obj/ft_strlcat.o delete mode 100644 libft/obj/ft_strlcpy.o delete mode 100644 libft/obj/ft_strlen.o delete mode 100644 libft/obj/ft_strmapi.o delete mode 100644 libft/obj/ft_strncmp.o delete mode 100644 libft/obj/ft_strnstr.o delete mode 100644 libft/obj/ft_strrchr.o delete mode 100644 libft/obj/ft_strtrim.o delete mode 100644 libft/obj/ft_substr.o delete mode 100644 libft/obj/ft_tolower.o delete mode 100644 libft/obj/ft_toupper.o delete mode 100644 libft/srcs/ft_arrcpy.c delete mode 100644 libft/srcs/ft_atoi.c delete mode 100644 libft/srcs/ft_atoll.c delete mode 100644 libft/srcs/ft_bzero.c delete mode 100644 libft/srcs/ft_calloc.c delete mode 100644 libft/srcs/ft_isalnum.c delete mode 100644 libft/srcs/ft_isalpha.c delete mode 100644 libft/srcs/ft_isascii.c delete mode 100644 libft/srcs/ft_isdigit.c delete mode 100644 libft/srcs/ft_isprint.c delete mode 100644 libft/srcs/ft_itoa.c delete mode 100644 libft/srcs/ft_lstadd_back_bonus.c delete mode 100644 libft/srcs/ft_lstadd_front_bonus.c delete mode 100644 libft/srcs/ft_lstclear_bonus.c delete mode 100644 libft/srcs/ft_lstdelone_bonus.c delete mode 100644 libft/srcs/ft_lstiter_bonus.c delete mode 100644 libft/srcs/ft_lstlast_bonus.c delete mode 100644 libft/srcs/ft_lstmap_bonus.c delete mode 100644 libft/srcs/ft_lstnew_bonus.c delete mode 100644 libft/srcs/ft_lstsize_bonus.c delete mode 100644 libft/srcs/ft_memchr.c delete mode 100644 libft/srcs/ft_memcmp.c delete mode 100644 libft/srcs/ft_memcpy.c delete mode 100644 libft/srcs/ft_memmove.c delete mode 100644 libft/srcs/ft_memset.c delete mode 100644 libft/srcs/ft_putchar_fd.c delete mode 100644 libft/srcs/ft_putendl_fd.c delete mode 100644 libft/srcs/ft_putnbr_fd.c delete mode 100644 libft/srcs/ft_putstr_fd.c delete mode 100644 libft/srcs/ft_split.c delete mode 100644 libft/srcs/ft_straddchar.c delete mode 100644 libft/srcs/ft_strchr.c delete mode 100644 libft/srcs/ft_strcmp.c delete mode 100644 libft/srcs/ft_strcpy.c delete mode 100644 libft/srcs/ft_strdup.c delete mode 100644 libft/srcs/ft_striteri.c delete mode 100644 libft/srcs/ft_strjoin.c delete mode 100644 libft/srcs/ft_strlcat.c delete mode 100644 libft/srcs/ft_strlcpy.c delete mode 100644 libft/srcs/ft_strlen.c delete mode 100644 libft/srcs/ft_strmapi.c delete mode 100644 libft/srcs/ft_strncmp.c delete mode 100644 libft/srcs/ft_strnstr.c delete mode 100644 libft/srcs/ft_strrchr.c delete mode 100644 libft/srcs/ft_strtrim.c delete mode 100644 libft/srcs/ft_substr.c delete mode 100644 libft/srcs/ft_tolower.c delete mode 100644 libft/srcs/ft_toupper.c create mode 100644 main.c create mode 100644 render.c delete mode 100644 srcs/main.c delete mode 100644 srcs/parsing/check_colors.c delete mode 100644 srcs/parsing/check_file.c delete mode 100644 srcs/parsing/check_map.c delete mode 100644 srcs/parsing/check_map_2.c delete mode 100644 srcs/parsing/get_map.c delete mode 100644 srcs/parsing/get_textures.c delete mode 100644 srcs/parsing/init_parsing.c delete mode 100644 srcs/parsing/line_detect.c delete mode 100644 srcs/parsing/parsing.c delete mode 100644 srcs/utils/init.c delete mode 100644 srcs/utils/utils.c create mode 100644 test delete mode 100644 test.cub create mode 100644 utils.c diff --git a/Makefile b/Makefile deleted file mode 100644 index 2558b6d..0000000 --- a/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -CC = gcc -CFLAGS = -fsanitize=address -g -Wall -Wextra -Werror -NAME = cub3d - -SRCDIR = srcs -INCDIR = includes -LIBFT = libft/libft.a -GNL = gnl/gnl.a - -SRCS = $(SRCDIR)/main.c \ - $(SRCDIR)/parsing/parsing.c \ - $(SRCDIR)/parsing/check_file.c \ - $(SRCDIR)/parsing/init_parsing.c \ - $(SRCDIR)/parsing/get_map.c \ - $(SRCDIR)/parsing/line_detect.c \ - $(SRCDIR)/parsing/get_textures.c \ - $(SRCDIR)/parsing/check_colors.c \ - $(SRCDIR)/utils/utils.c \ - $(SRCDIR)/utils/init.c \ - $(SRCDIR)/parsing/check_map.c \ - $(SRCDIR)/parsing/check_map_2.c \ - -INCS = $(INCDIR)/parsing.h \ - $(INCDIR)/cub.h \ - -all: $(NAME) - -$(NAME): $(SRCS) $(INCS) - @$(MAKE) -s -C libft - @$(MAKE) -s -C gnl - $(CC) -g -I$(INCDIR) $(SRCS) -o $(NAME) $(LIBFT) $(GNL) - -clean: - rm -f $(NAME) - @make clean -s -C libft - @make clean -s -C gnl - -clean1: - rm -f $(NAME) - -fclean: clean1 - @make fclean -s -C libft - @make fclean -s -C gnl -re: fclean all - -.PHONY: all clean fclean re clean1 diff --git a/cub3d b/cub3d deleted file mode 100755 index d6a801ce99f5bf23ff6f2ea6fab8c53091491ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59192 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 diff --git a/cub3d.h b/cub3d.h new file mode 100644 index 0000000..b94baf8 --- /dev/null +++ b/cub3d.h @@ -0,0 +1,68 @@ +// cub3d.h +#ifndef CUB3D_H +# define CUB3D_H +# include +# include +# include +# include "mlx.h" + +# define WIN_W 1280 +# define WIN_H 720 + +typedef struct s_img { + void *ptr; + char *addr; + int bpp; + int line_len; + int endian; +} t_img; + +typedef struct s_tex { + t_img img; + int w, h; +} t_tex; + +typedef struct s_keys { + bool w, a, s, d, left, right; +} t_keys; + +typedef struct s_app { + void *mlx; + void *win; + t_img frame; + // map + char **map; // rectangle, accès map[y][x] + int map_w, map_h; + + // player + double px, py; // position + double dirx, diry; // direction + double planex, planey; // caméra (FOV ~66° => plane longueur ~0.66) + + // movement + double move_speed; + double rot_speed; + + // textures (N,E,S,W) supposées chargées via parsing + t_tex tex[4]; + + // zbuffer pour sprites/doors bonus + double *zbuf; + + t_keys keys; +} t_app; + +// utils +void put_pixel(t_img *img, int x, int y, int color); +int get_tex_color(t_tex *t, int tx, int ty); + +// hooks +int key_press(int keycode, t_app *a); +int key_release(int keycode, t_app *a); +int close_win(t_app *a); + +// loop +int update(t_app *a); +void render_frame(t_app *a); + +#endif diff --git a/gnl/Makefile b/gnl/Makefile deleted file mode 100644 index c166fae..0000000 --- a/gnl/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -# **************************************************************************** # -# # -# ::: :::::::: # -# Makefile :+: :+: :+: # -# +:+ +:+ +:+ # -# By: lfirmin lfirmim@student.42.fr> +#+ +:+ +#+ # -# +#+#+#+#+#+ +#+ # -# Created: 2024/08/12 07:07:31 by lfirmin #+# #+# # -# Updated: 2024/08/12 09:15:05 by lfirmin ### ########.fr # -# # -# **************************************************************************** # - -NAME = gnl.a -SRCS_DIR = srcs/ -INCS_DIR = includes/ -OBJ_DIR = obj/ - -SRC = get_next_line.c get_next_line_utils.c -CC = cc -CFLAGS = -Wall -Wextra -Werror -fPIE -INCLUDE = -I $(INCS_DIR) -SRCS = $(addprefix $(SRCS_DIR), $(SRC)) -OBJ = $(addprefix $(OBJ_DIR), $(SRC:.c=.o)) - -# Colors -GREEN = \033[0;32m -YELLOW = \033[0;33m -RESET = \033[0m -WHITE = \033[0;97m - -# Loading animation -LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ - -all: $(NAME) - -$(NAME): $(OBJ) - @printf "$(YELLOW)Compiling get_next_line, Please wait...$(RESET)" - @for char in $(LOADING_CHARS); do \ - printf "\r$(YELLOW)Compiling get_next_line, Please wait... $$char$(RESET)"; \ - sleep 0.1; \ - done - @ar rc $(NAME) $(OBJ) - @ranlib $(NAME) - @printf "\r$(GREEN)fine ! $(WHITE)get_next_line compiled successfully ! $(RESET)\n" - -$(OBJ_DIR)%.o: $(SRCS_DIR)%.c - @mkdir -p $(OBJ_DIR) - @$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ - -clean: - @rm -rf $(OBJ_DIR) - @printf "$(WHITE)Clean process completed for $(GREEN)get_next_line.$(RESET)\n" - -fclean: clean - @rm -f $(NAME) - @printf "$(WHITE)Full clean process completed for $(GREEN)get_next_line.$(RESET)\n" - -re: fclean all - -.PHONY: all clean fclean re diff --git a/gnl/gnl.a b/gnl/gnl.a deleted file mode 100644 index ab25040938e94c30b2741700c7f69dc281cef326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6046 zcmb_gZ-`@86~9TQ+w63v8A~gImW@k6)Ha)$9oAiUtr7e52|I$;5fPV6CX?CSHj`{K zN!f~_qnXuBLtzm_Q45P7bQM2TC|DK8X;+(3Dn!^15f&O`N)rflO6SA0isSFxdrs!& zZlVM08Q#11{m!3z&bjx!oHHLhl`5pqJv@3O+D~!o(ai08G&&idVu`s?rPKjj|5j@J zUH3YhDJFB7i^XL2d@iFFi^=68)+;2>=Cb^>P`Z#j%k#(b=W{&GW^xRd=Aon15!Xe_ z!$H%jX+h^k`@Be&is!S-vHX$IejLcKsEV@IcsvDLZJr@hmk2?hcP+)zM0toEJ+ zRcig<-aMhF2{i`ES-<+aU+KoHAm0Eu7KC;*THEw>@Yx}iwix>4;#DUrNKFyvX@mjgv zehlIJRqeEX)^@61bMK*2Ztl})SQ~|I)!XrFxGH~)pSivmiyT@dvug2*l|R2)YWvmM zR^7WvJ5VX#RFT!cU}mCi|F$g|t9m!V-Hlut2e+5ipNY~Xa=vqgZnzK?GLxRU`N~L` z5<+>NAoy8pllHct&*YbkdJFzH5I?R`+a#D207$kQW}$L>jou@JR(9aOc17PF+}+)U zD`d;cg~aby%Ug)VXx6+fzc$m3tc`^y*DLRgUiMy#tkPCPpE)C8GXK4Gu%7W=yB3I; zpxg>gYWnGh|It}1 z9VWGX`8#GzwIXXuuVWT=4=D%r$|KNB|<5 zcS>_{v-!b)5?k}X#{9!JKXkv=7gcw>0boSEwd>*!0thJmmT4B5B%)mo;x7@@k4mqF z=}}w(SQ3Iun!b;_mKOsu0uO;Rh(eYf;a|su-U^o<1uzJIdI;_h!D~bC!$a_&0>8)d zU+)>PzYdY#7=phKI1y#yPF(-O`#^L*fgs8#WK#m;w!*!krU`Cko@f68t{7nnDGNI(M?}?=5-K5&UIK-uClt3%|>fmm}r+^IkFvBAkBe#r~TXK4#%T z{1y?BJbm&+{$mzy=O+poA~Hv1mQaExf+yJTITvR?!jU^dqZ4->93LA|u|g)BiWO0p zsaQI{w3Nve6&?zyG=TZ#WnF`rx+``%M&(yu1r?i5r5`U{xV31L$}X167c;TXet!0$ z~iK@aKX$g4-rl7 z^EOcOVal+3chPsk*RmueIK2}zj}vIo&w2e1Sr|=4PsWsm*`f_MAZCi5$o|IYU*I$e ztVI7}4>1!r{uclb%KteQ^jV+sPmt(K{+|FAI=!36u!5^c&$A%u5y|NK-v!V0o#cIX z>IbYq!=Uy1njN%C|Eu?znvNeg9o7DOpSE?l6Xcvqs8Q@B*RBbwU8|)o)$XW?(aY2W z{!4Fg6?FZS$FX!(eP++PJKz4K9Bhq|fta=Q;e8i=6HSNN2AYPuPt~7+8*-i%=JBgE8QsVN8O{71)s~NXh$!AHi)`{^p3qb*e%@= z^_A_PgQjksYF_uG*OsOhUZ!WdCfhBVBHNJADd=_@CcT=$>9s5Q=$Y$%y$+hay0=L_ z*1Z-Dma8`~H;qO0rJ8pmuyL#3*jC+z_WAuon30x`eBF$!nLcUt0lk0@VABME{$*xU z2e7FF*zD91fM`?0h^~dTKWwx$$lA4;&Cm>D{j)aF(k5D+mrV|EW|_;0a2jCs|LbM` z2G@GMOz_oSuOhw7w9U_Jc3&^^xXlkP_Vm9&IOr<8iWsT5plR#*N}_Rp114#7(nZm%1~T13QV5&fLd z_dUGD&vOngd0laEH?Lw}@)|xcu=J#V3z}-v{DaW?H{k76l%~$@6^(;RMgDK#tpy{8 zc3T5|RtA+LALrl2UpUtJIP_2wBh304)x3nhD|Ny#?w&o;rL*EvoNL4@%s7aV_KMC3 zk<=)|YP6^JS)(0?EjK2zf7S7uFd|oW* +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/07/21 19:32:47 by abelghou #+# #+# */ -/* Updated: 2024/07/23 20:47:15 by abelghou ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#ifndef GET_NEXT_LINE_H -# define GET_NEXT_LINE_H - -# ifndef BUFFER_SIZE -# define BUFFER_SIZE 1000 -# endif - -# include -# include -# include -# include - -char *ft_substr(char const *s, unsigned int start, size_t len); -int ft_strlen_g(const char *str); -char *ft_strchr_gnl(const char *s, int i); -char *ft_strdup_g(const char *s); -char *ft_strjoin(char const *s1, char const *s2); -char *get_next_line(int fd); - -#endif \ No newline at end of file diff --git a/gnl/obj/get_next_line.o b/gnl/obj/get_next_line.o deleted file mode 100644 index f050108fb207cf65495870fd4a4beab467c1760c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3264 zcmbtV|7#pY6ra6I(`%ZzQB(vih9dZb?V4*v5&UwZtMfzZ59<9QmUHiJ^QGSHrF(lN z3QH@ONY|wh1kt}hEBHf&g5NL(D~$+3e(;9~fgYl;fkIQv4-tj)z1exm+>nES@0gi4 zpZ9rh-n^NcJ#SCEm@y1SVz6h}?u<~zmJjXf1)&z$FffZe`jfYBjz{5EJKSRCrH8=C zSu;DEwc>}?!3ZbSF|MwS?n-Qn%9!_0;KI9~PoN#HGjslD(9+!|-y~GA$X*9)*IXC@>rPcaC8q^U zeq#|kXs|1&Oy$)2^?@7~1nWGC@FnGtc8{PZa`hsy$xwlC^0r6$}j1TgP{4A+c$w9mGn{ ze^aIxuEwo3URmXj6qRzMrR}NT<7udlxx~ae>B9OYm7BW$Le9V)Y88SILW<><7qrGI zHOHG8JLme%nT9u(KVgkq`Q!N~Tf%yh-7VS1JFhTfZq&Gc_+V}kuG0g6V?%iiuh(;T zjJ}t7eq=EFr~wpVdrDZLQ|+05&@Ak4Nc&OMo;@P`$yFbJ1z>>P?&|n401PJnWx|9Z zQSg*A@GE4*l!>)KJqgW#NF@?m z!Q(#o(LVSmfZwI$FU}0GU;6NW>Vw}0I0{zcAhdts|A2A?K@hAc){=01fl-LRozlC{ zrm*0fpcB6+apDvHy24lEI~t$jU(j%h^Fg0DpZDQ^(TD$)#;0|E({Nh%cO?!!X@uWW zaCKkw3DxT`DDR_Q=Mjk$pYl1Y@bTW!y5A{$^dbBQg|FuMmx3Qw_;jW8eD1}dAc*6q zp5ot9@L>hdz_$nm`S|1!{|NoW!%6bv^gw6rToo$!Lp`%N8}dF0Fk*`d+Hhen16 znB}`Q#|qrJfLWDBz3zGegNg4{04O(`Y%(Y{TjgfpGi$=aVag3k9#BfP8PB!KPUWrE ztY8KHnZ}GK)ylMAn(}JQ@*06_z4UVNcryShvud?-^^#Mq!rMC~xz*NeiS(N5f!=KR zLCNu|rDo9Z-QFc-%IH6VfU`WZo-p6y;ell3d8D)S(?B|oc$P>}&lK?jb|7Ufxc-)+FWwAVN_*WjNUbT#}Lz&VV5O9e4q%?=Uaec4kuFcPEY>Y_5~M7gyVk#^>G9h`An|= zu!5mVel$7?rczh+4M`*U5%=rVe^!=>U`GCPJ4mYN`@ahCUiF`rL@xcY{s@sj)&DGD l*@nvqm0*$aOvZOApeT9{Q8eOZ9L))+0aGgPx+_ z`J0R}R1axi5Bxq+KRJin9-Shbe8x9J+yFRWI-(Ojst@-rmx;Rn26`eojOwYr+E+iW z^8G+xqp=!1!FMeFiwk84>_h6{b7l_o;I;xM4=`WY!{po9Y$oG=E0wW$AA+W!r+V;9 zZR4n^sZ0CV2~n3`CValopZ4f6Vl2+AAM^Ik0}|0=I4GpYNes1Nmo3peVEhPfV6?pz zm`dY?Ch9G+MpHow&JB$uV#JAPd6N7JWdlEz$t|jgHkXpJb(=OS7JGwqrDbZHQnLq{)EO z%N&By>X9@@Q@yjQDs`a3-*||eJ7%KmHz3z;adG+zVEM~4C@<6 z!Cpt|tx`Fd0_~XrMtp!F`q=;@Hoz$9!2mLQ4BmL2{WNQjGEihk^--}7v;NLX#H>V| z{LDFkcUE`>5yK1-)r}*vzUeuxS268|vt7Aib-Fukr?UL4R@Ig-F0Xpbdx=~?T0oQ! z-XzNIqVm|;2g?WW1AQDYd{F+x<;C-hpB7#^w@~;4BDn7|;vmoABK>XVX1VVo4ss0_ z=`S?r`5z(}`P~7bu5pC1eRS##cot)*E1(0*^tXFit=}0uRPZVO+w-hi6fO8C?-}2{ir$ z@4;=Od@uSy96yy3|0#oK^2yKaYBZs+~>jw4L-YRA}iY@#`B*V0~n zef?tBZJ5`HX4^MfMq_IWegWGecFVhNNZYm?u=!!uRioKyv@FtU*mm0_+m>rM(12m@ zIF{kLJ9bwyi3aDpjZM%uTd4mJ!Ou$ZK82na|BFB5eB#>YD25@H`5R@v8e0ij%@xnT zdzg#wN?xiDaO6NZ&Va_d!gmDaQLe~Y&{zZiUb1piocmN31Y7nm^-2cIh92hnmOhy$ z_g$WUJ^PNLPv-w91BI6TOV|P9e)HcJ^Y4m4oF6%s`Eq_8u;P_j8`K^=b6F7=BKyL8 alzji+0VZQufLPuUO%25!^N^DK`Tqj1+w!*n diff --git a/gnl/readme.md b/gnl/readme.md deleted file mode 100644 index 8e0d256..0000000 --- a/gnl/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -# get_next_line - -A function that reads a line from a file descriptor. - -## 💡 About -The get_next_line project is a programming function that reads a line ending with a newline character from a file descriptor. When calling the function in a loop, it will then allow you to read the text file pointed to by the file descriptor, one line at a time until the end of the file. - -## 🛠️ Function Prototype -```c -char *get_next_line(int fd); -``` -## 📋 Usage -```c -#include "get_next_line.h" -#include - -int main(void) -{ - int fd; - char *line; - - fd = open("test.txt", O_RDONLY); - while ((line = get_next_line(fd)) != NULL) - { - printf("%s", line); - free(line); - } - close(fd); - return (0); -} -``` - -## ⚠️ Return Value -* The line that was read when successful -* NULL if there is nothing else to read or if an error occurred - -## 📊 Expected Behavior -* Repeated calls to get_next_line() should let you read the text file pointed to by the file descriptor, one line at a time -* The function should return the line that was read -* If there is nothing else to read or if an error occurred, it should return NULL -* The returned line should include the terminating \n character, except if the end of file was reached and does not end with a \n character \ No newline at end of file diff --git a/gnl/srcs/get_next_line.c b/gnl/srcs/get_next_line.c deleted file mode 100644 index 24fb53f..0000000 --- a/gnl/srcs/get_next_line.c +++ /dev/null @@ -1,102 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* get_next_line.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: abelghou +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/07/17 21:31:24 by abelghou #+# #+# */ -/* Updated: 2024/07/24 18:17:55 by abelghou ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "../include/get_next_line.h" - -static char *sort_and_store(int fd, char *buf, char *backup) -{ - int read_line; - char *char_temp; - - read_line = 1; - while (read_line != 0) - { - read_line = read(fd, buf, BUFFER_SIZE); - if (read_line == -1) - return (0); - else if (read_line == 0) - break ; - buf[read_line] = '\0'; - if (!backup) - backup = ft_strdup_g(""); - if (!backup) - return (NULL); - char_temp = backup; - backup = ft_strjoin(char_temp, buf); - free(char_temp); - char_temp = NULL; - if (ft_strchr_gnl (buf, '\n')) - break ; - } - return (backup); -} - -static char *extract(char *line) -{ - size_t count; - char *backup; - - count = 0; - while (line[count] != '\n' && line[count] != '\0') - count++; - if (line[count] == '\0' || line[1] == '\0') - return (0); - backup = ft_substr(line, count + 1, ft_strlen_g(line) - count); - if (!backup) - return (NULL); - if (*backup == '\0') - { - free (backup); - backup = NULL; - } - line[count + 1] = '\0'; - return (backup); -} - -char *get_next_line(int fd) -{ - char *line; - char *buf; - char *temp; - static char *backup; - - if (fd < 0 || BUFFER_SIZE <= 0) - return (free(backup), backup = NULL, NULL); - buf = (char *)malloc(sizeof(char) * (BUFFER_SIZE + 1)); - if (!buf) - return (free(backup), backup = NULL, NULL); - line = sort_and_store(fd, buf, backup); - free(buf); - buf = NULL; - if (!line) - return (free(backup), backup = NULL, NULL); - backup = extract(line); - temp = ft_strdup_g(line); - free(line); - if (!temp) - return (free(backup), backup = NULL, NULL); - return (temp); -} - -// int main() -// { -// int fd; -// char *line; -// fd = open("fd.txt", O_RDONLY); -// while((line = get_next_line(fd)) != NULL) -// { -// printf("%s", line); -// free(line); -// } -// line = get_next_line(fd); -// close(fd); -// } \ No newline at end of file diff --git a/gnl/srcs/get_next_line_utils.c b/gnl/srcs/get_next_line_utils.c deleted file mode 100644 index 5ba6d2d..0000000 --- a/gnl/srcs/get_next_line_utils.c +++ /dev/null @@ -1,106 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* get_next_line_utils.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: abelghou +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/07/21 19:34:18 by abelghou #+# #+# */ -/* Updated: 2024/07/23 20:06:41 by abelghou ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "../include/get_next_line.h" - -char *ft_substr(char const *s, unsigned int start, size_t len) -{ - size_t i; - size_t j; - char *str; - - str = (char *)malloc(sizeof(*s) * (len + 1)); - if (str == 0) - return (NULL); - i = 0; - j = 0; - while (s[i]) - { - if (i >= start && j < len) - { - str[j] = s[i]; - j++; - } - i++; - } - str[j] = '\0'; - return (str); -} - -int ft_strlen_g(const char *str) -{ - int i; - - i = 0; - while (str[i]) - i++; - return (i); -} - -char *ft_strchr_gnl(const char *s, int i) -{ - while (*s) - { - if (*s == i) - return ((char *)s); - s++; - } - if (i == '\0') - return ((char *)s); - return (0); -} - -char *ft_strdup_g(const char *s) -{ - int i; - int j; - char *str; - - i = 0; - j = ft_strlen_g(s); - str = (char *)malloc(sizeof(*str) * (j + 1)); - if (!str) - return (NULL); - while (i < j) - { - str[i] = s[i]; - i++; - } - str[i] = '\0'; - return (str); -} - -char *ft_strjoin(char const *s1, char const *s2) -{ - int i; - int j; - char *str; - - i = 0; - j = 0; - str = (char *)malloc(sizeof(char) * (ft_strlen_g(s1) \ - + ft_strlen_g(s2) + 1)); - if (str == NULL) - return (NULL); - while (s1[i] != '\0') - { - str[i] = s1[i]; - i++; - } - while (s2[j] != '\0') - { - str[i + j] = s2[j]; - j++; - } - str[i + j] = '\0'; - return (str); -} diff --git a/includes/cub.h b/includes/cub.h deleted file mode 100644 index 052dc8b..0000000 --- a/includes/cub.h +++ /dev/null @@ -1,57 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* cub.h :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 14:56:25 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 12:14:42 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#ifndef CUB_H - -# define CUB_H - -# include "parsing.h" -# include "../libft/include/libft.h" -# include "../gnl/include/get_next_line.h" - -# define ERROR_PREFIX "Error\n" -# define ERROR_EXT "Invalid file extension. Only .cub files are accepted." -# define ERROR_EMPT_PATH "Invalid map file path." -# define ERROR_INIT_DATA "Initialization of the data structure failed." -# define ERROR_INIT_TEX "Initialization of the textures structure failed." -# define ERROR_INIT_PARS "Initialization of the parsing structure failed." -# define ERROR_EMPTY "You have provided an empty file." -# define ERROR_COL "The RGB values provided are not valid or absent." -# define ERROR_NULL_P "Player not found or multiple players." -# define ERROR_BAD_CHAR "Invalid character in map." -# define ERROR_POS "Player position not found." -# define ERROR_ALLOC "Allocation failed." -# define ERROR_PLAYER "Player not found or multiple players." -# define ERROR_CHAR "Invalid character in map." -# define ERROR_DOUBLE "Multiple images/colors have been provided \ -for the same texture." -# define ERROR_NOT_CLOSE "Map is not closed by walls." -# define ERROR_NOT_XMP "The texture file is not an xpm image." - -typedef struct s_data -{ - char **map; - char *map_path; - t_textures *texture; - t_data_parsing parsing; -} t_data; - -//utils -void ft_error(char *message); -void free_char_array(char **array); -int ft_arrlen(char **arr); -void print_array(char **array);//temp - -//init -int init_data(t_data *data, char *path); -void free_data(t_data *data); - -#endif diff --git a/includes/parsing.h b/includes/parsing.h deleted file mode 100644 index 8f96c8c..0000000 --- a/includes/parsing.h +++ /dev/null @@ -1,89 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* parsing.h :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 14:08:04 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 12:16:07 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#ifndef PARSING_H -# define PARSING_H - -# include -# include -# include -# include - -struct s_data; -typedef struct s_data t_data; - -typedef struct s_textures -{ - char *north; - char *south; - char *east; - char *west; - int floor[3]; - int ceiling[3]; -} t_textures; - -typedef struct s_data_parsing -{ - char **raw_map; - int fd_map; - int fd_map_dup; - int player[3]; -} t_data_parsing; -//player -> 0 = x, 1 = y, 2 = head - -//parsing -int parsing(t_data *data); - -//check_file -int check_extension(char *map_path); -int check_file(char *map_path, t_data_parsing *parsing); - -//get_map -int get_map(t_data *data); -int line_counter(int fd); -int put_map_on_array(t_data *data); -char *clean_line(char *raw_line); - -//init_parsing -int init_parsing(t_data_parsing *parsing); -int init_textures(t_textures *textures); -int free_textures(t_textures *textures); - -//line_detect -int is_config_line(char *line); -int is_empty_line(char *line); -int is_texture_line(char *line); -int is_color_line(char *line); -int check_extension_2(char *str); - -//get_textures -int get_texture_path(char *line, t_textures *texture, int *j); -int validate_and_convert_rgb(char **parts, int rgb[3]); -int get_rgb_values(char *line, int rgb[3]); -int is_valid_number(char *str); - -//check_colors -int check_colors(t_textures *texture); -int is_rgb(int color[3]); - -// check_map -int check_map_char(char **map); -void find_player_pos(char **map, int *player); -int flood_fill(char **map_cp, int x, int y); -int rep_ex_wall(char **map_cp, int x, int y); -int check_char_and_count(char c, int *p); - -//check_map_2 -int hasivalidchar(char **map); -int validate_map(char **map, int *player); - -#endif diff --git a/input.c b/input.c new file mode 100644 index 0000000..e5d3adb --- /dev/null +++ b/input.c @@ -0,0 +1,46 @@ +// input.c +#include "cub3d.h" +#ifdef __APPLE__ +# define KEY_ESC 53 +# define KEY_W 13 +# define KEY_A 0 +# define KEY_S 1 +# define KEY_D 2 +# define KEY_LEFT 123 +# define KEY_RIGHT 124 +#else +# define KEY_ESC 65307 +# define KEY_W 119 +# define KEY_A 97 +# define KEY_S 115 +# define KEY_D 100 +# define KEY_LEFT 65361 +# define KEY_RIGHT 65363 +#endif + +int key_press(int key, t_app *a){ + if (key == KEY_ESC) close_win(a); + if (key == KEY_W) a->keys.w = true; + if (key == KEY_S) a->keys.s = true; + if (key == KEY_A) a->keys.a = true; + if (key == KEY_D) a->keys.d = true; + if (key == KEY_LEFT) a->keys.left = true; + if (key == KEY_RIGHT) a->keys.right = true; + return 0; +} +int key_release(int key, t_app *a){ + if (key == KEY_W) a->keys.w = false; + if (key == KEY_S) a->keys.s = false; + if (key == KEY_A) a->keys.a = false; + if (key == KEY_D) a->keys.d = false; + if (key == KEY_LEFT) a->keys.left = false; + if (key == KEY_RIGHT) a->keys.right = false; + return 0; +} +int close_win(t_app *a){ + if (a->zbuf) free(a->zbuf); + if (a->frame.ptr) mlx_destroy_image(a->mlx, a->frame.ptr); + if (a->win) mlx_destroy_window(a->mlx, a->win); + exit(0); + return 0; +} diff --git a/libft/Makefile b/libft/Makefile deleted file mode 100644 index 87b9709..0000000 --- a/libft/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# **************************************************************************** # -# # -# ::: :::::::: # -# Makefile :+: :+: :+: # -# +:+ +:+ +:+ # -# By: lfirmin +#+ +:+ +#+ # -# +#+#+#+#+#+ +#+ # -# Created: 2024/05/19 12:59:31 by lfirmin #+# #+# # -# Updated: 2025/04/19 11:53:48 by lfirmin ### ########.fr # -# # -# **************************************************************************** # - -NAME = libft.a -HEADER = ./include -SRCS_DIR = ./srcs/ -SRC = ft_isalnum.c ft_isprint.c ft_memcmp.c ft_putchar_fd.c ft_split.c \ - ft_strlcat.c ft_strncmp.c ft_substr.c ft_atoi.c ft_isalpha.c \ - ft_itoa.c ft_memcpy.c ft_putendl_fd.c ft_strchr.c ft_strlcpy.c \ - ft_strnstr.c ft_tolower.c ft_bzero.c ft_isascii.c ft_strtrim.c \ - ft_memmove.c ft_putnbr_fd.c ft_strdup.c ft_strlen.c ft_strrchr.c \ - ft_toupper.c ft_calloc.c ft_isdigit.c ft_memchr.c ft_memset.c \ - ft_putstr_fd.c ft_strjoin.c ft_strmapi.c ft_striteri.c \ - ft_lstnew_bonus.c ft_lstadd_front_bonus.c ft_lstsize_bonus.c \ - ft_lstlast_bonus.c ft_lstadd_back_bonus.c ft_lstdelone_bonus.c \ - ft_lstclear_bonus.c ft_lstiter_bonus.c ft_lstmap_bonus.c ft_strcmp.c \ - ft_atoll.c ft_straddchar.c ft_strcpy.c ft_arrcpy.c - -SRCS = $(addprefix $(SRCS_DIR), $(SRC)) -CC = cc -CFLAGS = -Wall -Wextra -Werror -g3 -INCLUDE = -I $(HEADER) -OBJ_DIR = obj/ -OBJ = $(addprefix $(OBJ_DIR), $(SRC:.c=.o)) - -GREEN = \033[0;32m -YELLOW = \033[0;33m -RESET = \033[0m -WHITE = \033[0;97m - -LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ - -all: $(NAME) - -$(NAME): $(OBJ) - @printf "$(YELLOW)Compiling libft, Please wait...$(RESET)" - @for char in $(LOADING_CHARS); do \ - printf "\r$(YELLOW)Compiling libft, Please wait... $$char$(RESET)"; \ - sleep 0.1; \ - done - @ar rc $(NAME) $(OBJ) - @ranlib $(NAME) - @printf "\r$(GREEN)Great news ! $(WHITE)Libft compiled successfully ! $(RESET)\n" - -$(OBJ_DIR)%.o: $(SRCS_DIR)%.c - @mkdir -p $(OBJ_DIR) - @$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ - -clean: - @rm -rf $(OBJ_DIR) - @printf "$(WHITE)Clean process completed for $(GREEN)Libft.$(RESET)\n" - -fclean: clean - @rm -f $(NAME) - @printf "$(WHITE)Full clean process completed for $(GREEN)Libft.$(RESET)\n" - -re: fclean all - -.PHONY: all clean fclean re \ No newline at end of file diff --git a/libft/Readme.md b/libft/Readme.md deleted file mode 100644 index ef5f375..0000000 --- a/libft/Readme.md +++ /dev/null @@ -1,55 +0,0 @@ -# Libft - 42 Project - -## Description -Libft is the first project at 42 school. The aim is to recreate various standard C library functions, as well as additional functions that will be useful throughout the cursus. This library will be used in most of the future 42 projects. - -## Functions - -### Libc Functions -`ft_isalpha` • `ft_isdigit` • `ft_isalnum` • `ft_isascii` • `ft_isprint` • `ft_strlen` • `ft_memset` • `ft_bzero` • `ft_memcpy` • `ft_memmove` • `ft_strlcpy` • `ft_strlcat` • `ft_toupper` • `ft_tolower` • `ft_strchr` • `ft_strrchr` • `ft_strncmp` • `ft_memchr` • `ft_memcmp` • `ft_strnstr` • `ft_atoi` • `ft_calloc` • `ft_strdup` - -### Additional Functions -`ft_substr` • `ft_strjoin` • `ft_strtrim` • `ft_split` • `ft_itoa` • `ft_strmapi` • `ft_striteri` • `ft_putchar_fd` • `ft_putstr_fd` • `ft_putendl_fd` • `ft_putnbr_fd` - -### Bonus Functions -`ft_lstnew` • `ft_lstadd_front` • `ft_lstsize` • `ft_lstlast` • `ft_lstadd_back` • `ft_lstdelone` • `ft_lstclear` • `ft_lstiter` • `ft_lstmap` - -## Getting Started - -### Prerequisites -- GCC compiler -- Make - -### Usage -1. Include the header in your source file: -```c -#include "libft.h" -``` - -### Compilation -1. Compilation: -```bash -make -``` - -## Cleaning -- Remove object files: -```bash -make clean -``` - -- Remove object files and library: -```bash -make fclean -``` - -- Recompile everything: -```bash -make re -``` - -## Testing -This project doesn't come with unit tests, but you can use external testers: -- [libft-unit-test](https://github.com/alelievr/libft-unit-test) -- [libft-war-machine](https://github.com/ska42/libft-war-machine) -- [Tripouille/libfTester](https://github.com/Tripouille/libftTester) diff --git a/libft/include/libft.h b/libft/include/libft.h deleted file mode 100644 index b2d0d5a..0000000 --- a/libft/include/libft.h +++ /dev/null @@ -1,93 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* libft.h :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 11:19:08 by lfirmin #+# #+# */ -/* Updated: 2025/04/19 11:56:03 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#ifndef LIBFT_H -# define LIBFT_H - -# include -# include -# include -# include -# include -# include - -typedef struct v -{ - char **array; - int i; - int j; - int start; - int end; -} t_split_struct; - -typedef struct s_list -{ - void *content; - struct s_list *next; -} t_list; - -int ft_isalnum(int c); -int ft_isalpha(int c); -int ft_isascii(int c); -int ft_isdigit(int c); -int ft_isprint(int c); -int ft_atoi(const char *str); -int ft_memcmp(const void *ptr1, const void *ptr2, size_t num); -int ft_strncmp(const char *s1, const char *s2, unsigned int n); -int ft_toupper(int c); -int ft_tolower(int c); -int ft_lstsize(t_list *lst); -int ft_strcmp(char *s1, char *s2); -long long ft_atoll(const char *str); - -size_t ft_strlen(const char *s); -size_t ft_strlcat(char *dst, const char *src, size_t size); -size_t ft_strlcpy(char *dst, const char *src, size_t dsts); - -void *ft_bzero(void *s, size_t n); -void *ft_calloc(size_t count, size_t n); -void *ft_memchr(const void *s, int c, size_t n); -void *ft_memcpy(void *dest, const void *src, size_t len); -void *ft_memset(void *b, int c, size_t len); -void *ft_memmove(void *s1, const void *s2, size_t len); -void *ft_memset(void *str, int c, size_t n); -void ft_putchar_fd(char c, int fd); -void ft_putstr_fd(char *s, int fd); -void ft_putendl_fd(char *s, int fd); -void ft_putnbr_fd(int n, int fd); -void ft_striteri(char *s, void (*f)(unsigned int, char*)); -void ft_lstadd_front(t_list **lst, t_list *new); -void ft_lstadd_back(t_list **lst, t_list *new); -void ft_lstdelone(t_list *lst, void (*del)(void*)); -void ft_lstclear(t_list **lst, void (*del)(void*)); -void ft_lstiter(t_list *lst, void (*f)(void *)); - -char *ft_strchr(char const *str, int c); -char *ft_strdup(const char *src); -char *ft_strjoin(const char *s1, const char *s2); -char *ft_strnstr(const char *hay, const char *need, size_t len); -char *ft_strrchr(const char *str, int c); -char *ft_strtrim(char const *s1, char const *set); -char *ft_substr(char const *s, unsigned int start, size_t len); -char **ft_split(char const *s, char c); -char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); -char *ft_itoa(int n); -char *ft_straddchar(char *str, char c); -char *ft_strcpy(char *dest, char *src); -char **ft_arrcpy(char **array); - -t_list *ft_lstnew(void *content); -t_list *ft_lstlast(t_list *lst); -t_list *ft_lstmap(t_list *lst, void *(*f)(void *), \ - void (*del)(void *)); - -#endif \ No newline at end of file diff --git a/libft/libft.a b/libft/libft.a deleted file mode 100644 index d6d50baa288df8459b7f9629c04e2a054632c7b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135664 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 diff --git a/libft/obj/ft_arrcpy.o b/libft/obj/ft_arrcpy.o deleted file mode 100644 index 4882104ff97e455c2645a7f0b4125956ee8e81d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2968 zcmb`J&2Jk;6u{qlJsUetZ0AFzB?t^EDH6&$X^WuLY6HP^o3yAx3WQcDS+CcL!CyFb zXn?2?r$tuOk_aIo{s6=Uxb?t=7Lbxw95`^O;6M&WI1-2SW(g$o-g?GfZxX?QC(XWj zzj<%oo7tJQuSCzi=#nH5BEczWS%Lz5+R^HdTHR3yqUWSm{#`5m8Pdv2I~&n08qrpx zJDPERODjb-A+X{{v>M$i-IB`Dt?l3H^?Jk7jGA`)54mcEl%rLxv{Z$_)oz+$BU&T8 z{WU%|q7~||Mk^8<*ykB4+G=Ez$A5>cididKxqq|Sw<@?gh9TQDM`@`7fg2Au zW~i>7uas`r%NSzZY0k8L4-3>*m#U3Y7&i zA@ut9QjhewzmLiO-~$8x9;sIWaH$A;mC=K;|5@Kj-;qOS`%WJMkQul*I@<@}KHg@s z01#CUgX}-$^Z78@IyN_D1&{Tzx~#tQF@R$(0m+bFAxrYVhfmqHo@-fd*ZQ1g1!)Ye zxMlTRZ&)*y)k_wz59o0XAGjcVNS0!5n2Z%Og<{A^>6zKkf|;LBW;3CYqw26aGBk3c zXpJ6&`Mfb7P86o~eBQ_{ss@DTvS~A%N+k2?WF~z4Xm~bRF!k_QF=if%hf~Q|q5w^Q zFy{0;V646fMmDzyNl0c2kTNsyAM;bqDE$ou(mOAMbU7#ubai;vaEl&7PK|`N44(4` zuerv$75RXKF7Oi~H#~t)Ns|8ZcatJFY!WRETD9WZXau~?cOd&ErgVPGyhY|xmYJe_ z$y^_?$1bu#CBhz!uty@yJI*?$lnET0VzM&J+;_;^hvTjY>sRJjxAF~>mzi&wdC;vx z*<@~uPBHg5>%@qFf_jay0uH>&ycbc8E3e&UE_q>1?wUfMWu=7q$C;!|xH@qGROEj0 z84kGNetoZTxplhQhGl*>+aMY;*ghh*K^brx=^#3qvi7qL>}6eFaUcLX2g z_5mAb!Ws30Hcs$fGaS6g z?YA8KU2cEq;3l`}y_1N2c)MXjh-+GteO*s+?p&A0tF&$+sBtq^oSoKVvAnqeYTiug zYQel*0M*E*(O*C|g zLvc>I`!3%X_KCmA<3ACBTsw1}M$SuZ^PJ+B@B$B@`UyGfA3{bh!`SRH!4K~hJH)=o zFZ5x~obh*g{E>f&zhIlw?s}ic+ZpvmUcpxyEa!BuaX{ZyyNLA*M(f*a|GwY{O1x*< zKf3E8UU2*&-BlAJ80LriXEJQ!tRMdm?3w@89{K5;?94xdOg>l7qIw@&Q||G2akr>` Z5@-IekU95`{5*V9cE~`XIGWO#{~rkuXAA%U diff --git a/libft/obj/ft_atoi.o b/libft/obj/ft_atoi.o deleted file mode 100644 index 3049d5c6b545ca6b1657cbb18590a2b38e961bb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2880 zcmb_eUuaup6hAjN-%Zj#xoNB2+KEKe6&<~4*9ms(W~E%0)lOtknS;?K=}j7zKQp;0 zomec5)27+nD*E7%fp2^8p^sW&6a>5Z=!5uZy9z1vp+0G~5YM^!zBIYbzy}Z9d%p8K z|G)1$H~CN>d&40~AV`8UurCP|V9vF_9=4XlprYk?u<(1ZFuSv+Zxgzvmnv+NSg@$? z1S99S)dx;@{;yW`c6S}v;$D{WyPgI8v3l$2It`io)z4Q^wWvS7FR3>e>bJc3D(c($ zRjHtFZ`~`G%Ug)lq^U&gUC=kwj}AsWW<}gs)HkXT-?So@tca!jY{{YCY(Z#E-=n}= zEBLB!qF24)L9nQAT0Wcmg&~ldNBA^ zz0?#ep5G~sZx?>a|0or5+rh}s>VuZH{8pdzu%MT=?qV{m;X4PKfBENb{%_nOIw5o| zqrRw@3i@7A-@E*S)F!>??O?Lkcj$<>O=?#F92$b{%J5;?d$Rddb5GZ~j@P;XWCjin zo$CN_o~RSq3m|*XG&eT`C@PSF>!`(G3G+Jf0dQM4hc@saeT_P*)*=$5cW5bjKft%_ zSh`k`^2nTyrGzE$?%l*#{S>G0Md+4I@02D-@#pZ261|b zXqVu1ukT~WNUI`$C7}s85p%*(R7jHakGGW=nc*W*Hy{ecb_fSgb<<_9#GFl^!4^^G>tSid=EAnNE@ca-)euOoQvd&S~ z_6_ScnHQZk=1@*CE!(j zSf`dju9Jlz0}e|Ak^zUnMx!XV*TlEZ4lxm-3D>n*#E=kP86I39wO1GjoKBjkv%)Og zy7XM8FDj9+f2AVAvz*gLRc`>Uk39h&W;fyg2nrY0KpheQjq=5s>l{Cj%#z=&? z98X2lprz8Lp`CqeyfBBN*clor%}T! zW+;sOdXo76LyH)u_FjpozwwKAR{)&b2S-JmFmX?X`7mFIdn|CDSa43h_L!tv=b*h$ zyRG&F{}Fz;Ur?|bvirY;y4v{>rdRloyv-fxuLIe+xxr!1X->$bkIRDn%JZ87;9TSv zoPN|B`H%5Kq2Kdb5`Kc8M5S2Q+GQIZY6IKp3U-Z`TMaS8{a>vjm4)bEz%-YQ_HUVA z2(eGJfAq&k_zRrA2aW1q=J_js3DAg>-S!INjq*Qike|M~_WTzRlgG+wWOMjbN!)({ cQ2j*q{GTCa-#fDVmKSxO1SImKlI;2a1!{V7!~g&Q diff --git a/libft/obj/ft_atoll.o b/libft/obj/ft_atoll.o deleted file mode 100644 index a13c20a5a194e9db2fea431cdd37eb43e0bd6b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2832 zcmb_d&2Jl35PxsiZyno-H*rYFN2x3djZl7O8Eykr!7))3%67p!p!b_o6X9RI55(BW`6Ve zKIVDexcHt#DG@};S#qEWl#t8819{vQ$B7D_lgYKel5011laGyUgdZEvF+6$O*j0aN zc|@09#8-`H>aD>8aAb4oMQGJ{s@`dLL9(>hrhc~x=(_O~0@jUZ52?D$z+tC@dnK1P zX>!fj-FdLTzwZ=)up#xh0hF6U(Ur%FpPh0E8 zmfOuo7Y(f1BwI5N0HurYUpzVsW9Zuf91e+0B+8Ivfo+Rn-VBN<4 z-A1lCooy#`m!2op?|;Q`aM=6wH`+m8k9IOS+WvBXw1dVJLL?2qm@?iYN6$pwjtumk z?|i415SbB)L+3jQ35*_6*=t0Oo{dBzgeWROhu}$@k#*=Y03RVO_PMv(vi~OyHc5b} z(2r50Y6X5}>E2aGYXA#K_hxLZ18ty9+gfY|86GHMEy{IZ!Fd5F)WHK}GTW$Fjd-q< zsTAU~X02YVR^lV4v|(*zXk@HmTThdEEmu$Et#rn!mP%TVBxb5*Gf~PHYvp1kF?uRd zC|YJFG117Hr>7I8Vm5CP;Z90bNNxWVD;B9+HIkdj)JV;&H%g!v3l)Nf|Jce)xF8^U z{R2Yh+G&4luw?`G=NMr4A>n?Jccbkq(nOmgPf>6oLBIlJ01TAUf1+*3&<#F{%Oh^X zus$@9kh}k~N?9np!h%aI++ZOk#iBavT4a5B)|+C-b#`Kr4dmI$6dTm#&o-DOcW*F7 zdBUWhSa1rY6pQFArnBxm>q@acohdq;$qWmErB!D^9g-H9(qPihEUbLOLZU)%p7o^I zE4rM;tWYVc{K0yZMfPf*1s7QWqB{R%#~`FX#o{`q?$KEo3Mdzt^aBg0Str!!NHHnJ zsB%G4VBNU5Bk3ks0_5-gW)AYfl{{pYiF`;GicDa9nvhIjEPRB+8}sD1&k!(?Aq=v& ziWnQjopAyIDCRIC@RMBc_TcvA=X#$9$2@Ox{W#~iTkb^w8Q)bTKR)KbZrv%apY!3L zbA8f>EQn6xkz?@0vYnig?rh&24ppKQv0{^0n{Qsakki>hhM9xS2;@uYj=eR#! zQb9pX+*4s2=YqJ$0>}SOFJY`dC)yuy(7#H*uXaQ{<%jz^C7v+ z1ESoog*)_cj&p)8!(12aF0YS&cU}_p1@8i5v-n!uL#Z@Gvgi1iD&212v_Ti_Q$>=W)^2tE-n@H}A6`k&+dM|?(~N-{^(|F%he ue0BZxKLkv^xR1}v0(>rs`!4|OAIV?;8^HW~hkmPkQy!uMgmKuCzy80^##lB0 diff --git a/libft/obj/ft_bzero.o b/libft/obj/ft_bzero.o deleted file mode 100644 index cba45f1f638a040b0dbcde94ea5856bd9298f1fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2512 zcmb_d&2QXP5FguXXOm5xO#=O(2<-u=iWECZE50g~MbT0x1cX3As8Y3fcfGp?uQ&K3 zgh&;jNT{nK)FLWz;J|?ce+37SK;jQT9D4vM+{z8aVVSY#ZQaLKaA2hOX683D?_)gk z{C;Em1yxZ%kOCLst|m}`s&QAYXJQ=|&~wKb{pyUa{^5+$JI?h6^2TlFhsF`Ppnl|B zXxv#id^p!`JJ(-2az;Nohucz z3$VEipgjtjd9hNd0F*3rTQce=HS^iZh02*zo6FCg0?>6(8KMB={5|T-0v@1z9M{UD zQ2QK52?yfYedjY-p0*KCZJac+l$AUJMKUO_6R4QiaMsnE`}b(Oxi&&(s5kqWR%PwY zOj~?{*i88|Vo0i$Z8B4aomLtqX{{Z&VXwC5MX^5&YisM)s7Lkj{g zgkXr!MzC@@5S8!Go>$`1tgNkPa+V=G&y4Md?I7)VFu4}y z1jFN`)A71iA5>fpX0w?j%~bRgbKmGCW6O9^pFPwo#+I&b>6+2g4HV~o(N$wppSz4~ zOI7he6m>uP5Dg{xeLT&spaQ&Bg`pTlT@R;%DC9~GV4zVy(Z!B zupHuzz82v#^uJnPcSJ1cSGw%-PeI-==zI`~fXpy(d> zp~ryNZ+0Vh;1!$0!hI6A1y=mtfcXDGALAm$dJ}8za`Aj20OpjRBGE%ln5bW2tFs{L zTi{h8FsE2~O)}BBhz2>E%(5@lql}UBpB(XT=U+#^Vqb9>{LD$|^WrA^;nSDVN#@i) zQwWJ`+N4jSut{DFu>!U9?U6es4_KpI&2me|n#^ n?J+$&AK;jfsDA;_`HAHH>HEsLBfnLypRY+lqB!aidH=rw+rRF3 diff --git a/libft/obj/ft_calloc.o b/libft/obj/ft_calloc.o deleted file mode 100644 index ee1349191204793118b180ca755b59475b5be6c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 zcmb_eU1%d!6h1T4JIOZNBu%Aew;~09mQ^~_q>H*LwaXe!+eJmFL}ab`nWV!`l9J5S z-D0s&>{80gt_bRbg2+Dku!1k^vx0VC>|@{Tix5F%^~HihJ!j_LWO_G(4<49%&iT%F z?*F;TySWQ5sEPtY6qtsdCs2U(NY9?}%^64{b0NR=bAIF3$^6#Z-Tao<$#3US=k`!{ zQ19M8M9H7c-A!CgV483{iOq-5&2OyjLE>6EFn7@$BJ=y)0V?>VLe4gJmbjJM&2JpY z@#p3MoSnlkd)GA(pvoK*fX(HCuT>UI|0BLs2rLd0npDJ zaU-KJI}#*d7oSr%_yI)yy*}>Sa`PhsDuFDj1#GklR9+)giD$57>W$^V`ylX^dY-P{ zc+2;a#6+*)d&7?f-YdSBA`c>;Qj4M*{*aLy4M4Vxu;`Vzt_KvoW5@8k0t5 zB6HUBqf^jsmD^_3T`U(Jr&%`2U@kT5mg!XOR^4uxXR>C^cCDg$-YZ#C71OaxRTrEl zcIh{E!-Z}(l!J)ZXxp`hRT-yf+g`O6QNgm?0=K@Lp(YFeae8oHuq;qkUj^lIQW-lQ ziC)J|e*kg%NN7*tTs*m{o*&ZHJIDa|4WR*e6I(@5{)!KgqO-zJp*4f)wOh0t({Wbn z6Pc`U`SKC=jn1*tRW?>&r{`F<%AP2&=_*59(`!uMVKGce6&SVzBzD*^no$G_*vmZAIWxAy zlEj>2YJm;vuQL@rMW0s(ad|X_f0vIiGyuOJ_G4(lO7011{F2K74MLAeD5$}`gWRCE6*@ z5%{Cr9}VG*+ob40A`$#20~a3TnvSD;GthpV0@$$3Gl-KZkaXu6j1;!6t?ZMRsy1O^rO zVzE-e7qE7O?$`~B1J=@FwNI#c0)HpSUzX|n9C%6)xfbge@Y`tg+rN+bg%amX z`$x4e@&!)yEYArcNb^hm2RR{;xpY7JjsI1j@#*cB$1fnJT{vu_TF0*|Kk$69FEoD= YdHgRC6C9twnl{tcs4wu(;w$f!1~jSP)URI1i7D3@~Ogz2tWWxe23Y%K?gwW4h#3Z_-E zEhjNPn#fzOp(kc4Sz~N9QLwV63-ti792au%kJSLE$<@PdFM_n$CiS*7G#=s2`w*l> zL>GijnqY_?=< zfaV&TE@-);Z5uei+*o!?pp}e*&UMQ%i@v!6%_+KuHhV8KRCe{;I%tK$hP|S%uHxg$ zpNcG4j==$AZN)6J1FB&ySI;8fvWfpM9bp3hcNh8Q_(y*&0M3J>9Y>rnF-O8Z z$ptZI0&f!n=M)>vNv2oap5k1vps$98AV$8QX+v7}SZxpb(x1UU-@MQLg1sZZT@Jn_1&QM5jRfoe27$4`oB#j- diff --git a/libft/obj/ft_isalpha.o b/libft/obj/ft_isalpha.o deleted file mode 100644 index 249afe4e3723e74e4b31d41ec400dff60fb6a9e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2192 zcmbVM&1(};5TCc3O+QjMv8`Hdks@jp>82kdwt}{nS}o#1sYtPuO}d+|CL2jMr51{U zsEFT)caQ!JdJ#N$@!&t`0+Q%CclN>O2kRSm);H|rqjof)w3d9*U6Ur0k9O9i`Q+0Mls-)VpzL2- zYBGM|;q;G%_iDR3V0Ib0ncCHBZdaXg0L?VGLcANrpvf$+ia~KfeQXgGYDw{lcFdNlz9=qy7qjvuGO*`F__C#{GigG&D(yi zf5j=4y`tYgJYo%5!-KvD@HOtYjnFt->k9E zH4e=hgRX&y9?u!tTSHYe1Jh#CKM-|02H!TDx#;zKYB1}dH|V11fMe5ybfD>Iq?f36 zhVoZ?gqUQYQ4Uv;St3026fj4P1V6|+jXe?JMpdeP_OLAe$64RYoZ7Y3W|WWo1|MTw z@?2$I&LQ}9#xF(ubFB9>r<&oq#~6?92dpJ0Q^_sbnM}!90V{A;1F*8iLczh|Wn(!g zfmL$yHtU}67Qyn1fn&{Fm>VnycJ?}0`TR;@(Oz1@*OY5;&wIYZfU~^lmh6JlIE@w- z2uLNKo9q%OKgvlI<`vePeKZ2)3U{0~ooMgJs z_G#wAqP`Xyq8RypS0cEOgV>G7j}>f6$D@| z^@Z<1yjlDUb{P0e{5Z!)+~AEAh!~=U#xk&Fc3sD0Qel{S~A2XA#rSZx)f=#&>Gl>7O8Y^x(hX(TkwBdMj9{Gs(PW^Gs22;Jumo&DVRg^L8t>bSEGLND?p$ zElr{Td%>2RY=}vSqG$T<&bOV-gYC@&h`u_529&m*B1mmIPpk~ZOZbn9j76xt&0cbh|7+M$r2wnuun2kgtnCSto z=8?jU<5IytX$ql$gh>$;2f|p!T?@QfZ)weJdJxjty6e?PawW?xj;z_$np1H{CML~s zb7E{_y56u(L9LprB??}~sadt0>SWeh-=xi~f!3x=MFSj>4x|B1LOU&@8u#UI^aL@Pp$BDu6*)JA`$imdG)dx@ zS*H;vB3y4s&Fvh^(*FkQ7noD4j@ydz)f4b(#$}#Itj{a>D(m+ZyvX_pbE@gDd!2Fh zJYeSSY`vJVve~M=2Bv4Pdtl}&<+6=~%Ep>k1+!|GEY=;jPyy4ec(yrzFFjWCtlX+^ zp1>@X*2)O;8uFZhGk||WJvh54RK{TvA^)=C;V&waQ1L&RmN%f^afPcQF z?{^-KeFhBnqkjj{V3PsOG36X*U9vbADocR5tS|X##5=`rvBT(J;%7KsafA1=fMQVL zjb{8)|68DtJ$97uRi=^mm%4{Sr~ZB6p^|-~{&nM$@e*G_Og$4q@Rh+Qr1(hn&7rMR x{rwL0>945PPa~!+9aWG$$8}6{{v|-?CsOObMNI7-`6U_LBL#`#=#8lLe*^stu?zqJ diff --git a/libft/obj/ft_isdigit.o b/libft/obj/ft_isdigit.o deleted file mode 100644 index 87e05b9b95dd72335903ee2b5e407b4e42294c60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2152 zcmbtU&1(};5TCc3P1B~`q=_G`70E#@BHi>0u?jU(VyzSpm3R;}Y?4j7G`o>xQ(B=^ zC`X>k;J@_wp^dji3-U=4#%t^_;8bAc3BR+q++Pw+?r<4kr^YPvHV;bBR}jsC~*GQKavEo{lrT$R9oW z$cEVkHLb{M^7NQG%u-PRNkcLf&5g+FwfOb;_~=sl#wdWSfW)b#G(hA$$m)DN9>+-c zad=0HxyPl1zhed|Nzi04+6PQs!C97GZ*(m$ni7FRsck#$Ou4SxwamKFY?%!^Gc~PE zYEu(ab8UBZ23pN>D_eDnW~*Y>Oh+q2cC}#{*?QG%TBet?Cy zKz9R}wgYAO$7}#6=%fhtbOqQ(l8p`a#rE*#XOW{ppbNrHHThgx7>e5HfaU`n5x9gi zW9+9oM1l&2gV7zpcP6}qTg(1V$z+u&v4OUtM(-%;s)Dl|ttrw6g|#IGLt&slU4iXITch#}^~;=46LPDB_$-JeDD4e`Df#~2<2f05hN z;soLqSM#PbTo?XVxlQLGP^mg)Mg207h#)`b(QbS?&qHo62KY5@-wW_HZfCfpoc_F5 zI3LUlTE!@}Yel_OY8vaHImU(qTDf6a1~#g%Z@FK~X@b@?>N>YgyV?NFZa9Xvc(*Xo za`f^VX!ZKKRn#jLd_=V#_qu5toG@04)uwJ4z9iU)8YXb`63R`B_h**Bt zcVT3R@21B+@xKL%v(NX7_evZ=+~2bR98|*U_n9}9s1wz%-?v}ztH^~N^$RB-u5Tfst|NoJbO8bxqmcV>Ry%s2bZ&hFaG!evb<5K%A% zO;0Gmmr&DA*3BeDF>>+B#@CGpTk8+DAo{Eu7tlHseKFXu)}qgu?L;5-Ap114P08On z8a7pWI4bT|P4FH4= zgKkbmA`#r_240QF?5rPw3jQv$h%~|ED9Qt6Uc(i*oW#wI3f_0>~Qtz@bR$6Io%cPnnmvoes#my33y;JB5dTS}ZhnaH`G zok~pC()OurqTr?-51I*pNsxhmtVWLsK#e9*_pgCkjj55Ij?PUy{Q+cjkB<{!jH1Q*T)UEN$vM>+UG3$2U%0QcH4~h@jviM=2G_- z`*IH9%gnC_;&bfBSyN4a-80OC&jVK0PS0vRVAFaxLKnw`4Q0^Gi-8RkT|N)4~E? zDh*ckUXk?w$|i2$fA6y2IKT8a0$2yfJBpl`%#nmA*^u`mJSGNf$_?&GOHX)xhP9|* zEX_rbQS4_VV%(JP3`~y0UrAktSl9n3Xpgfm>L?c~3SceuMaPko z9n62l0i&EJO7cWgf5es;((l^AHnH~_?5_V?p!^S%T@8 T>>b7B8NMY4h4Sbd3D*Aw;Pkl~ diff --git a/libft/obj/ft_itoa.o b/libft/obj/ft_itoa.o deleted file mode 100644 index 57025c2e5f17dcf8d8f6faf34d8f55c8e2e455e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3400 zcmbtWTWDNG7@l)>=jA|mRGv{o$jNkuT=gLzO$L@+|Zh(i4SIWx&-x~SkE&iUv6 z=KC-6&(54Y8{hkYX&6k2!FIA`OQDQ8ZOh|9F&t!3Fo&GRPfq=p{zmPxla60@8u4l8 zWNmu(TX0~^z?gCB7mZo+0Wj;-YqPBDSSOhm;|m1Oy++1K%$?jf^F=Vsz?o)Ur`iDz zoO5nLNQ9juDp)g4nBe`c=RaYr+^dPa;^o zb{PrQ5x-uWK|QPd7^;N6xyi-FMG>MAUw~e4>Yw+ITsR}v+o&y|_IbFFJ4$#dOhZ7_ zI=@hXAKgMYyqik%%O)ke3)nAyd4_b?W? zo&_R1J32ZT3)-M{TZ8KZk-IwX?%29vch7wr7~`Co5+Vm{#|krar4wV}wTSIUL6zU* z3E}}R_MaMZrR>F=83P`mIm_@pF#Hvd@fd-|=9}^6=2_3TzJjvMv*W_LmgZm`5LWM} zzBMeY>%Jouq8G`2JThX0c!)SbxDg>9VjL1yl;&9Y61^d&Eh-Czh2lY9h1pQ5TJ);D z>3p&{)_d43S8}Cd@4z;@-yY~2xU(u|x3fw)U5RDA(VSOG+G!RWFBRNaKAS5Sa>dw= zZLzVO=O$yjswsDSCYH~ovK~v1C(BH_kWQD7h~-O2Q!Q3) z+&zRtsKd+ikBj*@Vg&u(8^)iJPG&$r!(&i)Sgcwp)6!%4{NY01z&0@!ZH@WujOB{y zd^O`T)fF@n-W4yCakKU~GbwAEc+)7b+2G;!_qk;yc(=8Ow?T)7`8o_YVHiztYnX>% zSc;hnpYq_7QS5 zO>~Xc_78Fjb3yjoqE5LQfQdhGxnL~zNRk46?{pWO#ie7oVlJ?Jm^A##!~G5z-A(bu zZwJ_MJkb^2zHyVpC^KDtf8iD*!JQ?9uHxpZR7S$NPZ95KIac_M(q7wytC$2)e@GPn zHs55|NKJhgXI|R36q=uiCc1go0rCrnTm!;j1TGgZW zU(Kufvy%6g7Dv_dfrh^+?F$u$8vcT`r#1XlY4=J^=eoK7gBq^Zm6Nzy zuQZt%W_HF+RmVn?sZ`lL%ht9Z%uL1xp1HJZ$1aQBa`pyzW%R|4+%XttazxU7)O=S%6PE6hd`FPUO?<>>-x zb>*wV|EH#XZtj~3H%W&J@}94j-qg2dq3;1<&1Z$?2k8Z&4|lWZXSxfM&F58d?~no4 zOMrN^$FeM@a0;)b5FRf|Q2p)&*n&&nq*ngwL-B)hlv?M~d2Utz!?OMb=|J_<{iD}^ zD=?y{`vOBDv+_grwgRM9`IX)Ryp{iHxv5+K#ov+s8jXF}>POLn`;3nrlI1Ri`B?f7 zFCqRwtzW@UVbH37jwGtSQ2*#IQvPcH4+2xYz;H>TGU#q?QZrc=9F!HQsC1jPr1iumNC6!ckq^dAsX@F9H=0t)e*nR7R@*DVSjxO2|=-QT(A zew{nl7cai3YZ^$=;2i9G5(W6q+_y`SS%N$=mz=?G&gSn0XK-!T8T5CY&1*Z5dtV^s z?jnBB--XmRFHar_`ic-g=5_K>^vBbr@_Hdd`g3ghqY&9&ko{N&CPYMDs`Z1g zU#R=lV5P9;c6(kYD9oL*Pug=Q=Faw`-qXH`d+OW!e}VqFi`IVp&Nt{xa%SGD!zvpCLk5K zSHQ2L0sn1wxFVE8u>$Sw*Fam(YsU_xGaupB(^a8HLOTr4TlpLM!j!2ukpb{ELMd?Y zt7+Pw))Xl^F>D&G8|EkJ6tPP-K!=EU$w4NDX0$v=c?E(^n45$QKX z7R`K9 zy}fY+WB-zkbQ^p{M?iE8i0+RHBmU28dO*~VoZm8xCuwA)nAOzwqUX2!u@(CmO6bVApD>6N7u_>R<9m2v{x z_t)ALd|>buS{aGnK~$IE;)e-i1(9>Di#sC!3! Q8(frk$U&hvsxdYH-$up}y8r+H diff --git a/libft/obj/ft_lstadd_front_bonus.o b/libft/obj/ft_lstadd_front_bonus.o deleted file mode 100644 index f28ae9e66650f5f1d5a3c3d1a8f8b1a7073e1b8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2480 zcmbtV-;Wbj6h3#RGh24)wCpM_LP(<`B!(#qK7g9FX0zB`z^KU@V<1g`Oxp?5DYnyf z7lV>Ohz&6cL=$=9kw@QsG4XHl$(Q=J2@i12%sJiJn<^xnQ?LxXOjLlewdpu zS%h(AR6)Enj-^rd%3tb$I_4}`rc-$Buya7o+W>}(;=Em6G@bY6-k&>u=)*$*rUeEI zYYPCGJP=q15t1+fdqJ7b+#HPon8|_ZtSt~Zi!__3H~s}%h8)PoE8HLZ`ePXdLqsC# z3u4MKjeA>(cNqcMwS?6OGW5)}@L_#T9L;zOR|8NmiZg`wu^Deb>^~s?%`9Xyaqvcc z7)HZlBdCS#;-=Rh_`R^WblN@TE}dLDH;jAFz@Xn4lv+_W7(}&Zv)bzS!l+vBg~Nf{ zfKsQ|^-4j@?|1#M^zP|W+mF0jX=PaV&NNGbUvEXAjRl+t8aRm;Mi6>i5e%wR z2)%CrUhLIyIj>+NQ`bKSwN+4u_s?X1#%(@=8Z|Q7P58(u+%Z;i_BI9}{SjLR*6^v6 zdg9~==<8rpv|?~ee%J_xO%L=1Ocsx^@e18e^5ynTzMttR%bxwinzg^QaxDv=1-oPA z?RCriz{;(oe!UN#KOj=BHOe!$KQ{QGoTjJaDld%8_9_i!O5#1$fRf+k?i zYW6Df`PBUJUZN&5%%Y#pBE?O5QuOGc%_jh&zs>w$N>3eipc70c@hb_1ql~m)lkGj_NW|6AsFH2oIyA|tISy{`BY zKuupSxJ|DvrjwaquAOgWLCl8goBv^}r2#k>`H=$;L@M z;Ek)`2Ek^xiboyqgZ7^Azz;nZybfLjwXUb9oSY38b49f}xP$F3;mg`1oFH9iGGCdC z=64Yo_47nGF=RR-IIE*w_pOd=2l(%W!vlU}6wqU-j??E! z;{N1K`IHAZ97lH?*0(cH zN?ws@pHaJ}hgVoQD}ju%ev!A)nYMogt{>Sa+P{6+WW4C~ef4)j32t)!dqh&E$9Ax9 yTK*GL^3yG>=l=>d^WxJU!cA-wllm8d-k(g*{}?rW?xcTuXdImpJ^wSg{^!sD diff --git a/libft/obj/ft_lstclear_bonus.o b/libft/obj/ft_lstclear_bonus.o deleted file mode 100644 index 6f6d6c734ebf9878b74f488f0cb7d15dac6b9ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2752 zcmb`H&5ImG6u@71Pxa2uWP4|4H6KP~FzOy8J=r9ONepIWS?!%9qJb4f%rGB4JFPw4 zVY+A7C}9ID>bN3_i0AcSPy-6)mQx^tSN{Yr!UjDghroiuY8$8a)O^~|g^=(AoB$fW7usG3 zp1m4EP<0(-I5ml;?E-G}WV(bE1SD2#rRUM@%?v4D&4%CUQ1)_*AnYbngqz0Rj@RpCM~x2vsgtz#$G8Kt6$0fen~ydUSk#vlKjaO6_>33-P5OJ;CAnLLR>;U~~%vHwNc{96u6!jMa`e}O6g$DQA= z{BslcOy@^`lJFOt@?MS!5&Xv2|BjSIk!|}pHg5f`G3(P`EwBGJGVScpM{xz~PT>h5 f)}#2T2tC#Se!`A?b~JXCC*^HYu#g{3DX;$!{vQ%P diff --git a/libft/obj/ft_lstdelone_bonus.o b/libft/obj/ft_lstdelone_bonus.o deleted file mode 100644 index fff510e8cffa5b106ed0c3b75e4d52c51e5cc5df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2616 zcmb_d-*4Mg6h5|NCv8?IYhi2*p@;!RLbKNup_X6EsJ402fB`CE5>;>#Ck;6Ei0!I? zDmn^7r2;l>4}0JNAs%_;4?u!HfPVsMNIVqrQVFDTj(u+H++~6Xj%1(nefPWf+#l!K zADy{)R#g-broaoZj|2-aXY9xIG^|4vm5a{iug=ErRcCW;$JtD_osG2}sC-gJ35MHH z`Bca7w?l-t&TKndFYP#6^Si$|TWdRaXdGwb=jzf=%0cBZb4u6D>H|m3gUTdkQ!OMX zjrw8De5U+tdHTqyBLJEXDii0Y016c#ryoL>$pDNgMKjA~>H|=m0L?r6 zQy)z?v8vXJ1iv8a5lG`NDLz($Qh~&U+xQwACjr1>GYR6P*7Dt;TU+r4Q7;T?GbgPR z*39vl`6O+fg=o-<>`vV9qqyz)Vc<2IVUR>t3+&~v@7aE*H|X~Q`>B(5w-3VA;K(&cvG)*bbM<@S646VhH*hJU(nU(^rB(wDk8t*eA`xg=Eyy(Tch@BCPxUS(z!GwkxxDG#BKJINsnV$m z|K80ktw_Y<_-ObD6B&umZb#NK$pXPY&X_JZ8S!-Eg+0iD(AOD1%$~M(?_@B3@*ey= z^J1Jf;{}O-kMXM#f1Pnh;x`%hCH`Z^iNp(hRpQqe*VxmV^6Pq?d3n7CSZ%MFbQ^B7 zIq+7%8hE~I#dPhgR@m>;C1gbu54bt&(F-~uSV0(j*14A#k4LfFdKWC;U+Fj8b{oGF z-JzQ?)YtC?9uwYjqcd>(9&`pCzD9jQEKD7{O|YW(`{e%z`wqv**P9sfDi_ZWf?zLS zLHe!`C+b(o>l}!>7rcB|=tq#RYoWWtlRC@<>F6Bsla!j^DYrZ)5`31b06t_doUEP2 z2ALzR%H%f$awcmnY#TLyL0;kxG=JJsdH%u|FOSGi-(orcE68aVcWD~y`0Uv__ZRtS{$v7Y2;h4RZNu4Ci zR;eGX6_!=8h~kB)SJL0$t^EPL^A`vfyjanT1uw>PGVhtqh7kl0BUOs3u_m`hubv)hgux6z4!Q zE-w&RMp&xhdCJF>MO>;P(p>l!sRBOeO$%})weznQ5-O7fl-CF;hNj-$npkh4LUetC zz9dy><4gEtqNtCh#jUH2BEipydIVDYbFv>TL8(B&g>Udxu22BLhLZ$w(&+f@px@YZ zN0Ao>jiqzuS##;k(n^wg&qFloL{=|u`BCh}?x^L2K@yoAum<7Kwfvqp8hU|s;hfb+ zciUP`9QS)!$BHgI&{Jyc7qrKcPoad<$K8C!lZit^*HcAdUh<(yRU+>RaZ_Q zDVDy#`aXm_JtR~{c;2XgqOQ*A>YEq=a2u%tynt^-QT{gONYQ7(N1;1{X?a1%Pr5E- z&ON;@hNX8h2a~T=o_;gUP(-ovr>N?$i&{_MThseOeM4w}38Alx%DT{=6=mHL2BPA+ zQ1wefxu)uP0^I-KWE&j?_+vcFuN`#EA-4wFAFcDIYe z-#--Ydx0wnchKsM+Cw+9@^mar+%axDU`98Fr2oHsjZ0+vi&q@TX8Dl`si{s`p&w%6 zxL?`Vlm_=R^K~|)rri9R3~&r$3tN&Y|}Bl*}1=*!L#hyEsua#bc6 zG7f**QaK?t%?pK`m6+8}GLQZcvcmhbK8DU&`L=A*#cZ;SC5rRcGB)unVYbPcM9q0j z(R?6xJs-}*G6zb{_h&jrV^;l^W&d!UsD5R9IG_0ea``hM1$X3uz9Nv3d~64Ov-ZC_ wV}JVf&F{Z~oOWd#qWTb@sc`=@LFXsQ@BbZg`PxxjQ})jt0w|P6Gm_u`AC5upy#N3J diff --git a/libft/obj/ft_lstlast_bonus.o b/libft/obj/ft_lstlast_bonus.o deleted file mode 100644 index c9569a9602fafb0f0063ae8dd2e24417d9550731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 zcmbtV&yU+w5FXpH?`#58EP@pprJbttwGz;Q~Z<;$*ElP8B=L zwo(OXOJQ4t+6zaHh!f&ZK;ptbf<$l2tr9|E#+gaHPg{Y+NH5=f-rleTt>*sk&HcLv&Aqz^P`bB@Q_Y7Bq`NkhzFZQz-+21u zgph}IySd*uc=FqLJkEk~7V+uFziP*{*PV)KIOP{kI>)qS3qW^KT(;^fhI3)z?S)e( zHY)GnN`?tKOB)q{LJ0`W;|P;L0IQ-I&cXs^0Th?Oa5gGL){)vJ+QWSu1#-a7_Pm(+ z>d$o)bPSxAQMq}EMaQIbYplD7OoJWAX))V2rx zpcZw*VLyy(=g!o6VH$X~OCvux+o?sN-%Vkb2JJzd25|~;u$w~CiozrXT$BJ;2Ka9e zLpuU^ZUUg)xdGa4Sv$E{v>)MNzJxjrGCDJO*D2rEFD+U621WopK&b%l;jgA?e>qD8 z^bT-nv`uhpVcd>Jod9x=KHV{fW!rMMC$DC1`hpBcGxhmB)BedUT93>{t7jIhO>@qA zY&wX=O;finoAaL_Y?_*NRkyG-7Ji1&J1fASMHo!Qt|<(nyfI7e!hydF6on&Mh9(q0wDSu%#Y{v+|`B`b2_bak@?GvbX3!`M*pp6 z=;v9Nx^gA1DEimTKT`BBn70-E4)dFe-e>-)qK}wY8R^;c&;LH_>b}731pcVk@_c_7 z?0}onUCG@cw>{|h=@M~Vk`BQg29d`+jJpGH<3Sp@SFUfZCaKrH32qea^jlu1gZI04 zC_D<|fQ4YY)g5~MAXjbL_AZu5Js;fUcAxP7+jqD`zK>+Z6>f?jL|{~}3VlaOlfIPj zIy=(0qL;;Cq+E4Pn);UK2aE!0EcKbHQS9HG@PJW3jXj4G`THVqKl7oibArQh`02`Q zh4D>93OUVO;49AiMg&HwFIYwWsQd~y>8XFoZ*aa61{d;8o|}}qBHfHBch`vdM@sYCVYE34Mu oLe01~rZ)Q=$JC_%MWB2#wf^_0sb@!VHuukuM9?UY?uc6dAGU+yt^fc4 diff --git a/libft/obj/ft_lstmap_bonus.o b/libft/obj/ft_lstmap_bonus.o deleted file mode 100644 index 4d7d2bb66b80571f64fe168e7728ddd17e74576f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3264 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 diff --git a/libft/obj/ft_memcmp.o b/libft/obj/ft_memcmp.o deleted file mode 100644 index eeaea53ff6ef7bbb7988df1dce3e04c967d6d7ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2768 zcmbtVUuYa<5TD(<-MjSCy-Q+iV?~0fr9yU_q@cA>qxJL}tB4vYh>iDW?{4YsUbx+j zu~_^Q6+%GT2Nhow#EKwDeaVwTL813pgi0U#BD8P%&F3M41N+VVelzp^ znf+$>?egiTbxi{)8k~R~Bw2t`ZpWS%<~$TJaR%N4%cKIf1 z#O3RiYvn$LBkos@mv0rGv@z{LYr@D_rMnMWW7@b0pcmoP1VH8i$XF)|g#tj< z#;|d7{y@fhtZ=+=X!6v=@BCa}VJf`TaOol7;9hK3RN_7lj)YwmN)_ zgzn&wAx~aQGSDQ4_6m`j^%ahWerY*D-zKQN3%#D8?@^ihr85GR9!}5;0*x`M2sBQS z$)ZM9zk+ry{{vAdx-B-7%fn(V4x)If-l+zysTH>udfi}ZX4XDp&rHu8i-mU%!d^Xe zn$eQ)`gMQVu7lI=`mWPydOhC@oTIZ&%ZuEqb26^Ea}B5C)tV8+LFlytw=q?3S9>tX z1}}(UIqJ>OFbhHKL#K<255mbGdgt9G3Ztl5@Zdjg6wh{-I3X7G{EMKimb8PTx%@?Z zKldU}4+)hXp0G+E>L>S_`bCTY_ywsfoW)Vow7;yqr0BKcqtW@niNhWp&FOSj{OOrl zVT-~!Nx>X1sCVLq3pdku%%E%q@ zEyi7if0ywEh5wxKhQfcz_%nt7n(<|Y4;gPN{HKh6RQL}VPqC(&rR#Q%d9^-ZH{4p> zTB_D+J$D7{$X$)Vu6KRk#fE2R7^S}ycF*lp+2aMxF4#dga_wiHUz`r3YW*D8)QU^h zMgzZFEl7uVyuf9`Z7(%@Ro~s!l{T&vRcl~}Z~CPFzkGyKr0=bqahWf+d|#5M`lO|Z zfH>I)(l^hB>=VhCq`{hU)j7#^gZ(~hsnpm<(V=n_`y`V;%S6^{>>Tpx{*>VtnY_XY z7RTWyR|x&nNvIDgMD`tVBqm?3ZxT2d<@!?ZL(j1M?>PU^ATu#!p43lqz7hsE(w95s zlzEa`P4bu3@S99febXY(FFESNVfCBm3nA-7^&7!Q=1abXoVq8Zpv0H*R{|+fV{7Oe zw*HwR>(f_VUH@g|GN-rc^Ysos1CjS%610C3b^T9}Q)@?Yw|W2a{Zk%oNnQVM>)ayn diff --git a/libft/obj/ft_memcpy.o b/libft/obj/ft_memcpy.o deleted file mode 100644 index 78b03bb4216ed76c6fbf79dd60a94937fd0f34ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2736 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 diff --git a/libft/obj/ft_putchar_fd.o b/libft/obj/ft_putchar_fd.o deleted file mode 100644 index 611135a2fd87459910f36911b567f6c6febc382e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2344 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 O{x{jDebi%e{Qm$Zz#bU@ diff --git a/libft/obj/ft_putstr_fd.o b/libft/obj/ft_putstr_fd.o deleted file mode 100644 index 34af8ad092d97956776d7d1dc64c62ae3a30c70d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2472 zcmbtU&5IOQ5U!2p$#`#;TrryFJeV1q)u+t6%-zt9tKM z^_{}m)0z+%qD&?Z~TZ=I}}WyXu3R)rvpA%IVeP5Hu>^o!@caRJ1O@hgOQYi}Y&w~Ry3p`a&4JXQJx>sN1D zw}okJ_{UtIn40yyIb{7}ZnJ(h^%JIHEtuMmrkK(!+!VL$D?cM@!0S#wr@r=}J#L-L zp$9}mhjl8H+B$q#G7r$>^kLsZY&a7)y)(p)F_#LFO5+{YJxN+7Xm7xw^kfU5wMku096N=_N^2{Ad?W^Q3()vpu2USJ^(V;1Sy; z1;5UA+D15+=V~y1P2neOkFciPv-uxkT+QDCx9XRZ>5^A2NB$hRkze=R*q@KVtuz}A zA3KH_*nsTrt_Z?f6Wp*F`|da2P9A8*Ugavd_4-_+5fl7ajfb zzt8y};RTdG^_`mkSBMeiAdajAyzXWe#JP+wHT7@5^?x&A-$&M;%Iuk?=CVzbamct5 z!XG%rpH=A&1G3*FU!GsuAx`?;-!g;po$3Cl_vLztml0EQLI{c+e};^VsN5;^^^5;k ypZN68RpWn$n0~g?M0FR(s+f!IYMcF|G+^8w}HVt8QydQ*Bj)peoHAKN4?_llj2_ zH6n^b72`p}rb={A*viDVYVBUq#vfS}PwCwxN!*LE_ zo3s0_CICV~!T0{Rod21XXH_zqr9n4WdR$dXaaCpc2UWJav_C#)GnC#(ui zEKan&G8k|W&+xt)#4~1dc*fe_-#O_S-U>L&e|W9XD79A#Wk~wX8nxr~AS_uku$rPZ zQ?e?IsFcsl&CLOP@Umy!AZWqxL@XWf9V%W86)w$%iXD|u>AA^SR+jQ_ zz!B7qb8X|H!WAzpl&ufy9pr0d#V+M5p_2pGJ!2hrctv^kE(}o^xDG{ZL~_EKg^838 z!}gYug7}qCw0(+~V~+}Z#u}g|9e3KscitGW-trt@T4RHiD9jSii{l_VVZC)h6Wfiu zSF)y9HKxk1v1&{ety?nKLa*06!}s!f?SyshKYQI}-SV6|$>VLdZt=bnJ#`78}@t8^hS3Dw};GyvlKO`&ehmLq(1+^7@)BPeSW64%}+bxdvUxHbLR1sb-=Qv1~A z_FK>vZ`d5L=9_HIH_PY$g&QZLPuM2G3QG;o2lO;{df`eC+k-bOdw#@|Q|y?Tuy{tW zHKq1xELPii;R7;a-S!M)!7m0*QV?qZ2I-35v7Bjm7W2{Jo?ZP>^%BTIG235!k~>_x`j6O6C@de?xp_yN(k!xu1+q{hvFJPscX zUl2rVrTXc^oH`5sfa~Yn-#FLDIrKuHK715m687$wxE}Z67FJ(EJ;XD!Iy5_xrdo5v;C=L&WsX&PhW4`pGqV%y~(tH`!;`fG8d2d zAIW#cABy=?$*x3>M0+9`l1wLsRcAJr$wzYpyhH&8A`_2uhlnxHjL2ou(f%Xk5Q$_m zks~BYK2Nf_NG3<(=@?O*Wl5Ao`(Onm)d%_K)7fNqIv(?(|7`MTyfa5)@hs4pC`pqA z;{S2wtZFUn8}{tzlSDi0)mAsuIYyzjYXHX&4tzSur`+D>^+y`*`XFd}@=P-;w2 z`w&yr4*&>ad!Ef2%*5z%G*gH39cs(d`aH;nKz5dT>=$W6m^PVod4jG9({%~DK1??R z=(+&ioTDEC_a=Dnrnb{m|1xzx3zh*&?8f?0>T>=Sxc$^&@1bsp=Xj4A`vKWU>z;ur zY(GHBcjyYIV*_#!?#*hRd`UV7U>OFa;sjSM7im+NF3ZuC3A*f}@snet)G)4*05djT zpq{6x3*tLr$t{q1t?sK#_r|<#J=d)Z(EB05jbOGlK<^9C)d8%N4Hg{+XL}(hNPU#9 zf<>+evN25Qe%fR|4Ydi=)*k~Zbt=SogWP>~{s<)AMYKN-STn@+i50SE957Sh{Q_stHejC?I81D?cM4EH zh0kLCcXKti0?g{4a7n@Ol<qPc*N5S zf9J>{D~7n#L7DvdB=L>H0579B5U<^ZRSe}g`uUjPTg8mas9slq{;0sEfBe~nBfuxt zFSYt%flK{P!9S(oFA2U&!N&y84u7DfpK*c9ce%_{_U{QHm-=56{22w8{=cW-E!L#2`K+F8UD{vb+h9UjSes31I)R%oO<4atw z*HrY!nOE3H1(*905;#t{zw&*sPtiXm{KORecLL8S_#Xs5sNk|Lrxg60(Epl(9}@Tv z6#P|z|5(B0x_+tPvi`qT@N>e?4F#9`@~(oP7y4xd|DnKb;(3?*@{Yh=3O*_DW(A)S zxKGR|u6^!;3ND|E&ndXhnp~7KgF%njK#b1-JOxH zu1x$8F*EU0#LUGH=ZG2Y>+Ox>wY7Rzoxi`{eajVoz^!n?{U+0iK4PZ(a&hyqCpxyk zy*By;owj?IT&T4k*O%U0pkZg2CULwL?AQR)Mf~zohO3aiGXP z@qhq(3eP$mEBM6DEHx(-trbpxF7)K2>c&8zVyOGJuwNbxaF;`COnq4mJMUfGH_5y?*vHpO78G04I#C#{W0B<%P`v diff --git a/libft/obj/ft_straddchar.o b/libft/obj/ft_straddchar.o deleted file mode 100644 index 70860248f6c1e008d5d5d683ef84598597b35422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2784 zcmb_c&2Jk;6o0$xSvz)OJ5B^CMaUANp@^)Twi1-O#Z_h4egq*<5CTPEz1}2N{Sn#g zC{zSW3@C0uq#U_`dP0a3H*SsiDB;AP;0wZ)Kn*ubAcgmKXJUJB1P4aidGGz^_daHJ z-n^5&`kbmLAcg|xp=${gprv>9jHhNGj?6i;`HR{3Et%QeGn?yso7wwjV|@=|?~fqK zyqoP1_ue-+-OaX1H@C8Trajxfkq$xZy(l7E*>>ZO(#*E+wf6V-Jxew1j=A$I_#Vw{ z3xl@gp!vgsPWGg^IUd4{Ey}n#9_pt02~*viyWg`$>eg(#v7?yw?hkz%x-}aA^!cn*=R-J`#xl1Pr7l^vr}7eI{}?GIiwA z*t16f7z33<FFmI~$6>659Yg6mkRi}jpyDxWGAa*Hky z75W?jV}K0>D3o2OIyLx@B~Z~g#(e?G^_M_diz`QmgQ0Ca$%hfAj|LqQT!_X$P%n3JZoqlT6oNWtzUk0=sOe z&QyJa1@zCD`Z1e&jUCt1>{yyjrdj+lLtaq7GJrpE$3=Wm_fv=Pvl2hg?UyCI%56)+SGn!=G3p}k8pqcq z{@dJcO89kdC%L3O_3rBo$L0M7!N@zg`qF}x%T=9KFse?`GF)fP1;ehCN)C1{XHX;e zx3*9A{R`#A3K->z>ln|!FgIOuE&Cc6#o}sd0iO_jXO?(upI$7K9S%6l3yW2&O?z(!K%uORYsQxcF z_#$_p`l%n~`X5D%D5Bp`^~MChv>O88Qsfts`g)N6r`&()U;JmezeIx_?l0paufX5+ z{a0lAj~sYf5V;il7w}uC3_8CKf4szhrt_mWLHG-N1u?lMgbptCu4i;7nR^YF2IY_Q z3oY_cetL`L{PT!uSNAI@Zs2z?9_RidANkV|wr>G^iHdx7wDvP^$~$D>AU_Hz=l>hT CF*QN} diff --git a/libft/obj/ft_strchr.o b/libft/obj/ft_strchr.o deleted file mode 100644 index bcf3a074e5e6e9201a787630ea6fd312a194c7d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2376 zcmbtV&2JM|5TCc}xA}0g4oRR;s>%mQ_z>%afXatOQ&G1eN;$NI3xcqA){enm!+Pze zpth*ARU=RZJybpQ+zVHPgoKbdKyUmLNFZ?tw@4h!%z9qDyjTc{k@n4--^_33?d&}J z=iJ;^h7h1cz%l4p3I+H>cJ|ZJb{bL`IX|=VY-Z)h)s@D}nH#y)Ylk59>lFIQNIifX z-@Hsc`2X;e)Ng|f&aC9tUK~}%^@jq1)fW$2t=79Ky+nDOTSG<3*Uml?o5W6gM4I-{ zN89a9V%P#Oc7SOgOD2;5W(rP>03;j?8@8smn)Z?8(d78H6CdQhlmis3>%3<^tuQ-I7;t?Fee z#d1(B`3D||J5aP8xNQzpEkDxb!&Z+QKqNevn z{lFOfmO}RT-;stjD|@ZKWDn}iS((bpfvoItq3m&u46Z%95TDn9%NiU4>*fnzEN6m^ZCGQf)jenAvlFv zwd&z5U?*LR&LwdIui~<&>=$d`__fe;zCJm>uO7OEi{Ml$&FX@?xQI8k1o7}n+4mUm zmKKVETlG4Lan2pA6uNoTKU7J7xcrGJ;&Y-hKIb9%R{^Z4KXFN+L7195<(uY>noETb zsSRu5>N&}EpZ)5)v$-Mm5IVZ?Z3cf*MAmxj6yovwpu+#*rlgr*a~%DhkZf%$pt+}z z3AUBG$vpg}d`nb)r8lFu8($6Q_*?AGyDI*d%-6zTJU-kpr{XDSxy`?%hwoy5`WqMZ z{tCk%;;#L>$4ymzqW<;aqxcFhA*P=RAvn+VZ;=rbJvNWNZr|@|m-_T8s@Fe-m^s&~ jp}L08x~TbA0G*#ium3khSl;@zymfW2yw!gALur>RelqFAyUw|-ESL8f})vvU}sGWD~PFTyY zdCivJ2=m1md)h7@FV44P>nyaIZmUp@mReEM4OVRz3M-AkE7YrgGw{R0+)Sb7N1jtS z-L81E%Z0jMsYbBx4}KUys|fCj(}dOx`0yXo(x%~X{KVs4c@wnttTs9N$k0u!)|1H7 zAfckbYgYC%{q&)f{w;a{Tt&)+=kTd%+8@>-QW!?PsnL0$zd<|@Szvg-%7�bL5T~ zZi`&1BQhN^5sAsFc)BB|HpB~6G1D=En?g6nPhvrT6#AE9zIvJ{0G@U zn+d;l2e}yi_kF-@fN=mzU;sAd05JfYO_3?Yxy1V0Y?mvHAWmkHJxP48S9<|Dj+6Ye zj2}zzi7O9JBzRiqCB{#&rh4tyALq~i4L{Gk%zKgX8HL9#i)B&a-(&15e8jk+@E+q2 z6h6LL$mN-*y(jnoBJ=9Gz+Uz$?b?!4sWiPcup@6h0^4l_frrkUJll{W*FTN+x zFev^clN&OSwdy;IeDa=1_j_EF6C6N4A@ajdRV)*%={}IlG-Ijma@?9ESj+rU(;sk9 z{2Vvuv44qwo#PcZxR`A2gi+>|6#b2mTUFgJGePxDiafvM@WVW?e!brpfUFbMZy1M+ zmwXL5bx%maH=O?y0tr!lD`*?^{wBD8Wgf~;UspB%TgVyby7U?O7{|WI{+9&Blc@Q> WMoz6A`Q^EPZWBPEIJzTh{yzcY-}JQr diff --git a/libft/obj/ft_strcpy.o b/libft/obj/ft_strcpy.o deleted file mode 100644 index 2155ac2a036877c5a82b73222bfee606a0378364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2504 zcmbtV&u<%55T4!jTRU-MJ4sbqiogd-E1~Q*NhMk+#i)e3Za@(tT&iGs?Pq)GdL4Op zqcjpKB2a275WT>S11J6fB)Cu^QPIDolDU;zBo1a~{hqykG7=Iay`A~KnfGgUX7|p< z=G(faffNm{zywJaAY)GKQf!tWkCEHu{*!Y5Ibt{dWfWhpEir z5#&ERn;^eDoM{(LkX4yEspREE|$+WB2u)XwCVnUO0zb2_)E zE#X0Q3&|z3bkfMZntd&M_SE&|H%cc@omm~r0143Hf$ETq`*q=hX6O_^)v}3e*K#B$Uh;wRc>CcHl z(XE(CXJFfj{4grky_(-D?(tsWcKzb&nswehK-({9r;nvG-(WtULyiUsr48Q974GU+7fgKzBLIFvDg__n zQ`5A+a|@*CHQ>qD{QX93KgbbM$l%9NGw#CahYW*EL&kI^L3{Gyu;GS&sWSF zOgAgKj)%k}&XiA)O~GHoSx#e8K~ru6j43REF)9=Z$JziaVnygcONsU4Tq7sjcOLEJ zF0#srA5}jZC`%&+l7C6y6A7LPo7A%jp4NFq;OB*=bB!~P_RIgmUlP3B_ol$t6#gTD zw-vrCa9!c4-AJ&QW0C7)xx{iuXvu#e@Lh$E1TG3qcS_#tmf+RlA!aGsQZ75oSHj|D~bB~kpK$KqaIQB{|7{l^|$~4 diff --git a/libft/obj/ft_strdup.o b/libft/obj/ft_strdup.o deleted file mode 100644 index 1e68a64045a6375faf9c63d833011138ceae72a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2696 zcmb_dO>7%Q6n?w*tev>A9Vdd8@?(kqaG>j^EdtuK7?p)hQxHN53ZN?W&)PBgC$iU3 zQYlcy1!^LGDv&C{1;GJ?IC6ml1c8XSaV!U<9E@-z4&`Q4B=g>Q#@S4a;J}l1-+SMD zZ{E!8d$X@t=O5QK4Wwvr2DUwk0$eq=?Ibso5Jl#U-Tc*V{2sTPD>pZ+O&YP+tebY` z$<4^u{$Qg6kt<;Y*R0LPy4JKdw|?n%yFJg&bnI_`gEkLpT5Y?r(uT;ZBQ(c`)ggFm z8ebb$i|jS4b;{a|TseTY$kBRZJcwo+)3vUS2a&;(w6=c2By!*fe~|cXyJ>Y$ckIUZ z@eAK+quRmn81sdrx9<;+YBAiO9>JM?CXU36~u8R!C<8UtV_ zcDP0a2n`$nU-(QY6aoky;s{*FDgF2$!jE+ix7F8|2=ERYShwFUwIMk|{S|aDp)!b^fzF=k`F<&V;iDIr$Efva%6UP$yg6pIbXX|O_ zcs5Ziq;oFx`H-1URcQ{$IyDyxP$;`lD_nBmKc*k2)uU*ao&jwss_ows2)=_Sc_(7@ zkkEO-qv7al`q>df{{k5RA0y<4`|z!4+O6;iDf$5TXtX8RUL)>_f0`j3$GP~z8Vd}6 z!-nc?%=n7wlPqB5nf^A5KhF*tlkA>JcGn~uI>!RDEM!bG!&7{z8PobOu1RLxrRi(=;g9aF0R()|U+IovpQyAQAm{TM zP+^>BcQu;Gih1VeXN%bD_(XTj0PvW=sKzPFU)Xpg^12vCtY6q@%Z!Bg`T`AJAT1^E@d0yM?Bc^`6rG|A3zqxXk;4@NETuQTV(q(U$zOz_SV;3ye!u z!Iy>KP;hJrF7GLLUHEaKX;0pLJs@y(zX33_PP(3-OQq9QXA#V*Q%sqzv*d!Asgz0% z_Mu>4XKy!yAogMlaGbC!U%)Qgc(8m%uC*7fW-gY!)w!{0@4tP<901%+KYj zsgeVwRIymeY|oF)W@17&l}5c>BK^O}`#6iY&g7&&i=z2V0z#{uNB0b2vTh|kDGb>M z5?6bHejVO=mb|0@_X>b`^!@OP;v#X%t*(g(e{vQ;UTCRQ?r9uQG2&hn;0H2LXqEdA z;)B*dE5N5k0Ii>nR9*kQh!N!|K3=&c;$HTGXv_RkQ$G)iUlzrF_+R3uJac-fA9|a` zGa&Oyi2kLBEvR%EPv_$mxqpc*p)u(EJ{9#RzcZa5-5oMs;zh*NH6a8y#DYE{$0I72 z>SIv;^#S?m4p#F&hnVktw}R?2K7F|%;$=QsKZ*2v9>7OvsAorGmqk;qlY>HW)MIM? FzX7F{9Z>)P diff --git a/libft/obj/ft_striteri.o b/libft/obj/ft_striteri.o deleted file mode 100644 index 354eef1160308fa1f10f87450d2776910fdf8e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2448 zcmb_d&u<%55T3WYZ{xkvN!{^}J;Ll&TyU>AmmGH#0l$ z&Cc7sTE6gxAp|H9Fb_MLVgc^Uo%KSxT!3lxT&isTS=ksAE1TBKS>Q0@yGCfzdYEuBR0!}2fq)8!%^VI zz2fp+u}?hj?3bofcQTU&gNgu&mMa15P&JcVB)R)0M_X-RZau3 z_H$r5^Z9%pVB&z7#ju=A4e&kg%cAWXZnjgc@C||N;)JKbNytwTCURfloTI=IKVhY2X~9x03FD+#Z+l^@xavo}pc@wF zPP!-Dx#M$ZlGJ(%dQrVsYR1)G90jo-1#TTmE8UJ?YBz(Z6NIJHCrd4~c%{Xp=AUYm z+Ci-uLnZ=xP+##PXhIV9f>!7^ia{7d05t!{UBDA`02FcMeGqE}ad_`U?mH~zGsw{( zp_;+#PT@;qamqG4^Z=kzS#S(zA;dq<6al>h9Dw0^Zq()?N)%Tjz~*q8tx|46xx77P9w?&e_by#6t>3Fert z6m#@OmAZ{4U<+z;9`%{b^V3=(mo@|9B#vwr)uP0YS{D~6Gb2d-iGP9hCo_EJO2g9` zp8U_S{wyOEYrERGe(4dsic|YpX1_&7#Rsgvr}62PL9VLtS6Nqf^_)x0-_ZOc*1y&G z&sZ-q(wVa7dYO6syx=zcTGFa|wOZt_f*bp5F}U?^r{m-8U?bi=a3jC%u^xoYF1TSg z_T4w%SvuZ}z51nWAA{R&uXd_lqk)&YH5S?qLZ1nLrP_?Vj-QRh+wEeu*sCFa(jokR zgg$}U{!&jp%FXh#A{g~cG>trQs$Z4+0xwiQE54u>j1;RslT5eR-eOds`?_e*Ir5!i z@&^^jsQbQ%eD)qG_uE{QiyYvvAAY)0Imk%&ge^nmJPhVd>KmE$h3q$%nU&FC2s{a*1@g#cwACc2*mpXF) N+)kBI9NiH;|GyQw<0=3E diff --git a/libft/obj/ft_strjoin.o b/libft/obj/ft_strjoin.o deleted file mode 100644 index f784d143105fbacbd6731c7c6959b5c13832bc53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2992 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 H#9#k!usdKS diff --git a/libft/obj/ft_strlcpy.o b/libft/obj/ft_strlcpy.o deleted file mode 100644 index 938d5e659f1c569f812077404a040dafab9687d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2976 zcmbtWO>7%g5T5n=t=%}WourhetxAw+B80MT(jEwuU{slIoq#GtP>`sMf7U<3UI%*} zno3b4oT4}pqOHWQkodXK3*x|m8;S(t@6sG|%%Mn$#38)}0SYs3-*YyL`H>ju?acSh z%=?}9>}!dsr+tb7QWThgeI!|cj|2O5oSSioV&t^Z`q^my5;s~4J4UOqWwfR@jn##% zEs8Ok3tJFb3OVKuM6UOc`F&!SyxSiUXvek^8|Yal59V!R-fI-Z@oHkrSbb(a@^yD` zbglU-EGO`6iV*C#Ew9L(Q zqq(LSt;G8F2YY*a()XP|Nd0c0V;A+V(fl@k`5UEIITh|_YB+lT@o=xwrvdnMB>S}Z zQ8oNn=<(3-z{UP22LMzCK0#gV2k@Ug0ND|^*zY6&Xb*uJo(P3-hXN7g0fIwZ!527h zKQ?6eaddOr`=Q5f?w5lbJjs0I;iNN+YWl!K@{ot-JIblD$pg4dI{zT&vdwhtd?RC?$;Ha0Ox}k51SnUr z`-W976)ZD1Sh8%Wm#&&A8*+6Uvc+_bh9FSqV?pV^&WzRohxr$`@al7*T!|{jy92=+ zcmgMor$)kS@~Lq24d3}5&36|g0RBMU4=MaAit<~yhZG$gHiec9u|~Z{i;0!XbCr?N zF>dp{iaC1}D_PlcBWHqZvA8?fLEX;f%)DN7j`~phz}2wAy1RmL=F^fapuNaK+6;^2 z8Gco*!1{k=hsZI*{MsZ7HJQd8Mb?EnoMc@|)|+Glud@?*_F$3?CE3ZOn!mwR_1HPq zqy5BsF}o+p{O4FO$wEoSv?rMQ)ny!tlC>#5uA)u)x^T6))_;;)==8(Ay-qReehnXR ztKtS6AQ7nGdW>9775;ilXkLA;{`uJ< zE^MlZAth%*ymOBoXP={ZJn=&UA93;Ya7j5P4B5}40-qF`*4Hiwv>*8!eq8XfpO*x_ z;Nceqp7!u9fwLa|O@Uwa@O0iJ*BsSe@4EuO<>BWAe#gTX1pd^+F9|#-H0^JeAJn@C_^+NGz8uQxIk`m9M2MrtHUg40RmJPG>-`&sRwQU!mVv zcU{W`3jExIJ-Y3a>?-bRqyZ+m8qR3ARB7&OE51&#lM}?+) zDzimwZP^j| fay*(piNp>9_zVs2-jVN;nA92p6w0G6z2pB0%B5K% diff --git a/libft/obj/ft_strlen.o b/libft/obj/ft_strlen.o deleted file mode 100644 index 05d939b756f6a34df9c0109d62839a0b303dd480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 zcmbtV&2QX96n|r{H=Cq&wh5G$BD6@*0#fWIEnfvnP+8bOK?o5fK(Khdvl|PqxAI2_ z6@{oDpePbh4jc77KX`h>Yb{4>V7)<;8>?}?z z4m!_QSB@37Q^!{qUN{b5Szs`=x&Tl;yHA~(!(;%plR3awxQzAGRi>7@`3F=ZAdK|hk+Mi8Zt1eawyg-Ievz+d-b2!O2raW8ZnlzR#Q zarrF}n{{#G&{XYPtmXsA(?gOM??t=*rE%eK^%6QD_Z>bJ_z*`S#6R|70(uGf2scY& z+PoWv8-vBA<$Ru(#w|+X29Y0TU6~gIAW6Gj*>lz@cycJLjzMb}Fin_?X$z||bHkd> zETekWs#JfljBl)&_fUJ)FmMaX@lL#oR0aMT-)W(DIay(!*(~1jK8_RS5w1J(}kz929?&{f{ydU%JY0e~G6&PqF?WBbBOrYL|JH zf57^a8vj1)&okH*mk&nfh%I8w&(Dw;W zS9Y>~+v{{$V z_qNyV;`Q(E3k-uuG9lO7z1SPby*$|I4z84X9mG!ug#TZ@#uVkgQW+cEB)1g7NcAbp z94f@AK2^3Ao~S-nd|gc#DOS%(ri|@FMg_XBg9e==-`_Z3hf#s<`xqL^_ec5t$VGXR z1L#*qe)LTvIaUDBJt3FVtScCD+}+k!`?&Wm@qe?!DV2~>#VLG=<25&UsNCEoql!}$ z{lk#Eq`N=L#M8==QJr7W2~G~G-=9pXI#Kmj5 zjr&)vL+jI5S6}~aYO^hTCZhUZ5fo3NuTT5aYe#;&O#Va)3dPYK(bxYMe?HvR diff --git a/libft/obj/ft_strmapi.o b/libft/obj/ft_strmapi.o deleted file mode 100644 index 8387053e7feca61bf52a3b163850249bcfd89442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2832 zcmbtWO>7%g5T4!jTRVS_lN8!ggn}qdLCQL5BA`&(pvti64+l_CK}2C~uN{l^I^a|@g9I`c%=&L;?e{6OzP4l5tJ`L6Z3l)w z7($AtnF-*XVy2(+NQ#GY6}y#!U>DW+f225dLy-CW-hj_oQlEl`%^SQ zBemUFYnhFU7+7cx-3TD7K9PqpseYPZ`m@N*&bsj)E3HJuol;5HXN8s?QzL;!h7eGca*@ ze(cO)03kqSh!XVKeQxxaKTYgDWqxb|*?q$I;Tt?dgpLL=|Dp$dJ3KTIP?I=l6w#GV z2AWNLlvi*7CH^>$LcPAy@isc%a>x4wm9AcY!}k)zMDKOq8~K`)dKHH#EunsjLyWAx zFKHmFvu-rvFE1jnkgmF3bv)x(Zhm~#E>{XAcYOMUF=b3oPM@s$(HW?eGnHh{TdH{F zqP0>mGLT#@744*xE0l``H#vJEnJ;*@l{{Nb+cVjuQ%L7L$ShlB*voY>sgX=ISM>90KW<2_ z)=PheU2+^2;el&Q|v#) znqEfmR_O~xBIoxz4*e&6)UTs`{1oGoZ?XS!2zS_*amjZXFNOGP>`N{A?=k*Wi0^+x z5W5+|YwVA+rn3gm`vl|Rdx+^^WbJe{zhtG;WqTEjvh7%gXJ7Wf$drmj8@rhq)ZU$N zC!^rzO5A3S?SkQ!JllBT#f8a=XJy_DG$0s`vszrTvRV8d<@e3u6kMADdwD5Wwu&|s zEypQk0{Pg$1}^SdY1D5QN&jE@0w)O8p`7nEF4S)&z?$wYDD>STOxCrG&9Tvx0PAoM z4I>_`cS*m-psY{g(R-v`B01Di{@UR^`5^|&%#$k2oxwmDBW{_&d!64vZm<0}8C>Rh zX#dow;r%~?7*XUo(e&jw7wtz9U@iA5HT8S1{F|IVagY3Y&JWSxSI!UPa$SjUbn;ii z^g9g5?~mlm^Gl!lwb%U}=Yo>&neLCi2{K>eZy^@m6GD*SqW+wmfP}eJAHCL}>#;ul uiiFqCBBotvmrz~7rz@8@U)~GtpCr6K{k4%CpTNU+y#G7wQyxtjUjHA4NiEa> diff --git a/libft/obj/ft_strncmp.o b/libft/obj/ft_strncmp.o deleted file mode 100644 index 2d114f2c5bb635f172c4153ccd9f761f51838ff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2720 zcmbtV-D@0G6hAYwcXpFab~lOk!%B%zTdQ=oNrN;t)|E1vE^P%N;)9y($Lxph&W7FD zkd_veZHjANQdB4i+9$1uP+w}H4+=iCkNySeK1669g!(2Ji090nn@n!ED0pDz+~4o~ z&OLX|+&lB3edaY?(?FUACt({&7NBEpk5m3I1#wi)Ot*iZZeMyh-EKZ;&#c|GI}~hP zT7&q~0FLh38$_&Mq#KQv?am2%E#AuGczW4>xO}$rX(;lEeILOC30C8`?ECRsXICfh z#h0E!CE?az5WhUw1*-&>hB-pY!}r?u#`=@UV1?E%THEfduWW8^@&cCajdy?5hO}p6 zBf^L!cJGS~X~XzT`T;OvC!^6QfMH>L*i7v)VlPEcL=WvfJ@U$4fRF&4sna6>Vqyn0 z<3Mcqpzq)g)(_zY5b?W6EqK&^KuRY%q8Tzuoc0zWE%r6uL;BVEF8Zd6N;?p>50yXR zUFcWme3W1`>!YFPyRr9tG)$;lRD{g$aU8xW2~+bI6Ar;lw&{A!(Of0t7DpGHdZS!( zN5{skqt@7wvB{<%JqC?>u8}NwvkkBA=Bo2n4w9u>)k#(g<$AU3CMU*|#j@vQlBb$k z=U6^jDQ62FG~GtI=sNk)Tq#qB?Q|%+9yG?lryJwoZYwELh8)Jm;XkhJ33^O4?ZTU& zEhe;m1L4RDzKW-jql=7M4X?%$SM*bZrhWqz0N)}Ng2Q;%H0|%$AUS%2cxm*!5Lhuj zu>W%V{I;P8w~!`6{p%vq6sDOLhFKK)9nojLEuvFGpAx&x5(d6P|FZAH=m$~QpB4#A zj1 z9|;+-wF`H|3(2wI_6?rg-?;aQ&pwW>gll;Lhgk9{3 z7d$3M9|tn2Ki-9~pFMSJ>owu{1?Hvx9mcr9d{gx)=B569#^)6NJYzYZ)PKyp%#-|O z<`YRjDjgXEXUc zet?QQU`-q_bA!JhgPv^WCd zSiTiX@kpK%8A!+hd&*Vkq|hH6SD#STPCh384Ho{)^GK)WPhcQ;KBaDs$(x)IV;z1< zecQvH&LK&TGL|mJo9jzSu$T3vryqK+{O>sb(7)u{oUh2>H_lgiSy%FOu92Hp(3x( noY}0Q`v|Wsllxy1w0<(R{x#&(-jVJ$um1)CG|HnTsrCN>2X7TL diff --git a/libft/obj/ft_strnstr.o b/libft/obj/ft_strnstr.o deleted file mode 100644 index 1e89f1bb9af7cf7cf9c2d308f8a08aa854ea230a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2936 zcmbtWU1%It6h1SvcXso)yZLEMjD`hkik8eYX`sd~HBwfmLo1?e$%DG?&+P8t?rhne zjZL9gj1gmAk|LrA(ifpn!3ROahY;`~;7j9M@To6K@>X9Ypb*cQxi^_iR}nlgbI4i_ zY8LgOb? zJslrpN<8`4SiD~vPyyrwTp9#WPJ$A@(9_cc5Ydn}pw5jb@#lNa_naENH24DMW(;Hw zQGhyg%#2QWX=1}T_;FbD8+;;E9b(?c?e+BV>m2%I9Z`ims^mwYN)G8Nfl~Zgd^36d zns0sTTh(LM+rD)N2UT95_pBthsHGtFlLhh@_=-}&*gdjQWX-D`jX}21cHDNVSj#(= z)PmJ)*$pQ(HLab|rY5Im+n)CXu$B+s(S|=rhxL#dfW{ zez9G!&X)9=T`0Rytmd0=6b04%A~=>+f|}((t$_vGPRp)1Rw-pWF0||$R?Y<*9QcpZ z0vPhw1JaGxK)Rlk#(JZ%HEiP(h|@ztZG{)($q(g=eX24oAq7q&7J(c(BuV-+-bVw` z@R4Y-ptoC1T83V$Ez~Ecraj&3lJ0j$x1D0GU9upsLhK7BXt|}5Ro1E?V?yZi-lQpU ziAB2qVCoW!t1eU1Y*4K*MKzhMuCp$6p7oim%VbFe(u}E9)=f+g=r-Ai$)5DyCrp-d z*~v1SFxhESseH*4Wi-uV>QAf}*>RJ_Og3n;u{0Ymv!_fpZW1+?X2V#IsqbSojLFt=k(vqxVZ)o}*WeL#;{C?2MsrU_e#HIKfzXOiP zvx6vrhcqPPXb%MPd*2u_k)a!PZ;SIdaS{nXJa4Ge-9{pCy0A!w{lUZOiWBlUR|Nk# zZqs~7s8fd@9Q88-l zc=>?Vv}$>7+fKOwn$vJC?d4aplPx!2doopfS;GXueJJvc@Zb460^lR{CnyOt2ow8S_~y7G_PxN9Lg6FDhI5kZ zT@H$U!s(B2Xa6DoHy;132;^h9)(qmo^Csw3eyDEofH>#HIAMg3&)`TDagI0)pYzQ{ zKa4>U^~HDsot@%!{!vZ^gE^NV5l`n)=!6To+UcXBGt8xPf!MX+S)d&AJYL)%gpr8# z`xbzUN~iwq@(m&SME&au#0#AMF@)!Y5Ula~ddL|vp@`g0^?~nSQHSc&EiL9R@GN4= nvHt}?@g(8;pCK0R9q~5#r0$Y|LUGiRaQ(jlIw)UK diff --git a/libft/obj/ft_strrchr.o b/libft/obj/ft_strrchr.o deleted file mode 100644 index e963234654bcd2861e2d93cc388e23f8d6d2d6c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2752 zcmbtVO=u)l5U%c?*E5@+`Af)VU6BEG7t!t6WEU|SV`Q1NH|#DVMikVcr>8SB*weH0 z^u#Dc7iU)-BC=7zg9rEKMG!oQcvu1}BzyGY*+Ya0?|-lX#~pkTp!RrOWX ztLpb&z5cLp^|GocAV`5ZIMf6Ru%REy^PxBoY4lt)JAat%-JIE3-Rrb=&9&9NE}1tA zoNXTg1AsU@Es zes1{esVieIoC44ps2n1%_{Ae?;!GF|U*VE58~}-M&qqR8o_<3>)doD6+?F(dab-fyDX|9z+Ekhc_=r9trc9@67V6oKlf>zFUEw7SW zcKl|o;pL{Ljq}FTxv7~}XuSYU-)`oYf?_l9eY@%#Hsq^~x|4U8YJR=uE49F} z@|RjA=R!H})=EnO*j3Ai!zjRLu%YG!Py^R$2E~SLw|w96YzO{hAwXwKq`dzMC@X2@ z^hi8$2RHR$#Ap!FcEO9u^vCL@QCj=&^8}e!n30Pz0xSp5gingFH8Ow*I$+J zurm=WNqE@5hzTz8E_1&RB>xqze<|TU*K?fHH$}heX^zYF>tK|fQmaz5N+sV}2E%t; z%Lts601UfPuRGYK+=JRS(#1W`UU1D@YH*wDcwl&qz%gFBzId(~SoS+$xbAYjXqC(O ztWjb*zQF~e_e`vp;TQ3H0dP+H6(zdI zgo%4AZ1Y?Y_g&y}kI-KwdY^^g3I``SKz?+7^uHn!IOUdWBKrgfE2Kn7_MJnUjFI~) z2fvQQk|_JmAU3G}I~;tO2T=XghjRUo@-@#RkJ2Q+te-?dltq5Qsh>%fdm6yED9C$9wx4)Y NZjgdRakQkI{~zJ2EL8vi diff --git a/libft/obj/ft_strtrim.o b/libft/obj/ft_strtrim.o deleted file mode 100644 index eb359fdf9d5d3123fdaf610bab3968ab887b53ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4320 zcmbtXU2Ggz6}~gGcfI!7o{eKl+L*?Hw2=sz%_fydiCYZOz+@Xk)z;Khn9X{3)?Tqc z(f&k9z#{58#rC#US_!GBD)3U#N)&-+*-76sX?H>yhAPyP1o!YAA+}va`@EQuRrWW9s7kzdO>)LjV>IRCizVQ34>wZ#z$JTEJLR6bI_-$fr zI<-HHPOg}Tu0hAE_vn0c-u?vD#v1JHYo}4~6A+n80PADh=2G{gYvy%o*s6Vxn%Ovj z8|jK7Z8uhsKZJl;-M%-uk}(g>5##rBVYW%$7sl_d+Wu-_TOUIsTAkW7=O{qk-a2F7 zHD5(nHW%&9R>3|G83lyV;vkx6H!+(Z3_%}#TCleoZzF>SMHDV-_xmQKNEK*ne(cw} zIk}?k(;n*I&yD`bXAk!8(*}Z!=_Wh3pE2VIGx{G7hwT8;Vep+H#ivow0Oid>R9e>YUJxrNuOqc67=wVI z=38Kzg^~6h0yXQ4xO4rLi#~S>5^ytZE~vk9!Q)Om1{t^skBbTJNsl`zILG5okx$k| zH=<{8iD)Lhdhq{4!Znj}YsEGxcH8O=((rQ}5;{O=0QZvaC zYg@5wIgu?S%5H^a3l$+Kq%K}zD#Re&K-$%(n07g$9qjE2-9V9sfYC)n&kXxof8+)IY+ukw zYf$lIBc9ana!am1MPg6>Jt3!lw&kyR@|*A(U1Gjm1jrRuQygSa#5BN}qAByv#IRC;39{}>a;oRW5ae9OYg15Q;K94-dgU}94 z@b2IfJdCM%Ls%X543A1fn+(si3`5T$be!Y=C=8EbJQC*-0290mKu{#qcbgAD_L(?; zAkOtn@Vj2Pa2&=@a2*m2BQws226#`;-#nx%_$u#%q!)`A;awI|o#DZc5dG>07r0jC z?C(6#v&p-wJQDmhKkz(1nBkurF%p#E;St#W3AOk+4_7ce#`Tvbv9<{w9^v{3kQuD9 z0-p%~67QL$kh+eJQBgmIegizf{<))y$wtTDx-j;h4PchQFAAJ?4oQaJNXfQFLu`aC zKunDGR72%Xjz7 zpQ3Lo`boh*t>E-wK_unU|GW>gq8KIqqTpv0oa#1FaBlFh2VC4qlk!G9_6a|-^lz@Jp`C4mo%kv7%N=Vw&GWt}f5xU7$?H-+i+V}yG2 z&Lh!EyHnNaL~?4XJP2Ew38z~=Js6wkA!{8P)wwq z#Jz86#x5#tX4i!MWvM7exqb=1hRI&_`z?Oy5K(`KsD89}NqgD<7lElc0b)%N|Bs4L zVcAchyI1_Ch%e(%e0tW@_*Z}#=XZ)2uHkA?M7%%JH`x=Z@mGMUwIjV{aoGAl!hAc5 Ht;YWk1OZ$g diff --git a/libft/obj/ft_substr.o b/libft/obj/ft_substr.o deleted file mode 100644 index b00a21e82aadabf0597e42efe92add867a12e0c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3320 zcmbVOO>7%Q6n?wwSv!A@^V5*hf+7K}K*~B!D?w=}f#PJJhq#~gDgQY&&Ow@4s`_hx6D^~MOqlV;v~ z-}{-Fw=>VakUnulRTPkZ$o50+3fZ>LuX#XM_f z{k9^lt7d&+6?)(A@qISP=fNyZB%yH)dM_O$aWVZ6H`VyL{)5t(UT@s}U@(T*s=0V_ z#ccd))^90hqqcIHqqxNPo4EGcgPWV1o6_x8Bt~ggX;a8I%=%AbGe3gTr#uxOU|Kx! z$gX&w(ys%ky>JXqtvv}^{7_d{7eK^7w|;$cSc^a3b+Bvi&SL{F?gU^AQ~^}!s% zUGcS3zV-z&U0u#_EkSXpy~edZvVr<3PSNIq(Maqof{|2%Zy_3k>1?g+)kboTRW6L2 zwcTp5QXWZ-8)HUlGRGM_wQ{vsDBJmwV%Y=7E`w9SrCZQy@w`3j0j>r` z_>Wuk4+evRE9YMa6a^6Ea#kB-iEC+W1%p<>gDtHoG}k7=7SDC zlcdEJ*4G&uXHk8M4Q1Hi1bb|Pp*)}$SO@aq3>%tY(FvB&k24*C9T_%&9uuq!Jv99u zi|EU2xXyN?t#69y8B9f<88jA{dYAQ}sAgDPpJzMJCw`4-85Wyj-S^Pz1*U#8!}E4b zu}%zB(M8dZtDSgw+F(1nieLo(*lcIh{1a|7Y2s~!4H~d8#B~h<%`M=e0d%o_)>(BUdSv zY;2EP-Bb8t_vN7H=4)p}h@Yico~sBGHC3Zr@oeMhtJ9;{b#te|ptdz@<@4C#3oU_8 zv1|*#o}Zm_t&$BT%W*2Xt>v+i8Mw4(Ws$#I;@qv|Ezcr2Wysec4*NgYmlzX#7c#}~ z^eB*i@mX`GdIpL5K4HPTO!i5dkmNh}we4@c7Y)JpB>k4eV_Fgb^$7aDvO~%K@GWAr z{y2^x9T6K1?^o(UF6ChSQ31;PE^T4oqi6_Yz*Jcg?h5L~V=IrW`(@%`db?ERPc84(|Hg9Gg@RU6-BACuc{rkND+ z^g9zId47p~h(f#i-4ORz-V>@H{`K5ezl(^;TA;r0Ipgw={> diff --git a/libft/obj/ft_tolower.o b/libft/obj/ft_tolower.o deleted file mode 100644 index 497a66a6363353584d84c3b7960d568674d96c71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2168 zcmbtU&1(};5TBRL#K(kLra3ByLRJ5DHTfvc`#mJo@07V6#gcc(J{!5@}v%z2x^F7Ap z?5V4{-(J*@(-cBJhDi|=2SQuMui|^V(bAl3svnY>TG_5ev&D3|5M4JaRnsa*$0zhL zeSCC$y4JK#LbZ~u#`1Q`wu;tsqoQXawrZ7(STS!_N@h7WH4!VAwvmp_*D}UrE><)% zc^g^*V3uvj!ar7n)3i|}@nRXoMpz8@p6c4egI_?577?8f=CtrD-+W)dLI+d}xcqPx zze0%LS|2g$7cN0Z0N0lA49!+{A9YO8gxb|pQ??G*HJ$0UC^UqLUA}@;7^g7-#4~*8^WS;@F1PE4PGAS$O$U4CehZXmU&ix$C5(vA?`Y0Fb?V=DIaJ&y>R-1jp7B-0I&Jl< z1o=I4J+E&T4V~&U$aSbb{S|rtj3*IOmJTgs+qjO1=br(JC-T;RhnTl_P+&c*=$o39C$l3zxjG^-n@OCTzH@e0ZamBp`|ej z@HxAKOkI{s=ZT6nBz`ufB?Y zaaE6Msvfy8toMrnG%E&z1Hr_gs^1RX35^UriryOnP&H5_^e74txB{v^8w!Om-*a5e zJ#{tq+l%^1nnFlnm=r;AAoNB2s>=Jdme$Os1t68FRoq%ETQVz!*sA4Ji*_Y8K4FX* z5z+bJz8-m_%=HCrbU?L$D*)H= zD}?y1_YtFh;SzKN@N5as&}e1%amQ3$Xk9%uO%FcSqInI!pSzkUucJ;LYU_&H%qpmDIx8yBK%FENXfWD|PCnqt-{=uyoS_G0ZxtRR z!aXC8Ihw@yHL0KX;F^?)UG(6T=a$qjOHSQ7ZZpa^PQj-o&UIf(ecp#JOZ}M-r~4<0 zHNMT7-nus>?%xj>IV)2uq|Hpmu~xxwtu+^ntX(c!IJeSRbsf+6fZYQOT~&M0c$Cpcg(Wo$&7<(U@h0oAYU&N|6kh0 z1m1h+e1r1RKQbV>f4akn6UKAI?g=UIoG~6@L2`=q=OmLW?Mca*`F&|F{22LukpV9x zXXf{%{dwn`{SM@C{FDIw$jOiXB}DX#C!#r~oMWVTC@Kq;Js62xpZPh7`Qx{w!^mIa zsXv^{>-wn^*ui(biLH3w0_EA0@%&y1BjWQnwdOr_>fgQ`D((~YuiF#P_!45Bw)#zi z{GPd<-#3efPW2h&I#i$jioAcuQ;4YxM>eu8T*t)o&j7^}`Rji`%-=imdn&;_QjjQ) I-iW{cAF4CA00000 diff --git a/libft/srcs/ft_arrcpy.c b/libft/srcs/ft_arrcpy.c deleted file mode 100644 index 2498a9c..0000000 --- a/libft/srcs/ft_arrcpy.c +++ /dev/null @@ -1,41 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_arrcpy.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 02:18:17 by lfirmin #+# #+# */ -/* Updated: 2025/10/06 14:06:37 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char **ft_arrcpy(char **array) -{ - char **copy; - int i; - int len; - - len = 0; - while (array[len]) - len++; - copy = malloc(sizeof(char *) * (len + 1)); - if (!copy) - return (NULL); - i = 0; - while (i < len) - { - copy[i] = strdup(array[i]); - if (!copy[i]) - { - while (i > 0) - free(copy[--i]); - free(copy); - return (NULL); - } - i++; - } - copy[i] = NULL; - return (copy); -} diff --git a/libft/srcs/ft_atoi.c b/libft/srcs/ft_atoi.c deleted file mode 100644 index a05a597..0000000 --- a/libft/srcs/ft_atoi.c +++ /dev/null @@ -1,40 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_atoi.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 10:09:46 by lfirmin #+# #+# */ -/* Updated: 2024/06/03 21:02:02 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_atoi(const char *str) -{ - int i; - int s; - int m; - - i = 0; - s = 0; - m = 0; - while ((str[i] <= 13 && str[i] >= 9) || str[i] == 32) - i++; - while (str[i] == '-' || str[i] == '+') - { - s++; - if (s >= 2) - return (0); - if (str[i] == '-') - m++; - i++; - } - s = 0; - while (str[i] >= 48 && str[i] <= 57) - s = s * 10 + (str[i++] - 48); - if (m % 2 == 1) - s = s * -1; - return (s); -} diff --git a/libft/srcs/ft_atoll.c b/libft/srcs/ft_atoll.c deleted file mode 100644 index 34fd5a5..0000000 --- a/libft/srcs/ft_atoll.c +++ /dev/null @@ -1,38 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_atoll.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/11/03 17:25:06 by lfirmin #+# #+# */ -/* Updated: 2024/11/03 17:25:33 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -long long ft_atoll(const char *str) -{ - long long result; - int sign; - - result = 0; - sign = 1; - while (*str == ' ' || (*str >= 9 && *str <= 13)) - str++; - if (*str == '-' || *str == '+') - { - if (*str == '-') - sign = -1; - str++; - } - while (*str >= '0' && *str <= '9') - { - if (result > INT_MAX || result < INT_MIN) - return (2147483648); - result = result * 10 + (*str - '0'); - str++; - } - return (result * sign); -} diff --git a/libft/srcs/ft_bzero.c b/libft/srcs/ft_bzero.c deleted file mode 100644 index 507f22d..0000000 --- a/libft/srcs/ft_bzero.c +++ /dev/null @@ -1,24 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_bzero.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 00:20:00 by lfirmin #+# #+# */ -/* Updated: 2024/05/30 19:49:23 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void *ft_bzero(void *b, size_t len) -{ - size_t i; - unsigned char *r; - - r = (unsigned char *)b; - i = 0; - while (i < len) - r[i++] = '\0'; - return (b); -} diff --git a/libft/srcs/ft_calloc.c b/libft/srcs/ft_calloc.c deleted file mode 100644 index b42206a..0000000 --- a/libft/srcs/ft_calloc.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_calloc.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 11:14:02 by lfirmin #+# #+# */ -/* Updated: 2024/06/03 18:15:05 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void *ft_calloc(size_t c, size_t s) -{ - void *ptr; - long long int tmp1; - long long int tmp2; - - tmp1 = (long long int)c; - tmp2 = (long long int)s; - if ((c > 4294967295 || s > 4294967295) && (tmp1 < 0 && tmp2 < 0)) - return (NULL); - if (tmp1 * tmp2 < 0) - return (NULL); - ptr = malloc(c * s); - if (!ptr) - return (NULL); - ft_bzero(ptr, c * s); - return (ptr); -} diff --git a/libft/srcs/ft_isalnum.c b/libft/srcs/ft_isalnum.c deleted file mode 100644 index 0fd48a2..0000000 --- a/libft/srcs/ft_isalnum.c +++ /dev/null @@ -1,19 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_isalnum.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/20 02:29:49 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_isalnum(int c) -{ - if ((c >= 97 && c <= 122) || (c >= 48 && c <= 57) || (c >= 65 && c <= 90)) - return (1); - return (0); -} diff --git a/libft/srcs/ft_isalpha.c b/libft/srcs/ft_isalpha.c deleted file mode 100644 index 3382c40..0000000 --- a/libft/srcs/ft_isalpha.c +++ /dev/null @@ -1,19 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_isalpha.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/20 01:55:52 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_isalpha(int c) -{ - if ((c >= 97 && c <= 122) || (c >= 65 && c <= 90)) - return (1); - return (0); -} diff --git a/libft/srcs/ft_isascii.c b/libft/srcs/ft_isascii.c deleted file mode 100644 index c5d9e0b..0000000 --- a/libft/srcs/ft_isascii.c +++ /dev/null @@ -1,19 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_isascii.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/20 02:36:17 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_isascii(int c) -{ - if (c >= 0 && c <= 127) - return (1); - return (0); -} diff --git a/libft/srcs/ft_isdigit.c b/libft/srcs/ft_isdigit.c deleted file mode 100644 index 78f90b9..0000000 --- a/libft/srcs/ft_isdigit.c +++ /dev/null @@ -1,19 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_isdigit.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/20 02:31:51 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_isdigit(int c) -{ - if (c >= 48 && c <= 57) - return (1); - return (0); -} diff --git a/libft/srcs/ft_isprint.c b/libft/srcs/ft_isprint.c deleted file mode 100644 index 2a09bb2..0000000 --- a/libft/srcs/ft_isprint.c +++ /dev/null @@ -1,19 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_isprint.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/20 02:38:24 by lfirmin #+# #+# */ -/* Updated: 2024/05/23 06:21:54 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_isprint(int c) -{ - if (((c >= 0 && c <= 31) || c >= 127 || c == EOF)) - return (0); - return (1); -} diff --git a/libft/srcs/ft_itoa.c b/libft/srcs/ft_itoa.c deleted file mode 100644 index eade559..0000000 --- a/libft/srcs/ft_itoa.c +++ /dev/null @@ -1,51 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_itoa.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/24 12:59:00 by lfirmin #+# #+# */ -/* Updated: 2024/05/29 10:31:36 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -static size_t ft_count(long int n) -{ - size_t c; - - c = 0; - if (n <= 0) - c = 1; - while (n != 0) - { - n = n / 10; - c++; - } - return (c); -} - -char *ft_itoa(int n) -{ - char *str; - size_t size; - long int num; - - num = n; - size = ft_count(num); - str = (char *)malloc(size + 1); - if (!str) - return (NULL); - str[size] = '\0'; - if (num < 0) - num = -num; - while (size--) - { - str[size] = num % 10 + '0'; - num = num / 10; - if (n < 0 && size == 0) - str[size] = '-'; - } - return (str); -} diff --git a/libft/srcs/ft_lstadd_back_bonus.c b/libft/srcs/ft_lstadd_back_bonus.c deleted file mode 100644 index 2bfdfc7..0000000 --- a/libft/srcs/ft_lstadd_back_bonus.c +++ /dev/null @@ -1,27 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstadd_back.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/01 02:01:18 by lfirmin #+# #+# */ -/* Updated: 2024/06/03 15:59:33 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_lstadd_back(t_list **lst, t_list *new) -{ - t_list *last; - - if (!new) - return ; - if (!lst || !*lst) - { - *lst = new; - return ; - } - last = ft_lstlast(*lst); - last->next = new; -} diff --git a/libft/srcs/ft_lstadd_front_bonus.c b/libft/srcs/ft_lstadd_front_bonus.c deleted file mode 100644 index b784622..0000000 --- a/libft/srcs/ft_lstadd_front_bonus.c +++ /dev/null @@ -1,21 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstadd_front.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/31 20:34:57 by lfirmin #+# #+# */ -/* Updated: 2024/05/31 20:41:34 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_lstadd_front(t_list **lst, t_list *new) -{ - if (lst && new) - { - new->next = *lst; - *lst = new; - } -} diff --git a/libft/srcs/ft_lstclear_bonus.c b/libft/srcs/ft_lstclear_bonus.c deleted file mode 100644 index 54479d1..0000000 --- a/libft/srcs/ft_lstclear_bonus.c +++ /dev/null @@ -1,28 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstclear.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/01 20:46:07 by lfirmin #+# #+# */ -/* Updated: 2024/06/01 20:51:07 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_lstclear(t_list **lst, void (*del)(void*)) -{ - t_list *t; - - if (lst) - { - while (*lst) - { - t = (*lst)->next; - ft_lstdelone(*lst, del); - (*lst) = t; - } - (*lst) = NULL; - } -} diff --git a/libft/srcs/ft_lstdelone_bonus.c b/libft/srcs/ft_lstdelone_bonus.c deleted file mode 100644 index 94ae5ab..0000000 --- a/libft/srcs/ft_lstdelone_bonus.c +++ /dev/null @@ -1,20 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstdelone.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/01 20:32:56 by lfirmin #+# #+# */ -/* Updated: 2024/06/01 20:32:56 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_lstdelone(t_list *lst, void (*del)(void*)) -{ - if (!lst || !del) - return ; - del(lst->content); - free(lst); -} diff --git a/libft/srcs/ft_lstiter_bonus.c b/libft/srcs/ft_lstiter_bonus.c deleted file mode 100644 index 8870692..0000000 --- a/libft/srcs/ft_lstiter_bonus.c +++ /dev/null @@ -1,23 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstiter.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/01 21:05:12 by lfirmin #+# #+# */ -/* Updated: 2024/06/01 21:05:12 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_lstiter(t_list *lst, void (*f)(void *)) -{ - if (!lst || !f) - return ; - while (lst) - { - f(lst->content); - lst = lst->next; - } -} diff --git a/libft/srcs/ft_lstlast_bonus.c b/libft/srcs/ft_lstlast_bonus.c deleted file mode 100644 index c00582b..0000000 --- a/libft/srcs/ft_lstlast_bonus.c +++ /dev/null @@ -1,23 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstlast.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/01 01:52:09 by lfirmin #+# #+# */ -/* Updated: 2024/06/01 01:57:22 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -t_list *ft_lstlast(t_list *lst) -{ - while (lst) - { - if (!lst->next) - return (lst); - lst = lst->next; - } - return (lst); -} diff --git a/libft/srcs/ft_lstmap_bonus.c b/libft/srcs/ft_lstmap_bonus.c deleted file mode 100644 index 7efc366..0000000 --- a/libft/srcs/ft_lstmap_bonus.c +++ /dev/null @@ -1,41 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstmap.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/06/02 18:21:09 by lfirmin #+# #+# */ -/* Updated: 2024/06/03 15:53:13 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) -{ - t_list *new; - t_list *save; - - if (!lst || !del || !f) - return (NULL); - new = ft_lstnew(lst->content); - if (!new) - return (NULL); - new->content = f(new->content); - save = new; - lst = lst->next; - while (lst) - { - new->next = ft_lstnew(lst->content); - if (!new->next) - { - ft_lstclear(&save, del); - return (NULL); - } - new->next->content = f(new->next->content); - new = new->next; - lst = lst->next; - } - new->next = NULL; - return (save); -} diff --git a/libft/srcs/ft_lstnew_bonus.c b/libft/srcs/ft_lstnew_bonus.c deleted file mode 100644 index d9a9ba7..0000000 --- a/libft/srcs/ft_lstnew_bonus.c +++ /dev/null @@ -1,24 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstnew.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/31 18:41:23 by lfirmin #+# #+# */ -/* Updated: 2024/05/31 20:33:26 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -t_list *ft_lstnew(void *content) -{ - t_list *new; - - new = (t_list *)malloc(sizeof(*new)); - if (!new) - return (NULL); - new->content = content; - new->next = NULL; - return (new); -} diff --git a/libft/srcs/ft_lstsize_bonus.c b/libft/srcs/ft_lstsize_bonus.c deleted file mode 100644 index d68e15d..0000000 --- a/libft/srcs/ft_lstsize_bonus.c +++ /dev/null @@ -1,27 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_lstsize.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/31 22:00:49 by lfirmin #+# #+# */ -/* Updated: 2024/05/31 22:12:17 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_lstsize(t_list *lst) -{ - int i; - t_list *count; - - count = lst; - i = 0; - while (count) - { - count = count->next; - i++; - } - return (i); -} diff --git a/libft/srcs/ft_memchr.c b/libft/srcs/ft_memchr.c deleted file mode 100644 index 4272249..0000000 --- a/libft/srcs/ft_memchr.c +++ /dev/null @@ -1,26 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_memchr.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 07:40:39 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void *ft_memchr(const void *s, int c, size_t n) -{ - unsigned char *str; - - str = (unsigned char *)s; - while (n--) - { - if (*str == (unsigned char)c) - return (str); - str++; - } - return (NULL); -} diff --git a/libft/srcs/ft_memcmp.c b/libft/srcs/ft_memcmp.c deleted file mode 100644 index fc9d739..0000000 --- a/libft/srcs/ft_memcmp.c +++ /dev/null @@ -1,30 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_memcmp.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 07:57:58 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 11:34:35 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_memcmp(const void *ptr1, const void *ptr2, size_t num) -{ - unsigned char *pt1; - unsigned char *pt2; - size_t i; - - pt1 = (unsigned char *)ptr1; - pt2 = (unsigned char *)ptr2; - i = 0; - while (i < num) - { - if (pt1[i] != pt2[i]) - return (pt1[i] - pt2[i]); - i++; - } - return (0); -} diff --git a/libft/srcs/ft_memcpy.c b/libft/srcs/ft_memcpy.c deleted file mode 100644 index 7f3d5a2..0000000 --- a/libft/srcs/ft_memcpy.c +++ /dev/null @@ -1,32 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_memcpy.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: tordner +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 01:08:31 by lfirmin #+# #+# */ -/* Updated: 2025/06/02 00:40:39 by tordner ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -void *ft_memcpy(void *dest, const void *src, size_t len) -{ - size_t i; - unsigned char *r; - unsigned char *s; - - i = 0; - r = (unsigned char *)dest; - s = (unsigned char *)src; - if (dest == (void *)0 && src == (void *)0) - return (dest); - while (i < len) - { - r[i] = s[i]; - i++; - } - return (dest); -} diff --git a/libft/srcs/ft_memmove.c b/libft/srcs/ft_memmove.c deleted file mode 100644 index 8920c37..0000000 --- a/libft/srcs/ft_memmove.c +++ /dev/null @@ -1,39 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_memmov.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 01:26:13 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void *ft_memmove(void *s1, const void *s2, size_t len) -{ - unsigned char *dest; - unsigned char *src; - unsigned int i; - - dest = (unsigned char *)s1; - src = (unsigned char *)s2; - i = 0; - if (dest == NULL && src == NULL) - return (NULL); - if (dest < src) - { - while (i < len) - { - dest[i] = src[i]; - i++; - } - } - else - { - while (0 < len--) - dest[len] = src[len]; - } - return (dest); -} diff --git a/libft/srcs/ft_memset.c b/libft/srcs/ft_memset.c deleted file mode 100644 index d4ecdb0..0000000 --- a/libft/srcs/ft_memset.c +++ /dev/null @@ -1,24 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_memset.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/20 02:42:40 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void *ft_memset(void *b, int c, size_t len) -{ - size_t i; - unsigned char *r; - - i = 0; - r = (unsigned char *)b; - while (i < len) - r[i++] = (unsigned char)c; - return (b); -} diff --git a/libft/srcs/ft_putchar_fd.c b/libft/srcs/ft_putchar_fd.c deleted file mode 100644 index 8a930f9..0000000 --- a/libft/srcs/ft_putchar_fd.c +++ /dev/null @@ -1,17 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_putchar_fd.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/29 11:17:45 by lfirmin #+# #+# */ -/* Updated: 2024/05/29 11:20:42 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_putchar_fd(char c, int fd) -{ - write(fd, &c, 1); -} diff --git a/libft/srcs/ft_putendl_fd.c b/libft/srcs/ft_putendl_fd.c deleted file mode 100644 index c2e3e97..0000000 --- a/libft/srcs/ft_putendl_fd.c +++ /dev/null @@ -1,18 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_putendl_fd.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/29 11:35:44 by lfirmin #+# #+# */ -/* Updated: 2024/05/29 11:38:36 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_putendl_fd(char *s, int fd) -{ - ft_putstr_fd(s, fd); - ft_putchar_fd('\n', fd); -} diff --git a/libft/srcs/ft_putnbr_fd.c b/libft/srcs/ft_putnbr_fd.c deleted file mode 100644 index 0b02ab1..0000000 --- a/libft/srcs/ft_putnbr_fd.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_putnbr_fd.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/29 11:42:38 by lfirmin #+# #+# */ -/* Updated: 2024/05/29 11:56:04 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_putnbr_fd(int n, int fd) -{ - long int nb; - - nb = n; - if (nb < 0) - { - nb = -nb; - ft_putchar_fd('-', fd); - } - if (nb >= 10) - { - ft_putnbr_fd(nb / 10, fd); - ft_putnbr_fd(nb % 10, fd); - } - else - ft_putchar_fd(nb + '0', fd); -} diff --git a/libft/srcs/ft_putstr_fd.c b/libft/srcs/ft_putstr_fd.c deleted file mode 100644 index ecdc0ef..0000000 --- a/libft/srcs/ft_putstr_fd.c +++ /dev/null @@ -1,24 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_putstr_fd.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/29 11:27:05 by lfirmin #+# #+# */ -/* Updated: 2024/05/29 11:33:18 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_putstr_fd(char *s, int fd) -{ - int i; - - i = 0; - while (s[i]) - { - ft_putchar_fd(s[i], fd); - i++; - } -} diff --git a/libft/srcs/ft_split.c b/libft/srcs/ft_split.c deleted file mode 100644 index 9650577..0000000 --- a/libft/srcs/ft_split.c +++ /dev/null @@ -1,95 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_split.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/22 05:56:37 by lfirmin #+# #+# */ -/* Updated: 2024/06/04 12:08:51 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -static int ft_c(char const *s, char c) -{ - int i; - int count; - - count = 0; - i = 0; - while (s[i]) - { - if (s[i] != c && (i == 0 || s[i - 1] == c)) - count++; - i++; - } - return (count); -} - -void init_split_struct(t_split_struct *v, char const *s, char c) -{ - if (!s) - return ; - v->array = (char **)malloc((ft_c(s, c) + 1) * sizeof(char *)); - if (!s || !v->array) - return ; - v->i = 0; - v->j = 0; -} - -static char *ft_strncpy(char *dest, const char *src, unsigned int n) -{ - unsigned int i; - - i = 0; - while (src[i] != '\0' && i < n) - { - dest[i] = src[i]; - ++i; - } - while (i < n) - { - dest[i] = '\0'; - i++; - } - return (dest); -} - -char **free_split(char **array, size_t j) -{ - while (j > 0) - { - free(array[--j]); - } - free(array); - return (NULL); -} - -char **ft_split(char const *s, char c) -{ - t_split_struct v; - - init_split_struct(&v, s, c); - if (!s || !v.array) - return (NULL); - while (s[v.i]) - { - while (s[v.i] == c && s[v.i]) - v.i++; - v.start = v.i; - while (s[v.i] != c && s[v.i]) - v.i++; - if (v.i > v.start) - { - v.array[v.j] = (char *)malloc(v.i - v.start + 1); - if (!v.array[v.j]) - return (free_split(v.array, v.j)); - ft_strncpy(v.array[v.j], &s[v.start], v.i - v.start); - v.array[v.j][v.i - v.start] = '\0'; - v.j++; - } - } - v.array[v.j] = NULL; - return (v.array); -} diff --git a/libft/srcs/ft_straddchar.c b/libft/srcs/ft_straddchar.c deleted file mode 100644 index bf83573..0000000 --- a/libft/srcs/ft_straddchar.c +++ /dev/null @@ -1,37 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_straddchar.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/11/08 06:02:17 by lfirmin #+# #+# */ -/* Updated: 2024/11/08 06:02:17 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -char *ft_straddchar(char *str, char c) -{ - int i; - char *res; - - if (!str) - return (NULL); - i = 0; - while (str[i]) - i++; - res = (char *)malloc(sizeof(char) * (i + 2)); - if (!res) - return (NULL); - i = 0; - while (str[i]) - { - res[i] = str[i]; - i++; - } - res[i] = c; - res[i + 1] = '\0'; - return (res); -} diff --git a/libft/srcs/ft_strchr.c b/libft/srcs/ft_strchr.c deleted file mode 100644 index 11f57be..0000000 --- a/libft/srcs/ft_strchr.c +++ /dev/null @@ -1,26 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strchr.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 06:46:40 by lfirmin #+# #+# */ -/* Updated: 2024/05/24 08:51:25 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char *ft_strchr(char const *str, int c) -{ - while (*str) - { - if (*str == (char)c) - return ((char *)str); - str++; - } - if (*str == (char)c) - return ((char *)str); - else - return (NULL); -} diff --git a/libft/srcs/ft_strcmp.c b/libft/srcs/ft_strcmp.c deleted file mode 100644 index e3d21ba..0000000 --- a/libft/srcs/ft_strcmp.c +++ /dev/null @@ -1,22 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strcmp.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/10/19 21:01:26 by lfirmin #+# #+# */ -/* Updated: 2024/10/19 21:01:26 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_strcmp(char *s1, char *s2) -{ - int i; - - i = 0; - while (s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0') - i++; - return (s1[i] - s2[i]); -} diff --git a/libft/srcs/ft_strcpy.c b/libft/srcs/ft_strcpy.c deleted file mode 100644 index c72313d..0000000 --- a/libft/srcs/ft_strcpy.c +++ /dev/null @@ -1,27 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strcpy.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/19 11:53:24 by lfirmin #+# #+# */ -/* Updated: 2025/04/19 11:58:04 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -char *ft_strcpy(char *dest, char *src) -{ - size_t i; - - i = 0; - while (src[i] != '\0') - { - dest[i] = src[i]; - i++; - } - dest[i] = '\0'; - return (dest); -} diff --git a/libft/srcs/ft_strdup.c b/libft/srcs/ft_strdup.c deleted file mode 100644 index 7df78c5..0000000 --- a/libft/srcs/ft_strdup.c +++ /dev/null @@ -1,34 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strdup.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/15 05:28:24 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char *ft_strdup(const char *src) -{ - char *dest; - int i; - int size; - - size = 0; - while (src[size] != '\0') - size++; - dest = malloc(sizeof(char) * (size + 1)); - if (dest == NULL) - return (NULL); - i = 0; - while (i != size) - { - dest[i] = src[i]; - i++; - } - dest[i] = '\0'; - return (dest); -} diff --git a/libft/srcs/ft_striteri.c b/libft/srcs/ft_striteri.c deleted file mode 100644 index bd32dda..0000000 --- a/libft/srcs/ft_striteri.c +++ /dev/null @@ -1,27 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_striteri.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/29 10:54:40 by lfirmin #+# #+# */ -/* Updated: 2024/05/29 11:12:05 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -void ft_striteri(char *s, void (*f)(unsigned int, char*)) -{ - int i; - - i = 0; - if (s) - { - while (s[i]) - { - f(i, &s[i]); - ++i; - } - } -} diff --git a/libft/srcs/ft_strjoin.c b/libft/srcs/ft_strjoin.c deleted file mode 100644 index aed8eb4..0000000 --- a/libft/srcs/ft_strjoin.c +++ /dev/null @@ -1,34 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strjoin.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/22 01:00:14 by lfirmin #+# #+# */ -/* Updated: 2024/05/24 08:49:06 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char *ft_strjoin(const char *s1, const char *s2) -{ - char *res; - int i; - int j; - - i = 0; - j = 0; - if (s1 == NULL && s2 == NULL) - return (NULL); - res = (char *) malloc((ft_strlen(s1) + ft_strlen(s2) + 1) * sizeof(char)); - if (!res) - return (NULL); - while (s1[i]) - res[j++] = s1[i++]; - i = 0; - while (s2[i]) - res[j++] = s2[i++]; - res[j] = 0; - return (res); -} diff --git a/libft/srcs/ft_strlcat.c b/libft/srcs/ft_strlcat.c deleted file mode 100644 index b691378..0000000 --- a/libft/srcs/ft_strlcat.c +++ /dev/null @@ -1,32 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strlcat.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 03:55:25 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -size_t ft_strlcat(char *dst, const char *src, size_t size) -{ - size_t i; - size_t r; - size_t s; - - i = 0; - r = ft_strlen(dst); - s = ft_strlen(src); - if (size <= r) - return (s + size); - while (r + i < size - 1 && src[i] != '\0') - { - dst[r + i] = src[i]; - i++; - } - dst[r + i] = '\0'; - return (r + s); -} diff --git a/libft/srcs/ft_strlcpy.c b/libft/srcs/ft_strlcpy.c deleted file mode 100644 index 9721995..0000000 --- a/libft/srcs/ft_strlcpy.c +++ /dev/null @@ -1,34 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strlcpy.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 02:18:17 by lfirmin #+# #+# */ -/* Updated: 2024/05/30 18:36:18 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -size_t ft_strlcpy(char *dst, const char *src, size_t dsts) -{ - size_t srcs; - size_t i; - - ft_strlen(src); - if (!src || !dst) - return (0); - srcs = ft_strlen(src); - i = 0; - if (dsts != 0) - { - while (src[i] != '\0' && i < (dsts - 1)) - { - dst[i] = src[i]; - i++; - } - dst[i] = '\0'; - } - return (srcs); -} diff --git a/libft/srcs/ft_strlen.c b/libft/srcs/ft_strlen.c deleted file mode 100644 index c8a5c83..0000000 --- a/libft/srcs/ft_strlen.c +++ /dev/null @@ -1,22 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strlen.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/19 23:16:45 by lfirmin #+# #+# */ -/* Updated: 2024/05/23 07:36:59 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -size_t ft_strlen(const char *s) -{ - int i; - - i = 0; - while (s[i]) - i++; - return ((size_t)i); -} diff --git a/libft/srcs/ft_strmapi.c b/libft/srcs/ft_strmapi.c deleted file mode 100644 index 9197596..0000000 --- a/libft/srcs/ft_strmapi.c +++ /dev/null @@ -1,32 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strmapi.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/28 15:10:42 by lfirmin #+# #+# */ -/* Updated: 2024/05/28 17:00:27 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) -{ - char *str; - int i; - - if (!s) - return (NULL); - str = (char *)malloc(ft_strlen(s) + 1); - if (!str) - return (NULL); - i = 0; - while (s[i]) - { - str[i] = f(i, s[i]); - ++i; - } - str[i] = '\0'; - return (str); -} diff --git a/libft/srcs/ft_strncmp.c b/libft/srcs/ft_strncmp.c deleted file mode 100644 index 7fcfec4..0000000 --- a/libft/srcs/ft_strncmp.c +++ /dev/null @@ -1,32 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strncmp.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 06:55:09 by lfirmin #+# #+# */ -/* Updated: 2024/05/24 08:47:59 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_strncmp(const char *s1, const char *s2, unsigned int n) -{ - unsigned int i; - unsigned char c1; - unsigned char c2; - - i = 0; - if (n == 0) - return (0); - while (i < n) - { - c1 = (unsigned char)s1[i]; - c2 = (unsigned char)s2[i]; - if (c1 != c2 || c1 == '\0' || c2 == '\0') - return (c1 - c2); - i++; - } - return (0); -} diff --git a/libft/srcs/ft_strnstr.c b/libft/srcs/ft_strnstr.c deleted file mode 100644 index 4f5acca..0000000 --- a/libft/srcs/ft_strnstr.c +++ /dev/null @@ -1,36 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strnstr.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 08:22:59 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char *ft_strnstr(const char *hay, const char *need, size_t len) -{ - size_t i; - size_t n; - - i = 0; - if (need[0] == '\0') - return ((char *)hay); - while (hay[i] != '\0') - { - n = 0; - while (hay[i + n] == need[n] && (i + n) < len) - { - if (hay[i + n] == '\0' && need[n] == '\0') - return ((char *)&hay[i]); - n++; - } - if (need[n] == '\0') - return ((char *)hay + i); - i++; - } - return (0); -} diff --git a/libft/srcs/ft_strrchr.c b/libft/srcs/ft_strrchr.c deleted file mode 100644 index c7fc977..0000000 --- a/libft/srcs/ft_strrchr.c +++ /dev/null @@ -1,35 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strrchr.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 06:42:38 by lfirmin #+# #+# */ -/* Updated: 2024/05/30 18:30:00 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char *ft_strrchr(const char *str, int c) -{ - int i; - int last_occurrence; - - ft_strlen(str); - i = 0; - last_occurrence = -1; - if (str == NULL) - return (NULL); - while (str[i]) - { - if (str[i] == (char)c) - last_occurrence = i; - i++; - } - if ((char)c == '\0') - return ((char *)&str[i]); - if (last_occurrence != -1) - return ((char *)&str[last_occurrence]); - return (NULL); -} diff --git a/libft/srcs/ft_strtrim.c b/libft/srcs/ft_strtrim.c deleted file mode 100644 index abbf77f..0000000 --- a/libft/srcs/ft_strtrim.c +++ /dev/null @@ -1,68 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_strtrim.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/23 21:32:01 by lfirmin #+# #+# */ -/* Updated: 2024/05/31 02:04:11 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "libft.h" - -static int is_in_set(char c, const char *set) -{ - while (*set) - { - if (c == *set) - { - return (1); - } - set++; - } - return (0); -} - -static char *ft_strncpy(char *dest, const char *src, unsigned int n) -{ - unsigned int i; - - i = 0; - while (src[i] != '\0' && i < n) - { - dest[i] = src[i]; - ++i; - } - while (i < n) - { - dest[i] = '\0'; - i++; - } - return (dest); -} - -char *ft_strtrim(const char *s1, const char *set) -{ - size_t s; - size_t e; - size_t len; - char *str; - - if (!s1 || !set) - return (NULL); - s = 0; - while (s1[s] && is_in_set(s1[s], set)) - s++; - e = ft_strlen(s1); - while (e > s && is_in_set(s1[e - 1], set)) - e--; - len = e - s; - str = (char *)malloc(sizeof(char) * (len + 1)); - if (!str) - return (NULL); - ft_strncpy(str, s1 + s, len); - str[len] = '\0'; - return (str); -} diff --git a/libft/srcs/ft_substr.c b/libft/srcs/ft_substr.c deleted file mode 100644 index 8e73142..0000000 --- a/libft/srcs/ft_substr.c +++ /dev/null @@ -1,34 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_substr.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/22 00:15:54 by lfirmin #+# #+# */ -/* Updated: 2024/05/24 08:28:01 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -char *ft_substr(char const *s, unsigned int start, size_t len) -{ - char *sub; - size_t i; - - if ((ft_strlen(s) - start) < len) - len = ft_strlen(s) - start; - if (ft_strlen(s) < start) - return (ft_strdup("")); - i = 0; - sub = (char *) malloc(len + 1); - if (!sub) - return (NULL); - while (len > 0) - { - sub[i++] = s[start++]; - len--; - } - sub[i] = '\0'; - return (sub); -} diff --git a/libft/srcs/ft_tolower.c b/libft/srcs/ft_tolower.c deleted file mode 100644 index 288a27a..0000000 --- a/libft/srcs/ft_tolower.c +++ /dev/null @@ -1,19 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_tolower.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 04:50:40 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 11:09:36 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_tolower(int c) -{ - if (c >= 65 && c <= 90) - return (c + 32); - return (c); -} diff --git a/libft/srcs/ft_toupper.c b/libft/srcs/ft_toupper.c deleted file mode 100644 index d563003..0000000 --- a/libft/srcs/ft_toupper.c +++ /dev/null @@ -1,19 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_toupper.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/05/21 04:50:40 by lfirmin #+# #+# */ -/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "libft.h" - -int ft_toupper(int c) -{ - if (c >= 97 && c <= 122) - return (c - 32); - return (c); -} diff --git a/main.c b/main.c new file mode 100644 index 0000000..6e1b1db --- /dev/null +++ b/main.c @@ -0,0 +1,69 @@ +// main.c +#include "cub3d.h" +#include +#include + +// ---- TEMP: petite map de test fermée (a remplacer par le parsing) ---- +static char *gmap[] = { + "111111111111", + "100000000001", + "101111011101", + "100100010001", + "101100010001", + "100000000001", + "111111111111", + NULL +}; + +static int map_w(char **m){ int w=0; for(int i=0;m[0][i];++i) w++; return w; } +static int map_h(char **m){ int h=0; while(m[h]) h++; return h; } + +// Charge texture XPM via mlx_xpm_file_to_image (ou via parsing) +static void load_tex(t_app *a, int id, const char *path){ + t_tex *t = &a->tex[id]; + t->img.ptr = mlx_xpm_file_to_image(a->mlx, (char*)path, &t->w, &t->h); + if (!t->img.ptr){ fprintf(stderr,"Texture load fail: %s\n", path); exit(1); } + t->img.addr = mlx_get_data_addr(t->img.ptr, &t->img.bpp, &t->img.line_len, &t->img.endian); +} + +int main(void) { + t_app a; + memset(&a, 0, sizeof(a)); + + a.mlx = mlx_init(); + if (!a.mlx) return 1; + a.win = mlx_new_window(a.mlx, WIN_W, WIN_H, "cub3d"); + a.frame.ptr = mlx_new_image(a.mlx, WIN_W, WIN_H); + a.frame.addr = mlx_get_data_addr(a.frame.ptr, &a.frame.bpp, &a.frame.line_len, &a.frame.endian); + + // map (remplace par le résultat de ton parsing) + a.map = gmap; + a.map_w = map_w(a.map); + a.map_h = map_h(a.map); + + // player init (à placer selon la map/parsed spawn + direction N/E/S/W) + a.px = 2.5; a.py = 2.5; + a.dirx = -1.0; a.diry = 0.0; + a.planex = 0.0; a.planey = 0.66; + + a.move_speed = 0.08; + a.rot_speed = 0.05; + + a.zbuf = malloc(sizeof(double) * WIN_W); + if (!a.zbuf) return 1; + + // charge 4 textures (exemples de chemins) + load_tex(&a, 0, "tex_north.xpm"); + load_tex(&a, 1, "tex_east.xpm"); + load_tex(&a, 2, "tex_south.xpm"); + load_tex(&a, 3, "tex_west.xpm"); + + // hooks + mlx_hook(a.win, 2, 1L<<0, key_press, &a); // KeyPress + mlx_hook(a.win, 3, 1L<<1, key_release, &a); // KeyRelease + mlx_hook(a.win, 17, 0, close_win, &a); // DestroyNotify + mlx_loop_hook(a.mlx, update, &a); + + mlx_loop(a.mlx); + return 0; +} diff --git a/render.c b/render.c new file mode 100644 index 0000000..9a9057d --- /dev/null +++ b/render.c @@ -0,0 +1,140 @@ +// render.c +#include "cub3d.h" + +static int is_wall(t_app *a, int mx, int my) { + if (mx < 0 || my < 0 || mx >= a->map_w || my >= a->map_h) return 1; + return (a->map[my][mx] == '1'); +} + +static void move_player(t_app *a) { + double ms = a->move_speed; + double rs = a->rot_speed; + + // forward/back + if (a->keys.w) { + double nx = a->px + a->dirx * ms; + double ny = a->py + a->diry * ms; + if (!is_wall(a, (int)nx, (int)a->py)) a->px = nx; + if (!is_wall(a, (int)a->px, (int)ny)) a->py = ny; + } + if (a->keys.s) { + double nx = a->px - a->dirx * ms; + double ny = a->py - a->diry * ms; + if (!is_wall(a, (int)nx, (int)a->py)) a->px = nx; + if (!is_wall(a, (int)a->px, (int)ny)) a->py = ny; + } + // strafe + if (a->keys.a) { + double nx = a->px - a->diry * ms; + double ny = a->py + a->dirx * ms; + if (!is_wall(a, (int)nx, (int)a->py)) a->px = nx; + if (!is_wall(a, (int)a->px, (int)ny)) a->py = ny; + } + if (a->keys.d) { + double nx = a->px + a->diry * ms; + double ny = a->py - a->dirx * ms; + if (!is_wall(a, (int)nx, (int)a->py)) a->px = nx; + if (!is_wall(a, (int)a->px, (int)ny)) a->py = ny; + } + // rotation + if (a->keys.left || a->keys.right) { + double angle = (a->keys.left ? -rs : rs); + double olddirx = a->dirx; + a->dirx = a->dirx * cos(angle) - a->diry * sin(angle); + a->diry = olddirx * sin(angle) + a->diry * cos(angle); + double oldplanex = a->planex; + a->planex = a->planex * cos(angle) - a->planey * sin(angle); + a->planey = oldplanex * sin(angle) + a->planey * cos(angle); + } +} + +static void draw_vertical_line_tex(t_app *a, int x, int drawStart, int drawEnd, + t_tex *tex, int texX, double step, double texPos) { + if (drawStart < 0) drawStart = 0; + if (drawEnd >= WIN_H) drawEnd = WIN_H - 1; + + // plafond (optionnel: couleur unie) + for (int y = 0; y < drawStart; ++y) + put_pixel(&a->frame, x, y, 0x0080A0); // bleu doux + + for (int y = drawStart; y <= drawEnd; ++y) { + int texY = (int)texPos & (tex->h - 1); // textures power-of-two → masque ok + texPos += step; + int color = get_tex_color(tex, texX, texY); + put_pixel(&a->frame, x, y, color); + } + // sol + for (int y = drawEnd + 1; y < WIN_H; ++y) + put_pixel(&a->frame, x, y, 0x404040); +} + +void render_frame(t_app *a) { + // clear: pas nécessaire si on redraw tout (plafond/sol + murs) + for (int x = 0; x < WIN_W; ++x) { + // camX dans [-1, 1] + double cameraX = 2.0 * x / (double)WIN_W - 1.0; + double rayDirX = a->dirx + a->planex * cameraX; + double rayDirY = a->diry + a->planey * cameraX; + + int mapX = (int)a->px; + int mapY = (int)a->py; + + double deltaDistX = (rayDirX == 0) ? 1e30 : fabs(1.0 / rayDirX); + double deltaDistY = (rayDirY == 0) ? 1e30 : fabs(1.0 / rayDirY); + double sideDistX, sideDistY; + int stepX, stepY; + + if (rayDirX < 0) { stepX = -1; sideDistX = (a->px - mapX) * deltaDistX; } + else { stepX = 1; sideDistX = (mapX + 1.0 - a->px) * deltaDistX; } + if (rayDirY < 0) { stepY = -1; sideDistY = (a->py - mapY) * deltaDistY; } + else { stepY = 1; sideDistY = (mapY + 1.0 - a->py) * deltaDistY; } + + int hit = 0, side = 0; + while (!hit) { + if (sideDistX < sideDistY) { sideDistX += deltaDistX; mapX += stepX; side = 0; } + else { sideDistY += deltaDistY; mapY += stepY; side = 1; } + if (is_wall(a, mapX, mapY)) hit = 1; + } + + double perpWallDist = (side == 0) + ? (mapX - a->px + (1 - stepX) / 2.0) / rayDirX + : (mapY - a->py + (1 - stepY) / 2.0) / rayDirY; + if (perpWallDist < 1e-6) perpWallDist = 1e-6; + + int lineHeight = (int)(WIN_H / perpWallDist); + int drawStart = -lineHeight / 2 + WIN_H / 2; + int drawEnd = lineHeight / 2 + WIN_H / 2; + + // texture selection: 0=N,1=E,2=S,3=W (à adapter selon ta map) + int tex_id; + if (side == 0 && rayDirX > 0) tex_id = 3; // W + else if (side == 0 && rayDirX < 0) tex_id = 1; // E + else if (side == 1 && rayDirY > 0) tex_id = 0; // N + else tex_id = 2; // S + t_tex *tex = &a->tex[tex_id]; + + // point d'impact sur le mur + double wallX = (side == 0) ? (a->py + perpWallDist * rayDirY) + : (a->px + perpWallDist * rayDirX); + wallX -= floor(wallX); + + int texX = (int)(wallX * (double)tex->w); + if (side == 0 && rayDirX > 0) texX = tex->w - texX - 1; + if (side == 1 && rayDirY < 0) texX = tex->w - texX - 1; + + double step = (double)tex->h / (double)lineHeight; + double texPos = (drawStart - WIN_H / 2 + lineHeight / 2) * step; + + draw_vertical_line_tex(a, x, drawStart, drawEnd, tex, texX, step, texPos); + + a->zbuf[x] = perpWallDist; + } + + mlx_put_image_to_window(a->mlx, a->win, a->frame.ptr, 0, 0); +} + +int update(t_app *a) { + move_player(a); + render_frame(a); + return 0; +} diff --git a/srcs/main.c b/srcs/main.c deleted file mode 100644 index 8283755..0000000 --- a/srcs/main.c +++ /dev/null @@ -1,61 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* main.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 14:56:25 by lfirmin #+# #+# */ -/* Updated: 2025/10/08 16:25:42 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -void print_int_array(int *array, int size) -{ - int i; - - if (!array) - return ; - i = 0; - while (i < size) - { - ft_putnbr_fd(array[i], 1); - if (i < size - 1) - write(1, ", ", 2); - i++; - } - write(1, "\n", 1); -} -void debug(t_data data) -{ - printf("map:\n\n"); - print_array(data.map); - printf("\n"); - printf("c: "); - fflush(stdout); - print_int_array(data.texture->ceiling, 3); - printf("f: "); - fflush(stdout); - print_int_array(data.texture->floor, 3); - printf("p: "); - fflush(stdout); - print_int_array(data.parsing.player, 3); - printf("\n"); - printf("\ntexture:\n\n"); - printf("%s\n", data.texture->east); - printf("%s\n", data.texture->north); - printf("%s\n", data.texture->west); - printf("%s\n", data.texture->south); -} -int main(int ac, char **av) -{ - t_data data; - - init_data(&data, av[1]); - if (parsing(&data)); - debug(data); - free_char_array(data.parsing.raw_map); - free_textures(data.texture); - free_data(&data); -} diff --git a/srcs/parsing/check_colors.c b/srcs/parsing/check_colors.c deleted file mode 100644 index 97a04a8..0000000 --- a/srcs/parsing/check_colors.c +++ /dev/null @@ -1,35 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* check_colors.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/25 18:41:26 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 10:06:32 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -int check_colors(t_textures *texture) -{ - if (is_rgb(texture->floor)) - return (ft_error(ERROR_COL), 1); - if (is_rgb(texture->ceiling)) - return (ft_error(ERROR_COL), 1); - return (0); -} - -int is_rgb(int color[3]) -{ - int i; - - i = 0; - while (i < 3) - { - if (color[i] > 255 || color[i] < 0) - return (1); - i++; - } - return (0); -} diff --git a/srcs/parsing/check_file.c b/srcs/parsing/check_file.c deleted file mode 100644 index 5022033..0000000 --- a/srcs/parsing/check_file.c +++ /dev/null @@ -1,40 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* check_file.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 15:07:29 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 10:11:50 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "cub.h" - -int check_file(char *map_path, t_data_parsing *parsing) -{ - if (!map_path) - return (ft_error(ERROR_EMPT_PATH), 1); - if (check_extension(map_path)) - return (1); - parsing->fd_map = open(map_path, O_RDONLY); - if (parsing->fd_map < 0) - return (perror("Error\n"), 1); - parsing->fd_map_dup = open(map_path, O_RDONLY); - if (parsing->fd_map_dup < 0) - return (perror("Error\n"), 1); - return (0); -} - -int check_extension(char *map_path) -{ - int len_map_path; - - len_map_path = ft_strlen(map_path); - if (len_map_path < 4) - return (ft_error(ERROR_EXT), 1); - if (ft_strcmp(map_path + len_map_path - 4, ".cub") != 0) - return (ft_error(ERROR_EXT), 1); - return (0); -} diff --git a/srcs/parsing/check_map.c b/srcs/parsing/check_map.c deleted file mode 100644 index eb9c2ad..0000000 --- a/srcs/parsing/check_map.c +++ /dev/null @@ -1,123 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* check_map.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 15:07:29 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 10:11:50 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -int check_char_and_count(char c, int *p) -{ - if (c == '1' || c == '0' || c == ' ' || c == '\n') - return (0); - else if (c == 'S' || c == 'N' || c == 'E' || c == 'W') - { - (*p)++; - return (0); - } - else - return (2); -} - -int check_map_char(char **map) -{ - int i; - int j; - int p; - int ret; - - i = 0; - p = 0; - while (map[i]) - { - j = 0; - while (map[i][j]) - { - ret = check_char_and_count(map[i][j], &p); - if (ret != 0) - return (ret); - j++; - } - i++; - } - if (p != 1) - return (1); - return (0); -} - -void find_player_pos(char **map, int *player) -{ - int i; - int j; - - i = 0; - while (map[i]) - { - j = 0; - while (map[i][j]) - { - if (map[i][j] == 'S' || map[i][j] == 'N' || - map[i][j] == 'E' || map[i][j] == 'W') - { - player[0] = j; - player[1] = i; - player[2] = map[i][j]; - return ; - } - j++; - } - i++; - } -} - -int flood_fill(char **map_cp, int x, int y) -{ - if (!map_cp[y] || !map_cp[y][x]) - return (1); - if (map_cp[y][x] == 'v') - return (0); - if (map_cp[y][x] == '1') - { - map_cp[y][x] = 'v'; - return (0); - } - if (map_cp[y][x] == '0' || map_cp[y][x] == 'N' || map_cp[y][x] == 'S' - || map_cp[y][x] == 'E' || map_cp[y][x] == 'W') - { - map_cp[y][x] = 'v'; - if (flood_fill(map_cp, x + 1, y)) - return (1); - if (flood_fill(map_cp, x - 1, y)) - return (1); - if (flood_fill(map_cp, x, y + 1)) - return (1); - if (flood_fill(map_cp, x, y - 1)) - return (1); - return (0); - } - return (1); -} - -int rep_ex_wall(char **map_cp, int x, int y) -{ - if (y < 0 || x < 0) - return (0); - if (!map_cp[y] || !map_cp[y][x]) - return (0); - if (map_cp[y][x] == '1') - map_cp[y][x] = 'v'; - if (map_cp[y][x] == 'v') - { - map_cp[y][x] = 'c'; - rep_ex_wall(map_cp, x + 1, y); - rep_ex_wall(map_cp, x - 1, y); - rep_ex_wall(map_cp, x, y + 1); - rep_ex_wall(map_cp, x, y - 1); - } - return (0); -} diff --git a/srcs/parsing/check_map_2.c b/srcs/parsing/check_map_2.c deleted file mode 100644 index b4de039..0000000 --- a/srcs/parsing/check_map_2.c +++ /dev/null @@ -1,54 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* check_map_2.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 15:07:29 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 12:09:03 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -int hasinvalidchar(char **map) -{ - int y; - int x; - - y = 0; - while (map[y]) - { - x = 0; - while (map[y][x]) - { - if (map[y][x] != 'c' && map[y][x] != ' ' && map[y][x] != ' ' - && map[y][x] != '\n') - return (1); - x++; - } - y++; - } - return (0); -} - -int validate_map(char **map, int *player) -{ - int result; - char **map_cp; - - map_cp = ft_arrcpy(map); - result = check_map_char(map); - if (result == 1) - return (free_char_array(map_cp), ft_error(ERROR_PLAYER), 1); - if (result == 2) - return (free_char_array(map_cp), ft_error(ERROR_CHAR), 1); - find_player_pos(map, player); - if (flood_fill(map_cp, player[0], player[1])) - return (free_char_array(map_cp), ft_error(ERROR_NOT_CLOSE), 1); - rep_ex_wall(map_cp, player[0], player[1]); - if (hasinvalidchar(map_cp)) - return (free_char_array(map_cp), ft_error(ERROR_CHAR), 1); - free_char_array(map_cp); - return (0); -} diff --git a/srcs/parsing/get_map.c b/srcs/parsing/get_map.c deleted file mode 100644 index ed3c1a0..0000000 --- a/srcs/parsing/get_map.c +++ /dev/null @@ -1,94 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* get_map.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/23 13:29:28 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 10:13:07 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "cub.h" - -int get_map(t_data *data) -{ - int nb_line; - - nb_line = line_counter(data->parsing.fd_map); - if (nb_line <= 0) - return (ft_error(ERROR_EMPTY), 1); - data->parsing.raw_map = ft_calloc(nb_line + 1, sizeof(char *)); - if (put_map_on_array(data)) - return (1); - return (0); -} - -int line_counter(int fd) -{ - int nb_line; - char *line; - - line = NULL; - nb_line = 0; - line = get_next_line(fd); - while (line != NULL) - { - nb_line++; - free(line); - line = get_next_line(fd); - } - free(line); - line = get_next_line(-1); - free(line); - return (nb_line); -} - -int put_map_on_array(t_data *data) -{ - char *line; - char *cleaned; - int i; - int j[6]; - - ft_memset(j, 0, sizeof(j)); - i = 0; - while ((line = get_next_line(data->parsing.fd_map_dup)) != NULL) - { - if (is_config_line(line)) - { - cleaned = clean_line(line); - if (get_texture_path(cleaned, data->texture, j)) - { - free(line); - free(cleaned); - line = get_next_line(-1); - if (line) - free(line); - return (1); - } - free(line); - free(cleaned); - } - else if (is_empty_line(line) && i == 0) - free(line); - else - data->parsing.raw_map[i++] = line; - } - line = get_next_line(-1); - if (line) - free(line); - data->parsing.raw_map[i] = NULL; - return (0); -} - -char *clean_line(char *raw_line) -{ - char *cleaned; - - if (!raw_line) - return (NULL); - cleaned = ft_strtrim(raw_line, " \t\n\r"); - return (cleaned); -} diff --git a/srcs/parsing/get_textures.c b/srcs/parsing/get_textures.c deleted file mode 100644 index 55b68a5..0000000 --- a/srcs/parsing/get_textures.c +++ /dev/null @@ -1,91 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* get_textures.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/24 12:37:11 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 10:13:41 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -int get_texture_path(char *line, t_textures *texture, int *j) -{ - if (check_extension_2(line) && !is_color_line(line)) - return (ft_error(ERROR_NOT_XMP), 1); - else if (is_texture_line(line) == 1 && j[0]++ == 0) - texture->north = ft_strtrim(line + 2, " \t\n\r"); - else if (is_texture_line(line) == 2 && j[1]++ == 0) - texture->south = ft_strtrim(line + 2, " \t\n\r"); - else if (is_texture_line(line) == 3 && j[2]++ == 0) - texture->west = ft_strtrim(line + 2, " \t\n\r"); - else if (is_texture_line(line) == 4 && j[3]++ == 0) - texture->east = ft_strtrim(line + 2, " \t\n\r"); - else if (is_color_line(line) == 1 && j[4]++ == 0) - get_rgb_values(line, texture->floor); - else if (is_color_line(line) == 2 && j[5]++ == 0) - get_rgb_values(line, texture->ceiling); - else - return (ft_error(ERROR_DOUBLE), 2); - return (0); -} - -int is_valid_number(char *str) -{ - int i; - - if (!str || !*str) - return (0); - i = 0; - while (str[i] == ' ' || str[i] == '\t') - i++; - if (!str[i] || !(str[i] >= '0' && str[i] <= '9')) - return (0); - while (str[i] >= '0' && str[i] <= '9') - i++; - while (str[i] == ' ' || str[i] == '\t') - i++; - if (str[i] != '\0') - return (0); - return (1); -} - -int validate_and_convert_rgb(char **parts, int rgb[3]) -{ - int i; - - i = -1; - while (++i < 3) - { - if (!is_valid_number(parts[i])) - return (free_char_array(parts), 1); - rgb[i] = ft_atoi(parts[i]); - if (rgb[i] < 0 || rgb[i] > 255) - return (free_char_array(parts), 1); - } - return (free_char_array(parts), 0); -} - -int get_rgb_values(char *line, int rgb[3]) -{ - char *start; - char **parts; - int i; - - if (!line || !rgb) - return (1); - start = ft_strchr(line, ' '); - if (!start) - return (1); - parts = ft_split(start + 1, ','); - if (!parts) - return (1); - i = 0; - while (parts[i]) - i++; - if (i != 3) - return (free_char_array(parts), 1); - return (validate_and_convert_rgb(parts, rgb)); -} diff --git a/srcs/parsing/init_parsing.c b/srcs/parsing/init_parsing.c deleted file mode 100644 index 73a9414..0000000 --- a/srcs/parsing/init_parsing.c +++ /dev/null @@ -1,50 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* init_parsing.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/23 13:33:00 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 10:14:37 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -int init_parsing(t_data_parsing *parsing) -{ - if (!parsing) - return (ft_error(ERROR_INIT_PARS), 1); - parsing->fd_map = 0; - parsing->raw_map = NULL; - return (0); -} - -int init_textures(t_textures *textures) -{ - int i; - - if (!textures) - return (ft_error(ERROR_INIT_TEX), 1); - textures->north = NULL; - textures->south = NULL; - textures->east = NULL; - textures->west = NULL; - i = 0; - while (i < 3) - { - textures->floor[i] = -1; - textures->ceiling[i] = -1; - i++; - } - return (0); -} - -int free_textures(t_textures *textures) -{ - free(textures->north); - free(textures->south); - free(textures->east); - free(textures->west); - return (0); -} diff --git a/srcs/parsing/line_detect.c b/srcs/parsing/line_detect.c deleted file mode 100644 index a76b055..0000000 --- a/srcs/parsing/line_detect.c +++ /dev/null @@ -1,104 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* line_detect.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/24 11:58:39 by lfirmin #+# #+# */ -/* Updated: 2025/10/08 14:05:47 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "cub.h" - -int check_extension_2(char *str) -{ - size_t len; - - len = strlen(str); - if (len < 4) - return (1); - return (ft_strcmp(str + len - 4, ".xpm")); -} - -int is_config_line(char *line) -{ - char *trimmed; - int result; - - result = 0; - if (!line) - return (0); - trimmed = ft_strtrim(line, " \t\n\r"); - if (!trimmed) - return (0); - if (ft_strncmp(trimmed, "NO ", 3) == 0 - || ft_strncmp(trimmed, "SO ", 3) == 0 - || ft_strncmp(trimmed, "WE ", 3) == 0 - || ft_strncmp(trimmed, "EA ", 3) == 0 - || ft_strncmp(trimmed, "F ", 2) == 0 - || ft_strncmp(trimmed, "C ", 2) == 0) - result = 1; - free(trimmed); - return (result); -} - -int is_empty_line(char *line) -{ - int i; - - i = 0; - if (!line) - return (1); - while (line[i]) - { - if (line[i] != ' ' && line[i] != '\t' - && line[i] != '\n' && line[i] != '\r') - return (0); - i++; - } - return (1); -} - -int is_color_line(char *line) -{ - char *trimmed; - int result; - - result = 0; - if (!line) - return (0); - trimmed = ft_strtrim(line, " \t\n\r"); - if (!trimmed) - return (0); - if (ft_strncmp(trimmed, "F ", 2) == 0) - result = 1; - else if (ft_strncmp(trimmed, "C ", 2) == 0) - result = 2; - free(trimmed); - return (result); -} - -int is_texture_line(char *line) -{ - char *trimmed; - int result; - - result = 0; - if (!line) - return (0); - trimmed = ft_strtrim(line, " \t\n\r"); - if (!trimmed) - return (0); - if (ft_strncmp(trimmed, "NO ", 3) == 0) - result = 1; - else if (ft_strncmp(trimmed, "SO ", 3) == 0) - result = 2; - else if (ft_strncmp(trimmed, "WE ", 3) == 0) - result = 3; - else if (ft_strncmp(trimmed, "EA ", 3) == 0) - result = 4; - free(trimmed); - return (result); -} diff --git a/srcs/parsing/parsing.c b/srcs/parsing/parsing.c deleted file mode 100644 index d79190e..0000000 --- a/srcs/parsing/parsing.c +++ /dev/null @@ -1,33 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* parsing.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 14:17:58 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 10:15:24 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -int parsing(t_data *data) -{ - if (check_file(data->map_path, &data->parsing) == 1) - return (1); - if (get_map(data)) - { - close(data->parsing.fd_map); - close(data->parsing.fd_map_dup); - return (1); - } - close(data->parsing.fd_map); - close(data->parsing.fd_map_dup); - if (check_colors(data->texture) == 1) - return (1); - if (validate_map(data->parsing.raw_map, data->parsing.player)) - return (1); - data->map = data->parsing.raw_map; - data->parsing.raw_map = NULL; - return (0); -} diff --git a/srcs/utils/init.c b/srcs/utils/init.c deleted file mode 100644 index 77d21fd..0000000 --- a/srcs/utils/init.c +++ /dev/null @@ -1,35 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* init.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 18:57:21 by lfirmin #+# #+# */ -/* Updated: 2025/10/08 16:21:46 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ -#include "cub.h" - -int init_data(t_data *data, char *path) -{ - if (!data) - return (ft_error(ERROR_INIT_DATA), 1); - data->texture = malloc(sizeof(t_textures)); - if (!data->texture) - return (ft_error(ERROR_INIT_TEX), 1); - init_parsing(&data->parsing); - init_textures(data->texture); - data->map = NULL; - data->map_path = path; - return (0); -} - -void free_data(t_data *data) -{ - if (!data) - return ; - if (data->texture) - free(data->texture); - free_char_array(data->map); -} diff --git a/srcs/utils/utils.c b/srcs/utils/utils.c deleted file mode 100644 index d48a8ef..0000000 --- a/srcs/utils/utils.c +++ /dev/null @@ -1,60 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* utils.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: lfirmin +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/22 14:56:25 by lfirmin #+# #+# */ -/* Updated: 2025/10/07 12:14:42 by lfirmin ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "cub.h" - -void ft_error(char *message) -{ - int len; - - len = 0; - while (message[len]) - len++; - write(2, ERROR_PREFIX, 6); - write(2, message, len); - write(2, "\n", 1); -} - -void free_char_array(char **array) -{ - int i; - - if (!array) - return ; - i = 0; - while (array[i]) - free(array[i++]); - free(array); -} - -int ft_arrlen(char **arr) -{ - int i; - - while (arr[i]) - i++; - return (i); -} - -void print_array(char **array) -{ - int i; - - i = 0; - if (!array) - return ; - while (array[i]) - { - printf("%s", array[i]); - i++; - } -} diff --git a/test b/test new file mode 100644 index 0000000..e69de29 diff --git a/test.cub b/test.cub deleted file mode 100644 index 5b32dae..0000000 --- a/test.cub +++ /dev/null @@ -1,29 +0,0 @@ - - -NO textures/test/north.xpm -EA textures/test/east.xpm -WE textures/test/west.xpm -SO textures/test/sud.xpm - - - - -C 200,200,200 -F 200,200,200 - - 1111 - 1001 -10001 -10001 -10101 -1S001 -1001 -10001 -10001 -100011 -10001 -10001 -111111 - 1111 - 11 - 1111 diff --git a/utils.c b/utils.c new file mode 100644 index 0000000..200e699 --- /dev/null +++ b/utils.c @@ -0,0 +1,15 @@ +// utils.c +#include "cub3d.h" + +void put_pixel(t_img *img, int x, int y, int color) { + if (x < 0 || x >= WIN_W || y < 0 || y >= WIN_H) return; + char *dst = img->addr + (y * img->line_len + x * (img->bpp / 8)); + *(unsigned int*)dst = (unsigned int)color; +} + +int get_tex_color(t_tex *t, int tx, int ty) { + if (tx < 0) tx = 0; if (tx >= t->w) tx = t->w - 1; + if (ty < 0) ty = 0; if (ty >= t->h) ty = t->h - 1; + char *p = t->img.addr + ty * t->img.line_len + tx * (t->img.bpp / 8); + return *(unsigned int*)p; +}