commit 9aa51181e8aec2603c3b2f35046917b189698dd3 Author: djonker Date: Wed Mar 1 04:36:58 2023 +0100 firstcommit 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 0000000..002d593 Binary files /dev/null and b/tests/lchecker differ diff --git a/tests/mchecker b/tests/mchecker new file mode 100644 index 0000000..de047c2 Binary files /dev/null and b/tests/mchecker differ