From 9aa51181e8aec2603c3b2f35046917b189698dd3 Mon Sep 17 00:00:00 2001 From: djonker Date: Wed, 1 Mar 2023 04:36:58 +0100 Subject: [PATCH] firstcommit --- Makefile | 88 +++ Readme.md | 7 + getnextline/Makefile | 60 ++ getnextline/get_next_line.h | 42 ++ getnextline/get_next_line_bonus.h | 38 ++ getnextline/src/get_next_line.c | 114 ++++ getnextline/src/get_next_line_bonus.c | 114 ++++ getnextline/src/get_next_line_utils.c | 103 ++++ getnextline/src/get_next_line_utils_bonus.c | 103 ++++ libft/Makefile | 185 ++++++ libft/libft.h | 168 ++++++ libft/src/ft_around.c | 41 ++ libft/src/ft_arrlen.c | 23 + libft/src/ft_atodec.c | 28 + libft/src/ft_atof.c | 33 ++ libft/src/ft_atoi.c | 42 ++ libft/src/ft_atol.c | 42 ++ libft/src/ft_atou.c | 30 + libft/src/ft_bitswap.c | 26 + libft/src/ft_btoi.c | 42 ++ libft/src/ft_bzero.c | 26 + libft/src/ft_calloc.c | 40 ++ libft/src/ft_chrstr.c | 26 + libft/src/ft_cntarg.c | 23 + libft/src/ft_cntchr.c | 36 ++ libft/src/ft_cntwrd.c | 35 ++ libft/src/ft_cntwrds.c | 35 ++ libft/src/ft_ddtoi.c | 34 ++ libft/src/ft_declen.c | 32 + libft/src/ft_dtoa.c | 38 ++ libft/src/ft_dtoh.c | 23 + libft/src/ft_factor.c | 25 + libft/src/ft_fczero.c | 34 ++ libft/src/ft_flolen.c | 23 + libft/src/ft_fnprim.c | 24 + libft/src/ft_frearr.c | 29 + libft/src/ft_frenarr.c | 24 + libft/src/ft_fround.c | 41 ++ libft/src/ft_ftoa.c | 31 + libft/src/ft_ftoi.c | 33 ++ libft/src/ft_getpwd.c | 36 ++ libft/src/ft_htod.c | 24 + libft/src/ft_htoi.c | 34 ++ libft/src/ft_iftof.c | 22 + libft/src/ft_intlen.c | 30 + libft/src/ft_isallbyte.c | 22 + libft/src/ft_isalnum.c | 20 + libft/src/ft_isalpha.c | 20 + libft/src/ft_isascii.c | 20 + libft/src/ft_isdigit.c | 20 + libft/src/ft_islneg.c | 20 + libft/src/ft_islowc.c | 20 + libft/src/ft_isneg.c | 20 + libft/src/ft_isodigit.c | 32 + libft/src/ft_isprim.c | 35 ++ libft/src/ft_isprint.c | 20 + libft/src/ft_isuppc.c | 20 + libft/src/ft_isxdigit.c | 27 + libft/src/ft_itoa.c | 42 ++ libft/src/ft_itob.c | 32 + libft/src/ft_itoba.c | 40 ++ libft/src/ft_itodd.c | 42 ++ libft/src/ft_itof.c | 28 + libft/src/ft_itoh.c | 42 ++ libft/src/ft_itohx.c | 42 ++ libft/src/ft_itoo.c | 41 ++ libft/src/ft_itooa.c | 42 ++ libft/src/ft_itozh.c | 42 ++ libft/src/ft_ldeclen.c | 32 + libft/src/ft_lftoa.c | 50 ++ libft/src/ft_lftoi.c | 33 ++ libft/src/ft_lincpy.c | 34 ++ libft/src/ft_linlcpy.c | 35 ++ libft/src/ft_linlen.c | 26 + libft/src/ft_lstadd_back.c | 29 + libft/src/ft_lstadd_front.c | 23 + libft/src/ft_lstclear.c | 39 ++ libft/src/ft_lstdelone.c | 27 + libft/src/ft_lstiter.c | 24 + libft/src/ft_lstlast.c | 24 + libft/src/ft_lstmap.c | 40 ++ libft/src/ft_lstnew.c | 25 + libft/src/ft_lstsize.c | 26 + libft/src/ft_ltoa.c | 42 ++ libft/src/ft_luilen.c | 28 + libft/src/ft_malstr.c | 31 + libft/src/ft_malstrs.c | 31 + libft/src/ft_max.c | 20 + libft/src/ft_memccpy.c | 34 ++ libft/src/ft_memchr.c | 30 + libft/src/ft_memcmp.c | 31 + libft/src/ft_memcpy.c | 33 ++ libft/src/ft_memmove.c | 41 ++ libft/src/ft_memset.c | 27 + libft/src/ft_min.c | 20 + libft/src/ft_otoi.c | 34 ++ libft/src/ft_power.c | 26 + libft/src/ft_putchar.c | 18 + libft/src/ft_putchar_fd.c | 18 + libft/src/ft_putendl.c | 25 + libft/src/ft_putendl_fd.c | 25 + libft/src/ft_putflo.c | 25 + libft/src/ft_putflo_fd.c | 25 + libft/src/ft_putlong.c | 31 + libft/src/ft_putnbr.c | 31 + libft/src/ft_putnbr_base.c | 25 + libft/src/ft_putnbr_fd.c | 31 + libft/src/ft_putstr.c | 20 + libft/src/ft_putstr_fd.c | 20 + libft/src/ft_putull.c | 24 + libft/src/ft_putzflo.c | 41 ++ libft/src/ft_putzflo_fd.c | 32 + libft/src/ft_putznbr.c | 26 + libft/src/ft_putznbr_fd.c | 26 + libft/src/ft_putzsci.c | 130 ++++ libft/src/ft_putzscih.c | 132 +++++ libft/src/ft_revstr.c | 32 + libft/src/ft_round.c | 39 ++ libft/src/ft_split.c | 38 ++ libft/src/ft_splits.c | 38 ++ libft/src/ft_sqrt.c | 27 + libft/src/ft_strchr.c | 26 + libft/src/ft_strdup.c | 26 + libft/src/ft_strjoin.c | 42 ++ libft/src/ft_strlcat.c | 39 ++ libft/src/ft_strlcpy.c | 30 + libft/src/ft_strlen.c | 28 + libft/src/ft_strlow.c | 29 + libft/src/ft_strmapi.c | 33 ++ libft/src/ft_strncmp.c | 30 + libft/src/ft_strnstr.c | 36 ++ libft/src/ft_strrchr.c | 29 + libft/src/ft_strtrim.c | 31 + libft/src/ft_strupp.c | 29 + libft/src/ft_substr.c | 39 ++ libft/src/ft_swap.c | 22 + libft/src/ft_swaplong.c | 22 + libft/src/ft_tolower.c | 20 + libft/src/ft_toupper.c | 20 + libft/src/ft_utoa.c | 35 ++ libft/src/ft_vamax.c | 34 ++ libft/src/ft_vamin.c | 34 ++ libft/src/ft_wrdlen.c | 42 ++ libft/src/ft_wrdlens.c | 42 ++ printf/Makefile | 83 +++ printf/ft_printf.h | 55 ++ printf/src/Linux/ft_printf_proc_a.c | 105 ++++ printf/src/Linux/ft_printf_proc_b.c | 79 +++ printf/src/Linux/ft_printf_proc_c.c | 47 ++ printf/src/Linux/ft_printf_proc_d.c | 99 ++++ printf/src/Linux/ft_printf_proc_e.c | 101 ++++ printf/src/Linux/ft_printf_proc_f.c | 98 +++ printf/src/Linux/ft_printf_proc_g.c | 87 +++ printf/src/Linux/ft_printf_proc_inf.c | 90 +++ printf/src/Linux/ft_printf_proc_o.c | 83 +++ printf/src/Linux/ft_printf_proc_p.c | 85 +++ printf/src/Linux/ft_printf_proc_prec.c | 19 + printf/src/Linux/ft_printf_proc_s.c | 91 +++ printf/src/Linux/ft_printf_proc_u.c | 75 +++ printf/src/Linux/ft_printf_proc_x.c | 93 +++ printf/src/Mac/ft_printf_proc_a.c | 105 ++++ printf/src/Mac/ft_printf_proc_b.c | 79 +++ printf/src/Mac/ft_printf_proc_c.c | 47 ++ printf/src/Mac/ft_printf_proc_d.c | 99 ++++ printf/src/Mac/ft_printf_proc_e.c | 101 ++++ printf/src/Mac/ft_printf_proc_f.c | 98 +++ printf/src/Mac/ft_printf_proc_g.c | 87 +++ printf/src/Mac/ft_printf_proc_inf.c | 90 +++ printf/src/Mac/ft_printf_proc_o.c | 83 +++ printf/src/Mac/ft_printf_proc_p.c | 88 +++ printf/src/Mac/ft_printf_proc_prec.c | 47 ++ printf/src/Mac/ft_printf_proc_s.c | 76 +++ printf/src/Mac/ft_printf_proc_u.c | 75 +++ printf/src/Mac/ft_printf_proc_x.c | 93 +++ printf/src/ft_printf.c | 104 ++++ printf/src/ft_printf_flags.c | 112 ++++ printf/src/ft_printf_length.c | 114 ++++ push_swap.h | 84 +++ src/checkandinit.c | 135 +++++ src/checker.c | 113 ++++ src/faster.c | 130 ++++ src/fewnumbers.c | 71 +++ src/finale.c | 103 ++++ src/manynumbers.c | 145 +++++ src/printshit.c | 64 ++ src/push.c | 125 ++++ src/push_swap.c | 58 ++ src/reverserotate.c | 41 ++ src/rotate.c | 41 ++ src/swap.c | 68 +++ test.sh | 624 ++++++++++++++++++++ tests/lchecker | Bin 0 -> 38192 bytes tests/mchecker | Bin 0 -> 70928 bytes 193 files changed, 9858 insertions(+) create mode 100644 Makefile create mode 100644 Readme.md create mode 100644 getnextline/Makefile create mode 100644 getnextline/get_next_line.h create mode 100644 getnextline/get_next_line_bonus.h create mode 100644 getnextline/src/get_next_line.c create mode 100644 getnextline/src/get_next_line_bonus.c create mode 100644 getnextline/src/get_next_line_utils.c create mode 100644 getnextline/src/get_next_line_utils_bonus.c create mode 100644 libft/Makefile create mode 100644 libft/libft.h create mode 100644 libft/src/ft_around.c create mode 100644 libft/src/ft_arrlen.c create mode 100644 libft/src/ft_atodec.c create mode 100644 libft/src/ft_atof.c create mode 100644 libft/src/ft_atoi.c create mode 100644 libft/src/ft_atol.c create mode 100644 libft/src/ft_atou.c create mode 100644 libft/src/ft_bitswap.c create mode 100644 libft/src/ft_btoi.c create mode 100644 libft/src/ft_bzero.c create mode 100644 libft/src/ft_calloc.c create mode 100644 libft/src/ft_chrstr.c create mode 100644 libft/src/ft_cntarg.c create mode 100644 libft/src/ft_cntchr.c create mode 100644 libft/src/ft_cntwrd.c create mode 100644 libft/src/ft_cntwrds.c create mode 100644 libft/src/ft_ddtoi.c create mode 100644 libft/src/ft_declen.c create mode 100644 libft/src/ft_dtoa.c create mode 100644 libft/src/ft_dtoh.c create mode 100644 libft/src/ft_factor.c create mode 100644 libft/src/ft_fczero.c create mode 100644 libft/src/ft_flolen.c create mode 100644 libft/src/ft_fnprim.c create mode 100644 libft/src/ft_frearr.c create mode 100644 libft/src/ft_frenarr.c create mode 100644 libft/src/ft_fround.c create mode 100644 libft/src/ft_ftoa.c create mode 100644 libft/src/ft_ftoi.c create mode 100644 libft/src/ft_getpwd.c create mode 100644 libft/src/ft_htod.c create mode 100644 libft/src/ft_htoi.c create mode 100644 libft/src/ft_iftof.c create mode 100644 libft/src/ft_intlen.c create mode 100644 libft/src/ft_isallbyte.c create mode 100644 libft/src/ft_isalnum.c create mode 100644 libft/src/ft_isalpha.c create mode 100644 libft/src/ft_isascii.c create mode 100644 libft/src/ft_isdigit.c create mode 100644 libft/src/ft_islneg.c create mode 100644 libft/src/ft_islowc.c create mode 100644 libft/src/ft_isneg.c create mode 100644 libft/src/ft_isodigit.c create mode 100644 libft/src/ft_isprim.c create mode 100644 libft/src/ft_isprint.c create mode 100644 libft/src/ft_isuppc.c create mode 100644 libft/src/ft_isxdigit.c create mode 100644 libft/src/ft_itoa.c create mode 100644 libft/src/ft_itob.c create mode 100644 libft/src/ft_itoba.c create mode 100644 libft/src/ft_itodd.c create mode 100644 libft/src/ft_itof.c create mode 100644 libft/src/ft_itoh.c create mode 100644 libft/src/ft_itohx.c create mode 100644 libft/src/ft_itoo.c create mode 100644 libft/src/ft_itooa.c create mode 100644 libft/src/ft_itozh.c create mode 100644 libft/src/ft_ldeclen.c create mode 100644 libft/src/ft_lftoa.c create mode 100644 libft/src/ft_lftoi.c create mode 100644 libft/src/ft_lincpy.c create mode 100644 libft/src/ft_linlcpy.c create mode 100644 libft/src/ft_linlen.c create mode 100644 libft/src/ft_lstadd_back.c create mode 100644 libft/src/ft_lstadd_front.c create mode 100644 libft/src/ft_lstclear.c create mode 100644 libft/src/ft_lstdelone.c create mode 100644 libft/src/ft_lstiter.c create mode 100644 libft/src/ft_lstlast.c create mode 100644 libft/src/ft_lstmap.c create mode 100644 libft/src/ft_lstnew.c create mode 100644 libft/src/ft_lstsize.c create mode 100644 libft/src/ft_ltoa.c create mode 100644 libft/src/ft_luilen.c create mode 100644 libft/src/ft_malstr.c create mode 100644 libft/src/ft_malstrs.c create mode 100644 libft/src/ft_max.c create mode 100644 libft/src/ft_memccpy.c create mode 100644 libft/src/ft_memchr.c create mode 100644 libft/src/ft_memcmp.c create mode 100644 libft/src/ft_memcpy.c create mode 100644 libft/src/ft_memmove.c create mode 100644 libft/src/ft_memset.c create mode 100644 libft/src/ft_min.c create mode 100644 libft/src/ft_otoi.c create mode 100644 libft/src/ft_power.c create mode 100644 libft/src/ft_putchar.c create mode 100644 libft/src/ft_putchar_fd.c create mode 100644 libft/src/ft_putendl.c create mode 100644 libft/src/ft_putendl_fd.c create mode 100644 libft/src/ft_putflo.c create mode 100644 libft/src/ft_putflo_fd.c create mode 100644 libft/src/ft_putlong.c create mode 100644 libft/src/ft_putnbr.c create mode 100644 libft/src/ft_putnbr_base.c create mode 100644 libft/src/ft_putnbr_fd.c create mode 100644 libft/src/ft_putstr.c create mode 100644 libft/src/ft_putstr_fd.c create mode 100644 libft/src/ft_putull.c create mode 100644 libft/src/ft_putzflo.c create mode 100644 libft/src/ft_putzflo_fd.c create mode 100644 libft/src/ft_putznbr.c create mode 100644 libft/src/ft_putznbr_fd.c create mode 100644 libft/src/ft_putzsci.c create mode 100644 libft/src/ft_putzscih.c create mode 100644 libft/src/ft_revstr.c create mode 100644 libft/src/ft_round.c create mode 100644 libft/src/ft_split.c create mode 100644 libft/src/ft_splits.c create mode 100644 libft/src/ft_sqrt.c create mode 100644 libft/src/ft_strchr.c create mode 100644 libft/src/ft_strdup.c create mode 100644 libft/src/ft_strjoin.c create mode 100644 libft/src/ft_strlcat.c create mode 100644 libft/src/ft_strlcpy.c create mode 100644 libft/src/ft_strlen.c create mode 100644 libft/src/ft_strlow.c create mode 100644 libft/src/ft_strmapi.c create mode 100644 libft/src/ft_strncmp.c create mode 100644 libft/src/ft_strnstr.c create mode 100644 libft/src/ft_strrchr.c create mode 100644 libft/src/ft_strtrim.c create mode 100644 libft/src/ft_strupp.c create mode 100644 libft/src/ft_substr.c create mode 100644 libft/src/ft_swap.c create mode 100644 libft/src/ft_swaplong.c create mode 100644 libft/src/ft_tolower.c create mode 100644 libft/src/ft_toupper.c create mode 100644 libft/src/ft_utoa.c create mode 100644 libft/src/ft_vamax.c create mode 100644 libft/src/ft_vamin.c create mode 100644 libft/src/ft_wrdlen.c create mode 100644 libft/src/ft_wrdlens.c create mode 100644 printf/Makefile create mode 100644 printf/ft_printf.h create mode 100644 printf/src/Linux/ft_printf_proc_a.c create mode 100644 printf/src/Linux/ft_printf_proc_b.c create mode 100644 printf/src/Linux/ft_printf_proc_c.c create mode 100644 printf/src/Linux/ft_printf_proc_d.c create mode 100644 printf/src/Linux/ft_printf_proc_e.c create mode 100644 printf/src/Linux/ft_printf_proc_f.c create mode 100644 printf/src/Linux/ft_printf_proc_g.c create mode 100644 printf/src/Linux/ft_printf_proc_inf.c create mode 100644 printf/src/Linux/ft_printf_proc_o.c create mode 100644 printf/src/Linux/ft_printf_proc_p.c create mode 100644 printf/src/Linux/ft_printf_proc_prec.c create mode 100644 printf/src/Linux/ft_printf_proc_s.c create mode 100644 printf/src/Linux/ft_printf_proc_u.c create mode 100644 printf/src/Linux/ft_printf_proc_x.c create mode 100644 printf/src/Mac/ft_printf_proc_a.c create mode 100644 printf/src/Mac/ft_printf_proc_b.c create mode 100644 printf/src/Mac/ft_printf_proc_c.c create mode 100644 printf/src/Mac/ft_printf_proc_d.c create mode 100644 printf/src/Mac/ft_printf_proc_e.c create mode 100644 printf/src/Mac/ft_printf_proc_f.c create mode 100644 printf/src/Mac/ft_printf_proc_g.c create mode 100644 printf/src/Mac/ft_printf_proc_inf.c create mode 100644 printf/src/Mac/ft_printf_proc_o.c create mode 100644 printf/src/Mac/ft_printf_proc_p.c create mode 100644 printf/src/Mac/ft_printf_proc_prec.c create mode 100644 printf/src/Mac/ft_printf_proc_s.c create mode 100644 printf/src/Mac/ft_printf_proc_u.c create mode 100644 printf/src/Mac/ft_printf_proc_x.c create mode 100644 printf/src/ft_printf.c create mode 100644 printf/src/ft_printf_flags.c create mode 100644 printf/src/ft_printf_length.c create mode 100644 push_swap.h create mode 100644 src/checkandinit.c create mode 100644 src/checker.c create mode 100644 src/faster.c create mode 100644 src/fewnumbers.c create mode 100644 src/finale.c create mode 100644 src/manynumbers.c create mode 100644 src/printshit.c create mode 100644 src/push.c create mode 100644 src/push_swap.c create mode 100644 src/reverserotate.c create mode 100644 src/rotate.c create mode 100644 src/swap.c create mode 100755 test.sh create mode 100755 tests/lchecker create mode 100644 tests/mchecker diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..741bc87 --- /dev/null +++ b/Makefile @@ -0,0 +1,88 @@ +# **************************************************************************** # +# # +# :::::::: # +# Makefile |o_o || | # +# +:+ # +# By: djonker +#+ # +# +#+ # +# Created: 2020/12/19 06:09:46 by djonker #+# #+# # +# Updated: 2023/02/25 03:31:41 by houtworm \___)=(___/ # +# # +# **************************************************************************** # + +NAME =push_swap +CC =cc +FC =-Wall -Werror -Wextra -g -fsanitize=address +RM =rm -f +PSSRC =src/push_swap.c +PSOBJ =obj/push_swap.o +CHSRC =src/checker.c +CHOBJ =obj/checker.o +SRC =src/checkandinit.c \ + src/faster.c \ + src/fewnumbers.c \ + src/finale.c \ + src/manynumbers.c \ + src/printshit.c \ + src/push.c \ + src/reverserotate.c \ + src/rotate.c \ + src/swap.c +OBJ =$(SRC:src/%.c=obj/%.o) +LIB =printf/ft_printf.a getnextline/get_next_line.a libft/libft.a + +all: libft getnextline printf $(NAME) + +bonus: libft getnextline printf checker + +clean: + @$(RM) -r obj + @$(MAKE) -C libft clean > /dev/null + @$(MAKE) -C printf clean > /dev/null + @$(MAKE) -C getnextline clean > /dev/null + @printf "\e[1;35mCleaned Object Files\n\e[0;00m" + +fclean: clean + @$(RM) $(NAME) checker + @$(MAKE) -C libft fclean > /dev/null + @$(MAKE) -C printf fclean > /dev/null + @$(MAKE) -C getnextline fclean > /dev/null + @printf "\e[1;31mCleaned Executables\n\e[0;00m" + +re: fclean all + +$(OBJ): $(SRC) + @mkdir -p $(dir $@) + @printf "\e[1;34mBuilding $@\n\e[0;00m" + @$(CC) $(CFLAGS) -c $(@:obj/%.o=src/%.c) -o $@ + +$(PSOBJ): $(PSSRC) + @mkdir -p $(dir $@) + @printf "\e[1;34mBuilding $@\n\e[0;00m" + @$(CC) $(CFLAGS) -c $(@:obj/%.o=src/%.c) -o $@ + +$(CHOBJ): $(CHSRC) + @mkdir -p $(dir $@) + @printf "\e[1;34mBuilding $@\n\e[0;00m" + @$(CC) $(CFLAGS) -c $(@:obj/%.o=src/%.c) -o $@ + +$(NAME): $(OBJ) $(PSOBJ) + @printf "\e[1;36mCompiling $@\e[0;00m\n" + @$(CC) $(FC) -o $@ $(PSOBJ) $(OBJ) $(LIB) + @printf "\e[1;32mDone\e[0;00m\n" + +checker: $(OBJ) $(CHOBJ) + @printf "\e[1;36mCompiling checker\e[0;00m\n" + @$(CC) $(FC) -o $@ $(CHOBJ) $(OBJ) $(LIB) + @printf "\e[1;32mDone\e[0;00m\n" + +libft: + @$(MAKE) -C libft all + +printf: + @$(MAKE) -C printf all + +getnextline: + @$(MAKE) -C getnextline all + +.PHONY: libft getnextline printf diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..3d50fb5 --- /dev/null +++ b/Readme.md @@ -0,0 +1,7 @@ +Todo + Improve 5 number algorhythm + +Tester + catch fsanitize signals + create line that replaces -Wextra with "-g -fsanitize=address" + check for -Wall -Werror -Wextra diff --git a/getnextline/Makefile b/getnextline/Makefile new file mode 100644 index 0000000..978d03c --- /dev/null +++ b/getnextline/Makefile @@ -0,0 +1,60 @@ +# **************************************************************************** # +# # +# .--. _ # +# Makefile :+: :+: :+: # +# |:_/ || |_ _ ___ __ # +# By: djonker // \ \ __| | | \ \/ / # +# (| | )|_| |_| |> < # +# Created: 2021/05/27 01:24:02 by djonker /'\_ _/`\__|\__,_/_/\_\ # +# Updated: 2023/02/07 00:57:52 by houtworm ### ########.fr # +# # +# **************************************************************************** # + +NAME = get_next_line.a +CC = gcc +FC = -Wall -Werror -Wextra +RM = rm -f +SRC = src/get_next_line.c\ + src/get_next_line_utils.c +BSRC = src/get_next_line_bonus.c\ + src/get_next_line_utils_bonus.c +OBJ =$(SRC:src/%.c=obj/%.o) +BOBJ =$(BSRC:src/%.c=obj/%.o) +FAR = ar -crs +B1 = -D BUFFER_SIZE=1 +B2 = -D BUFFER_SIZE=8 +B3 = -D BUFFER_SIZE=500 +B4 = -D BUFFER_SIZE=1000000 + +all: $(NAME) + +clean: + @$(RM) -r obj + @printf "\e[1;35mCleaned Object Files\n\e[0;00m" + +fclean: clean + @$(RM) $(NAME) + @printf "\e[1;31mCleaned Executables\n\e[0;00m" + +re: fclean all + +$(OBJ): $(SRC) + @mkdir -p obj + @printf "\e[1;34mBuilding $@\n\e[0;00m" + @$(CC) $(CFLAGS) -c $(@:obj/%.o=src/%.c) -o $@ + +$(NAME): $(OBJ) + @printf "\e[1;36mCompiling get next line\e[0;00m\n" + @$(FAR) $(NAME) $^ > /dev/null 2>&1 + @printf "\e[1;32mDone\e[0;00m\n" + +$(BOBJ): $(BSRC) + @mkdir -p obj + @printf "\e[1;34mBuilding $@\n\e[0;00m" + @$(CC) $(CFLAGS) -c $(@:obj/%.o=src/%.c) -o $@ + +bonus: $(BOBJ) + @printf "\e[1;36mCompiling get next line\e[0;00m\n" + @$(FAR) $(NAME) $^ > /dev/null 2>&1 + @printf "\e[1;32mDone\e[0;00m\n" + diff --git a/getnextline/get_next_line.h b/getnextline/get_next_line.h new file mode 100644 index 0000000..7e9bc4c --- /dev/null +++ b/getnextline/get_next_line.h @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/12/19 06:09:11 by djonker #+# #+# */ +/* Updated: 2023/02/08 22:16:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_H +# define GET_NEXT_LINE_H + +# include "get_next_line.h" +# include +# include +# include + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 300 +# endif + +struct s_gnl +{ + char b[BUFFER_SIZE + 1]; + int fd; +}; + +int get_next_line(int fd, char **line); +int findnewline(struct s_gnl *strct); +int newline(struct s_gnl *strct, char **line); +int blimit(int l, struct s_gnl *strct, char **line, char *t);; +int nonewline(int l, struct s_gnl *strct, char **line); +char *ft_substr(char const *s, unsigned int start, size_t len); +void *ft_memcpy(void *dst, const void *src, size_t n); +size_t ft_strlen(const char *str); +void ft_bzero(void *s, size_t n); +char *ft_strjoin(char const *s1, char const *s2); + +#endif diff --git a/getnextline/get_next_line_bonus.h b/getnextline/get_next_line_bonus.h new file mode 100644 index 0000000..44e905d --- /dev/null +++ b/getnextline/get_next_line_bonus.h @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* get_next_line_bonus.h |o_o || | */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/12/19 06:09:11 by djonker #+# #+# */ +/* Updated: 2021/05/27 03:17:28 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_BONUS_H +# define GET_NEXT_LINE_BONUS_H + +# include "get_next_line_bonus.h" +# include +# include +# include + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 300 +# endif + +struct s_gnl +{ + char b[BUFFER_SIZE + 1]; + int fd; +}; + +int get_next_line(int fd, char **line); +char *ft_substr(char const *s, unsigned int start, size_t len); +void *ft_memcpy(void *dst, const void *src, size_t n); +size_t ft_strlen(char *str); +void ft_bzero(void *s, size_t n); +char *ft_strjoin(char const *s1, char const *s2); + +#endif diff --git a/getnextline/src/get_next_line.c b/getnextline/src/get_next_line.c new file mode 100644 index 0000000..abecc8a --- /dev/null +++ b/getnextline/src/get_next_line.c @@ -0,0 +1,114 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* get_next_line.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/03/15 22:51:05 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:54:08 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../get_next_line.h" + +int findnewline(struct s_gnl *strct) +{ + int l; + + l = 0; + while (strct->b[l] != '\0') + { + if (strct->b[l] == '\n') + return (l + 1); + l++; + } + return (-1); +} + +int newline(struct s_gnl *strct, char **line) +{ + int l; + char *t; + + l = findnewline(strct); + line[0] = ft_substr((const char *)strct->b, 0, l - 1); + if (line[0] == NULL) + return (-1); + t = ft_substr((const char *)strct->b, l, BUFFER_SIZE - l); + if (t == NULL) + { + free(line[0]); + return (-1); + } + ft_memcpy(strct->b, t, ft_strlen(t)); + ft_bzero(&strct->b[ft_strlen(t)], BUFFER_SIZE - ft_strlen(t)); + free(t); + return (1); +} + +int blimit(int l, struct s_gnl *strct, char **line, char *t) +{ + char *f; + + l = get_next_line(strct->fd, line); + if (l == 1 || l == 0) + { + f = line[0]; + line[0] = ft_strjoin(t, line[0]); + free (f); + } + free(t); + if (line[0] == NULL) + return (-1); + return (l); +} + +int nonewline(int l, struct s_gnl *strct, char **line) +{ + char *t; + + t = ft_substr((const char *)strct->b, 0, ft_strlen(strct->b)); + ft_bzero(&strct->b[0], BUFFER_SIZE); + l = read(strct->fd, strct->b, BUFFER_SIZE); + if (l == -1 || t == NULL) + { + line[0] = NULL; + return (-1); + } + if (l == BUFFER_SIZE || findnewline(strct) > -1) + return (blimit(l, strct, line, t)); + line[0] = ft_strjoin(t, strct->b); + ft_bzero(&strct->b, BUFFER_SIZE); + free(t); + if (line[0] == NULL) + return (-1); + return (0); +} + +int get_next_line(int fd, char **line) +{ + static struct s_gnl strct[256]; + int l; + + l = 0; + if (!line) + return (-1); + if (fd < 0 || BUFFER_SIZE <= 0) + { + line[0] = NULL; + return (-1); + } + strct[fd].b[BUFFER_SIZE] = '\0'; + strct[fd].fd = fd; + if (strct[fd].b[0] == '\0') + l = read(strct[fd].fd, strct[fd].b, BUFFER_SIZE); + if (l == -1) + { + line[0] = NULL; + return (-1); + } + if (findnewline(&strct[fd]) > -1) + return (newline(&strct[fd], line)); + return (nonewline(l, &strct[fd], line)); +} diff --git a/getnextline/src/get_next_line_bonus.c b/getnextline/src/get_next_line_bonus.c new file mode 100644 index 0000000..833f094 --- /dev/null +++ b/getnextline/src/get_next_line_bonus.c @@ -0,0 +1,114 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* get_next_line_bonus.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/03/15 22:51:05 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:54:07 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../get_next_line_bonus.h" + +int findnewline(struct s_gnl *strct) +{ + int l; + + l = 0; + while (strct->b[l] != '\0') + { + if (strct->b[l] == '\n') + return (l + 1); + l++; + } + return (-1); +} + +int newline(struct s_gnl *strct, char **line) +{ + int l; + char *t; + + l = findnewline(strct); + line[0] = ft_substr((const char *)strct->b, 0, l - 1); + if (line[0] == NULL) + return (-1); + t = ft_substr((const char *)strct->b, l, BUFFER_SIZE - l); + if (t == NULL) + { + free(line[0]); + return (-1); + } + ft_memcpy(strct->b, t, ft_strlen(t)); + ft_bzero(&strct->b[ft_strlen(t)], BUFFER_SIZE - ft_strlen(t)); + free(t); + return (1); +} + +int blimit(int l, struct s_gnl *strct, char **line, char *t) +{ + char *f; + + l = get_next_line(strct->fd, line); + if (l == 1 || l == 0) + { + f = line[0]; + line[0] = ft_strjoin(t, line[0]); + free (f); + } + free(t); + if (line[0] == NULL) + return (-1); + return (l); +} + +int nonewline(int l, struct s_gnl *strct, char **line) +{ + char *t; + + t = ft_substr((const char *)strct->b, 0, ft_strlen(strct->b)); + ft_bzero(&strct->b[0], BUFFER_SIZE); + l = read(strct->fd, strct->b, BUFFER_SIZE); + if (l == -1 || t == NULL) + { + line[0] = NULL; + return (-1); + } + if (l == BUFFER_SIZE || findnewline(strct) > -1) + return (blimit(l, strct, line, t)); + line[0] = ft_strjoin(t, strct->b); + ft_bzero(&strct->b, BUFFER_SIZE); + free(t); + if (line[0] == NULL) + return (-1); + return (0); +} + +int get_next_line(int fd, char **line) +{ + static struct s_gnl strct[256]; + int l; + + l = 0; + if (!line) + return (-1); + if (fd < 0 || BUFFER_SIZE <= 0) + { + line[0] = NULL; + return (-1); + } + strct[fd].b[BUFFER_SIZE] = '\0'; + strct[fd].fd = fd; + if (strct[fd].b[0] == '\0') + l = read(strct[fd].fd, strct[fd].b, BUFFER_SIZE); + if (l == -1) + { + line[0] = NULL; + return (-1); + } + if (findnewline(&strct[fd]) > -1) + return (newline(&strct[fd], line)); + return (nonewline(l, &strct[fd], line)); +} diff --git a/getnextline/src/get_next_line_utils.c b/getnextline/src/get_next_line_utils.c new file mode 100644 index 0000000..2d87ead --- /dev/null +++ b/getnextline/src/get_next_line_utils.c @@ -0,0 +1,103 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* get_next_line_utils.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/04/05 07:45:24 by djonker #+# #+# */ +/* Updated: 2023/02/08 22:18:26 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../get_next_line.h" + +size_t ft_strlen(const char *str) +{ + size_t a; + + a = 0; + while (*str) + { + a++; + str++; + } + return (a); +} + +void ft_bzero(void *s, size_t n) +{ + char *p; + + p = s; + while (n) + { + *p = '\0'; + p++; + n--; + } +} + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + char *d; + const char *s; + long unsigned int i; + + i = 0; + d = dst; + s = src; + while (n > i) + { + d[i] = s[i]; + i++; + } + return (dst); +} + +char *ft_strjoin(char const *s1, char const *s2) +{ + int c1; + int c2; + int l1; + int l2; + char *r; + + c1 = 0; + c2 = 0; + l1 = ft_strlen((char *)s1); + l2 = ft_strlen((char *)s2); + r = malloc(l1 + l2 + 1); + if (r == NULL) + return (r); + while (c1 < l1) + { + r[c1] = s1[c1]; + c1++; + } + while (c2 < l2) + { + r[c1 + c2] = s2[c2]; + c2++; + } + r[c1 + c2] = '\0'; + return (r); +} + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *r; + long unsigned int i; + + i = 0; + r = malloc(len + 1); + if (r == NULL) + return (NULL); + while (len > i) + { + r[i] = s[i + start]; + i++; + } + r[i] = '\0'; + return (r); +} diff --git a/getnextline/src/get_next_line_utils_bonus.c b/getnextline/src/get_next_line_utils_bonus.c new file mode 100644 index 0000000..c182b5a --- /dev/null +++ b/getnextline/src/get_next_line_utils_bonus.c @@ -0,0 +1,103 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* get_next_line_utils_bonus.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/04/05 07:45:24 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:54:09 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../get_next_line.h" + +size_t ft_strlen(char *str) +{ + size_t a; + + a = 0; + while (*str) + { + a++; + str++; + } + return (a); +} + +void ft_bzero(void *s, size_t n) +{ + char *p; + + p = s; + while (n) + { + *p = '\0'; + p++; + n--; + } +} + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + char *d; + const char *s; + long unsigned int i; + + i = 0; + d = dst; + s = src; + while (n > i) + { + d[i] = s[i]; + i++; + } + return (dst); +} + +char *ft_strjoin(char const *s1, char const *s2) +{ + int c1; + int c2; + int l1; + int l2; + char *r; + + c1 = 0; + c2 = 0; + l1 = ft_strlen((char *)s1); + l2 = ft_strlen((char *)s2); + r = malloc(l1 + l2 + 1); + if (r == NULL) + return (r); + while (c1 < l1) + { + r[c1] = s1[c1]; + c1++; + } + while (c2 < l2) + { + r[c1 + c2] = s2[c2]; + c2++; + } + r[c1 + c2] = '\0'; + return (r); +} + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *r; + long unsigned int i; + + i = 0; + r = malloc(len + 1); + if (r == NULL) + return (NULL); + while (len > i) + { + r[i] = s[i + start]; + i++; + } + r[i] = '\0'; + return (r); +} diff --git a/libft/Makefile b/libft/Makefile new file mode 100644 index 0000000..9b0be82 --- /dev/null +++ b/libft/Makefile @@ -0,0 +1,185 @@ +# **************************************************************************** # +# # +# :::::::: # +# Makefile |o_o || | # +# +:+ # +# By: djonker +#+ # +# +#+ # +# Created: 2020/10/27 15:02:02 by djonker #+# #+# # +# Updated: 2023/02/17 02:39:13 by houtworm \___)=(___/ # +# # +# **************************************************************************** # + +NAME =libft.a +CC =gcc +FC =-Wall -Werror -Wextra# -fsanitize=address +FAR =ar -rs +RM =rm -f +SRC =src/ft_atoi.c \ + src/ft_bzero.c \ + src/ft_calloc.c \ + src/ft_cntwrd.c \ + src/ft_intlen.c \ + src/ft_isalnum.c \ + src/ft_isalpha.c \ + src/ft_isascii.c \ + src/ft_isdigit.c \ + src/ft_isprint.c \ + src/ft_itoa.c \ + src/ft_malstr.c \ + src/ft_memccpy.c \ + src/ft_memchr.c \ + src/ft_memcmp.c \ + src/ft_memmove.c \ + src/ft_memcpy.c \ + src/ft_memset.c \ + src/ft_putchar_fd.c \ + src/ft_putendl_fd.c \ + src/ft_putnbr_fd.c \ + src/ft_putstr_fd.c \ + src/ft_split.c \ + src/ft_strchr.c \ + src/ft_strdup.c \ + src/ft_strjoin.c \ + src/ft_strlcat.c \ + src/ft_strlcpy.c \ + src/ft_strlen.c \ + src/ft_strmapi.c \ + src/ft_strncmp.c \ + src/ft_strnstr.c \ + src/ft_strrchr.c \ + src/ft_strtrim.c \ + src/ft_substr.c \ + src/ft_tolower.c \ + src/ft_toupper.c \ + src/ft_wrdlen.c \ + src/ft_frenarr.c \ + src/ft_btoi.c \ + src/ft_itob.c \ + src/ft_revstr.c \ + src/ft_frearr.c \ + src/ft_putznbr.c \ + src/ft_strupp.c \ + src/ft_strlow.c \ + src/ft_power.c \ + src/ft_sqrt.c \ + src/ft_factor.c \ + src/ft_fnprim.c \ + src/ft_isprim.c \ + src/ft_dtoh.c \ + src/ft_htod.c \ + src/ft_htoi.c \ + src/ft_itoh.c \ + src/ft_ddtoi.c \ + src/ft_itodd.c \ + src/ft_otoi.c \ + src/ft_itoo.c \ + src/ft_swap.c \ + src/ft_swaplong.c \ + src/ft_round.c \ + src/ft_putznbr_fd.c \ + src/ft_putzflo_fd.c \ + src/ft_putzflo.c \ + src/ft_putstr.c \ + src/ft_putnbr.c \ + src/ft_putnbr_base.c \ + src/ft_putflo.c \ + src/ft_putendl.c \ + src/ft_putchar.c \ + src/ft_linlen.c \ + src/ft_itof.c \ + src/ft_isneg.c \ + src/ft_iftof.c \ + src/ft_ftoi.c \ + src/ft_ftoa.c \ + src/ft_fround.c \ + src/ft_flolen.c \ + src/ft_declen.c \ + src/ft_atof.c \ + src/ft_putflo_fd.c \ + src/ft_arrlen.c \ + src/ft_chrstr.c \ + src/ft_cntwrds.c \ + src/ft_isodigit.c \ + src/ft_isxdigit.c \ + src/ft_malstrs.c \ + src/ft_min.c \ + src/ft_max.c \ + src/ft_lincpy.c \ + src/ft_linlcpy.c \ + src/ft_splits.c \ + src/ft_wrdlens.c \ + src/ft_vamin.c \ + src/ft_vamax.c \ + src/ft_islowc.c \ + src/ft_isuppc.c \ + src/ft_bitswap.c \ + src/ft_itozh.c \ + src/ft_itoba.c \ + src/ft_itohx.c \ + src/ft_cntchr.c \ + src/ft_cntarg.c \ + src/ft_around.c \ + src/ft_putzsci.c \ + src/ft_putull.c \ + src/ft_putlong.c \ + src/ft_ltoa.c \ + src/ft_utoa.c \ + src/ft_atou.c \ + src/ft_atol.c \ + src/ft_putzscih.c \ + src/ft_luilen.c \ + src/ft_itooa.c \ + src/ft_dtoa.c \ + src/ft_atodec.c \ + src/ft_fczero.c \ + src/ft_lftoi.c \ + src/ft_lftoa.c \ + src/ft_islneg.c \ + src/ft_ldeclen.c \ + src/ft_isallbyte.c \ + src/ft_getpwd.c +BSRC =src/ft_lstadd_back.c \ + src/ft_lstadd_front.c \ + src/ft_lstclear.c \ + src/ft_lstdelone.c \ + src/ft_lstiter.c \ + src/ft_lstlast.c \ + src/ft_lstmap.c \ + src/ft_lstnew.c \ + src/ft_lstsize.c +OBJ =$(SRC:src/%.c=obj/%.o) +BOBJ =$(BSRC:src/%.c=obj/%.o) + +ifdef WITBON +COBJ =$(OBJ) $(BOBJ) +CSRC =$(SRC) $(BSRC) +else +COBJ =$(OBJ) +CSRC =$(SRC) +endif + +all: $(NAME) + +clean: + @$(RM) -r obj + @printf "\e[1;35mCleaned Object Files\n\e[0;00m" + +fclean: clean + @$(RM) $(NAME) + @printf "\e[1;31mCleaned Executables\n\e[0;00m" + +re: fclean all + +$(COBJ): $(CSRC) + @mkdir -p obj + @printf "\e[1;34mBuilding $@\n\e[0;00m" + @$(CC) $(CFLAGS) -c $(@:obj/%.o=src/%.c) -o $@ + +$(NAME): $(COBJ) + @printf "\e[1;36mCompiling $@\e[0;00m\n" + @$(FAR) $(NAME) $^ > /dev/null 2>&1 + @printf "\e[1;32mDone\e[0;00m\n" + +bonus: + @$(MAKE) WITBON=1 all diff --git a/libft/libft.h b/libft/libft.h new file mode 100644 index 0000000..ebe3e10 --- /dev/null +++ b/libft/libft.h @@ -0,0 +1,168 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* libft.h |o_o || | */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 16:02:53 by djonker #+# #+# */ +/* Updated: 2023/02/17 02:56:08 by houtworm \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H +# include +# include +# include +# include + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +void *ft_memset(void *s, int c, size_t n); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dst, const void *src, size_t n); +void *ft_memccpy(void *dst, const void *src, int c, size_t n); +void *ft_memmove(void *dst, const void *src, size_t len); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +size_t ft_strlen(const char *str); +size_t ft_strlcpy(char *dst, const char *src, size_t dstsize); +size_t ft_strlcat(char *dst, const char *src, size_t dstsize); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +char *ft_strnstr(const char *h, const char *n, size_t len); +int ft_strncmp(char *s1, char *s2, unsigned int n); +int ft_atoi(char *str); +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +int ft_toupper(int c); +int ft_tolower(int c); +void *ft_calloc(size_t count, size_t size); +char *ft_strdup(const char *s); + +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +void ft_putchar_fd(char s, 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); + +t_list *ft_lstnew(void *content); +void ft_lstadd_front(t_list **lst, t_list *new); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +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 *)); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), \ + void (*del)(void *)); + +char *ft_bitswap(char *str); +void *ft_lincpy(char *dst, const char *src); +void *ft_linlcpy(char *dst, const char *src, size_t n); +int ft_linlen(char *str); +int ft_intlen(long long n); +int ft_luilen(unsigned long long n); +int ft_flolen(double n); +int ft_arrlen(char **s); +int ft_declen(double n); +int ft_wrdlen(char *s, char c, int i); +int ft_wrdlens(char *s, char *c, int i); +int ft_cntwrd(char *s, char c); +int ft_cntwrds(char *s, char *c); +char *ft_malstr(char *s, char c); +char *ft_malstrs(char *s, char *c); +void *ft_frenarr(char **s, int i); +void *ft_frearr(char **s); +char *ft_revstr(char *s); +char *ft_strupp(char *s); +char *ft_strlow(char *s); +int ft_isuppc(char c); +int ft_islowc(char c); +int ft_isneg(double n); +int ft_isxdigit(char *str); +int ft_isodigit(int n); +int ft_power(int n, int p); +unsigned long long ft_sqrt(unsigned long long n); +unsigned long long ft_factor(unsigned long long n); +unsigned long long ft_fnprim(unsigned long long n); +int ft_isprim(unsigned long long n); +void ft_putznbr_fd(int n, int e, int fd); +void ft_putflo_fd(double n, int fd); +void ft_putzflo_fd(double n, int e, int fd); +int ft_ftoi(double n); +double ft_itof(int n); +double ft_iftof(int n, int f); +char *ft_ltoa(long long n); +char *ft_utoa(unsigned long long n); +char *ft_ftoa(double n); +char *ft_ftoe(double n); +long long ft_atol(char *str); +unsigned long long ft_atou(char *str); +double ft_atof(char *str); +long double ft_atodec(char *str); +char *ft_itoa(int n); +char *ft_itoa(int n); +int ft_itob(int d); +char *ft_itoba(unsigned long long d, size_t e); +int ft_btoi(int i, int e); +int ft_dtoh(char c); +char ft_htod(long long n); +int ft_htoi(char *str); +char *ft_itoh(long double n); +char *ft_itohx(long double n); +char *ft_itozh(double n, int z); +int ft_ddtoi(char *str); +char *ft_itodd(double n); +int ft_otoi(int i); +unsigned long long ft_itoo(double n); +char *ft_itooa(long double n); +int ft_round(int n, int h); +double ft_fround(double n, int h); +int ft_around(char *n, int e); +void ft_swap(int *a, int *b); +void ft_swaplong(long *a, long *b); +void ft_putchar(char s); +void ft_putstr(char *s); +void ft_putendl(char *s); +void ft_putnbr(int n); +void ft_putnbr_base(unsigned long long number, int base); +void ft_putlong(long long n); +void ft_putull(unsigned long long n); +void ft_putznbr(int n, int e); +void ft_putflo(double n); +void ft_putzflo(double n, int e); +void ft_putzsci(long double n, int e, int cap); +void ft_putzscih(long double n, int e, int cap); +int ft_varlen(int c, ...); +int ft_max(int a, int b); +int ft_vamax(int n, ...); +int ft_min(int a, int b); +int ft_vamin(int n, ...); +int ft_chrstr(char c, char *s); +char **ft_splits(char *s, char *c); +int ft_cntchr(const char *str, char c, int s); +int ft_fczero(long double n); +long long ft_lftoi(long double n); +char *ft_lftoa(long double n); +int ft_ldeclen(long double n); +int ft_islneg(long long n); +char *ft_dtoa(long double n); +int ft_cntarg(char **argv); +int ft_isallbyte(char *str, char byte); +char *ft_getpwd(char **envp, int slash); + +#endif diff --git a/libft/src/ft_around.c b/libft/src/ft_around.c new file mode 100644 index 0000000..2eaa4bc --- /dev/null +++ b/libft/src/ft_around.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_around.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 07:26:00 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:42:07 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_around(char *n, int e) +{ + int i; + + i = 0; + while (n[i] == '0') + { + e++; + i++; + } + i = ft_strlen(n); + while (i >= e) + { + if (n[i] >= '5') + n[i - 1] = n[i - 1] + 1; + while (n[i - 1] > '9') + { + n[i - 1] = '0'; + n[i - 2] = n[i - 2] + 1; + i--; + if (i == 1 && n[0] > '9') + return (1); + } + i--; + } + return (0); +} diff --git a/libft/src/ft_arrlen.c b/libft/src/ft_arrlen.c new file mode 100644 index 0000000..49fd26b --- /dev/null +++ b/libft/src/ft_arrlen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_arrlen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/06 17:38:27 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:42:08 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_arrlen(char **s) +{ + int l; + + l = 0; + while (s[l] != NULL) + l++; + return (l); +} diff --git a/libft/src/ft_atodec.c b/libft/src/ft_atodec.c new file mode 100644 index 0000000..b1ce456 --- /dev/null +++ b/libft/src/ft_atodec.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_atodec.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 05:48:34 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:42:08 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +long double ft_atodec(char *str) +{ + long double f; + int l; + + f = ft_atoi(str); + l = ft_intlen(f); + while (l > 0) + { + f = f / 10; + l--; + } + return (f); +} diff --git a/libft/src/ft_atof.c b/libft/src/ft_atof.c new file mode 100644 index 0000000..60a9404 --- /dev/null +++ b/libft/src/ft_atof.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_atof.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 05:48:34 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:42:08 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +double ft_atof(char *str) +{ + int i; + double f; + char **t; + int l; + + t = ft_split(str, '.'); + f = ft_atoi(t[1]); + l = ft_intlen(f); + i = ft_atoi(t[0]); + while (l > 0) + { + f = f / 10; + l--; + } + ft_frenarr(t, 2); + return (i + f); +} diff --git a/libft/src/ft_atoi.c b/libft/src/ft_atoi.c new file mode 100644 index 0000000..a2991df --- /dev/null +++ b/libft/src/ft_atoi.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:08:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:42:09 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_atoi(char *str) +{ + unsigned int r; + int c; + int n; + + r = 0; + c = 0; + n = 1; + while ((str[c] == 32) || (str[c] > 8 && str[c] < 14)) + c++; + if (str[c] == '-' || str[c] == '+') + { + if (str[c] == '-') + n = -1; + c++; + } + while (str[c] >= '0' && str[c] <= '9') + { + r = 10 * r + (str[c] - '0'); + if (r > 2147483647 && n == 1) + return (-1); + else if (r > 2147483648 && n == -1) + return (0); + c++; + } + return (n * r); +} diff --git a/libft/src/ft_atol.c b/libft/src/ft_atol.c new file mode 100644 index 0000000..e9b5bee --- /dev/null +++ b/libft/src/ft_atol.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_atol.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:08:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:36:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +long long ft_atol(char *str) +{ + unsigned long long r; + int c; + int n; + + r = 0; + c = 0; + n = 1; + while ((str[c] == 32) || (str[c] > 8 && str[c] < 14)) + c++; + if (str[c] == '-' || str[c] == '+') + { + if (str[c] == '-') + n = -1; + c++; + } + while (str[c] >= '0' && str[c] <= '9') + { + r = 10 * r + (str[c] - '0'); + if (r > 9223372036854775807 && n == 1) + return (-1); + else if (r > 9223372036854775807 && n == -1) + return (0); + c++; + } + return (n * r); +} diff --git a/libft/src/ft_atou.c b/libft/src/ft_atou.c new file mode 100644 index 0000000..bae6f30 --- /dev/null +++ b/libft/src/ft_atou.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_atou.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:08:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:36:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +unsigned long long ft_atou(char *str) +{ + unsigned long long r; + int c; + + r = 0; + c = 0; + while ((str[c] == 32) || (str[c] > 8 && str[c] < 14)) + c++; + while (str[c] >= '0' && str[c] <= '9') + { + r = 10 * r + (str[c] - '0'); + c++; + } + return (r); +} diff --git a/libft/src/ft_bitswap.c b/libft/src/ft_bitswap.c new file mode 100644 index 0000000..5610b22 --- /dev/null +++ b/libft/src/ft_bitswap.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_bitswap.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/05/17 06:29:44 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:18 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_bitswap(char *str) +{ + while (*str) + { + if (*str == '1') + *str = '0'; + else if (*str == '0') + *str = '1'; + str++; + } + return (str); +} diff --git a/libft/src/ft_btoi.c b/libft/src/ft_btoi.c new file mode 100644 index 0000000..b40a500 --- /dev/null +++ b/libft/src/ft_btoi.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_btoi.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/18 13:44:56 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:36:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_btoi(int i, int e) +{ + char *s; + int is; + int it; + int d; + int r; + + d = ft_intlen(i); + it = 128; + is = 0; + r = 0; + while (d < e) + { + it = it / 2; + d++; + } + s = ft_itoa(i); + while (s[is] != '\0') + { + if (s[is] == '1') + r = r + it; + it = it / 2; + is++; + } + free(s); + return (r); +} diff --git a/libft/src/ft_bzero.c b/libft/src/ft_bzero.c new file mode 100644 index 0000000..eebd4ea --- /dev/null +++ b/libft/src/ft_bzero.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:35:25 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:36:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_bzero(void *s, size_t n) +{ + char *p; + + p = s; + while (n) + { + *p = '\0'; + p++; + n--; + } +} diff --git a/libft/src/ft_calloc.c b/libft/src/ft_calloc.c new file mode 100644 index 0000000..b5666a9 --- /dev/null +++ b/libft/src/ft_calloc.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 21:20:32 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:36:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_calloc(size_t count, size_t size) +{ + void *p; + size_t i; + char *t; + + if (count == 0 || size == 0) + { + count = 1; + size = 1; + } + p = malloc(count * size); + if (p == NULL) + return (0x0); + if (p) + { + t = p; + i = 0; + while (count * size > i) + { + t[i] = '\0'; + i++; + } + } + return (p); +} diff --git a/libft/src/ft_chrstr.c b/libft/src/ft_chrstr.c new file mode 100644 index 0000000..cce7a7a --- /dev/null +++ b/libft/src/ft_chrstr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_chrstr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/15 02:30:48 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:36:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_chrstr(char c, char *s) +{ + while (*s) + { + if (c == *s) + return (1); + s++; + } + if (c == *s) + return (1); + return (0); +} diff --git a/libft/src/ft_cntarg.c b/libft/src/ft_cntarg.c new file mode 100644 index 0000000..5fe0513 --- /dev/null +++ b/libft/src/ft_cntarg.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_cntarg.c |o_o || | */ +/* +:+ +:+ +:+ */ +/* By: houtworm +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/07 00:38:26 by houtworm #+# #+# */ +/* Updated: 2023/02/15 02:38:53 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_cntarg(char **argv) +{ + int i; + + i = 0; + while (argv[i]) + i++; + return (i); +} diff --git a/libft/src/ft_cntchr.c b/libft/src/ft_cntchr.c new file mode 100644 index 0000000..681038a --- /dev/null +++ b/libft/src/ft_cntchr.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_cntchr.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/11 17:23:36 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 00:38:41 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_cntchr(const char *str, char c, int s) +{ + int i; + int t; + + i = 0; + while (*str) + { + if (*str == c) + { + i++; + str++; + } + t = s; + while (t > 0) + { + str++; + t--; + } + } + return (i); +} diff --git a/libft/src/ft_cntwrd.c b/libft/src/ft_cntwrd.c new file mode 100644 index 0000000..b58b459 --- /dev/null +++ b/libft/src/ft_cntwrd.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_cntwrd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/21 20:37:04 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:43 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_cntwrd(char *s, char c) +{ + int iw; + int is; + + is = 0; + iw = 0; + while (s[is] != '\0') + { + if (s[is] == c) + while (s[is] == c) + is++; + if (s[is] != c && s[is] != '\0') + { + while (s[is] != c && s[is] != '\0') + is++; + iw++; + } + } + return (iw); +} diff --git a/libft/src/ft_cntwrds.c b/libft/src/ft_cntwrds.c new file mode 100644 index 0000000..d27a8ba --- /dev/null +++ b/libft/src/ft_cntwrds.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_cntwrds.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/21 20:37:04 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:44 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_cntwrds(char *s, char *c) +{ + int iw; + int is; + + is = 0; + iw = 0; + while (s[is] != '\0') + { + if (ft_chrstr(s[is], c)) + while (ft_chrstr(s[is], c)) + is++; + if (!(ft_chrstr(s[is], c))) + { + while (!(ft_chrstr(s[is], c))) + is++; + iw++; + } + } + return (iw); +} diff --git a/libft/src/ft_ddtoi.c b/libft/src/ft_ddtoi.c new file mode 100644 index 0000000..d855ffc --- /dev/null +++ b/libft/src/ft_ddtoi.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_ddtoi.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 01:24:28 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:44 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_ddtoi(char *str) +{ + int r; + int p; + + r = 0; + p = ft_strlen(str) - 1; + while (p >= 0) + { + if (*str >= '0' && *str <= '9') + r = r + (*str - '0') * ft_power(12, p); + else if ((*str >= 'a' && *str <= 'b') || (*str >= 'A' && *str <= 'B')) + r = r + ft_dtoh(*str) * ft_power(12, p); + else + return (-0); + str++; + p--; + } + return (r); +} diff --git a/libft/src/ft_declen.c b/libft/src/ft_declen.c new file mode 100644 index 0000000..e50ce24 --- /dev/null +++ b/libft/src/ft_declen.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_declen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 04:29:09 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:45 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_declen(double n) +{ + double f; + int i; + int l; + + i = n; + f = n - i; + l = 0; + while (f != 0 && l < 10) + { + l++; + n = n * 10; + i = n; + f = n - i; + } + return (l); +} diff --git a/libft/src/ft_dtoa.c b/libft/src/ft_dtoa.c new file mode 100644 index 0000000..f805529 --- /dev/null +++ b/libft/src/ft_dtoa.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_dtoa.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 03:46:17 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_dtoa(long double n) +{ + char p[100]; + long double temp; + long long i; + char *t; + char *f; + + i = n; + temp = (long double)n - (long double)i; + i = 0; + while (temp * 10 < 1 && i < 49) + { + temp = temp * 10; + p[i] = '0'; + i++; + } + p[i] = '\0'; + i = ft_lftoi(n); + t = ft_ltoa(i); + f = ft_strjoin(p, t); + free(t); + return (f); +} diff --git a/libft/src/ft_dtoh.c b/libft/src/ft_dtoh.c new file mode 100644 index 0000000..64b240c --- /dev/null +++ b/libft/src/ft_dtoh.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_dtoh.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 02:22:34 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_dtoh(char c) +{ + int r; + int t; + + t = ft_tolower(c); + r = t - 87; + return (r); +} diff --git a/libft/src/ft_factor.c b/libft/src/ft_factor.c new file mode 100644 index 0000000..79dd8fd --- /dev/null +++ b/libft/src/ft_factor.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_factor.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/01 04:03:20 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:48 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +unsigned long long ft_factor(unsigned long long n) +{ + unsigned long long r; + + r = 1; + if (!(n >= 1 && n <= 20)) + return (0); + if (n > 1) + r = n * ft_factor(n - 1); + return (r); +} diff --git a/libft/src/ft_fczero.c b/libft/src/ft_fczero.c new file mode 100644 index 0000000..9948f8c --- /dev/null +++ b/libft/src/ft_fczero.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_fczero.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 04:29:09 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:49 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_fczero(long double n) +{ + long double f; + long long i; + int l; + + l = 0; + i = n; + f = n - i; + f = f * 10; + while (f < 1) + { + l++; + n = n * 10; + i = n; + f = n - i; + f = f * 10; + } + return (l); +} diff --git a/libft/src/ft_flolen.c b/libft/src/ft_flolen.c new file mode 100644 index 0000000..2eb7e82 --- /dev/null +++ b/libft/src/ft_flolen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_flolen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 04:00:01 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_flolen(double n) +{ + int l; + + l = 1; + l = l + ft_declen(n); + l = l + ft_intlen(n); + return (l); +} diff --git a/libft/src/ft_fnprim.c b/libft/src/ft_fnprim.c new file mode 100644 index 0000000..2471a28 --- /dev/null +++ b/libft/src/ft_fnprim.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_fnprim.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/01 04:42:24 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:38:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +unsigned long long ft_fnprim(unsigned long long n) +{ + while (n < 1000000000000000000) + { + if (ft_isprim(n) == 1) + return (n); + n++; + } + return (0); +} diff --git a/libft/src/ft_frearr.c b/libft/src/ft_frearr.c new file mode 100644 index 0000000..7b4aa1a --- /dev/null +++ b/libft/src/ft_frearr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_frearr.c |o_o || | */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/12/11 21:54:13 by djonker #+# #+# */ +/* Updated: 2023/02/19 19:37:54 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_frearr(char **s) +{ + int n; + + n = 0; + while (s[n] != NULL) + n++; + while (n >= 0) + { + free(s[n]); + n--; + } + free(s); + return (NULL); +} diff --git a/libft/src/ft_frenarr.c b/libft/src/ft_frenarr.c new file mode 100644 index 0000000..c5fb93f --- /dev/null +++ b/libft/src/ft_frenarr.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_frenarr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/12/11 21:54:13 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_frenarr(char **s, int n) +{ + while (n > 0) + { + n--; + free(s[n]); + } + free(s); + return (NULL); +} diff --git a/libft/src/ft_fround.c b/libft/src/ft_fround.c new file mode 100644 index 0000000..696de90 --- /dev/null +++ b/libft/src/ft_fround.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_fround.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 07:42:16 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:49 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +double ft_fround(double n, int h) +{ + char *s; + char **t; + char *r; + + s = ft_ftoa(n); + t = ft_split(s, '.'); + t[0][ft_intlen(n)] = '.'; + t[0][ft_intlen(n) + 1] = '\0'; + if (h == 0) + { + if (t[1][0] > '5') + t[0][ft_intlen(n) - 1] = t[0][ft_intlen(n) - 1] + 1; + } + else if (t[1][h] > '5') + { + t[1][h - 1] = t[1][h - 1] + 1; + } + t[1][h] = '\0'; + r = ft_strjoin(t[0], t[1]); + n = ft_atof(r); + ft_frenarr(t, 2); + free(r); + free(s); + return (n); +} diff --git a/libft/src/ft_ftoa.c b/libft/src/ft_ftoa.c new file mode 100644 index 0000000..9ae11de --- /dev/null +++ b/libft/src/ft_ftoa.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_ftoa.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 03:46:17 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:49 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_ftoa(double n) +{ + char *ti; + char *tf; + int i; + char *r; + + ti = ft_itoa(n); + i = ft_ftoi(n); + r = ft_itoa(i); + tf = ft_strjoin(".", r); + free(r); + r = ft_strjoin(ti, tf); + free(ti); + free(tf); + return (r); +} diff --git a/libft/src/ft_ftoi.c b/libft/src/ft_ftoi.c new file mode 100644 index 0000000..20d3ea5 --- /dev/null +++ b/libft/src/ft_ftoi.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_ftoi.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:30:30 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_ftoi(double n) +{ + int r; + int l; + double f; + + if (ft_isneg(n)) + n = n * -1; + l = ft_declen(n); + r = n; + f = n - r; + while (l > 0) + { + f = f * 10; + l--; + } + r = f; + return (r); +} diff --git a/libft/src/ft_getpwd.c b/libft/src/ft_getpwd.c new file mode 100644 index 0000000..1337396 --- /dev/null +++ b/libft/src/ft_getpwd.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_getpwd.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: houtworm // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2023/02/17 02:40:22 by houtworm /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/17 02:54:29 by houtworm \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_getpwd(char **envp, int slash) +{ + char *pwd; + char *temp; + int i; + + i = -1; + while (envp[++i]) + if (ft_strncmp(envp[i], "PWD=", 4) == 0) + break ; + if (!envp[i]) + return (NULL); + temp = ft_substr(envp[i], 4, ft_strlen(envp[i])); + if (!temp) + return (NULL); + if (slash) + pwd = ft_strjoin(temp, "/"); + else + pwd = ft_strjoin(temp, NULL); + free(temp); + return (pwd); +} diff --git a/libft/src/ft_htod.c b/libft/src/ft_htod.c new file mode 100644 index 0000000..b77c4b1 --- /dev/null +++ b/libft/src/ft_htod.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_htod.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 03:18:45 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:51 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char ft_htod(long long n) +{ + char r; + + if (n > 9) + r = n + 87; + else + r = n + '0'; + return (r); +} diff --git a/libft/src/ft_htoi.c b/libft/src/ft_htoi.c new file mode 100644 index 0000000..fb473ae --- /dev/null +++ b/libft/src/ft_htoi.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_htoi.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 01:24:28 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:52 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_htoi(char *str) +{ + int r; + int p; + + r = 0; + p = ft_strlen(str) - 1; + while (p >= 0) + { + if (*str >= '0' && *str <= '9') + r = r + (*str - '0') * ft_power(16, p); + else if ((*str >= 'a' && *str <= 'f') || (*str >= 'A' && *str <= 'F')) + r = r + ft_dtoh(*str) * ft_power(16, p); + else + return (-0); + str++; + p--; + } + return (r); +} diff --git a/libft/src/ft_iftof.c b/libft/src/ft_iftof.c new file mode 100644 index 0000000..dfc2f76 --- /dev/null +++ b/libft/src/ft_iftof.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_iftof.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 22:27:51 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:52 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +double ft_iftof(int i, int f) +{ + double r; + + r = 0; + r = r + i + ft_itof(f); + return (r); +} diff --git a/libft/src/ft_intlen.c b/libft/src/ft_intlen.c new file mode 100644 index 0000000..b38457c --- /dev/null +++ b/libft/src/ft_intlen.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_intlen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 02:04:46 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:54 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_intlen(long long n) +{ + int l; + + l = 0; + if (n == 0) + return (1); + if (n <= 0) + l++; + while (n != 0) + { + n = n / 10 + (l * 0); + l++; + } + return (l); +} diff --git a/libft/src/ft_isallbyte.c b/libft/src/ft_isallbyte.c new file mode 100644 index 0000000..84232b1 --- /dev/null +++ b/libft/src/ft_isallbyte.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isallbyte.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: houtworm +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/02/15 17:08:40 by houtworm #+# #+# */ +/* Updated: 2023/02/15 17:08:45 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isallbyte(char *str, char byte) +{ + while (*str == byte) + str++; + if (!*str) + return (1); + return (0); +} diff --git a/libft/src/ft_isalnum.c b/libft/src/ft_isalnum.c new file mode 100644 index 0000000..1380c16 --- /dev/null +++ b/libft/src/ft_isalnum.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 15:56:37 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:54 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isalnum(int c) +{ + if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') && (c < '0' || c > '9')) + return (0); + return (1); +} diff --git a/libft/src/ft_isalpha.c b/libft/src/ft_isalpha.c new file mode 100644 index 0000000..e64df4c --- /dev/null +++ b/libft/src/ft_isalpha.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:10:41 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:55 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isalpha(int c) +{ + if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z')) + return (0); + return (1); +} diff --git a/libft/src/ft_isascii.c b/libft/src/ft_isascii.c new file mode 100644 index 0000000..04147d0 --- /dev/null +++ b/libft/src/ft_isascii.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:10:41 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:56 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isascii(int c) +{ + if (c < 0 || c > 127) + return (0); + return (1); +} diff --git a/libft/src/ft_isdigit.c b/libft/src/ft_isdigit.c new file mode 100644 index 0000000..ef571e7 --- /dev/null +++ b/libft/src/ft_isdigit.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:10:41 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:56 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isdigit(int c) +{ + if (c < '0' || c > '9') + return (0); + return (1); +} diff --git a/libft/src/ft_islneg.c b/libft/src/ft_islneg.c new file mode 100644 index 0000000..99b591a --- /dev/null +++ b/libft/src/ft_islneg.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_islneg.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: houtworm +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/25 11:39:27 by houtworm #+# #+# */ +/* Updated: 2023/02/07 00:39:57 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_islneg(long long n) +{ + if (n < 0) + return (1); + return (0); +} diff --git a/libft/src/ft_islowc.c b/libft/src/ft_islowc.c new file mode 100644 index 0000000..ec47179 --- /dev/null +++ b/libft/src/ft_islowc.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_islowc.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/04/13 17:57:31 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:58 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_islowc(char c) +{ + if (c >= 'a' && c <= 'z') + return (1); + return (0); +} diff --git a/libft/src/ft_isneg.c b/libft/src/ft_isneg.c new file mode 100644 index 0000000..a14dd3a --- /dev/null +++ b/libft/src/ft_isneg.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isneg.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 03:38:29 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:39:59 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isneg(double n) +{ + if (n < 0) + return (1); + return (0); +} diff --git a/libft/src/ft_isodigit.c b/libft/src/ft_isodigit.c new file mode 100644 index 0000000..39a191e --- /dev/null +++ b/libft/src/ft_isodigit.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isodigit.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/06 17:19:46 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:00 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isodigit(int n) +{ + char *s; + + s = ft_itoa(n); + while (*s != '\0') + { + if (*s >= '0' && *s <= '7') + s++; + else + { + free(s); + return (0); + } + } + free(s); + return (1); +} diff --git a/libft/src/ft_isprim.c b/libft/src/ft_isprim.c new file mode 100644 index 0000000..34eb70d --- /dev/null +++ b/libft/src/ft_isprim.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isprim.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/01 04:32:30 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:00 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isprim(unsigned long long n) +{ + unsigned long long c; + unsigned long long d; + + if (n < 2) + return (0); + c = 2; + while (c <= n / 2) + { + d = 1; + while (d <= n / 2) + { + if (c * d == n) + return (0); + d++; + } + c++; + } + return (1); +} diff --git a/libft/src/ft_isprint.c b/libft/src/ft_isprint.c new file mode 100644 index 0000000..deb1744 --- /dev/null +++ b/libft/src/ft_isprint.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:10:41 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:01 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isprint(int c) +{ + if (c < 32 || c > 126) + return (0); + return (1); +} diff --git a/libft/src/ft_isuppc.c b/libft/src/ft_isuppc.c new file mode 100644 index 0000000..925aa18 --- /dev/null +++ b/libft/src/ft_isuppc.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isuppc.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/04/13 17:57:31 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:02 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isuppc(char c) +{ + if (c >= 'A' && c <= 'Z') + return (1); + return (0); +} diff --git a/libft/src/ft_isxdigit.c b/libft/src/ft_isxdigit.c new file mode 100644 index 0000000..2276a78 --- /dev/null +++ b/libft/src/ft_isxdigit.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_isxdigit.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/06 17:19:46 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:03 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_isxdigit(char *str) +{ + while (*str != '\0') + { + if ((*str >= 'a' && *str <= 'f') || (*str >= 'A' && *str <= 'F')) + str++; + else if (*str >= '0' && *str <= '9') + str++; + else + return (0); + } + return (1); +} diff --git a/libft/src/ft_itoa.c b/libft/src/ft_itoa.c new file mode 100644 index 0000000..c51a61f --- /dev/null +++ b/libft/src/ft_itoa.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/12 23:20:24 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:04 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itoa(int n) +{ + char *r; + int l; + + l = ft_intlen(n) - 1; + r = ft_calloc(l + 2, 1); + if (r == NULL) + return (NULL); + while ((n > 9 || n < 0) && n != -2147483648) + { + if (n >= 10) + { + r[l] = n % 10 + '0'; + l--; + n = (n / 10); + } + else + { + r[0] = '-'; + n = (n * -1); + } + } + r[l] = n + '0'; + if (n == -2147483648) + ft_strlcpy(r, "-2147483648", 12); + return (r); +} diff --git a/libft/src/ft_itob.c b/libft/src/ft_itob.c new file mode 100644 index 0000000..159c558 --- /dev/null +++ b/libft/src/ft_itob.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itob.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/04 04:42:54 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:06 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_itob(int d) +{ + char s[20]; + int i; + char *r; + + i = 0; + while (d != 0) + { + s[i] = d % 2 + '0'; + d = d / 2; + i++; + } + s[i] = '\0'; + r = ft_revstr(s); + i = ft_atoi(r); + return (i); +} diff --git a/libft/src/ft_itoba.c b/libft/src/ft_itoba.c new file mode 100644 index 0000000..cae6fbd --- /dev/null +++ b/libft/src/ft_itoba.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itoba.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/04 04:42:54 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:05 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itoba(unsigned long long d, size_t e) +{ + char s[65]; + int i; + size_t j; + char *r; + + i = 0; + while (d != 0) + { + s[i] = d % 2 + '0'; + d = d / 2; + i++; + } + s[i] = '\0'; + j = ft_strlen(s); + while (e > j) + { + s[i] = '0'; + i++; + j++; + } + s[i] = '\0'; + r = ft_revstr(s); + return (r); +} diff --git a/libft/src/ft_itodd.c b/libft/src/ft_itodd.c new file mode 100644 index 0000000..7f0134a --- /dev/null +++ b/libft/src/ft_itodd.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itodd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 03:00:29 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:07 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itodd(double n) +{ + char r[20]; + int c; + double tf; + int ti; + char *s; + + c = 0; + while (n != 0) + { + if (n < 12) + r[c] = ft_htod(n); + else if (n > 11) + { + tf = n / 12; + ti = n / 12; + tf = (tf - ti) * 12; + r[c] = ft_htod(tf); + } + ti = n / 12; + n = ti; + c++; + } + r[c] = '\0'; + s = ft_revstr(r); + return (s); +} diff --git a/libft/src/ft_itof.c b/libft/src/ft_itof.c new file mode 100644 index 0000000..8cd59f5 --- /dev/null +++ b/libft/src/ft_itof.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itof.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 22:18:50 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:07 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +double ft_itof(int n) +{ + double r; + int l; + + l = ft_intlen(n); + r = n; + while (l > 0) + { + r = r / 10; + l--; + } + return (r); +} diff --git a/libft/src/ft_itoh.c b/libft/src/ft_itoh.c new file mode 100644 index 0000000..cb875e9 --- /dev/null +++ b/libft/src/ft_itoh.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itoh.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 03:00:29 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:09 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itoh(long double n) +{ + char r[30]; + int c; + long double tf; + long long ti; + char *s; + + c = 0; + while (n != 0) + { + if (n < 16) + r[c] = ft_htod(n); + else if (n > 15) + { + tf = n / 16; + ti = n / 16; + tf = (tf - ti) * 16; + r[c] = ft_htod(tf); + } + ti = n / 16; + n = ti; + c++; + } + r[c] = '\0'; + s = ft_revstr(r); + return (s); +} diff --git a/libft/src/ft_itohx.c b/libft/src/ft_itohx.c new file mode 100644 index 0000000..6ac0b3e --- /dev/null +++ b/libft/src/ft_itohx.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itohx.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 03:00:29 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:09 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itohx(long double n) +{ + char r[30]; + long int c; + long double tf; + long int ti; + char *s; + + c = 0; + while (n != 0) + { + if (n < 16) + r[c] = ft_htod(n); + else if (n > 15) + { + tf = n / 16; + ti = n / 16; + tf = (tf - ti) * 16; + r[c] = ft_htod(tf); + } + ti = n / 16; + n = ti; + c++; + } + r[c] = '\0'; + s = ft_revstr(r); + return (s); +} diff --git a/libft/src/ft_itoo.c b/libft/src/ft_itoo.c new file mode 100644 index 0000000..1749df7 --- /dev/null +++ b/libft/src/ft_itoo.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itoo.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/01 01:30:17 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:25 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +unsigned long long ft_itoo(double n) +{ + char r[20]; + unsigned long long c; + double tf; + unsigned long long ti; + + c = 0; + while (n != 0) + { + if (n < 8) + r[c] = n + '0'; + else if (n > 7) + { + tf = n / 8; + ti = n / 8; + tf = (tf - ti) * 8; + r[c] = tf + '0'; + } + ti = n / 8; + n = ti; + c++; + } + r[c] = '\0'; + c = ft_atou(ft_revstr(r)); + return (c); +} diff --git a/libft/src/ft_itooa.c b/libft/src/ft_itooa.c new file mode 100644 index 0000000..4185b53 --- /dev/null +++ b/libft/src/ft_itooa.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itooa.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/01 01:30:17 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:25 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itooa(long double n) +{ + char t[25]; + char *r; + unsigned long long c; + long double tf; + unsigned long long ti; + + c = 0; + while (n != 0) + { + if (n < 8) + t[c] = n + '0'; + else if (n > 7) + { + tf = n / 8; + ti = n / 8; + tf = (tf - ti) * 8; + t[c] = tf + '0'; + } + ti = n / 8; + n = ti; + c++; + } + t[c] = '\0'; + r = ft_revstr(t); + return (r); +} diff --git a/libft/src/ft_itozh.c b/libft/src/ft_itozh.c new file mode 100644 index 0000000..db469cd --- /dev/null +++ b/libft/src/ft_itozh.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_itozh.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 03:00:29 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:26 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_itozh(double n, int z) +{ + char *s; + int l; + int i; + char *r; + + r = ft_calloc(z + 1, 1); + i = 0; + s = ft_itoh(n); + l = ft_strlen(s); + while (l < z) + { + r[i] = '0'; + l++; + i++; + } + l = 0; + while (l < z) + { + r[i] = s[l]; + i++; + l++; + } + ft_strlcpy(s, (const char *)r, (size_t)z + 1); + free (r); + return (s); +} diff --git a/libft/src/ft_ldeclen.c b/libft/src/ft_ldeclen.c new file mode 100644 index 0000000..c6e4f98 --- /dev/null +++ b/libft/src/ft_ldeclen.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ldeclen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: houtworm +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/25 11:30:37 by houtworm #+# #+# */ +/* Updated: 2023/02/07 00:40:29 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_ldeclen(long double n) +{ + long double f; + long long i; + int l; + + i = n; + f = n - i; + l = 0; + while (f != 0 && l < 50) + { + l++; + n = n * 10; + i = n; + f = n - i; + } + return (l); +} diff --git a/libft/src/ft_lftoa.c b/libft/src/ft_lftoa.c new file mode 100644 index 0000000..60d4e92 --- /dev/null +++ b/libft/src/ft_lftoa.c @@ -0,0 +1,50 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lftoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: houtworm +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/25 11:38:35 by houtworm #+# #+# */ +/* Updated: 2023/02/07 00:40:29 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memsetfrom(void *s, int c, size_t n, int from) +{ + char *p; + + p = s; + while (from > 0 && *p) + { + p++; + from--; + } + while (n > 0 && *p) + { + *p = c; + p++; + n--; + } + return (s); +} + +char *ft_lftoa(long double n) +{ + char *ti; + char *tf; + char *rr; + int i; + + rr = ft_ltoa(n); + ti = ft_strjoin(rr, "."); + free(rr); + tf = ft_dtoa(n); + rr = ft_strjoin(ti, tf); + free(ti); + free(tf); + ft_memsetfrom(rr, '\0', ft_strlen(rr), 23); + return (rr); +} diff --git a/libft/src/ft_lftoi.c b/libft/src/ft_lftoi.c new file mode 100644 index 0000000..9837fb0 --- /dev/null +++ b/libft/src/ft_lftoi.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lftoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: houtworm +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2022/12/25 11:30:20 by houtworm #+# #+# */ +/* Updated: 2023/02/07 00:40:29 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +long long ft_lftoi(long double n) +{ + long long r; + long long l; + long double f; + + if (ft_islneg(n)) + n = n * -1; + l = ft_ldeclen(n); + r = n; + f = n - r; + while (l > 0 && f * 10 < 9223372036854775807) + { + f = f * 10; + l--; + } + r = f; + return (r); +} diff --git a/libft/src/ft_lincpy.c b/libft/src/ft_lincpy.c new file mode 100644 index 0000000..35eac07 --- /dev/null +++ b/libft/src/ft_lincpy.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lincpy.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/04 21:40:35 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:29 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_lincpy(char *dst, const char *src) +{ + char *d; + const char *s; + long unsigned int i; + + i = 0; + d = dst; + s = src; + if (dst != NULL || src != NULL) + { + while (s[i] != '\0' && s[i] != '\n') + { + d[i] = s[i]; + i++; + } + d[i] = '\0'; + } + return (dst); +} diff --git a/libft/src/ft_linlcpy.c b/libft/src/ft_linlcpy.c new file mode 100644 index 0000000..ed6a61b --- /dev/null +++ b/libft/src/ft_linlcpy.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_linlcpy.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/04 21:40:35 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:30 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_linlcpy(char *dst, const char *src, size_t n) +{ + char *d; + const char *s; + long unsigned int i; + + i = 0; + d = dst; + s = src; + if (dst != NULL || src != NULL) + { + while (s[i] != '\0' && s[i] != '\n' && n > 0) + { + d[i] = s[i]; + i++; + n--; + } + d[i] = '\0'; + } + return (dst); +} diff --git a/libft/src/ft_linlen.c b/libft/src/ft_linlen.c new file mode 100644 index 0000000..09e4092 --- /dev/null +++ b/libft/src/ft_linlen.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_linlen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/04 15:49:15 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:30 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_linlen(char *str) +{ + int l; + + l = 0; + while (*str != '\0' && *str != '\n') + { + l++; + str++; + } + return (l); +} diff --git a/libft/src/ft_lstadd_back.c b/libft/src/ft_lstadd_back.c new file mode 100644 index 0000000..902659a --- /dev/null +++ b/libft/src/ft_lstadd_back.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 18:48:54 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:30 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *l; + + if (lst) + { + if (*lst) + { + l = ft_lstlast(*lst); + l->next = new; + } + else + *lst = new; + } +} diff --git a/libft/src/ft_lstadd_front.c b/libft/src/ft_lstadd_front.c new file mode 100644 index 0000000..f183240 --- /dev/null +++ b/libft/src/ft_lstadd_front.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:38:37 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:30 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + if (lst) + { + if (*lst) + new->next = *lst; + *lst = new; + } +} diff --git a/libft/src/ft_lstclear.c b/libft/src/ft_lstclear.c new file mode 100644 index 0000000..426cb5b --- /dev/null +++ b/libft/src/ft_lstclear.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 19:12:41 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:30 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void*)) +{ + t_list *t; + int i; + + i = 0; + t = NULL; + if (!del) + { + while (t->next != NULL) + { + free(lst[i]); + i++; + } + free(t); + } + if (!del || !lst || !*lst) + return ; + while (lst && *lst) + { + t = (*lst)->next; + ft_lstdelone(*lst, del); + *lst = t; + } +} diff --git a/libft/src/ft_lstdelone.c b/libft/src/ft_lstdelone.c new file mode 100644 index 0000000..8688c36 --- /dev/null +++ b/libft/src/ft_lstdelone.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 19:06:46 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:31 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void*)) +{ + if (!del) + { + free (lst); + return ; + } + if (lst) + { + (*del)(lst->content); + free(lst); + } +} diff --git a/libft/src/ft_lstiter.c b/libft/src/ft_lstiter.c new file mode 100644 index 0000000..4ccfb63 --- /dev/null +++ b/libft/src/ft_lstiter.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 19:15:47 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:34 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!f) + return ; + while (lst) + { + (*f)(lst->content); + lst = lst->next; + } +} diff --git a/libft/src/ft_lstlast.c b/libft/src/ft_lstlast.c new file mode 100644 index 0000000..61730bd --- /dev/null +++ b/libft/src/ft_lstlast.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 18:45:02 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:34 by houtworm ### ########.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/src/ft_lstmap.c b/libft/src/ft_lstmap.c new file mode 100644 index 0000000..ea9df91 --- /dev/null +++ b/libft/src/ft_lstmap.c @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 19:30:13 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:34 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + void *s; + t_list *r; + t_list *t; + + r = NULL; + t = NULL; + while (lst) + { + if (f(lst->content)) + { + s = f(lst->content); + t = ft_lstnew(s); + if (!(t)) + { + ft_lstclear(&r, del); + lst = NULL; + return (NULL); + } + ft_lstadd_back(&r, t); + } + lst = lst->next; + } + return (r); +} diff --git a/libft/src/ft_lstnew.c b/libft/src/ft_lstnew.c new file mode 100644 index 0000000..d1af617 --- /dev/null +++ b/libft/src/ft_lstnew.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:38:37 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:35 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *r; + + r = malloc(sizeof(t_list)); + if (r == NULL) + return (NULL); + r->content = content; + r->next = NULL; + return (r); +} diff --git a/libft/src/ft_lstsize.c b/libft/src/ft_lstsize.c new file mode 100644 index 0000000..ce587a5 --- /dev/null +++ b/libft/src/ft_lstsize.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 18:27:52 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:35 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_lstsize(t_list *lst) +{ + size_t i; + + i = 0; + while (lst) + { + lst = lst->next; + i++; + } + return (i); +} diff --git a/libft/src/ft_ltoa.c b/libft/src/ft_ltoa.c new file mode 100644 index 0000000..afbf007 --- /dev/null +++ b/libft/src/ft_ltoa.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_ltoa.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/12 23:20:24 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:35 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_ltoa(long long n) +{ + char *r; + int l; + + l = ft_intlen(n) - 1; + r = ft_calloc(l + 2, 1); + if (r == NULL) + return (NULL); + while ((n > 9 || n < 0) && n >= -9223372036854775807) + { + if (n >= 10) + { + r[l] = n % 10 + '0'; + l--; + n = (n / 10); + } + else + { + r[0] = '-'; + n = (n * -1); + } + } + r[l] = n + '0'; + if (n < -9223372036854775807) + ft_strlcpy(r, "-9223372036854775808", 20); + return (r); +} diff --git a/libft/src/ft_luilen.c b/libft/src/ft_luilen.c new file mode 100644 index 0000000..2c00da3 --- /dev/null +++ b/libft/src/ft_luilen.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_luilen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 02:04:46 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:35 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_luilen(unsigned long long n) +{ + int l; + + l = 0; + if (n == 0) + return (1); + while (n != 0) + { + n = n / 10 + (l * 0); + l++; + } + return (l); +} diff --git a/libft/src/ft_malstr.c b/libft/src/ft_malstr.c new file mode 100644 index 0000000..e359eed --- /dev/null +++ b/libft/src/ft_malstr.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_malstr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/29 15:21:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_malstr(char *s, char c) +{ + char *r; + int l; + + r = ft_calloc(ft_wrdlen((char *)s, c, 0) + 1, 1); + if (!r) + return (NULL); + l = 0; + while (*s != '\0' && *s != c) + { + r[l] = *s; + l++; + s++; + } + return (r); +} diff --git a/libft/src/ft_malstrs.c b/libft/src/ft_malstrs.c new file mode 100644 index 0000000..bdeb114 --- /dev/null +++ b/libft/src/ft_malstrs.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_malstrs.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/29 15:21:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_malstrs(char *s, char *c) +{ + char *r; + int l; + + r = ft_calloc(ft_wrdlens((char *)s, c, 0) + 1, 1); + if (!r) + return (NULL); + l = 0; + while (*s != '\0' && !(ft_chrstr(*s, c))) + { + r[l] = *s; + l++; + s++; + } + return (r); +} diff --git a/libft/src/ft_max.c b/libft/src/ft_max.c new file mode 100644 index 0000000..304b05f --- /dev/null +++ b/libft/src/ft_max.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_max.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/08 04:26:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_max(int a, int b) +{ + if (a > b) + return (a); + return (b); +} diff --git a/libft/src/ft_memccpy.c b/libft/src/ft_memccpy.c new file mode 100644 index 0000000..8630c3c --- /dev/null +++ b/libft/src/ft_memccpy.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_memccpy.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:38:54 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:38 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memccpy(void *dst, const void *src, int c, size_t n) +{ + unsigned char *d; + unsigned const char *s; + unsigned char u; + + d = dst; + s = src; + u = c; + while (n != 0) + { + *d = *s; + if (*d == u) + return (d + 1); + n--; + d++; + s++; + } + return (NULL); +} diff --git a/libft/src/ft_memchr.c b/libft/src/ft_memchr.c new file mode 100644 index 0000000..644cde5 --- /dev/null +++ b/libft/src/ft_memchr.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:35:56 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:39 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + unsigned char *p; + unsigned char t; + + t = (unsigned char)c; + p = (unsigned char *)s; + while (n > 0) + { + if (t == *p) + return ((void *)p); + n--; + ++p; + } + return (NULL); +} diff --git a/libft/src/ft_memcmp.c b/libft/src/ft_memcmp.c new file mode 100644 index 0000000..e3023dc --- /dev/null +++ b/libft/src/ft_memcmp.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:41:32 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:39 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + const unsigned char *p1; + const unsigned char *p2; + + p1 = s1; + p2 = s2; + while (n) + { + if (*p1 != *p2) + return (*p1 - *p2); + p1++; + p2++; + n--; + } + return (0); +} diff --git a/libft/src/ft_memcpy.c b/libft/src/ft_memcpy.c new file mode 100644 index 0000000..c326f37 --- /dev/null +++ b/libft/src/ft_memcpy.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 16:13:52 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:39 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + char *d; + const char *s; + long unsigned int i; + + i = 0; + d = dst; + s = src; + if (dst != NULL || src != NULL) + { + while (n > i) + { + d[i] = s[i]; + i++; + } + } + return (dst); +} diff --git a/libft/src/ft_memmove.c b/libft/src/ft_memmove.c new file mode 100644 index 0000000..e388e08 --- /dev/null +++ b/libft/src/ft_memmove.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:45:04 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:39 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memmove(void *dst, const void *src, size_t len) +{ + char *d; + const char *s; + int i; + + if (dst == NULL && src == NULL) + return ((void *)dst); + i = 0; + d = dst; + s = src; + if (d >= s) + { + s = s + (len - 1); + d = d + (len - 1); + } + while (len) + { + len--; + d[i] = s[i]; + if (d < s) + i++; + else + i--; + } + return (dst); +} diff --git a/libft/src/ft_memset.c b/libft/src/ft_memset.c new file mode 100644 index 0000000..09151c0 --- /dev/null +++ b/libft/src/ft_memset.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:42:45 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:39 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void *ft_memset(void *s, int c, size_t n) +{ + char *p; + + p = s; + while (n > 0) + { + *p = c; + p++; + n--; + } + return (s); +} diff --git a/libft/src/ft_min.c b/libft/src/ft_min.c new file mode 100644 index 0000000..0129ef6 --- /dev/null +++ b/libft/src/ft_min.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_min.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/08 04:26:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:40 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_min(int a, int b) +{ + if (a < b) + return (a); + return (b); +} diff --git a/libft/src/ft_otoi.c b/libft/src/ft_otoi.c new file mode 100644 index 0000000..b04484d --- /dev/null +++ b/libft/src/ft_otoi.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_otoi.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 16:54:01 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:40 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_otoi(int i) +{ + char *s; + int is; + int ir; + int r; + + is = ft_intlen(i) - 1; + ir = 0; + r = 0; + s = ft_itoa(i); + while (s[is] != '\0') + { + r = r + (s[is] - '0') * ft_power(8, ir); + is--; + ir++; + } + free(s); + return (r); +} diff --git a/libft/src/ft_power.c b/libft/src/ft_power.c new file mode 100644 index 0000000..6297e06 --- /dev/null +++ b/libft/src/ft_power.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_power.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 01:18:37 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:40 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_power(int n, int p) +{ + int r; + + if (p < 0) + return (0); + if (p == 0) + return (1); + else + r = n * ft_power(n, p - 1); + return (r); +} diff --git a/libft/src/ft_putchar.c b/libft/src/ft_putchar.c new file mode 100644 index 0000000..467f9d5 --- /dev/null +++ b/libft/src/ft_putchar.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putchar.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 03:47:51 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:40 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putchar(char c) +{ + write(1, &c, sizeof(c)); +} diff --git a/libft/src/ft_putchar_fd.c b/libft/src/ft_putchar_fd.c new file mode 100644 index 0000000..8e6f009 --- /dev/null +++ b/libft/src/ft_putchar_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 03:47:51 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:42 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putchar_fd(char c, int fd) +{ + write(fd, &c, sizeof(c)); +} diff --git a/libft/src/ft_putendl.c b/libft/src/ft_putendl.c new file mode 100644 index 0000000..9cd6059 --- /dev/null +++ b/libft/src/ft_putendl.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putendl.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:00:47 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:43 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putendl(char *s) +{ + if (!s) + return ((void) NULL); + while (*s) + { + write(1, s, 1); + s++; + } + write(1, "\n", 1); +} diff --git a/libft/src/ft_putendl_fd.c b/libft/src/ft_putendl_fd.c new file mode 100644 index 0000000..3573095 --- /dev/null +++ b/libft/src/ft_putendl_fd.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:00:47 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:43 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + if (!s) + return ((void) NULL); + while (*s) + { + write(fd, s, 1); + s++; + } + write(fd, "\n", 1); +} diff --git a/libft/src/ft_putflo.c b/libft/src/ft_putflo.c new file mode 100644 index 0000000..16c154a --- /dev/null +++ b/libft/src/ft_putflo.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putflo.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:45:39 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:43 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putflo(double n) +{ + int i; + int f; + + i = n; + f = ft_ftoi(n); + ft_putnbr(i); + ft_putchar('.'); + ft_putnbr(f); +} diff --git a/libft/src/ft_putflo_fd.c b/libft/src/ft_putflo_fd.c new file mode 100644 index 0000000..24fb768 --- /dev/null +++ b/libft/src/ft_putflo_fd.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putflo_fd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:45:39 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:43 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putflo_fd(double n, int fd) +{ + int i; + int f; + + i = n; + f = ft_ftoi(n); + ft_putnbr_fd(i, fd); + ft_putchar_fd('.', fd); + ft_putnbr_fd(f, fd); +} diff --git a/libft/src/ft_putlong.c b/libft/src/ft_putlong.c new file mode 100644 index 0000000..fb98a5e --- /dev/null +++ b/libft/src/ft_putlong.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putlong.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:22:10 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:43 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putlong(long long n) +{ + if (n < -9223372036854775807) + return (ft_putstr("-9223372036854775808")); + if (n < 0) + { + ft_putchar('-'); + n = n * -1; + } + if (n >= 10) + { + ft_putlong(n / 10); + ft_putlong(n % 10); + } + else + ft_putchar(n + '0'); +} diff --git a/libft/src/ft_putnbr.c b/libft/src/ft_putnbr.c new file mode 100644 index 0000000..aeeb8f8 --- /dev/null +++ b/libft/src/ft_putnbr.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putnbr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:22:10 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:44 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putnbr(int n) +{ + if (n == -2147483648) + return (ft_putstr("-2147483648")); + if (n < 0) + { + ft_putchar('-'); + n = n * -1; + } + if (n >= 10) + { + ft_putnbr(n / 10); + ft_putnbr(n % 10); + } + else + ft_putchar(n + '0'); +} diff --git a/libft/src/ft_putnbr_base.c b/libft/src/ft_putnbr_base.c new file mode 100644 index 0000000..7f0e62e --- /dev/null +++ b/libft/src/ft_putnbr_base.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_putnbr_base.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/08/04 06:48:59 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 00:40:44 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putnbr_base(unsigned long long number, int base) +{ + if (number >= (unsigned long long)base) + ft_putnbr_base(number / base, base); + number %= base; + if (number >= 10) + number = number + 87; + else + number = number + 48; + ft_putchar(number); +} diff --git a/libft/src/ft_putnbr_fd.c b/libft/src/ft_putnbr_fd.c new file mode 100644 index 0000000..774bcb7 --- /dev/null +++ b/libft/src/ft_putnbr_fd.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:22:10 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:44 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putnbr_fd(int n, int fd) +{ + if (n == -2147483648) + return (ft_putstr_fd("-2147483648", fd)); + if (n < 0) + { + ft_putchar_fd('-', fd); + n = n * -1; + } + if (n >= 10) + { + ft_putnbr_fd(n / 10, fd); + ft_putnbr_fd(n % 10, fd); + } + else + ft_putchar_fd(n + '0', fd); +} diff --git a/libft/src/ft_putstr.c b/libft/src/ft_putstr.c new file mode 100644 index 0000000..fd4c986 --- /dev/null +++ b/libft/src/ft_putstr.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putstr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:00:47 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:44 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putstr(char *s) +{ + if (!s) + return ((void) NULL); + write(1, s, ft_strlen(s)); +} diff --git a/libft/src/ft_putstr_fd.c b/libft/src/ft_putstr_fd.c new file mode 100644 index 0000000..6652b71 --- /dev/null +++ b/libft/src/ft_putstr_fd.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:00:47 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + if (!s) + return ((void) NULL); + write(fd, s, ft_strlen(s)); +} diff --git a/libft/src/ft_putull.c b/libft/src/ft_putull.c new file mode 100644 index 0000000..674b1e6 --- /dev/null +++ b/libft/src/ft_putull.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putull.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:22:10 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putull(unsigned long long n) +{ + if (n >= 10) + { + ft_putull(n / 10); + ft_putull(n % 10); + } + else + ft_putchar(n + '0'); +} diff --git a/libft/src/ft_putzflo.c b/libft/src/ft_putzflo.c new file mode 100644 index 0000000..b5d8feb --- /dev/null +++ b/libft/src/ft_putzflo.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putzflo.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:45:39 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putzflo(double n, int e) +{ + long long i; + long long f; + char *t; + + i = n; + f = ft_ftoi(n); + t = ft_ltoa(f); + if (ft_around(t, e)) + i++; + ft_putnbr(i); + i = 0; + if (e > 0) + { + ft_putchar('.'); + while (e > i) + { + if (t[i] >= '0' && t[i] <= '9') + ft_putchar(t[i]); + else + ft_putchar('0'); + i++; + } + } + free (t); +} diff --git a/libft/src/ft_putzflo_fd.c b/libft/src/ft_putzflo_fd.c new file mode 100644 index 0000000..89c2eda --- /dev/null +++ b/libft/src/ft_putzflo_fd.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putzflo_fd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:45:39 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putzflo_fd(double n, int e, int fd) +{ + int i; + int f; + int l; + + i = n; + f = ft_ftoi(n); + l = ft_intlen(f) - e; + ft_putnbr_fd(i, fd); + ft_putchar_fd('.', fd); + ft_putnbr_fd(f, fd); + while (l != 0) + { + ft_putchar_fd('0', 1); + l++; + } +} diff --git a/libft/src/ft_putznbr.c b/libft/src/ft_putznbr.c new file mode 100644 index 0000000..1da75d6 --- /dev/null +++ b/libft/src/ft_putznbr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putznbr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:22:10 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putznbr(int n, int e) +{ + int s; + + s = ft_intlen(n) - e; + while (s != 0) + { + ft_putchar('0'); + s++; + } + ft_putnbr(n); +} diff --git a/libft/src/ft_putznbr_fd.c b/libft/src/ft_putznbr_fd.c new file mode 100644 index 0000000..454d006 --- /dev/null +++ b/libft/src/ft_putznbr_fd.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putznbr_fd.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 04:22:10 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_putznbr_fd(int n, int e, int fd) +{ + int s; + + s = ft_intlen(n) - e; + while (s != 0) + { + ft_putchar_fd('0', fd); + s++; + } + ft_putnbr_fd(n, fd); +} diff --git a/libft/src/ft_putzsci.c b/libft/src/ft_putzsci.c new file mode 100644 index 0000000..b9be90c --- /dev/null +++ b/libft/src/ft_putzsci.c @@ -0,0 +1,130 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putzsci.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:45:39 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:47 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_converttostring(long double n, int j) +{ + int i; + char *r; + char *t1; + char *t2; + + i = ft_declen(n); + t1 = ft_calloc(i + 1, 1); + while (i > 0) + { + while (n < 1) + { + t1[j] = '0'; + j++; + n = n * 10; + i--; + } + n = n * 10; + i--; + } + t2 = ft_ltoa(n); + r = ft_strjoin(t1, t2); + free(t1); + free(t2); + return (r); +} + +int ft_putscientificnotation(char *temp, int decimals, int zeroes) +{ + int i; + + i = 1; + while (temp[0 + zeroes] == '0') + zeroes++; + ft_putchar(temp[0 + zeroes]); + if (decimals > 0) + { + ft_putchar('.'); + while (decimals >= i) + { + if (temp[i + zeroes] >= '0' && temp[i + zeroes] <= '9') + ft_putchar(temp[i + zeroes]); + else + ft_putchar('0'); + i++; + } + } + return (zeroes); +} + +void ft_putesignandnumber(long double num, int caps, int zeroes, int e) +{ + if (caps == 1) + ft_putstr("E"); + else + ft_putstr("e"); + if (zeroes > 0) + { + ft_putchar('-'); + ft_putznbr(zeroes, 2); + } + else if (e == 2) + { + ft_putchar('+'); + ft_putznbr(ft_intlen(num), 2); + } + else + { + ft_putchar('+'); + ft_putznbr(ft_intlen(num) - 1, 2); + } +} + +char *ft_ninetoten(char *temp) +{ + char *t1; + char *t2; + + t2 = ft_strdup(temp); + free (temp); + t2[0] = '0'; + t1 = ft_strdup("1\0"); + temp = ft_strjoin(t1, t2); + free (t1); + free (t2); + return (temp); +} + +void ft_putzsci(long double number, int decimals, int caps) +{ + int zeroes; + int round; + char *temp; + int extra; + + extra = 0; + temp = ft_converttostring(number, 0); + ft_around(temp, decimals); + if (temp[0] == ':') + extra++; + free (temp); + if (extra) + decimals++; + temp = ft_converttostring(number, 0); + round = ft_around(temp, decimals); + if (temp[0] == ':') + extra++; + if (extra == 2) + temp = ft_ninetoten(temp); + if (extra) + decimals--; + zeroes = ft_putscientificnotation(temp, decimals, 0); + free (temp); + ft_putesignandnumber(number, caps, zeroes, extra); +} diff --git a/libft/src/ft_putzscih.c b/libft/src/ft_putzscih.c new file mode 100644 index 0000000..7e060d5 --- /dev/null +++ b/libft/src/ft_putzscih.c @@ -0,0 +1,132 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_putzscih.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:45:39 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:48 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_converttostringh(long double n, int j) +{ + int i; + char *r; + char *t1; + char *t2; + + i = ft_declen(n); + t1 = ft_calloc(i + 1, 1); + while (i > 0) + { + while (n < 1) + { + t1[j] = '0'; + j++; + n = n * 10; + i--; + } + n = n * 10; + i--; + } + t2 = ft_ltoa(n); + r = ft_strjoin(t1, t2); + free(t1); + free(t2); + return (r); +} + +int ft_putscientificnotationh(char *temp, int decimals, int zeroes) +{ + int i; + char *t; + + t = ft_itoh(ft_atou(temp)); + i = 1; + while (temp[0 + zeroes] == '0') + zeroes++; + ft_putchar(t[0 + zeroes]); + if (decimals > 0) + { + ft_putchar('.'); + while (decimals >= i) + { + if (ft_chrstr(t[i + zeroes], "1234567890abcdf")) + ft_putchar(t[i + zeroes]); + else + ft_putchar('0'); + i++; + } + } + return (zeroes); +} + +void ft_putesignandnumberh(long double num, int caps, int zeroes, int e) +{ + if (caps == 1) + ft_putstr("P"); + else + ft_putstr("p"); + if (zeroes > 0) + { + ft_putchar('-'); + ft_putznbr(zeroes, 2); + } + else if (e == 2) + { + ft_putchar('+'); + ft_putznbr(ft_intlen(num), 2); + } + else + { + ft_putchar('+'); + ft_putznbr(ft_intlen(num) - 1, 2); + } +} + +char *ft_ninetotenh(char *temp) +{ + char *t1; + char *t2; + + t2 = ft_strdup(temp); + free (temp); + t2[0] = '0'; + t1 = ft_strdup("1\0"); + temp = ft_strjoin(t1, t2); + free (t1); + free (t2); + return (temp); +} + +void ft_putzscih(long double number, int decimals, int caps) +{ + int zeroes; + int round; + char *temp; + int extra; + + extra = 0; + temp = ft_converttostringh(number, 0); + ft_around(temp, decimals); + if (temp[0] == ':') + extra++; + free (temp); + if (extra) + decimals++; + temp = ft_converttostringh(number, 0); + round = ft_around(temp, decimals); + if (temp[0] == ':') + extra++; + if (extra == 2) + temp = ft_ninetotenh(temp); + if (extra) + decimals--; + zeroes = ft_putscientificnotationh(temp, decimals, 0); + free (temp); + ft_putesignandnumberh(number, caps, zeroes, extra); +} diff --git a/libft/src/ft_revstr.c b/libft/src/ft_revstr.c new file mode 100644 index 0000000..2069b51 --- /dev/null +++ b/libft/src/ft_revstr.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_revstr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/18 11:54:50 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:48 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_revstr(char *s) +{ + char r[1000]; + int is; + int ir; + + is = ft_strlen(s) - 1; + ir = 0; + while (is >= 0) + { + r[ir] = s[is]; + ir++; + is--; + } + r[ir] = '\0'; + s = r; + return (s); +} diff --git a/libft/src/ft_round.c b/libft/src/ft_round.c new file mode 100644 index 0000000..5c1c570 --- /dev/null +++ b/libft/src/ft_round.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_round.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 07:26:00 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:48 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_round(int n, int h) +{ + int ht; + + ht = h; + if ((n % 10) > 5) + n = n + 1; + while (ht > 0) + { + if ((n % 10) > 5) + { + n = n / 10; + n = n + 1; + } + else + n = n / 10; + ht--; + } + while (h > 0) + { + n = n * 10; + h--; + } + return (n); +} diff --git a/libft/src/ft_split.c b/libft/src/ft_split.c new file mode 100644 index 0000000..a1698f5 --- /dev/null +++ b/libft/src/ft_split.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/12 02:21:52 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:49 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char **ft_split(char const *s, char c) +{ + char **r; + int iw; + + if (!s) + return (NULL); + iw = 0; + r = ft_calloc(sizeof(r) * (ft_cntwrd((char *)s, c) + 1), 1); + if (!r) + return (NULL); + while (ft_cntwrd((char *)s, c) > 0) + { + while (*s == c) + s++; + r[iw] = ft_malstr((char *)s, c); + if (r[iw] == NULL) + return (ft_frenarr(r, iw)); + while (*s != c && *s != '\0') + s++; + iw++; + } + return (r); +} diff --git a/libft/src/ft_splits.c b/libft/src/ft_splits.c new file mode 100644 index 0000000..9e44d47 --- /dev/null +++ b/libft/src/ft_splits.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_splits.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/12 02:21:52 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char **ft_splits(char *s, char *c) +{ + char **r; + int iw; + + if (!s) + return (NULL); + iw = 0; + r = ft_calloc(sizeof(r) * (ft_cntwrds(s, c) + 1), 1); + if (!r) + return (NULL); + while (ft_cntwrds(s, c) > 0) + { + while (ft_chrstr(*s, c)) + s++; + r[iw] = ft_malstrs((char *)s, c); + if (r[iw] == NULL) + return (ft_frenarr(r, iw)); + while (!(ft_chrstr(*s, c)) && *s != '\0') + s++; + iw++; + } + return (r); +} diff --git a/libft/src/ft_sqrt.c b/libft/src/ft_sqrt.c new file mode 100644 index 0000000..b8a8bc6 --- /dev/null +++ b/libft/src/ft_sqrt.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_sqrt.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/01 04:16:25 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:03 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +unsigned long long ft_sqrt(unsigned long long n) +{ + unsigned long long r; + + r = 0; + while (r < 1000000000000000000 && r <= n / 2) + { + if (r * r == n) + return (r); + r++; + } + return (0); +} diff --git a/libft/src/ft_strchr.c b/libft/src/ft_strchr.c new file mode 100644 index 0000000..10127ea --- /dev/null +++ b/libft/src/ft_strchr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_strchr.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 13:34:05 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 00:40:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strchr(const char *s, int c) +{ + while (*s) + { + if (c == *s) + return ((char *)s); + s++; + } + if (c == *s) + return ((char *)s); + return (0); +} diff --git a/libft/src/ft_strdup.c b/libft/src/ft_strdup.c new file mode 100644 index 0000000..7b93530 --- /dev/null +++ b/libft/src/ft_strdup.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/03 09:00:38 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strdup(const char *s) +{ + int i; + char *p; + + i = ft_strlen((char *)s) + 1; + p = malloc(i); + if (p == NULL) + return (p); + ft_memcpy(p, s, i); + return (p); +} diff --git a/libft/src/ft_strjoin.c b/libft/src/ft_strjoin.c new file mode 100644 index 0000000..a2aa191 --- /dev/null +++ b/libft/src/ft_strjoin.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 16:17:34 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:50 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + int c1; + int c2; + char *r; + + c1 = 0; + c2 = 0; + if (s1 == NULL) + return (ft_malstr((char *)s2, '\0')); + if (s2 == NULL) + return (ft_malstr((char *)s1, '\0')); + r = ft_calloc(ft_strlen((char *)s1) + ft_strlen((char *)s2) + 1, 1); + if (r == NULL) + return (r); + while (c1 < (int)ft_strlen((char *)s1)) + { + r[c1] = s1[c1]; + c1++; + } + while (c2 < (int)ft_strlen((char *)s2)) + { + r[c1 + c2] = s2[c2]; + c2++; + } + r[c1 + c2] = '\0'; + return (r); +} diff --git a/libft/src/ft_strlcat.c b/libft/src/ft_strlcat.c new file mode 100644 index 0000000..d89e423 --- /dev/null +++ b/libft/src/ft_strlcat.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 09:55:53 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:51 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t dstsize) +{ + size_t dl; + size_t sl; + size_t r; + + dl = ft_strlen(dst); + r = ft_strlen((char *)src); + sl = 0; + if (dstsize == 0) + return (r); + if (dstsize < dl) + r = r + dstsize; + else + r = r + dl; + while (src[sl] != '\0' && dl < dstsize - 1) + { + dst[dl] = src[sl]; + sl++; + dl++; + } + if (dl < dstsize) + dst[dl] = '\0'; + return (r); +} diff --git a/libft/src/ft_strlcpy.c b/libft/src/ft_strlcpy.c new file mode 100644 index 0000000..5d39969 --- /dev/null +++ b/libft/src/ft_strlcpy.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:22:27 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:51 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +size_t ft_strlcpy(char *dst, const char *src, size_t dstsize) +{ + size_t i; + + if (dst == NULL || src == NULL) + return (0); + i = ft_strlen((char *)src); + if (i + 1 < dstsize) + ft_memcpy(dst, src, i + 1); + else if (i != 0 && dstsize != 0) + { + ft_memcpy(dst, src, dstsize - 1); + dst[dstsize - 1] = '\0'; + } + return (i); +} diff --git a/libft/src/ft_strlen.c b/libft/src/ft_strlen.c new file mode 100644 index 0000000..90c1bf5 --- /dev/null +++ b/libft/src/ft_strlen.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 08:45:34 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:51 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +size_t ft_strlen(const char *str) +{ + size_t a; + + a = 0; + if (!str) + return (0); + while (*str != '\0') + { + a++; + str++; + } + return (a); +} diff --git a/libft/src/ft_strlow.c b/libft/src/ft_strlow.c new file mode 100644 index 0000000..9c55123 --- /dev/null +++ b/libft/src/ft_strlow.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strlow.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 05:49:38 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:40:51 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strlow(char *s) +{ + char r[5000]; + int i; + + i = 0; + while (s[i]) + { + r[i] = ft_tolower(s[i]); + i++; + } + r[i] = '\0'; + s = r; + return (s); +} diff --git a/libft/src/ft_strmapi.c b/libft/src/ft_strmapi.c new file mode 100644 index 0000000..a878154 --- /dev/null +++ b/libft/src/ft_strmapi.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/13 03:04:33 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:11 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + unsigned int i; + char *r; + + i = 0; + if (f == NULL || s == NULL) + return (0x0); + r = (char *)malloc(sizeof(char) * (ft_strlen((char *)s)) + 1); + if (r == NULL) + return (r); + while (s[i] != '\0') + { + r[i] = f(i, s[i]); + i++; + } + r[i] = '\0'; + return (r); +} diff --git a/libft/src/ft_strncmp.c b/libft/src/ft_strncmp.c new file mode 100644 index 0000000..cafdedc --- /dev/null +++ b/libft/src/ft_strncmp.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:09:01 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:12 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_strncmp(char *s1, char *s2, unsigned int n) +{ + if (n == 0) + return (0); + while (n) + { + if (*s1 != *s2) + return (*(unsigned char *)s1 - *(unsigned char *)s2); + if (*s1 == '\0') + break ; + s1++; + s2++; + n--; + } + return (0); +} diff --git a/libft/src/ft_strnstr.c b/libft/src/ft_strnstr.c new file mode 100644 index 0000000..a76fcc8 --- /dev/null +++ b/libft/src/ft_strnstr.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 16:14:33 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:13 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strnstr(const char *h, const char *n, size_t len) +{ + long unsigned int ih; + int in; + + ih = 0; + if (!*n) + return ((char *)&h[ih]); + while (h[ih] != '\0' && len > ih) + { + if (h[ih] == n[0]) + { + in = 1; + while (n[in] != '\0' && h[ih + in] == n[in] && (ih + in) < len) + in++; + if (n[in] == '\0') + return ((char *)&h[ih]); + } + ih++; + } + return (NULL); +} diff --git a/libft/src/ft_strrchr.c b/libft/src/ft_strrchr.c new file mode 100644 index 0000000..cea8d6f --- /dev/null +++ b/libft/src/ft_strrchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 16:14:50 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:13 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strrchr(const char *s, int c) +{ + char *p; + + p = (char *) 0; + while (1) + { + if (*s == c) + p = (char *)s; + if (*s == 0) + break ; + s++; + } + return (p); +} diff --git a/libft/src/ft_strtrim.c b/libft/src/ft_strtrim.c new file mode 100644 index 0000000..85ba4b7 --- /dev/null +++ b/libft/src/ft_strtrim.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 16:41:19 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:13 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strtrim(char const *str, char const *set) +{ + char *r; + int l; + + if (!str) + return (NULL); + if (!set) + return (ft_malstr((char *)str, '\0')); + while (*str && ft_strchr(set, *str)) + str++; + l = ft_strlen((char *)str); + while (ft_strchr(set, str[l]) && l) + l--; + r = ft_substr((char *)str, 0, l + 1); + return (r); +} diff --git a/libft/src/ft_strupp.c b/libft/src/ft_strupp.c new file mode 100644 index 0000000..99f765b --- /dev/null +++ b/libft/src/ft_strupp.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_strupp.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/01/31 05:49:38 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:13 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_strupp(char *s) +{ + char r[5000]; + int i; + + i = 0; + while (s[i]) + { + r[i] = ft_toupper(s[i]); + i++; + } + r[i] = '\0'; + s = r; + return (s); +} diff --git a/libft/src/ft_substr.c b/libft/src/ft_substr.c new file mode 100644 index 0000000..322e213 --- /dev/null +++ b/libft/src/ft_substr.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 15:52:16 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:13 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *r; + long unsigned int i; + + if (s == NULL) + return (NULL); + i = 0; + if (len > ft_strlen((char *)s) && start < ft_strlen((char *)s)) + len = ft_strlen((char *)s) - start; + r = ft_calloc(len + 1, 1); + if (r == NULL) + return (NULL); + if (start >= ft_strlen((char *)s)) + { + r[i] = '\0'; + return (r); + } + while (len > i) + { + r[i] = s[i + start]; + i++; + } + return (r); +} diff --git a/libft/src/ft_swap.c b/libft/src/ft_swap.c new file mode 100644 index 0000000..96141d7 --- /dev/null +++ b/libft/src/ft_swap.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_swap.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/02 21:13:27 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:28 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_swap(int *a, int *b) +{ + int c; + + c = *a; + *a = *b; + *b = c; +} diff --git a/libft/src/ft_swaplong.c b/libft/src/ft_swaplong.c new file mode 100644 index 0000000..e7903d1 --- /dev/null +++ b/libft/src/ft_swaplong.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_swaplong.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 15:26:28 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 00:41:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +void ft_swaplong(long *a, long *b) +{ + long c; + + c = *a; + *a = *b; + *b = c; +} diff --git a/libft/src/ft_tolower.c b/libft/src/ft_tolower.c new file mode 100644 index 0000000..4301850 --- /dev/null +++ b/libft/src/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/11 16:13:29 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:14 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_tolower(int c) +{ + if (ft_isuppc(c)) + return (c + 32); + return (c); +} diff --git a/libft/src/ft_toupper.c b/libft/src/ft_toupper.c new file mode 100644 index 0000000..f1781ba --- /dev/null +++ b/libft/src/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/01 19:10:41 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:14 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_toupper(int c) +{ + if (ft_islowc(c)) + return (c - 32); + return (c); +} diff --git a/libft/src/ft_utoa.c b/libft/src/ft_utoa.c new file mode 100644 index 0000000..03d245a --- /dev/null +++ b/libft/src/ft_utoa.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_utoa.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/12 23:20:24 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:45 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +char *ft_utoa(unsigned long long n) +{ + char *r; + int l; + + l = ft_intlen(n) - 1; + r = ft_calloc(l + 2, 1); + if (r == NULL) + return (NULL); + while (n > 9 || n < 0) + { + if (n >= 10) + { + r[l] = n % 10 + '0'; + l--; + n = (n / 10); + } + } + r[l] = n + '0'; + return (r); +} diff --git a/libft/src/ft_vamax.c b/libft/src/ft_vamax.c new file mode 100644 index 0000000..44b28f5 --- /dev/null +++ b/libft/src/ft_vamax.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_vamax.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/08 04:26:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_vamax(int n, ...) +{ + va_list va; + int i; + int t; + int r; + + i = 0; + va_start(va, n); + r = -2147483648; + while (n > i) + { + t = va_arg(va, int); + if (t > r) + r = t; + i++; + } + va_end(va); + return (r); +} diff --git a/libft/src/ft_vamin.c b/libft/src/ft_vamin.c new file mode 100644 index 0000000..b859e75 --- /dev/null +++ b/libft/src/ft_vamin.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_vamin.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/02/08 04:26:11 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_vamin(int n, ...) +{ + va_list va; + int i; + int t; + int r; + + i = 0; + va_start(va, n); + r = 2147483647; + while (n > i) + { + t = va_arg(va, int); + if (t < r) + r = t; + i++; + } + va_end(va); + return (r); +} diff --git a/libft/src/ft_wrdlen.c b/libft/src/ft_wrdlen.c new file mode 100644 index 0000000..444a25a --- /dev/null +++ b/libft/src/ft_wrdlen.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_wrdlen.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/22 12:00:13 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_wrdlen(char *s, char c, int i) +{ + int r; + int w; + int is; + + r = 0; + w = 0; + is = 0; + while (s[is] != '\0') + { + while (s[is] == c) + is++; + if (s[is] != c && s[is] != '\0') + { + r = 0; + while (s[is] != c && s[is] != '\0') + { + is++; + r++; + } + if (w == i) + return (r); + w++; + } + } + return (0); +} diff --git a/libft/src/ft_wrdlens.c b/libft/src/ft_wrdlens.c new file mode 100644 index 0000000..1c2fdca --- /dev/null +++ b/libft/src/ft_wrdlens.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_wrdlens.c :+: :+: :+: */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2020/11/22 12:00:13 by djonker #+# #+# */ +/* Updated: 2023/02/07 00:41:46 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft.h" + +int ft_wrdlens(char *s, char *c, int i) +{ + int r; + int w; + int is; + + r = 0; + w = 0; + is = 0; + while (s[is] != '\0') + { + while (ft_chrstr(s[is], c)) + is++; + if (!(ft_chrstr(s[is], c)) && s[is] != '\0') + { + r = 0; + while (!(ft_chrstr(s[is], c)) && s[is] != '\0') + { + is++; + r++; + } + if (w == i) + return (r); + w++; + } + } + return (0); +} diff --git a/printf/Makefile b/printf/Makefile new file mode 100644 index 0000000..b100cfb --- /dev/null +++ b/printf/Makefile @@ -0,0 +1,83 @@ +# **************************************************************************** # +# # +# :::::::: # +# Makefile |o_o || | # +# +:+ # +# By: djonker +#+ # +# +#+ # +# Created: 2020/12/19 06:09:46 by djonker #+# #+# # +# Updated: 2023/02/20 13:24:46 by houtworm \___)=(___/ # +# # +# **************************************************************************** # + +NAME = ft_printf.a +CC = gcc +FC = -Wall -Werror -Wextra# -fsanitize=address +RM = rm -f +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Linux) +OS = Freedom Respecting Linux! :) +SRC = src/ft_printf.c \ + src/ft_printf_flags.c \ + src/ft_printf_length.c \ + src/Linux/ft_printf_proc_c.c \ + src/Linux/ft_printf_proc_s.c \ + src/Linux/ft_printf_proc_p.c \ + src/Linux/ft_printf_proc_d.c \ + src/Linux/ft_printf_proc_u.c \ + src/Linux/ft_printf_proc_x.c \ + src/Linux/ft_printf_proc_f.c \ + src/Linux/ft_printf_proc_g.c \ + src/Linux/ft_printf_proc_e.c \ + src/Linux/ft_printf_proc_o.c \ + src/Linux/ft_printf_proc_a.c \ + src/Linux/ft_printf_proc_b.c \ + src/Linux/ft_printf_proc_inf.c \ + src/Linux/ft_printf_proc_prec.c +else +OS = Proprietary Malware :( +SRC = src/ft_printf.c \ + src/ft_printf_flags.c \ + src/ft_printf_length.c \ + src/Mac/ft_printf_proc_c.c \ + src/Mac/ft_printf_proc_s.c \ + src/Mac/ft_printf_proc_p.c \ + src/Mac/ft_printf_proc_d.c \ + src/Mac/ft_printf_proc_u.c \ + src/Mac/ft_printf_proc_x.c \ + src/Mac/ft_printf_proc_f.c \ + src/Mac/ft_printf_proc_g.c \ + src/Mac/ft_printf_proc_e.c \ + src/Mac/ft_printf_proc_o.c \ + src/Mac/ft_printf_proc_a.c \ + src/Mac/ft_printf_proc_b.c \ + src/Mac/ft_printf_proc_inf.c \ + src/Mac/ft_printf_proc_prec.c +endif +OBJ =$(SRC:src/%.c=obj/%.o) +FAR = ar -sr +LIB =../libft/libft.a + +all: $(NAME) + +clean: + @$(RM) -r obj + @printf "\e[1;35mCleaned Object Files\n\e[0;00m" + +fclean: clean + @$(RM) $(NAME) + @printf "\e[1;31mCleaned Executables\n\e[0;00m" + +re: fclean all + +$(OBJ): $(SRC) + @mkdir -p $(dir $@) + @printf "\e[1;34mBuilding $@\n\e[0;00m" + @$(CC) $(CFLAGS) -c $(@:obj/%.o=src/%.c) -o $@ + +$(NAME): $(OBJ) + @printf "\e[1;36mCompiling $@\e[0;00m\n" + @$(FAR) $(NAME) $(OBJ) $(LIB) > /dev/null 2>&1 + @printf "\e[1;32mDone\e[0;00m\n" + +.PHONY: libft diff --git a/printf/ft_printf.h b/printf/ft_printf.h new file mode 100644 index 0000000..a7db31c --- /dev/null +++ b/printf/ft_printf.h @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ft_printf.h |o_o || | */ +/* +:+ */ +/* By: djonker +#+ */ +/* +#+ */ +/* Created: 2021/03/16 07:28:50 by djonker #+# #+# */ +/* Updated: 2023/02/20 13:23:00 by houtworm \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H + +# include "../libft/libft.h" + +typedef struct s_printf +{ + char *form; + char type; + int leng; + int left; + int zero; + int prec; + int widt; + int conv; + int spac; + int plus; + char *temp; + int n; + int w; + int p; +} t_printf; + +int ft_printf(const char *format, ...); +void ft_processflag(t_printf *strct, va_list v); +void ft_processlength(t_printf *strct, va_list v); +void ft_printf_proc_c(t_printf *strct, char r); +void ft_printf_proc_s(t_printf *strct, char *r); +void ft_printf_proc_p(t_printf *strct, unsigned long long r); +void ft_printf_proc_d(t_printf *strct, long long r); +void ft_printf_proc_u(t_printf *strct, unsigned long long r); +void ft_printf_proc_x(t_printf *strct, unsigned long long r); +void ft_printf_proc_n(t_printf *strct, unsigned long long r); +void ft_printf_proc_f(t_printf *strct, long double r); +void ft_printf_proc_g(t_printf *strct, long double r); +void ft_printf_proc_e(t_printf *strct, long double r); +void ft_printf_proc_o(t_printf *strct, unsigned long long r); +void ft_printf_proc_a(t_printf *strct, long double r); +void ft_printf_proc_b(t_printf *strct, unsigned long long r); +void ft_printf_proc_inf(t_printf *strct, char *r, int sign); +void ft_printf_proc_prec(t_printf *strct, char r); + +#endif diff --git a/printf/src/Linux/ft_printf_proc_a.c b/printf/src/Linux/ft_printf_proc_a.c new file mode 100644 index 0000000..10dc306 --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_a.c @@ -0,0 +1,105 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_a.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:19 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long double r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0) + ft_putandcount(strct, ' ', 1); + if (strct->p == 1 && strct->prec > 0) + strct->widt = strct->widt - (strct->prec + 1 + ft_intlen(r)); + else if (strct->prec == 0 && strct->p > 1) + strct->widt = strct->widt - ft_intlen(r); + else + strct->widt = strct->widt - (7 + ft_intlen(r)); + if (strct->plus == 1 && r >= 0) + strct->widt--; + if (strct->p > 0) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, long double r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long double r) +{ + int cap; + + cap = 0; + if (r < 0) + r = r * -1; + if (strct->type == 'A') + { + cap++; + ft_putstr("0X"); + } + else + ft_putstr("0x"); + if (strct->p > 0) + { + ft_putzscih(r, strct->prec, cap); + strct->n = strct->n + strct->prec + 8; + } + else + { + ft_putzscih(r, 20, cap); + strct->n = strct->n + 13; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_a(t_printf *strct, long double r) +{ + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); + } +} diff --git a/printf/src/Linux/ft_printf_proc_b.c b/printf/src/Linux/ft_printf_proc_b.c new file mode 100644 index 0000000..7eec126 --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_b.c @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_b.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:20 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (r > 0) + strct->temp = ft_itoba(r, 0); + if (r == 0) + strct->temp = "0"; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_strlen(strct->temp)); + if (strct->p > 0) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (strct->plus > 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct) +{ + if (ft_strncmp(strct->temp, "0", 2)) + { + ft_putstr(strct->temp); + strct->n = strct->n + ft_strlen(strct->temp); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_b(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct); + ft_valueleft(strct); +} diff --git a/printf/src/Linux/ft_printf_proc_c.c b/printf/src/Linux/ft_printf_proc_c.c new file mode 100644 index 0000000..8dc76a5 --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_c.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_c.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:21 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; +} + +static void ft_preparation(t_printf *strct, char r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (r || strct->p != 3 || r == 0) + strct->widt--; +} + +static void ft_widthvalue(t_printf *strct, char r) +{ + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, ' ', 1); + ft_putchar(r); + strct->n++; + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_c(t_printf *strct, char r) +{ + ft_preparation(strct, r); + ft_widthvalue(strct, r); +} diff --git a/printf/src/Linux/ft_printf_proc_d.c b/printf/src/Linux/ft_printf_proc_d.c new file mode 100644 index 0000000..82b01dd --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_d.c @@ -0,0 +1,99 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_d.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:31 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long long r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec > 0 && r < 0) + strct->prec++; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_intlen(r); + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0 && strct->plus == 0) + ft_putandcount(strct, ' ', 1); + strct->widt = strct->widt - (strct->prec + ft_intlen(r)); + if (strct->plus == 1 && r >= 0) + strct->widt--; + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero > 0) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long long r) +{ + if (r != 0) + { + if (r < -9223372036854775807) + { + ft_putstr("9223372036854775808"); + strct->n--; + } + else + { + if (r < 0) + r = r * -1; + ft_putlong(r); + } + strct->n = strct->n + ft_intlen(r); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_d(t_printf *strct, long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); +} diff --git a/printf/src/Linux/ft_printf_proc_e.c b/printf/src/Linux/ft_printf_proc_e.c new file mode 100644 index 0000000..a99fc11 --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_e.c @@ -0,0 +1,101 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_e.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:31 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long double r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0) + ft_putandcount(strct, ' ', 1); + if (strct->p == 1 && strct->prec > 0) + strct->widt = strct->widt - (strct->prec + 1 + ft_intlen(r)); + else if (strct->prec == 0 && strct->p > 1) + strct->widt = strct->widt - ft_intlen(r); + else + strct->widt = strct->widt - (7 + ft_intlen(r)); + if (strct->plus == 1 && r >= 0) + strct->widt--; + if (strct->p > 0) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, long double r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long double r) +{ + int cap; + + if (r < 0) + r = r * -1; + if (strct->type == 'E') + cap = 1; + else + cap = 0; + if (strct->p > 0) + { + ft_putzsci(r, strct->prec, cap); + strct->n = strct->n + strct->prec + 6; + } + else + { + ft_putzsci(r, 6, cap); + strct->n = strct->n + 11; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_e(t_printf *strct, long double r) +{ + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); + } +} diff --git a/printf/src/Linux/ft_printf_proc_f.c b/printf/src/Linux/ft_printf_proc_f.c new file mode 100644 index 0000000..c75b718 --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_f.c @@ -0,0 +1,98 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_f.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:32 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long double r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0) + ft_putandcount(strct, ' ', 1); + if (strct->p == 1 && strct->prec > 0) + strct->widt = strct->widt - (strct->prec + 1 + ft_intlen(r)); + else if (strct->prec == 0 && strct->p > 1) + strct->widt = strct->widt - ft_intlen(r); + else + strct->widt = strct->widt - (7 + ft_intlen(r)); + if (strct->plus == 1 && r >= 0 && strct->left == 0) + strct->widt--; +} + +static void ft_widthprecision(t_printf *strct, long double r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero == 0) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 1); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, '0', 1); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long double r) +{ + if (r < 0) + r = r * -1; + if (strct->p == 1 && strct->prec > 0) + { + ft_putzflo(r, strct->prec); + strct->n = strct->n + ft_intlen(r) + strct->prec + 1; + } + else if (strct->p == 2 || strct->p == 3) + { + ft_putzflo(r, 0); + strct->n = strct->n + ft_intlen(r); + } + else + { + ft_putzflo(r, 6); + strct->n = strct->n + ft_intlen(r) + 6; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_f(t_printf *strct, long double r) +{ + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); + } +} diff --git a/printf/src/Linux/ft_printf_proc_g.c b/printf/src/Linux/ft_printf_proc_g.c new file mode 100644 index 0000000..5d57096 --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_g.c @@ -0,0 +1,87 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_g.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:33 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_withprecision(t_printf *strct, long double r, int lenght) +{ + if (strct->prec == lenght) + { + strct->prec = lenght; + ft_printf_proc_d(strct, r); + } + else if (lenght < strct->prec) + { + strct->prec = strct->prec - lenght; + ft_printf_proc_f(strct, r); + } + else if (lenght > strct->prec) + { + strct->prec = strct->prec - 1; + ft_printf_proc_e(strct, r); + } + else if (lenght > 6) + { + strct->prec = strct->prec + 5 - lenght; + ft_printf_proc_e(strct, r); + } + else + { + strct->prec = strct->prec + 5 - lenght; + ft_printf_proc_f(strct, r); + } +} + +static void ft_noprecision(t_printf *strct, long double r, int lenght) +{ + if (lenght > 6) + { + strct->p = 1; + strct->prec = 5; + ft_printf_proc_e(strct, r); + } + else + { + strct->prec = 6 - lenght; + strct->p = 1; + if (strct->prec <= 0) + strct->p = 2; + ft_printf_proc_f(strct, r); + } +} + +void ft_printf_proc_g(t_printf *strct, long double r) +{ + int lenght; + + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + lenght = ft_intlen(r); + if (r < 0) + lenght--; + if (r == 0.0) + { + strct->prec = 1; + ft_printf_proc_d(strct, 0); + } + else if (strct->p > 0) + ft_withprecision(strct, r, lenght); + else + ft_noprecision(strct, r, lenght); + } +} diff --git a/printf/src/Linux/ft_printf_proc_inf.c b/printf/src/Linux/ft_printf_proc_inf.c new file mode 100644 index 0000000..96f00ac --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_inf.c @@ -0,0 +1,90 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_inf.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:35 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, char *r, int sign) +{ + if (strct->prec < 0) + strct->p = 4; + if (strct->prec < 0) + strct->prec = 0; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->spac == 1 && r >= 0 && strct->plus == 0) + ft_putandcount(strct, ' ', 1); + if (strct->plus == 1 && sign == 1) + strct->widt--; + if (strct->plus == 5 && strct->p > 0 && strct->prec < 6) + strct->widt = strct->widt; + else if (strct->prec > 0 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt - strct->prec; + else if ((strct->p > 0) && strct->p != 4 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt; + else + strct->widt = strct->widt - ft_strlen(r); +} + +static void ft_widthprecision(t_printf *strct, int sign) +{ + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, ' ', 1); + if (sign == 1 && strct->plus == 1) + ft_putandcount(strct, '+', 0); +} + +static void ft_valueleft(t_printf *strct, char *r) +{ + int i; + + i = 0; + if (strct->p > 0) + { + if (strct->prec < 6) + { + strct->prec = 0; + strct->p = 2; + } + } + if (strct->prec == 0 && strct->p != 2 && strct->p != 3) + { + ft_putstr(r); + strct->n = strct->n + ft_strlen(r); + } + while (strct->prec > i && r[i]) + { + ft_putchar(r[i]); + strct->n++; + i++; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_inf(t_printf *strct, char *r, int sign) +{ + ft_preparation(strct, r, sign); + ft_widthprecision(strct, sign); + ft_valueleft(strct, r); +} diff --git a/printf/src/Linux/ft_printf_proc_o.c b/printf/src/Linux/ft_printf_proc_o.c new file mode 100644 index 0000000..b85290a --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_o.c @@ -0,0 +1,83 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_o.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:35 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (r > 0) + strct->temp = ft_itooa(r); + if (r == 0) + strct->temp = "0"; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_strlen(strct->temp)); + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, unsigned long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->conv == 1 && strct->zero > 0 && strct->p == 0 && r > 0) + ft_putandcount(strct, '0', 1); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (strct->conv == 1 && strct->zero == 0 && r > 0) + ft_putandcount(strct, '0', 1); +} + +static void ft_valueleft(t_printf *strct, unsigned long long r) +{ + if (r != 0) + { + ft_putstr(ft_itooa(r)); + strct->n = strct->n + ft_strlen(ft_itooa(r)); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_o(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); +} diff --git a/printf/src/Linux/ft_printf_proc_p.c b/printf/src/Linux/ft_printf_proc_p.c new file mode 100644 index 0000000..23d19ae --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_p.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_p.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (!r) + strct->temp = "(nil)"; + else + strct->temp = ft_itohx(r); + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r) + ft_putandcount(strct, ' ', 1); + if (r) + strct->widt = strct->widt - (strct->prec + 2 + ft_strlen(strct->temp)); + else + strct->widt = strct->widt - 5; + if (strct->plus == 1 && r) + strct->widt--; + if (strct->p > 0 && r) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, unsigned long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && strct->zero > 0 && r) + ft_putandcount(strct, '+', 0); + if (r > 0 && strct->zero > 0) + ft_putstr("0x"); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2 && r) + ft_putandcount(strct, '0', 1); + while (strct->widt > 0 && strct->left == 0 && !r) + ft_putandcount(strct, ' ', 1); + while (strct->prec > 0 && r) + ft_putandcount(strct, '0', 2); + if (strct->plus > 0 && strct->zero == 0 && r) + ft_putandcount(strct, '+', 1); + if (r > 0 && strct->zero == 0) + ft_putstr("0x"); +} + +static void ft_valueleft(t_printf *strct) +{ + ft_putstr(strct->temp); + strct->n = strct->n + ft_strlen(strct->temp) + 2; + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); + if (!ft_strncmp(strct->temp, "(nil)", 5)) + strct->n = strct->n - 2; +} + +void ft_printf_proc_p(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct); +} diff --git a/printf/src/Linux/ft_printf_proc_prec.c b/printf/src/Linux/ft_printf_proc_prec.c new file mode 100644 index 0000000..a8b069d --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_prec.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_prec.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +void ft_printf_proc_prec(t_printf *strct, char r) +{ + ft_putchar('%'); + strct->n++; +} diff --git a/printf/src/Linux/ft_printf_proc_s.c b/printf/src/Linux/ft_printf_proc_s.c new file mode 100644 index 0000000..3c070ed --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_s.c @@ -0,0 +1,91 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_s.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, char *r) +{ + if (strct->prec < 0) + strct->p = 4; + if (strct->prec < 0) + strct->prec = 0; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->plus == 5 && strct->p > 0 && strct->prec < 6) + strct->widt = strct->widt; + else if (strct->prec > 0 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt - strct->prec; + else if ((strct->p > 0) && strct->p != 4 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt; + else + strct->widt = strct->widt - ft_strlen(r); +} + +static void ft_widthprecision(t_printf *strct) +{ + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, ' ', 1); +} + +static void ft_valueleft(t_printf *strct, char *r) +{ + int i; + + i = 0; + if (strct->plus == 5 && strct->p > 0) + { + if (strct->prec < 6) + { + strct->prec = 0; + strct->p = 2; + } + } + if (strct->prec == 0 && strct->p != 2 && strct->p != 3) + { + ft_putstr(r); + strct->n = strct->n + ft_strlen(r); + } + while (strct->prec > i && r[i]) + { + ft_putchar(r[i]); + strct->n++; + i++; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_s(t_printf *strct, char *r) +{ + if (!r) + { + r = "(null)"; + strct->plus = 5; + if (strct->prec < 0) + strct->plus = 6; + } + ft_preparation(strct, r); + ft_widthprecision(strct); + ft_valueleft(strct, r); +} diff --git a/printf/src/Linux/ft_printf_proc_u.c b/printf/src/Linux/ft_printf_proc_u.c new file mode 100644 index 0000000..d30989b --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_u.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_u.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_luilen(r); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_luilen(r)); + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + while (strct->widt > 0 && strct->left == 0 && strct->zero > 0) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); +} + +static void ft_valueleft(t_printf *strct, unsigned long long r) +{ + if (r != 0) + { + ft_putull(r); + strct->n = strct->n + ft_luilen(r); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_u(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct); + ft_valueleft(strct, r); +} diff --git a/printf/src/Linux/ft_printf_proc_x.c b/printf/src/Linux/ft_printf_proc_x.c new file mode 100644 index 0000000..05d096a --- /dev/null +++ b/printf/src/Linux/ft_printf_proc_x.c @@ -0,0 +1,93 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_x.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (r > 0) + strct->temp = ft_itoh(r); + if (r == 0) + strct->temp = "0"; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_strlen(strct->temp)); + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; + if (strct->conv == 1 && r > 0) + strct->widt = strct->widt - 2; +} + +static void ft_widthprecision(t_printf *strct, unsigned long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->conv == 1 && strct->zero > 0 && r > 0) + { + ft_putandcount(strct, '0', 0); + ft_putandcount(strct, strct->type, 0); + } + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (strct->conv == 1 && strct->zero == 0 && r > 0) + { + ft_putandcount(strct, '0', 0); + ft_putandcount(strct, strct->type, 0); + } +} + +static void ft_valueleft(t_printf *strct) +{ + if (ft_strncmp(strct->temp, "0", 2)) + { + if (strct->type == 'X') + strct->temp = ft_strupp(strct->temp); + ft_putstr(strct->temp); + strct->n = strct->n + ft_strlen(strct->temp); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_x(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct); +} diff --git a/printf/src/Mac/ft_printf_proc_a.c b/printf/src/Mac/ft_printf_proc_a.c new file mode 100644 index 0000000..932527f --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_a.c @@ -0,0 +1,105 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_a.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long double r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0) + ft_putandcount(strct, ' ', 1); + if (strct->p == 1 && strct->prec > 0) + strct->widt = strct->widt - (strct->prec + 1 + ft_intlen(r)); + else if (strct->prec == 0 && strct->p > 1) + strct->widt = strct->widt - ft_intlen(r); + else + strct->widt = strct->widt - (7 + ft_intlen(r)); + if (strct->plus == 1 && r >= 0) + strct->widt--; + if (strct->p > 0) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, long double r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long double r) +{ + int cap; + + cap = 0; + if (r < 0) + r = r * -1; + if (strct->type == 'A') + { + cap++; + ft_putstr("0X"); + } + else + ft_putstr("0x"); + if (strct->p > 0) + { + ft_putzscih(r, strct->prec, cap); + strct->n = strct->n + strct->prec + 8; + } + else + { + ft_putzscih(r, 20, cap); + strct->n = strct->n + 13; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_a(t_printf *strct, long double r) +{ + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); + } +} diff --git a/printf/src/Mac/ft_printf_proc_b.c b/printf/src/Mac/ft_printf_proc_b.c new file mode 100644 index 0000000..ffe8961 --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_b.c @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_b.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (r > 0) + strct->temp = ft_itoba(r, 0); + if (r == 0) + strct->temp = "0"; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_strlen(strct->temp)); + if (strct->p > 0) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (strct->plus > 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct) +{ + if (ft_strncmp(strct->temp, "0", 2)) + { + ft_putstr(strct->temp); + strct->n = strct->n + ft_strlen(strct->temp); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_b(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct); + ft_valueleft(strct); +} diff --git a/printf/src/Mac/ft_printf_proc_c.c b/printf/src/Mac/ft_printf_proc_c.c new file mode 100644 index 0000000..e5e60d2 --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_c.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_c.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; +} + +static void ft_preparation(t_printf *strct, char r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (r || strct->p != 3 || r == 0) + strct->widt--; +} + +static void ft_widthvalue(t_printf *strct, char r) +{ + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, ' ', 1); + ft_putchar(r); + strct->n++; + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_c(t_printf *strct, char r) +{ + ft_preparation(strct, r); + ft_widthvalue(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_d.c b/printf/src/Mac/ft_printf_proc_d.c new file mode 100644 index 0000000..6249b93 --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_d.c @@ -0,0 +1,99 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_d.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long long r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec > 0 && r < 0) + strct->prec++; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_intlen(r); + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0 && strct->plus == 0) + ft_putandcount(strct, ' ', 1); + strct->widt = strct->widt - (strct->prec + ft_intlen(r)); + if (strct->plus == 1 && r >= 0) + strct->widt--; + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero > 0) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long long r) +{ + if (r != 0) + { + if (r < -9223372036854775807) + { + ft_putstr("9223372036854775808"); + strct->n--; + } + else + { + if (r < 0) + r = r * -1; + ft_putlong(r); + } + strct->n = strct->n + ft_intlen(r); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_d(t_printf *strct, long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_e.c b/printf/src/Mac/ft_printf_proc_e.c new file mode 100644 index 0000000..447be8c --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_e.c @@ -0,0 +1,101 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_e.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long double r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0) + ft_putandcount(strct, ' ', 1); + if (strct->p == 1 && strct->prec > 0) + strct->widt = strct->widt - (strct->prec + 1 + ft_intlen(r)); + else if (strct->prec == 0 && strct->p > 1) + strct->widt = strct->widt - ft_intlen(r); + else + strct->widt = strct->widt - (7 + ft_intlen(r)); + if (strct->plus == 1 && r >= 0) + strct->widt--; + if (strct->p > 0) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, long double r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 0); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long double r) +{ + int cap; + + if (r < 0) + r = r * -1; + if (strct->type == 'E') + cap = 1; + else + cap = 0; + if (strct->p > 0) + { + ft_putzsci(r, strct->prec, cap); + strct->n = strct->n + strct->prec + 6; + } + else + { + ft_putzsci(r, 6, cap); + strct->n = strct->n + 11; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_e(t_printf *strct, long double r) +{ + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); + } +} diff --git a/printf/src/Mac/ft_printf_proc_f.c b/printf/src/Mac/ft_printf_proc_f.c new file mode 100644 index 0000000..fdf5bea --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_f.c @@ -0,0 +1,98 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_f.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:36 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, long double r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->prec = 0; + if (strct->spac == 1 && r >= 0) + ft_putandcount(strct, ' ', 1); + if (strct->p == 1 && strct->prec > 0) + strct->widt = strct->widt - (strct->prec + 1 + ft_intlen(r)); + else if (strct->prec == 0 && strct->p > 1) + strct->widt = strct->widt - ft_intlen(r); + else + strct->widt = strct->widt - (7 + ft_intlen(r)); + if (strct->plus == 1 && r >= 0 && strct->left == 0) + strct->widt--; +} + +static void ft_widthprecision(t_printf *strct, long double r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero == 0) + ft_putandcount(strct, ' ', 1); + if (strct->plus > 0 && r >= 0 && strct->zero > 0) + ft_putandcount(strct, '+', 1); + if (strct->zero > 0 && r < 0) + ft_putandcount(strct, '-', 0); + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, '0', 1); + if (r < 0 && strct->zero == 0) + ft_putandcount(strct, '-', 0); + if (strct->plus > 0 && r >= 0 && strct->zero == 0) + ft_putandcount(strct, '+', 1); +} + +static void ft_valueleft(t_printf *strct, long double r) +{ + if (r < 0) + r = r * -1; + if (strct->p == 1 && strct->prec > 0) + { + ft_putzflo(r, strct->prec); + strct->n = strct->n + ft_intlen(r) + strct->prec + 1; + } + else if (strct->p == 2 || strct->p == 3) + { + ft_putzflo(r, 0); + strct->n = strct->n + ft_intlen(r); + } + else + { + ft_putzflo(r, 6); + strct->n = strct->n + ft_intlen(r) + 6; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_f(t_printf *strct, long double r) +{ + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); + } +} diff --git a/printf/src/Mac/ft_printf_proc_g.c b/printf/src/Mac/ft_printf_proc_g.c new file mode 100644 index 0000000..24881bd --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_g.c @@ -0,0 +1,87 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_g.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:37 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_withprecision(t_printf *strct, long double r, int lenght) +{ + if (strct->prec == lenght) + { + strct->prec = lenght; + ft_printf_proc_d(strct, r); + } + else if (lenght < strct->prec) + { + strct->prec = strct->prec - lenght; + ft_printf_proc_f(strct, r); + } + else if (lenght > strct->prec) + { + strct->prec = strct->prec - 1; + ft_printf_proc_e(strct, r); + } + else if (lenght > 6) + { + strct->prec = strct->prec + 5 - lenght; + ft_printf_proc_e(strct, r); + } + else + { + strct->prec = strct->prec + 5 - lenght; + ft_printf_proc_f(strct, r); + } +} + +static void ft_noprecision(t_printf *strct, long double r, int lenght) +{ + if (lenght > 6) + { + strct->p = 1; + strct->prec = 5; + ft_printf_proc_e(strct, r); + } + else + { + strct->prec = 6 - lenght; + strct->p = 1; + if (strct->prec <= 0) + strct->p = 2; + ft_printf_proc_f(strct, r); + } +} + +void ft_printf_proc_g(t_printf *strct, long double r) +{ + int lenght; + + if (r != r) + ft_printf_proc_inf(strct, "nan", 1); + else if (r > 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 1); + else if (r < 0 && r / r != r / r) + ft_printf_proc_inf(strct, "inf", 0); + else + { + lenght = ft_intlen(r); + if (r < 0) + lenght--; + if (r == 0.0) + { + strct->prec = 1; + ft_printf_proc_d(strct, 0); + } + else if (strct->p > 0) + ft_withprecision(strct, r, lenght); + else + ft_noprecision(strct, r, lenght); + } +} diff --git a/printf/src/Mac/ft_printf_proc_inf.c b/printf/src/Mac/ft_printf_proc_inf.c new file mode 100644 index 0000000..d20f259 --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_inf.c @@ -0,0 +1,90 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_inf.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:37 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, char *r, int sign) +{ + if (strct->prec < 0) + strct->p = 4; + if (strct->prec < 0) + strct->prec = 0; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->spac == 1 && r >= 0 && strct->plus == 0) + ft_putandcount(strct, ' ', 1); + if (strct->plus == 1 && sign == 1) + strct->widt--; + if (strct->plus == 5 && strct->p > 0 && strct->prec < 6) + strct->widt = strct->widt; + else if (strct->prec > 0 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt - strct->prec; + else if ((strct->p > 0) && strct->p != 4 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt; + else + strct->widt = strct->widt - ft_strlen(r); +} + +static void ft_widthprecision(t_printf *strct, int sign) +{ + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, ' ', 1); + if (sign == 1 && strct->plus == 1) + ft_putandcount(strct, '+', 0); +} + +static void ft_valueleft(t_printf *strct, char *r) +{ + int i; + + i = 0; + if (strct->p > 0) + { + if (strct->prec < 6) + { + strct->prec = 0; + strct->p = 2; + } + } + if (strct->prec == 0 && strct->p != 2 && strct->p != 3) + { + ft_putstr(r); + strct->n = strct->n + ft_strlen(r); + } + while (strct->prec > i && r[i]) + { + ft_putchar(r[i]); + strct->n++; + i++; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_inf(t_printf *strct, char *r, int sign) +{ + ft_preparation(strct, r, sign); + ft_widthprecision(strct, sign); + ft_valueleft(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_o.c b/printf/src/Mac/ft_printf_proc_o.c new file mode 100644 index 0000000..054c91c --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_o.c @@ -0,0 +1,83 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_o.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:37 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (r > 0) + strct->temp = ft_itooa(r); + if (r == 0) + strct->temp = "0"; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_strlen(strct->temp)); + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct, unsigned long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->conv == 1 && strct->zero > 0 && strct->p == 0 && r > 0) + ft_putandcount(strct, '0', 1); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (strct->conv == 1 && strct->zero == 0 && r > 0) + ft_putandcount(strct, '0', 1); +} + +static void ft_valueleft(t_printf *strct, unsigned long long r) +{ + if (r != 0) + { + ft_putstr(ft_itooa(r)); + strct->n = strct->n + ft_strlen(ft_itooa(r)); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_o(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_p.c b/printf/src/Mac/ft_printf_proc_p.c new file mode 100644 index 0000000..42f246c --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_p.c @@ -0,0 +1,88 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_p.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:37 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + strct->temp = ft_itohx(r); + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (r == 0) + strct->prec--; + else + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + if (strct->p > 0) + strct->zero = 1; + if (r == 0) + strct->widt = strct->widt - (strct->prec + 3); + else + strct->widt = strct->widt - (strct->prec + 2 + ft_strlen(strct->temp)); +} + +static void ft_widthprecision(t_printf *strct, unsigned long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (r == 0 && strct->zero > 0) + { + ft_putstr("0x0"); + strct->n++; + } + else if (r > 0 && strct->zero > 0) + ft_putstr("0x"); + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (r == 0 && strct->zero == 0) + { + ft_putstr("0x0"); + strct->n++; + } + else if (r > 0 && strct->zero == 0) + ft_putstr("0x"); +} + +static void ft_valueleft(t_printf *strct, unsigned long long r) +{ + if (r > 0) + { + ft_putstr(strct->temp); + strct->n = strct->n + ft_strlen(strct->temp) + 2; + } + else + strct->n = strct->n + ft_strlen(strct->temp) + 2; + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_p(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_prec.c b/printf/src/Mac/ft_printf_proc_prec.c new file mode 100644 index 0000000..ed73205 --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_prec.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_prec.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:37 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; +} + +static void ft_preparation(t_printf *strct, char r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (r || strct->p != 3 || r == 0) + strct->widt--; +} + +static void ft_widthvalue(t_printf *strct, char r) +{ + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, ' ', 1); + ft_putchar(r); + strct->n++; + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_prec(t_printf *strct, char r) +{ + ft_preparation(strct, r); + ft_widthvalue(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_s.c b/printf/src/Mac/ft_printf_proc_s.c new file mode 100644 index 0000000..833947a --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_s.c @@ -0,0 +1,76 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_s.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:37 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, char *r) +{ + if (strct->prec < 0) + strct->p = 4; + if (strct->prec < 0) + strct->prec = 0; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec > 0 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt - strct->prec; + else if ((strct->p > 0) && strct->p != 4 && strct->prec < (int)ft_strlen(r)) + strct->widt = strct->widt; + else + strct->widt = strct->widt - ft_strlen(r); +} + +static void ft_widthprecision(t_printf *strct) +{ + while (strct->widt > 0 && strct->left == 0) + ft_putandcount(strct, ' ', 1); +} + +static void ft_valueleft(t_printf *strct, char *r) +{ + int i; + + i = 0; + if (strct->prec == 0 && strct->p != 2 && strct->p != 3) + { + ft_putstr(r); + strct->n = strct->n + ft_strlen(r); + } + while (strct->prec > i && r[i]) + { + ft_putchar(r[i]); + strct->n++; + i++; + } + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_s(t_printf *strct, char *r) +{ + if (!r) + r = "(null)"; + ft_preparation(strct, r); + ft_widthprecision(strct); + ft_valueleft(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_u.c b/printf/src/Mac/ft_printf_proc_u.c new file mode 100644 index 0000000..de26321 --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_u.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_u.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:37 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_luilen(r); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_luilen(r)); + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; +} + +static void ft_widthprecision(t_printf *strct) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + while (strct->widt > 0 && strct->left == 0 && strct->zero > 0) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); +} + +static void ft_valueleft(t_printf *strct, unsigned long long r) +{ + if (r != 0) + { + ft_putull(r); + strct->n = strct->n + ft_luilen(r); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_u(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct); + ft_valueleft(strct, r); +} diff --git a/printf/src/Mac/ft_printf_proc_x.c b/printf/src/Mac/ft_printf_proc_x.c new file mode 100644 index 0000000..9aae1ab --- /dev/null +++ b/printf/src/Mac/ft_printf_proc_x.c @@ -0,0 +1,93 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_proc_x.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/06 12:26:37 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:21:38 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../ft_printf.h" + +static void ft_putandcount(t_printf *strct, char c, int w) +{ + ft_putchar(c); + strct->n++; + if (w == 1) + strct->widt--; + else if (w == 2) + strct->prec--; +} + +static void ft_preparation(t_printf *strct, unsigned long long r) +{ + if (r > 0) + strct->temp = ft_itoh(r); + if (r == 0) + strct->temp = "0"; + if (strct->widt < 0) + strct->left = 1; + if (strct->widt < 0 && strct->left == 1) + strct->widt = strct->widt * -1; + if (strct->prec < 0) + strct->leng = 33; + strct->prec = strct->prec - ft_strlen(strct->temp); + if (strct->prec < 0) + strct->prec = 0; + strct->widt = strct->widt - (strct->prec + ft_strlen(strct->temp)); + if (strct->p > 0 && strct->zero == 0) + strct->zero = 1; + else if (strct->p > 0 && strct->zero == 2 && strct->leng == 46) + strct->zero = 1; + if (strct->conv == 1 && r > 0) + strct->widt = strct->widt - 2; +} + +static void ft_widthprecision(t_printf *strct, unsigned long long r) +{ + while (strct->widt > 0 && strct->left == 0 && strct->zero < 2) + ft_putandcount(strct, ' ', 1); + if (strct->conv == 1 && strct->zero > 0 && r > 0) + { + ft_putandcount(strct, '0', 0); + ft_putandcount(strct, strct->type, 0); + } + while (strct->widt > 0 && strct->left == 0 && strct->zero == 2) + ft_putandcount(strct, '0', 1); + while (strct->prec > 0) + ft_putandcount(strct, '0', 2); + if (strct->conv == 1 && strct->zero == 0 && r > 0) + { + ft_putandcount(strct, '0', 0); + ft_putandcount(strct, strct->type, 0); + } +} + +static void ft_valueleft(t_printf *strct) +{ + if (ft_strncmp(strct->temp, "0", 2)) + { + if (strct->type == 'X') + strct->temp = ft_strupp(strct->temp); + ft_putstr(strct->temp); + strct->n = strct->n + ft_strlen(strct->temp); + } + else if ((strct->p > 1 && strct->w != 1)) + strct->n = strct->n; + else if (strct->p < 2) + ft_putandcount(strct, '0', 0); + else + ft_putandcount(strct, ' ', 0); + while (strct->widt > 0) + ft_putandcount(strct, ' ', 1); +} + +void ft_printf_proc_x(t_printf *strct, unsigned long long r) +{ + ft_preparation(strct, r); + ft_widthprecision(strct, r); + ft_valueleft(strct); +} diff --git a/printf/src/ft_printf.c b/printf/src/ft_printf.c new file mode 100644 index 0000000..6fa8a7b --- /dev/null +++ b/printf/src/ft_printf.c @@ -0,0 +1,104 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker djonker@student.codam.nl // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2020/12/19 06:09:42 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:22:05 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../ft_printf.h" + +static void ft_setzero(t_printf *strct) +{ + strct->left = 0; + strct->zero = 0; + strct->prec = 0; + strct->widt = 0; + strct->conv = '.'; + strct->leng = '.'; + strct->spac = 0; + strct->plus = 0; + strct->p = 0; + strct->w = 0; +} + +static int ft_processtype2(t_printf *strct, va_list v) +{ + if (strct->type == 'd' || strct->type == 'i') + ft_printf_proc_d(strct, va_arg(v, int)); + else if (strct->type == 'u') + ft_printf_proc_u(strct, va_arg(v, unsigned int)); + else if (strct->type == 'x' || strct->type == 'X') + ft_printf_proc_x(strct, va_arg(v, unsigned int)); + else if (strct->type == 'f' || strct->type == 'F') + ft_printf_proc_f(strct, va_arg(v, double)); + else if (strct->type == 'e' || strct->type == 'E') + ft_printf_proc_e(strct, va_arg(v, double)); + else if (strct->type == 'g' || strct->type == 'G') + ft_printf_proc_g(strct, va_arg(v, double)); + else if (strct->type == 'a' || strct->type == 'A') + ft_printf_proc_a(strct, va_arg(v, double)); + else if (strct->type == 'o') + ft_printf_proc_o(strct, va_arg(v, unsigned int)); + else if (strct->type == 'b') + ft_printf_proc_b(strct, va_arg(v, unsigned long long)); + return (0); +} + +static int ft_processtype(t_printf *strct, va_list v) +{ + int *n; + + if (strct->type == 'S' || strct->type == 'C') + strct->leng = 'l'; + if (strct->leng != '.') + ft_processlength(strct, v); + else if (strct->type == 'c') + ft_printf_proc_c(strct, va_arg(v, int)); + else if (strct->type == 's') + ft_printf_proc_s(strct, va_arg(v, char *)); + else if (strct->type == 'p') + ft_printf_proc_p(strct, va_arg(v, unsigned long long)); + else if (strct->type == '%') + ft_printf_proc_prec(strct, '%'); + else if (strct->type == 'n') + { + n = (int *)va_arg(v, int *); + *n = strct->n; + } + else + ft_processtype2(strct, v); + return (0); +} + +int ft_printf(const char *format, ...) +{ + va_list v; + t_printf strct[1]; + + strct->form = (char *)format; + strct->n = 0; + va_start(v, format); + while (*strct->form) + { + ft_setzero(strct); + while (*strct->form != '%' && *strct->form) + { + ft_putchar(*strct->form); + strct->n++; + strct->form++; + } + if (!*strct->form) + break ; + ft_processflag(strct, v); + strct->type = *strct->form; + ft_processtype(strct, v); + strct->form++; + } + va_end(v); + return (strct->n); +} diff --git a/printf/src/ft_printf_flags.c b/printf/src/ft_printf_flags.c new file mode 100644 index 0000000..2df563b --- /dev/null +++ b/printf/src/ft_printf_flags.c @@ -0,0 +1,112 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_flags.c :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/11 19:30:29 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/07 01:22:16 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../ft_printf.h" + +static int ft_getnumber(t_printf *strct) +{ + char r[12]; + int i; + + i = 0; + while (ft_isdigit(*strct->form)) + { + r[i] = *strct->form; + strct->form++; + i++; + } + r[i] = '\0'; + if (*r) + return (ft_atoi(r)); + return (0); +} + +static void ft_precision(t_printf *strct, va_list v) +{ + strct->form++; + strct->p = 1; + if (*strct->form == '*') + { + strct->prec = va_arg(v, int); + if (strct->prec == 0) + strct->p = 3; + strct->form++; + } + else if (ft_isdigit(*strct->form)) + { + strct->prec = ft_getnumber(strct); + if (strct->prec == 0) + strct->p = 3; + } + else + strct->p = 2; +} + +static void ft_fieldwidth(t_printf *strct, va_list v) +{ + strct->w = 1; + if (*strct->form == '*') + { + strct->widt = va_arg(v, int); + if (strct->widt == 0) + strct->w = 3; + strct->form++; + } + else + { + strct->widt = ft_getnumber(strct); + if (strct->widt == 0) + strct->w = 3; + } +} + +static void ft_lengthspec(t_printf *strct) +{ + if (*strct->form == 'h' && strct->form[1] == 'h') + { + strct->leng = 'H'; + strct->form++; + } + else if (*strct->form == 'l' && strct->form[1] == 'l') + { + strct->leng = 'q'; + strct->form++; + } + else + strct->leng = *strct->form; +} + +void ft_processflag(t_printf *strct, va_list v) +{ + while (strct->form[1]) + { + strct->form++; + if (*strct->form == '+') + strct->plus = 1; + if ((*strct->form > '0' && *strct->form <= '9') || *strct->form == '*') + ft_fieldwidth(strct, v); + if (*strct->form == '.') + ft_precision(strct, v); + if (*strct->form == '0') + strct->zero = 2; + if (*strct->form == '-') + strct->left = 2; + if (*strct->form == '#') + strct->conv = 1; + if (*strct->form == ' ') + strct->spac = 1; + if (ft_chrstr(*strct->form, "lhLqtjz") == 1) + ft_lengthspec(strct); + if (ft_chrstr(*strct->form, "cspdiuxXnfgeoGFEaACSb%") == 1) + break ; + } +} diff --git a/printf/src/ft_printf_length.c b/printf/src/ft_printf_length.c new file mode 100644 index 0000000..fd5299a --- /dev/null +++ b/printf/src/ft_printf_length.c @@ -0,0 +1,114 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* ft_printf_length.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2021/06/16 23:07:02 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/20 13:20:38 by houtworm \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../ft_printf.h" + +static void ft_checkdi(t_printf *strct, va_list v) +{ + int t; + + if (ft_chrstr(strct->type, "di") == 1) + { + if (ft_chrstr(strct->leng, "lqjtz")) + ft_printf_proc_d(strct, va_arg(v, long long)); + if (strct->leng == 'h') + { + t = (short int)va_arg(v, int); + ft_printf_proc_d(strct, t); + } + if (strct->leng == 'H') + { + t = (char)va_arg(v, int); + ft_printf_proc_d(strct, t); + } + } +} + +static void ft_checku(t_printf *strct, va_list v) +{ + int t; + + if (ft_chrstr(strct->type, "u") == 1) + { + if (ft_chrstr(strct->leng, "lqjtz")) + ft_printf_proc_u(strct, va_arg(v, unsigned long long)); + if (strct->leng == 'h') + { + t = (unsigned short int)va_arg(v, int); + ft_printf_proc_u(strct, t); + } + if (strct->leng == 'H') + { + t = (unsigned char)va_arg(v, int); + ft_printf_proc_u(strct, t); + } + } +} + +static void ft_checko(t_printf *strct, va_list v) +{ + int t; + + if (strct->type == 'o') + { + if (ft_chrstr(strct->leng, "lqjtz")) + ft_printf_proc_o(strct, va_arg(v, unsigned long long)); + if (strct->leng == 'h') + { + t = (unsigned short int)va_arg(v, int); + ft_printf_proc_o(strct, t); + } + if (strct->leng == 'H') + { + t = (unsigned char)va_arg(v, int); + ft_printf_proc_o(strct, t); + } + } +} + +static void ft_checkxx(t_printf *strct, va_list v) +{ + int t; + + if (ft_chrstr(strct->type, "xX") == 1) + { + if (ft_chrstr(strct->leng, "lqjtz")) + ft_printf_proc_x(strct, va_arg(v, unsigned long long)); + if (strct->leng == 'h') + { + t = (unsigned short int)va_arg(v, int); + ft_printf_proc_x(strct, t); + } + if (strct->leng == 'H') + { + t = (unsigned char)va_arg(v, int); + ft_printf_proc_x(strct, t); + } + } +} + +void ft_processlength(t_printf *strct, va_list v) +{ + ft_checkdi(strct, v); + ft_checku(strct, v); + ft_checko(strct, v); + ft_checkxx(strct, v); + if (ft_chrstr(strct->type, "fF") && strct->leng == 'L') + ft_printf_proc_f(strct, va_arg(v, long double)); + if (ft_chrstr(strct->type, "eE") && strct->leng == 'L') + ft_printf_proc_f(strct, va_arg(v, long double)); + if (ft_chrstr(strct->type, "gG") && strct->leng == 'L') + ft_printf_proc_f(strct, va_arg(v, long double)); + if (ft_chrstr(strct->type, "aA") && strct->leng == 'L') + ft_printf_proc_f(strct, va_arg(v, long double)); + strct->leng = '.'; +} diff --git a/push_swap.h b/push_swap.h new file mode 100644 index 0000000..6537e5d --- /dev/null +++ b/push_swap.h @@ -0,0 +1,84 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* push_swap.h :+: :+: :+: */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 14:46:11 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2023/02/08 22:15:16 by houtworm ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef PUSH_SWAP_H +# define PUSH_SWAP_H + +# include +# include "libft/libft.h" +# include "printf/ft_printf.h" +# include "getnextline/get_next_line.h" + +typedef struct s_stack +{ + long data; + long id; + struct s_stack *n; + struct s_stack *p; +} t_stack; + +typedef struct s_varlist +{ + struct s_stack *a; + struct s_stack *b; + long high; + long low; + long moves; + long nbrs; + int direction; + long idcounter; + long oldlow; + long hdiv; + long ldiv; + long odiv; +} t_varlist; + +int initstack(t_varlist *vl, long value); +int popb(t_varlist *vl, int print); +int popa(t_varlist *vl, int print); +int printlist(t_varlist *vl, char c); +int charactercheck(char **stack); +int finddouble(char **stack); +int sa(t_varlist *vl, int print); +int sb(t_varlist *vl, int print); +int ss(t_varlist *vl, int print); +int pa(t_varlist *vl, int print); +int pb(t_varlist *vl, int print); +int ra(t_varlist *vl, int print); +int rb(t_varlist *vl, int print); +int rr(t_varlist *vl, int print); +int rra(t_varlist *vl, int print); +int rrb(t_varlist *vl, int print); +int rrr(t_varlist *vl, int print); +int idall(t_varlist *vl); +void threenumbers(t_varlist *vl); +int findhighlow(t_varlist *vl, char stack); +int highorlow(t_varlist *vl); +int upordownbetween(t_varlist *vl); +void matchatob(t_varlist *vl); +int upordownfinal(t_varlist *vl); +int lowontop(t_varlist *vl); +void fourtothirty(int i, t_varlist *vl); +int findfastroutehigh(t_varlist *vl, char stack); +int findfastroutelow(t_varlist *vl, char stack); +void sorttostacklow(t_varlist *vl); +void sorttostackhigh(t_varlist *vl); +void dividetostack(t_varlist *vl); +void morethanthirty(t_varlist *vl, int division); +void thirtyorless(int argc, t_varlist *vl); +t_varlist *create_struct(t_varlist *vl); +int printall(t_varlist *vl); +int freeall(t_varlist *vl); +int errorreturn(t_varlist *vl, int type); +long long ft_ps_atol(char *str); + +#endif diff --git a/src/checkandinit.c b/src/checkandinit.c new file mode 100644 index 0000000..1d14e5f --- /dev/null +++ b/src/checkandinit.c @@ -0,0 +1,135 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* checkandinit.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:26:23 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 07:24:34 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int charactercheck(char **stack) +{ + int i; + int j; + + i = 1; + j = 0; + while (stack[i]) + { + if (stack[i][0] == '-') + { + if (stack[i][1] < '0' || stack[i][1] > '9') + return (1); + else + j++; + } + while (stack[i][j]) + { + if (stack[i][j] < '0' || stack[i][j] > '9' || j > 10) + return (1); + j++; + } + i++; + j = 0; + } + return (0); +} + +int finddouble(char **stack) +{ + int i; + int j; + + i = 1; + while (stack[i]) + { + j = i; + while (stack[j]) + { + if (j != i) + if (ft_atoi(stack[i]) == ft_atoi(stack[j])) + return (1); + j++; + } + i++; + } + return (0); +} + +int initstack(t_varlist *vl, long value) +{ + t_stack *cstack; + t_stack *last; + + if (value == 9999999999) + errorreturn(vl, 1); + cstack = ft_calloc(sizeof(t_stack), 1); + if (cstack == NULL) + exit (0); + vl->nbrs++; + cstack->data = value; + if (vl->a == NULL) + { + cstack->n = cstack; + cstack->p = cstack; + vl->a = cstack; + } + else + { + last = vl->a->p; + cstack->n = vl->a; + vl->a->p = cstack; + cstack->p = last; + last->n = cstack; + } + return (0); +} + +int idall(t_varlist *vl) +{ + t_stack *cstack; + + cstack = vl->a; + vl->low = 2147483648; + if (cstack->data < vl->low && cstack->data > vl->oldlow) + vl->low = cstack->data; + while (cstack->n != vl->a) + { + if (cstack->n->data < vl->low && cstack->n->data > vl->oldlow) + vl->low = cstack->n->data; + cstack = cstack->n; + } + vl->oldlow = vl->low; + while (vl->low != cstack->data) + { + cstack = cstack->n; + } + cstack->id = vl->idcounter; + vl->idcounter++; + return (0); +} + +t_varlist *create_struct(t_varlist *vl) +{ + vl = (t_varlist *)ft_calloc(sizeof(t_varlist), 1); + if (vl == NULL) + exit(1); + vl->a = NULL; + vl->b = NULL; + vl->high = 0; + vl->low = 0; + vl->moves = 0; + vl->nbrs = 0; + vl->direction = 0; + vl->idcounter = 1; + vl->oldlow = -2147483649; + vl->hdiv = 0; + vl->ldiv = 0; + vl->odiv = 0; + return (vl); +} diff --git a/src/checker.c b/src/checker.c new file mode 100644 index 0000000..6949383 --- /dev/null +++ b/src/checker.c @@ -0,0 +1,113 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* checker.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:54:47 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/25 09:08:52 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int checkmove(char *line, t_varlist *vl) +{ + if (ft_strncmp(line, "pa\0", 3) == 0 && vl->b) + pa(vl, 0); + else if (ft_strncmp(line, "pb\0", 3) == 0 && vl->a) + pb(vl, 0); + else if (ft_strncmp(line, "sa\0", 3) == 0) + sa(vl, 0); + else if (ft_strncmp(line, "sb\0", 3) == 0) + sb(vl, 0); + else if (ft_strncmp(line, "ss\0", 3) == 0) + ss(vl, 0); + else if (ft_strncmp(line, "ra\0", 3) == 0) + ra(vl, 0); + else if (ft_strncmp(line, "rb\0", 3) == 0) + rb(vl, 0); + else if (ft_strncmp(line, "rr\0", 3) == 0) + rr(vl, 0); + else if (ft_strncmp(line, "rra\0", 4) == 0) + rra(vl, 0); + else if (ft_strncmp(line, "rrb\0", 4) == 0) + rrb(vl, 0); + else if (ft_strncmp(line, "rrr\0", 4) == 0) + rrr(vl, 0); + else + return (1); + return (0); +} + +int processstdin(t_varlist *vl) +{ + int ret; + char *line; + + line = NULL; + ret = get_next_line(0, &line); + while (ret) + { + if (checkmove(line, vl) == 1) + { + free (line); + errorreturn(vl, 1); + } + free (line); + ret = get_next_line(0, &line); + ft_putstr_fd(line, 0); + } + free (line); + vl->nbrs++; + return (0); +} + +int checkstacks(t_varlist *vl) +{ + t_stack *cstack; + + if (vl->b) + { + if (vl->b->id > 0 && vl->b->id <= vl->nbrs) + return (1); + } + cstack = vl->a; + vl->idcounter = 1; + while (cstack->n != vl->a) + { + if (cstack->id != vl->idcounter) + return (1); + cstack = cstack->n; + vl->idcounter++; + } + if (cstack->id != vl->idcounter) + return (1); + return (0); +} + +int main(int argc, char **argv) +{ + t_varlist *vl; + + if (argc == 1) + return (0); + vl = NULL; + vl = create_struct(vl); + if (vl == NULL) + exit (1); + if (charactercheck(argv) == 1 || finddouble(argv) == 1) + errorreturn(vl, 1); + while (vl->nbrs < argc - 1) + initstack(vl, ft_ps_atol(argv[vl->nbrs + 1])); + while (vl->idcounter <= vl->nbrs) + idall(vl); + if (processstdin(vl)) + errorreturn(vl, 1); + if (checkstacks(vl)) + errorreturn(vl, 2); + ft_printf("OK\n"); + freeall(vl); + return (0); +} diff --git a/src/faster.c b/src/faster.c new file mode 100644 index 0000000..d83a72f --- /dev/null +++ b/src/faster.c @@ -0,0 +1,130 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* faster.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:26:33 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 02:21:57 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int findhighlow(t_varlist *vl, char stack) +{ + t_stack *cstack; + t_stack *sstack; + + if (stack == 'a') + { + cstack = vl->a; + sstack = vl->a; + } + else + { + cstack = vl->b; + sstack = vl->b; + } + vl->high = cstack->id; + vl->low = cstack->id; + while (cstack->n != sstack) + { + if (cstack->n->id > vl->high) + vl->high = cstack->n->id; + if (cstack->n->id < vl->low) + vl->low = cstack->n->id; + cstack = cstack->n; + } + return (0); +} + +int highorlow(t_varlist *vl) +{ + if (vl->b->id < vl->low) + { + while (vl->a->id != vl->low) + ra(vl, 1); + pa(vl, 1); + return (1); + } + if (vl->b->id > vl->high) + { + while (vl->a->p->id != vl->high) + ra(vl, 1); + pa(vl, 1); + return (1); + } + return (0); +} + +int upordownbetween(t_varlist *vl) +{ + t_stack *fstack; + t_stack *rstack; + + fstack = vl->a; + rstack = vl->a; + vl->direction = 3; + while (vl->direction == 3) + { + fstack = fstack->n; + if (vl->b->id > fstack->p->id && vl->b->id < fstack->id) + vl->direction = 1; + rstack = rstack->p; + if (vl->b->id > rstack->p->id && vl->b->id < rstack->id) + vl->direction = 2; + } + return (0); +} + +int findfastroutehigh(t_varlist *vl, char stack) +{ + t_stack *fstack; + t_stack *rstack; + t_stack *sstack; + + if (stack == 'a') + sstack = vl->a; + else + sstack = vl->b; + fstack = sstack; + rstack = sstack; + vl->direction = 5; + while (vl->direction == 5) + { + if (vl->high == fstack->id) + vl->direction = 1; + if (vl->high == rstack->id) + vl->direction = 2; + fstack = fstack->n; + rstack = rstack->p; + } + return (0); +} + +int findfastroutelow(t_varlist *vl, char stack) +{ + t_stack *fstack; + t_stack *rstack; + t_stack *sstack; + + if (stack == 'a') + sstack = vl->a; + else + sstack = vl->b; + fstack = sstack; + rstack = sstack; + vl->direction = 5; + while (vl->direction == 5) + { + if (vl->low == fstack->id) + vl->direction = 1; + if (vl->low == rstack->id) + vl->direction = 2; + fstack = fstack->n; + rstack = rstack->p; + } + return (0); +} diff --git a/src/fewnumbers.c b/src/fewnumbers.c new file mode 100644 index 0000000..a0bc084 --- /dev/null +++ b/src/fewnumbers.c @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* fewnumbers.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:26:41 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 02:23:22 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +void threenumbers(t_varlist *vl) +{ + t_stack *cs; + + cs = vl->a; + if (cs->data < cs->p->data && cs->data > cs->n->data) + sa(vl, 1); + else if (cs->n->data < cs->data && cs->n->data > cs->p->data) + sa(vl, 1); + else if (cs->p->data < cs->data && cs->p->data > cs->n->data) + ra(vl, 1); + else if (cs->p->data < cs->n->data && cs->p->data > cs->data) + sa(vl, 1); +} + +void matchatob(t_varlist *vl) +{ + findhighlow(vl, 'a'); + if (highorlow(vl) > 0) + return ; + upordownbetween(vl); + if (vl->b) + if (vl->b->id > vl->a->p->id && vl->b->id < vl->a->id) + pa(vl, 1); + if (vl->direction == 1) + ra(vl, 1); + if (vl->direction == 2) + rra(vl, 1); +} + +void fourtothirty(int i, t_varlist *vl) +{ + while (i > 4) + { + pb(vl, 1); + i--; + } + threenumbers(vl); + while (vl->b) + matchatob(vl); +} + +void thirtyorless(int argc, t_varlist *vl) +{ + t_stack *stacka; + + stacka = vl->a; + if (argc <= 2) + return ; + if (argc == 3) + if (stacka->id > stacka->n->id) + sa(vl, 1); + if (argc == 4) + threenumbers(vl); + if (argc > 4) + fourtothirty(argc, vl); +} diff --git a/src/finale.c b/src/finale.c new file mode 100644 index 0000000..7c51069 --- /dev/null +++ b/src/finale.c @@ -0,0 +1,103 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* finale.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 19:34:19 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 03:54:09 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int upordownfinal(t_varlist *vl) +{ + t_stack *fstack; + t_stack *rstack; + + fstack = vl->a; + rstack = vl->a; + vl->direction = 3; + if (vl->a->id == 1) + vl->direction = 1; + while (vl->direction == 3) + { + fstack = fstack->n; + if (fstack->id == 1) + vl->direction = 1; + rstack = rstack->p; + if (rstack->id == 1) + vl->direction = 2; + } + return (0); +} + +int lowontop(t_varlist *vl) +{ + upordownfinal(vl); + if (vl->direction == 1) + while (1 != vl->a->id) + ra(vl, 1); + if (vl->direction == 2) + while (1 != vl->a->id) + rra(vl, 1); + return (0); +} + +int freestacka(t_varlist *vl) +{ + t_stack *cstack; + t_stack *dstack; + + while (vl->a) + { + cstack = vl->a; + dstack = vl->a; + if (cstack == cstack->n) + vl->a = NULL; + else + { + cstack = vl->a->p; + vl->a = vl->a->n; + cstack->n = vl->a; + vl->a->p = cstack; + } + free (dstack); + } + return (0); +} + +int freestackb(t_varlist *vl) +{ + t_stack *cstack; + t_stack *dstack; + + while (vl->b) + { + cstack = vl->b; + dstack = vl->b; + if (cstack == cstack->n) + vl->b = NULL; + else + { + cstack = vl->b->p; + vl->b = vl->b->n; + cstack->n = vl->b; + vl->b->p = cstack; + } + free (dstack); + } + return (0); +} + +int freeall(t_varlist *vl) +{ + if (vl->a) + freestacka(vl); + if (vl->b) + freestackb(vl); + free (vl); + return (0); +} diff --git a/src/manynumbers.c b/src/manynumbers.c new file mode 100644 index 0000000..97831f0 --- /dev/null +++ b/src/manynumbers.c @@ -0,0 +1,145 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* manynumbers.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:26:49 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/25 09:40:09 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +long long ft_ps_atol(char *str) +{ + unsigned long long r; + int c; + int n; + + r = 0; + c = 0; + n = 1; + while ((str[c] == 32) || (str[c] > 8 && str[c] < 14)) + c++; + if (str[c] == '-' || str[c] == '+') + { + if (str[c] == '-') + n = -1; + c++; + } + while (str[c] >= '0' && str[c] <= '9') + { + r = 10 * r + (str[c] - '0'); + if (r > 2147483647 && n == 1) + return (9999999999); + else if (r > 2147483648 && n == -1) + return (9999999999); + c++; + } + return (n * r); +} + +void dividetostack(t_varlist *vl) +{ + while ((vl->ldiv >= vl->low || vl->hdiv < vl->high) && vl->a != NULL) + { + if (vl->a && vl->a->id <= vl->ldiv) + { + while (vl->a && vl->a->id <= vl->ldiv) + { + vl->low++; + pb(vl, 1); + } + } + else if (vl->a && vl->a->id >= vl->hdiv) + { + while (vl->a && vl->a->id >= vl->hdiv) + { + vl->high--; + pb(vl, 1); + if (vl->a && (vl->a->id >= vl->hdiv || vl->a->id <= vl->ldiv)) + rb(vl, 1); + else if (vl->a && vl->b) + rr(vl, 1); + } + } + else + ra(vl, 1); + } +} + +void sorttostacklow(t_varlist *vl) +{ + findfastroutelow(vl, 'b'); + while (vl->b->id != vl->low && vl->b->id != vl->low - 1) + { + if (vl->direction == 1) + rb(vl, 1); + if (vl->direction == 2) + rrb(vl, 1); + } + if (vl->b->id == vl->low - 1) + { + pa(vl, 1); + sorttostacklow(vl); + if (vl->b && vl->b->id < vl->b->n->id) + ss(vl, 1); + else if (vl->a != vl->a->n) + sa(vl, 1); + } + else + pa(vl, 1); + vl->low--; +} + +void sorttostackhigh(t_varlist *vl) +{ + findhighlow(vl, 'b'); + findfastroutehigh(vl, 'b'); + while (vl->b->id != vl->high && vl->b->id != vl->high - 1) + { + if (vl->direction == 1 || vl->direction == 3) + rb(vl, 1); + else if (vl->direction == 2 || vl->direction == 4) + rrb(vl, 1); + } + if (vl->b->id == vl->high - 1) + { + pa(vl, 1); + sorttostackhigh(vl); + if (vl->b && vl->b->id < vl->b->n->id) + ss(vl, 1); + else if (vl->a != vl->a->n) + sa(vl, 1); + } + else + pa(vl, 1); +} + +void morethanthirty(t_varlist *vl, int division) +{ + vl->odiv = vl->nbrs / division; + vl->hdiv = vl->nbrs; + vl->ldiv = vl->odiv; + while (vl->a) + { + vl->hdiv = vl->hdiv - vl->odiv; + vl->low = vl->ldiv - vl->odiv + 1; + vl->high = vl->hdiv + vl->odiv; + dividetostack(vl); + vl->ldiv = vl->ldiv + vl->odiv; + } + if (vl->nbrs > 500) + { + pa(vl, 1); + vl->low = vl->a->id - 1; + while (vl->low != 0) + sorttostacklow(vl); + } + while (vl->b) + { + sorttostackhigh(vl); + } +} diff --git a/src/printshit.c b/src/printshit.c new file mode 100644 index 0000000..6fce81e --- /dev/null +++ b/src/printshit.c @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* printshit.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:26:55 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/25 09:06:58 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int printlist(t_varlist *vl, char c) +{ + t_stack *cstack; + + if (c == 'a') + { + ft_printf("Index A\t\tStack A\n"); + cstack = vl->a; + } + if (c == 'b') + { + ft_printf("Index B\t\tStack B\n"); + cstack = vl->b; + } + if (cstack) + { + while (cstack->n != vl->a) + { + ft_printf("%ld\t\t%ld\n", cstack->id, cstack->data); + cstack = cstack->n; + } + ft_printf("%ld\t\t%ld\n", cstack->id, cstack->data); + } + return (0); +} + +int printall(t_varlist *vl) +{ + printlist(vl, 'a'); + printlist(vl, 'b'); + ft_printf("Numbers: %ld\n", vl->nbrs); + ft_printf("Moves: %ld\n", vl->moves); + return (0); +} + +int errorreturn(t_varlist *vl, int type) +{ + freeall(vl); + if (type == 1) + { + ft_putstr_fd("Error\n", 2); + exit (1); + } + else if (type == 2) + { + ft_printf("KO\n"); + exit (0); + } + exit (0); +} diff --git a/src/push.c b/src/push.c new file mode 100644 index 0000000..458e6d8 --- /dev/null +++ b/src/push.c @@ -0,0 +1,125 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* push.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:27:04 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 03:42:47 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int popb(t_varlist *vl, int print) +{ + t_stack *cstack; + t_stack *dstack; + + dstack = NULL; + if (print) + ft_printf("pa\n"); + vl->moves++; + if (vl->b) + { + cstack = vl->b; + dstack = vl->b; + if (cstack == cstack->n) + vl->b = NULL; + else + { + cstack = vl->b->p; + vl->b = vl->b->n; + cstack->n = vl->b; + vl->b->p = cstack; + } + } + free (dstack); + return (0); +} + +int popa(t_varlist *vl, int print) +{ + t_stack *cstack; + t_stack *dstack; + + dstack = NULL; + if (print) + ft_printf("pb\n"); + vl->moves++; + if (vl->a) + { + cstack = vl->a; + dstack = vl->a; + if (cstack == cstack->n) + vl->a = NULL; + else + { + cstack = vl->a->p; + vl->a = vl->a->n; + cstack->n = vl->a; + vl->a->p = cstack; + } + } + free (dstack); + return (0); +} + +int pa(t_varlist *vl, int print) +{ + t_stack *stacka; + t_stack *last; + + stacka = ft_calloc(sizeof(t_stack), 1); + if (stacka == NULL) + exit (1); + stacka->data = vl->b->data; + stacka->id = vl->b->id; + if (vl->a == NULL) + { + stacka->n = stacka; + stacka->p = stacka; + } + else + { + last = vl->a->p; + stacka->n = vl->a; + stacka->p = last; + last->n = vl->a->p; + last->n = stacka; + vl->a->p = stacka; + } + vl->a = stacka; + popb(vl, print); + return (0); +} + +int pb(t_varlist *vl, int print) +{ + t_stack *stackb; + t_stack *last; + + stackb = ft_calloc(sizeof(t_stack), 1); + if (stackb == NULL) + exit (1); + stackb->data = vl->a->data; + stackb->id = vl->a->id; + if (vl->b == NULL) + { + stackb->n = stackb; + stackb->p = stackb; + } + else + { + last = vl->b->p; + stackb->n = vl->b; + stackb->p = last; + last->n = vl->b->p; + last->n = stackb; + vl->b->p = stackb; + } + vl->b = stackb; + popa(vl, print); + return (0); +} diff --git a/src/push_swap.c b/src/push_swap.c new file mode 100644 index 0000000..8c16aba --- /dev/null +++ b/src/push_swap.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* push_swap.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:25:25 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/25 09:07:23 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int checkifsorted(t_varlist *vl) +{ + t_stack *cstack; + + cstack = vl->a; + vl->idcounter = 1; + while (cstack->n != vl->a) + { + if (cstack->id != vl->idcounter) + return (0); + cstack = cstack->n; + vl->idcounter++; + } + return (1); +} + +int main(int argc, char *argv[]) +{ + t_varlist *vl; + + if (argc == 1) + return (0); + vl = NULL; + vl = create_struct(vl); + if (vl == NULL) + exit (1); + if (charactercheck(argv) == 1 || finddouble(argv) == 1) + errorreturn(vl, 1); + while (vl->nbrs < argc - 1) + initstack(vl, ft_ps_atol(argv[vl->nbrs + 1])); + while (vl->idcounter <= vl->nbrs) + idall(vl); + if (checkifsorted(vl)) + errorreturn(vl, 3); + if (vl->nbrs <= 30) + thirtyorless(argc, vl); + else if (vl->nbrs <= 300) + morethanthirty(vl, 6); + else + morethanthirty(vl, 17); + lowontop(vl); + freeall(vl); + return (0); +} diff --git a/src/reverserotate.c b/src/reverserotate.c new file mode 100644 index 0000000..01ec4de --- /dev/null +++ b/src/reverserotate.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* reverserotate.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:27:17 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 02:18:26 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int rra(t_varlist *vl, int print) +{ + vl->a = vl->a->p; + if (print) + ft_printf("rra\n"); + vl->moves++; + return (0); +} + +int rrb(t_varlist *vl, int print) +{ + vl->b = vl->b->p; + if (print) + ft_printf("rrb\n"); + vl->moves++; + return (0); +} + +int rrr(t_varlist *vl, int print) +{ + vl->a = vl->a->p; + vl->b = vl->b->p; + if (print) + ft_printf("rrr\n"); + vl->moves++; + return (0); +} diff --git a/src/rotate.c b/src/rotate.c new file mode 100644 index 0000000..dff93bf --- /dev/null +++ b/src/rotate.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* rotate.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:27:24 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 02:17:37 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int ra(t_varlist *vl, int print) +{ + vl->a = vl->a->n; + if (print) + ft_printf("ra\n"); + vl->moves++; + return (0); +} + +int rb(t_varlist *vl, int print) +{ + vl->b = vl->b->n; + if (print) + ft_printf("rb\n"); + vl->moves++; + return (0); +} + +int rr(t_varlist *vl, int print) +{ + vl->a = vl->a->n; + vl->b = vl->b->n; + if (print) + ft_printf("rr\n"); + vl->moves++; + return (0); +} diff --git a/src/swap.c b/src/swap.c new file mode 100644 index 0000000..2db4673 --- /dev/null +++ b/src/swap.c @@ -0,0 +1,68 @@ +/* ************************************************************************** */ +/* */ +/* .--. _ */ +/* swap.c |o_o || | */ +/* |:_/ || |_ _ ___ __ */ +/* By: djonker // \ \ __| | | \ \/ / */ +/* (| | )|_| |_| |> < */ +/* Created: 2022/11/22 16:27:31 by djonker /'\_ _/`\__|\__,_/_/\_\ */ +/* Updated: 2022/11/24 02:16:27 by djonker \___)=(___/ */ +/* */ +/* ************************************************************************** */ + +#include "../push_swap.h" + +int sa(t_varlist *vl, int print) +{ + t_stack *stacka; + + stacka = vl->a; + if (stacka && stacka->n && stacka != stacka->n) + { + ft_swaplong(&stacka->data, &stacka->n->data); + ft_swaplong(&stacka->id, &stacka->n->id); + if (print) + ft_printf("sa\n"); + vl->moves++; + } + return (0); +} + +int sb(t_varlist *vl, int print) +{ + t_stack *stackb; + + stackb = vl->a; + if (stackb && stackb->n && stackb != stackb->n) + { + ft_swaplong(&stackb->data, &stackb->n->data); + ft_swaplong(&stackb->id, &stackb->n->id); + if (print) + ft_printf("sb\n"); + vl->moves++; + } + return (0); +} + +int ss(t_varlist *vl, int print) +{ + t_stack *stacka; + t_stack *stackb; + + stacka = vl->a; + stackb = vl->b; + if (stacka && stacka->n && stacka != stacka->n) + { + if (stackb && stackb->n && stackb != stackb->n) + { + ft_swaplong(&stacka->data, &stacka->n->data); + ft_swaplong(&stacka->id, &stacka->n->id); + ft_swaplong(&stackb->data, &stackb->n->data); + ft_swaplong(&stackb->id, &stackb->n->id); + if (print) + ft_printf("ss\n"); + vl->moves++; + } + } + return (0); +} diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..1950cfb --- /dev/null +++ b/test.sh @@ -0,0 +1,624 @@ +# **************************************************************************** # +# # +# .--. _ # +# test.sh |o_o || | # +# |:_/ || |_ _ ___ __ # +# By: houtworm // \ \ __| | | \ \/ / # +# (| | )|_| |_| |> < # +# Created: 2023/02/20 12:46:17 by houtworm /'\_ _/`\__|\__,_/_/\_\ # +# Updated: 2023/02/21 21:27:50 by djonker \___)=(___/ # +# # +# **************************************************************************** # + +#!/bin/bash + +checkchecker() +{ + ls $1 > /dev/null 2>&1 + if [ $? -ne $2 ] + then + printf "\e[1;31mchecker $OS is missing from $1\e[0;00m\n" + exit 1 + fi +} + +checkfile() +{ + ls $1 2> /dev/null | grep $1 > /dev/null + if [ $? -ne $2 ] + then + printf "\e[1;31mMakefile does not create $1\e[0;00m\n" + rm -rf tests/files + exit 1 + fi +} + +searchobj() +{ + FILES=$(find ./ -name '*.o' | wc -l) + if [ $1 -eq 0 ] + then + if [ $FILES -ne 0 ] + then + printf "\e[1;31mObject files found after clean\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi + fi + if [ $1 -eq 1 ] + then + if [ $FILES -eq 0 ] + then + printf "\e[1;31mObject files not found after make\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi + fi +} + +checkrule() +{ + make $1 > /dev/null 2>&1 + if [ $? -eq 2 ] + then + printf "\e[1;31mMissing rule $1\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi +} + +count() +{ + MOVES=$(./push_swap $6 | wc -l) + if [ $MOVES -gt $5 ] + then + printf "\e[1;31mIt took $MOVES moves which is way too much\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + elif [ $MOVES -gt $4 ] + then + printf "\e[1;33mIt took $MOVES moves which is barely acceptable\e[0;00m\n" + elif [ $MOVES -gt $3 ] + then + printf "\e[1;36mIt took $MOVES moves which is okay... I guess\e[0;00m\n" + elif [ $MOVES -gt $2 ] + then + printf "\e[1;34mIt took $MOVES moves which is still pretty slow\e[0;00m\n" + elif [ $MOVES -gt $1 ] + then + printf "\e[1;35mIt took $MOVES moves which is better than the average\e[0;00m\n" + else + printf "\e[1;32mIt took $MOVES moves which is perfect\e[0;00m\n" + fi +} + +countsilently() +{ + MOVES=$(./push_swap $6 | wc -l) + if [ $MOVES -gt $5 ] + then + COUNT0=$(($COUNT0+1)) + FAULTS=$(($FAULTS+1)) + fi + if [ $MOVES -gt $4 ] + then + COUNT1=$(($COUNT1+1)) + fi + if [ $MOVES -gt $3 ] + then + COUNT2=$(($COUNT2+1)) + fi + if [ $MOVES -gt $2 ] + then + COUNT3=$(($COUNT3+1)) + fi + if [ $MOVES -gt $1 ] + then + COUNT4=$(($COUNT4+1)) + fi +} + +pushswap() +{ + ./push_swap $2 > tests/files/output 2>&1 + if [ $? -eq $1 ] + then + printf "\e[1;32mReturn value OK\e[0;00m\n" + else + printf "\e[1;31mBad Return Value\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi +} + +checker() +{ + ./push_swap $2 | $CHECKER $2 > tests/files/output 2>&1 + if [ $? -eq $1 ] + then + printf "\e[1;32mReturn value OK\e[0;00m\n" + else + printf "\e[1;31mBad Return Value\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi +} + +onlychecker() +{ + $CHECKER $2 > tests/files/output 2>&1 + if [ $? -eq $1 ] + then + printf "\e[1;32mReturn value OK\e[0;00m\n" + else + printf "\e[1;31mBad Return Value\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi +} + +checkersilent() +{ + ./push_swap $2 | $CHECKER $2 > tests/files/output 2>&1 + if [ $? -ne $1 ] + then + printf "\e[1;31mBad Return Value\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi +} + +checkoutput() +{ + diff tests/files/output $1 > /dev/null 2>&1 + if [ $? -eq 0 ] + then + printf "\e[1;32mOutput OK\e[0;00m\n" + else + printf "\e[1;31mBad Output\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi +} + +checkoutputsilent() +{ + diff tests/files/output $1 > /dev/null 2>&1 + if [ $? -ne 0 ] + then + printf "\e[1;31mBad Output\e[0;00m\n" + FAULTS=$(($FAULTS+1)) + fi +} + +checkoutputsupersilent() +{ + diff tests/files/output $1 > /dev/null 2>&1 + if [ $? -ne 0 ] + then + FAULTS=$(($FAULTS+1)) + CHECKF=$(($CHECKF+1)) + fi +} + +printresult() +{ + if [ $COUNT0 -gt 0 ] + then + printf "\e[1;31mYou went over $5 $COUNT0 times which is way too much\e[0;00m\n" + fi + if [ $COUNT1 -gt 0 ] + then + printf "\e[1;33mYou went over $4 $COUNT1 times which is barely acceptable\e[0;00m\n" + fi + if [ $COUNT2 -gt 0 ] + then + printf "\e[1;36mYou went over $3 $COUNT2 times which is okay... I guess\e[0;00m\n" + fi + if [ $COUNT3 -gt 0 ] + then + printf "\e[1;34mYou went over $2 $COUNT3 times which is still pretty slow\e[0;00m\n" + fi + if [ $COUNT4 -gt 0 ] + then + printf "\e[1;35mYou went over $1 $COUNT4 times which is better than the average\e[0;00m\n" + else + printf "\e[1;32mNone of the attempts went over $1 moves which is perfect\e[0;00m\n" + fi + COUNT0=0 + COUNT1=0 + COUNT2=0 + COUNT3=0 + COUNT4=0 +} + +batchtester() +{ + for (( i=1;i<=$2;i++ )) + do + ARG=$(for (( i=1;i<=10000;i++ )) do echo $RANDOM $i; done | sort -k1 | cut -d' ' -f2 | head -$1 | tr '\n' ' ') + checkersilent 0 "$ARG" + checkoutputsilent tests/files/ok + countsilently $3 $4 $5 $6 $7 "$ARG" + done +} + +batchchecker() +{ + for (( i=1;i<=$2;i++ )) + do + ARG=$(for (( i=1;i<=10000;i++ )) do echo $RANDOM $i; done | sort -k1 | cut -d' ' -f2 | head -$1 | tr '\n' ' ') + checkersilent 0 "$ARG" + checkoutputsupersilent tests/files/ok + done +} + +OS=$(uname -s) +if [ $OS == "Linux" ] +then + CHECKER=./tests/lchecker +else + CHECKER=./tests/mchecker +fi +checkchecker $CHECKER 0 +chmod +x $CHECKER +COUNT0=0 +COUNT1=0 +COUNT2=0 +COUNT3=0 +COUNT4=0 +SLEEP=1 +FAULTS=0 +CHECKF=0 +mkdir -p tests/files +touch tests/files/empty +echo "Error" > tests/files/error +echo "OK" > tests/files/ok +echo "KO" > tests/files/ko +if [ $2 ] +then + if [ $1 -eq 100 ] + then + printf "\e[1;36mRunning push_swap against checker with 100 random values $2 times\e[0;00m\n" + make > /dev/null + batchtester 100 $2 700 900 1100 1300 1500 + printresult 700 900 1100 1300 1500 + rm -rf tests/files + exit 0 + elif [ $1 -eq 500 ] + then + printf "\e[1;36mRunning push_swap against checker with 500 random values $2 times\e[0;00m\n" + make > /dev/null + batchtester 500 $2 5500 7000 8500 10000 11500 + printresult 5500 7000 8500 10000 11500 + rm -rf tests/files + exit 0 + else + printf "\e[1;31mRun the test in one of the following ways\n./test\n./test.sh [SLEEPTIME]\n./test 100 [ITERATIONS]\n./test 500 [ITERATIONS]\e[0;00m\n" + rm -rf tests/files + exit 1 + fi +fi +if [ $1 ] +then + SLEEP=$1 +fi + + +# Test 1 +printf "\e[1;36mTest 1 Checking all source with Norminette\e[0;00m\n" +norminette > /dev/null 2>&1 +if [ $? -eq 1 ] +then + printf "\e[1;31mYour shit is not norm!\e[0;00m\n" + FAULTS=$(($FAULTS+1)) +else + printf "\e[1;32mNorminette OK\e[0;00m\n" +fi +sleep $SLEEP + +# Test 2 +printf "\e[1;36mTest 2 Checking all mandatory rules Makefile\e[0;00m\n" +checkrule all +checkfile push_swap 0 +searchobj 1 +checkrule clean +searchobj 0 +checkrule push_swap +checkfile push_swap 0 +searchobj 1 +checkrule fclean +searchobj 0 +checkfile push_swap 1 +checkrule re +searchobj 1 +checkfile push_swap 0 +if [ $FAULTS -eq 0 ] +then + printf "\e[1;32mMakefile rules OK\e[0;00m\n" +fi +sleep $SLEEP + +# Test 3 +printf "\e[1;36mTest 3 Checking if Makefile relinks\e[0;00m\n" +make 2>&1 | grep Nothing +if [ $? -eq 1 ] +then + printf "\e[1;31mMakefile relinks\e[0;00m\n" + FAULTS=$(($FAULTS+1)) +else + printf "\e[1;32mMakefile OK\e[0;00m\n" +fi +sleep $SLEEP + +# Test 4 +printf "\e[1;36mTest 4 Running push_swap with non numeric value\e[0;00m\n" +pushswap 1 "a" +checkoutput tests/files/error +sleep $SLEEP + +# Test 5 +printf "\e[1;36mTest 5 Running push_swap with hidden non numeric value begin\e[0;00m\n" +pushswap 1 "a1234" +checkoutput tests/files/error +sleep $SLEEP + +# Test 6 +printf "\e[1;36mTest 6 Running push_swap with hidden non numeric value middle\e[0;00m\n" +pushswap 1 "12/34" +checkoutput tests/files/error +sleep $SLEEP + +# Test 7 +printf "\e[1;36mTest 7 Running push_swap with hidden non numeric value end\e[0;00m\n" +pushswap 1 "1234-" +checkoutput tests/files/error +sleep $SLEEP + +# Test 8 +printf "\e[1;36mTest 8 Running push_swap with duplicate number\e[0;00m\n" +pushswap 1 "1 2 3 4 5 6 7 1" +checkoutput tests/files/error +sleep $SLEEP + +# Test 9 +printf "\e[1;36mTest 9 Running push_swap with max int + 1\e[0;00m\n" +pushswap 1 "1 2 3 4 5 6 7 8 9 2147483648" +checkoutput tests/files/error +sleep $SLEEP + +# Test 10 +printf "\e[1;36mTest 10 Running push_swap with min int - 1\e[0;00m\n" +pushswap 1 "-2147483649 1 2 3 4 5 6 7 8 9" +checkoutput tests/files/error +sleep $SLEEP + +# Test 11 +printf "\e[1;36mTest 11 Running push_swap without arguments\e[0;00m\n" +pushswap 0 +checkoutput tests/files/empty +sleep $SLEEP + +# Test 12 +printf "\e[1;36mTest 12 Running push_swap with one number\e[0;00m\n" +pushswap 0 "42" +checkoutput tests/files/empty +sleep $SLEEP + +# Test 13 +printf "\e[1;36mTest 13 Running push_swap with numbers in order\e[0;00m\n" +pushswap 0 "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" +checkoutput tests/files/empty +sleep $SLEEP + +# Test 14 +printf "\e[1;36mTest 14 Running push_swap against checker with 2 1 0\e[0;00m\n" +checker 0 "2 1 0" +checkoutput tests/files/ok +count 2 3 3 3 3 "2 1 0" +sleep $SLEEP + +# Test 15 +printf "\e[1;36mTest 15 Running push_swap against checker with 1 5 2 4 3\e[0;00m\n" +checker 0 "1 5 2 4 3" +checkoutput tests/files/ok +count 7 8 9 10 12 "1 5 2 4 3" +sleep $SLEEP + +# Test 16 +printf "\e[1;36mTest 16 Running push_swap against checker with 5 random values 1000 times\e[0;00m\n" +batchtester 5 1000 7 8 9 10 12 +printresult 7 8 9 10 12 +sleep $SLEEP + +# Test 17 +printf "\e[1;36mTest 17 Running push_swap against checker with 100 random values 1000 times\e[0;00m\n" +batchtester 100 1000 700 900 1100 1300 1500 +printresult 700 900 1100 1300 1500 +sleep $SLEEP + +# Test 18 +printf "\e[1;36mTest 18 Running push_swap against checker with 500 random values 1000 times\e[0;00m\n" +batchtester 500 1000 5500 7000 8500 10000 11500 +printresult 5500 7000 8500 10000 11500 +sleep $SLEEP + +# Test 19 +printf "\e[1;36mTest 19 Checking if Makefile bonus rule exists\e[0;00m\n" +make fclean > /dev/null +make bonus >/dev/null 2>&1 +if [ $? -eq 2 ] +then + printf "\e[1;31mNo bonus? I am a little dissapointed...\e[0;00m\n" + if [ $FAULTS -eq 0 ] + then + printf "\e[1;35mBut we got no errors, Congratulations\e[0;00m\n" + make fclean > /dev/null + rm -rf tests/files + exit 0 + else + printf "\e[1;31mAnd we got $FAULTS errors\nSo that's a bummer\e[0;00m\n" + make fclean > /dev/null + rm -rf tests/files + exit 1 + fi +fi +checkfile checker 0 +CHECKER=./checker +printf "\e[1;32mbonus rule OK\e[0;00m\n" +sleep $SLEEP + +# Test 20 +printf "\e[1;36mTest 20 Checking if Makefile relinks for bonus\e[0;00m\n" +make bonus 2>&1 | grep Nothing +if [ $? -eq 1 ] +then + printf "\e[1;31mMakefile relinks on bonus\e[0;00m\n" + FAULTS=$(($FAULTS+1)) +else + printf "\e[1;32mMakefile bonus OK\e[0;00m\n" +fi +sleep $SLEEP + +# Test 21 +printf "\e[1;36mTest 21 Running checker with non numeric value\e[0;00m\n" +onlychecker 1 "a" +checkoutput tests/files/error +sleep $SLEEP + +# Test 22 +printf "\e[1;36mTest 22 Running checker with hidden non numeric value begin\e[0;00m\n" +onlychecker 1 "a1234" +checkoutput tests/files/error +sleep $SLEEP + +# Test 23 +printf "\e[1;36mTest 23 Running checker with hidden non numeric value middle\e[0;00m\n" +onlychecker 1 "12/34" +checkoutput tests/files/error +sleep $SLEEP + +# Test 24 +printf "\e[1;36mTest 24 Running checker with hidden non numeric value end\e[0;00m\n" +onlychecker 1 "1234-" +checkoutput tests/files/error +sleep $SLEEP + +# Test 25 +printf "\e[1;36mTest 25 Running checker with duplicate number\e[0;00m\n" +onlychecker 1 "1 2 3 4 5 6 7 1" +checkoutput tests/files/error +sleep $SLEEP + +# Test 26 +printf "\e[1;36mTest 26 Running checker with max int + 1\e[0;00m\n" +onlychecker 1 "1 2 3 4 5 6 7 8 9 2147483648" +checkoutput tests/files/error +sleep $SLEEP + +# Test 27 +printf "\e[1;36mTest 27 Running checker with min int - 1\e[0;00m\n" +onlychecker 1 "-2147483649 1 2 3 4 5 6 7 8 9" +checkoutput tests/files/error +sleep $SLEEP + +# Test 28 +printf "\e[1;36mTest 28 Running checker without arguments\e[0;00m\n" +onlychecker 0 +checkoutput tests/files/empty +sleep $SLEEP + +# Test 29 +printf "\e[1;36mTest 29 Running checker with no stdin\e[0;00m\n" +printf "Please press CTRL+D (maybe twice)\n" +onlychecker 0 "42" +checkoutput tests/files/ok +sleep $SLEEP + +# Test 30 +printf "\e[1;36mTest 30 Running checker with all possible moves\e[0;00m\n" +printf "Please type pb, pb, sa, sb, ss, ra, rb, rr, rra, rrb, rrr, pa and hit CTRL+D (maybe twice)\n" +onlychecker 0 "42 21 420 210" +checkoutput tests/files/ko +sleep $SLEEP + +# Test 31 +printf "\e[1;36mTest 31 Running checker with some impossible moves\e[0;00m\n" +printf "Please type pa, pb, sa, sb, ss, ra, rb, rr, rra, rrb, rrr and hit CTRL+D (maybe twice)\n" +onlychecker 0 "42" +checkoutput tests/files/ok +sleep $SLEEP + +# Test 32 +printf "\e[1;36mTest 32 Running checker invalid stdin\e[0;00m\n" +printf "Please type br and press enter Do Not hit CTRL+D\n" +onlychecker 1 "42" +checkoutput tests/files/error +sleep $SLEEP + +# Test 33 +printf "\e[1;36mTest 33 Running checker invalid stdin space before\e[0;00m\n" +printf "Please type ' sa' and press enter Do Not hit CTRL+D\n" +onlychecker 1 "42" +checkoutput tests/files/error +sleep $SLEEP + +# Test 34 +printf "\e[1;36mTest 34 Running checker invalid stdin space after\e[0;00m\n" +printf "Please type 'sa ' and press enter Do Not hit CTRL+D\n" +onlychecker 1 "42" +checkoutput tests/files/error +sleep $SLEEP + +# Test 35 +printf "\e[1;36mTest 35 Running checker with wrong stdin 0 9 1 8 2 7 3 6 4 5\e[0;00m\n" +printf "Please type sa, pb, rrr and hit CTRL+D (maybe twice)\n" +onlychecker 0 "0 9 1 8 2 7 3 6 4 5" +checkoutput tests/files/ko +sleep $SLEEP + +# Test 36 +printf "\e[1;36mTest 36 Running checker with wrong stdin 32 -65 12 83 55 23 54 53 16\e[0;00m\n" +printf "Please type sa, ra, rra and hit CTRL+D (maybe twice)\n" +onlychecker 0 "32 -65 12 83 55 23 54 53 16" +checkoutput tests/files/ko +sleep $SLEEP + +# Test 37 +printf "\e[1;36mTest 37 Running checker with numbers 1 - 20 in order\e[0;00m\n" +printf "Please hit CTRL+D (maybe twice)\n" +onlychecker 0 "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" +checkoutput tests/files/ok +sleep $SLEEP + +# Test 38 +printf "\e[1;36mTest 38 Running checker with valid input 0 9 1 8 2\e[0;00m\n" +printf "Please type pb, ra, pb, ra, sa, ra, pa, pa and hit CTRL+D (maybe twice)\n" +onlychecker 0 "0 9 1 8 2" +checkoutput tests/files/ok +sleep $SLEEP + +# Test 39 +printf "\e[1;36mTest 39 Running checker with valid input a little harder\e[0;00m\n" +printf "Please type rra, rra and hit CTRL+D (maybe twice)\n" +onlychecker 0 "12345 23456 34567 45678 56789 67890 -98765 -87654" +checkoutput tests/files/ok +sleep $SLEEP + +# Test 40 +make > /dev/null +printf "\e[1;36mTest 40 Running checker with input from push_swap 500 random values 1000 times\e[0;00m\n" +batchchecker 500 1000 +if [ $CHECKF -gt 0 ] +then + printf "\e[1;31mwe got $CHECKF cases where the output was not OK\e[0;00m\n" +else + printf "\e[1;32mBatch test finished with no problems\e[0;00m\n" +fi + +sleep $SLEEP + +# Conclusion +if [ $FAULTS -eq 0 ] +then + printf "\e[1;35mwe got no errors, Congratulations\e[0;00m\n" +else + printf "\e[1;31mwe got $FAULTS errors\nSo that's a bummer\e[0;00m\n" + make fclean > /dev/null + rm -rf tests/files + exit 1 +fi +make fclean > /dev/null +rm -rf tests/files +exit 0 diff --git a/tests/lchecker b/tests/lchecker new file mode 100755 index 0000000000000000000000000000000000000000..002d5930236c65f1a695bf2fe08489bec0c49745 GIT binary patch literal 38192 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 Z+eg>0QN!_&s{El1isOi86qsE8{{pOBm#zQ+ literal 0 HcmV?d00001 diff --git a/tests/mchecker b/tests/mchecker new file mode 100644 index 0000000000000000000000000000000000000000..de047c244b4d6ea116b704e4ed734a1579c7e2ea GIT binary patch literal 70928 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 literal 0 HcmV?d00001