diff --git a/Makefile b/Makefile index 8f1f495..b51ec84 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,13 @@ INC_DIR= include LIBFT_DIR= libft SRC= $(SRC_DIR)/ft_printf.c \ + $(SRC_DIR)/ft_putnbr_base.c \ + $(SRC_DIR)/print_char.c \ + $(SRC_DIR)/print_hex.c \ + $(SRC_DIR)/print_number.c \ + $(SRC_DIR)/print_pointer.c \ + $(SRC_DIR)/print_str.c \ + $(SRC_DIR)/print_unsigned.c \ OBJ= $(SRC:.c=.o) DEP= $(SRC:.c=.d) @@ -16,20 +23,20 @@ AR= ar rcs all: $(NAME) $(NAME): $(OBJ) - @$(MAKE) -C $(LIBFT_DIR) - @cp $(LIBFT_DIR)/libft.a $(NAME) - @$(AR) $(NAME) $(OBJ) + $(MAKE) -C $(LIBFT_DIR) + cp $(LIBFT_DIR)/libft.a $(NAME) + $(AR) $(NAME) $(OBJ) %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ clean: - @rm -f $(OBJ) $(DEP) - @$(MAKE) -C $(LIBFT_DIR) clean + rm -f $(OBJ) $(DEP) + $(MAKE) -C $(LIBFT_DIR) clean fclean: clean - @rm -f $(NAME) - @$(MAKE) -C $(LIBFT_DIR) fclean + rm -f $(NAME) + $(MAKE) -C $(LIBFT_DIR) fclean re: fclean all diff --git a/include/ft_printf.h b/include/ft_printf.h index a789433..7e607aa 100644 --- a/include/ft_printf.h +++ b/include/ft_printf.h @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/17 10:52:23 by dgaillet #+# #+# */ -/* Updated: 2025/11/17 11:25:46 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/17 12:34:18 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -15,4 +15,13 @@ int ft_printf(const char *first_arg, ...); +int ft_putnbr_base(unsigned long long nbr, char *base, int base_size); + +int print_char(char c); +int print_str(char *str); +int print_pointer(unsigned long long p); +int print_number(int nbr); +int print_unsigned(unsigned int nbr); +int print_hex(unsigned long long p, int upper); + #endif diff --git a/42-libft/.gitignore b/libft/.gitignore similarity index 100% rename from 42-libft/.gitignore rename to libft/.gitignore diff --git a/42-libft/Makefile b/libft/Makefile similarity index 96% rename from 42-libft/Makefile rename to libft/Makefile index 45037cf..0229cd2 100644 --- a/42-libft/Makefile +++ b/libft/Makefile @@ -71,7 +71,7 @@ ALL_DEP= $(DEP) $(BONUS_DEP) %.o: %.c - $(CC) -MMD -MP -o $@ -c $< $(CFLAGS) -I$(HEADER) + $(CC) -MMD -MP -o $@ -c $< $(CFLAGS) -I. all: $(NAME) diff --git a/42-libft/ft_atoi.c b/libft/ft_atoi.c similarity index 100% rename from 42-libft/ft_atoi.c rename to libft/ft_atoi.c diff --git a/42-libft/ft_bzero.c b/libft/ft_bzero.c similarity index 100% rename from 42-libft/ft_bzero.c rename to libft/ft_bzero.c diff --git a/42-libft/ft_calloc.c b/libft/ft_calloc.c similarity index 100% rename from 42-libft/ft_calloc.c rename to libft/ft_calloc.c diff --git a/42-libft/ft_isalnum.c b/libft/ft_isalnum.c similarity index 100% rename from 42-libft/ft_isalnum.c rename to libft/ft_isalnum.c diff --git a/42-libft/ft_isalpha.c b/libft/ft_isalpha.c similarity index 100% rename from 42-libft/ft_isalpha.c rename to libft/ft_isalpha.c diff --git a/42-libft/ft_isascii.c b/libft/ft_isascii.c similarity index 100% rename from 42-libft/ft_isascii.c rename to libft/ft_isascii.c diff --git a/42-libft/ft_isdigit.c b/libft/ft_isdigit.c similarity index 100% rename from 42-libft/ft_isdigit.c rename to libft/ft_isdigit.c diff --git a/42-libft/ft_isprint.c b/libft/ft_isprint.c similarity index 100% rename from 42-libft/ft_isprint.c rename to libft/ft_isprint.c diff --git a/42-libft/ft_itoa.c b/libft/ft_itoa.c similarity index 100% rename from 42-libft/ft_itoa.c rename to libft/ft_itoa.c diff --git a/42-libft/ft_lstadd_back_bonus.c b/libft/ft_lstadd_back_bonus.c similarity index 100% rename from 42-libft/ft_lstadd_back_bonus.c rename to libft/ft_lstadd_back_bonus.c diff --git a/42-libft/ft_lstadd_front_bonus.c b/libft/ft_lstadd_front_bonus.c similarity index 100% rename from 42-libft/ft_lstadd_front_bonus.c rename to libft/ft_lstadd_front_bonus.c diff --git a/42-libft/ft_lstclear_bonus.c b/libft/ft_lstclear_bonus.c similarity index 100% rename from 42-libft/ft_lstclear_bonus.c rename to libft/ft_lstclear_bonus.c diff --git a/42-libft/ft_lstdelone_bonus.c b/libft/ft_lstdelone_bonus.c similarity index 100% rename from 42-libft/ft_lstdelone_bonus.c rename to libft/ft_lstdelone_bonus.c diff --git a/42-libft/ft_lstiter_bonus.c b/libft/ft_lstiter_bonus.c similarity index 100% rename from 42-libft/ft_lstiter_bonus.c rename to libft/ft_lstiter_bonus.c diff --git a/42-libft/ft_lstlast_bonus.c b/libft/ft_lstlast_bonus.c similarity index 100% rename from 42-libft/ft_lstlast_bonus.c rename to libft/ft_lstlast_bonus.c diff --git a/42-libft/ft_lstmap_bonus.c b/libft/ft_lstmap_bonus.c similarity index 100% rename from 42-libft/ft_lstmap_bonus.c rename to libft/ft_lstmap_bonus.c diff --git a/42-libft/ft_lstnew_bonus.c b/libft/ft_lstnew_bonus.c similarity index 100% rename from 42-libft/ft_lstnew_bonus.c rename to libft/ft_lstnew_bonus.c diff --git a/42-libft/ft_lstsize_bonus.c b/libft/ft_lstsize_bonus.c similarity index 100% rename from 42-libft/ft_lstsize_bonus.c rename to libft/ft_lstsize_bonus.c diff --git a/42-libft/ft_memchr.c b/libft/ft_memchr.c similarity index 100% rename from 42-libft/ft_memchr.c rename to libft/ft_memchr.c diff --git a/42-libft/ft_memcmp.c b/libft/ft_memcmp.c similarity index 100% rename from 42-libft/ft_memcmp.c rename to libft/ft_memcmp.c diff --git a/42-libft/ft_memcpy.c b/libft/ft_memcpy.c similarity index 100% rename from 42-libft/ft_memcpy.c rename to libft/ft_memcpy.c diff --git a/42-libft/ft_memmove.c b/libft/ft_memmove.c similarity index 100% rename from 42-libft/ft_memmove.c rename to libft/ft_memmove.c diff --git a/42-libft/ft_memset.c b/libft/ft_memset.c similarity index 100% rename from 42-libft/ft_memset.c rename to libft/ft_memset.c diff --git a/42-libft/ft_putchar_fd.c b/libft/ft_putchar_fd.c similarity index 100% rename from 42-libft/ft_putchar_fd.c rename to libft/ft_putchar_fd.c diff --git a/42-libft/ft_putendl_fd.c b/libft/ft_putendl_fd.c similarity index 100% rename from 42-libft/ft_putendl_fd.c rename to libft/ft_putendl_fd.c diff --git a/42-libft/ft_putnbr_fd.c b/libft/ft_putnbr_fd.c similarity index 100% rename from 42-libft/ft_putnbr_fd.c rename to libft/ft_putnbr_fd.c diff --git a/42-libft/ft_putstr_fd.c b/libft/ft_putstr_fd.c similarity index 100% rename from 42-libft/ft_putstr_fd.c rename to libft/ft_putstr_fd.c diff --git a/42-libft/ft_split.c b/libft/ft_split.c similarity index 100% rename from 42-libft/ft_split.c rename to libft/ft_split.c diff --git a/42-libft/ft_strchr.c b/libft/ft_strchr.c similarity index 100% rename from 42-libft/ft_strchr.c rename to libft/ft_strchr.c diff --git a/42-libft/ft_strdup.c b/libft/ft_strdup.c similarity index 100% rename from 42-libft/ft_strdup.c rename to libft/ft_strdup.c diff --git a/42-libft/ft_striteri.c b/libft/ft_striteri.c similarity index 100% rename from 42-libft/ft_striteri.c rename to libft/ft_striteri.c diff --git a/42-libft/ft_strjoin.c b/libft/ft_strjoin.c similarity index 100% rename from 42-libft/ft_strjoin.c rename to libft/ft_strjoin.c diff --git a/42-libft/ft_strlcat.c b/libft/ft_strlcat.c similarity index 100% rename from 42-libft/ft_strlcat.c rename to libft/ft_strlcat.c diff --git a/42-libft/ft_strlcpy.c b/libft/ft_strlcpy.c similarity index 100% rename from 42-libft/ft_strlcpy.c rename to libft/ft_strlcpy.c diff --git a/42-libft/ft_strlen.c b/libft/ft_strlen.c similarity index 100% rename from 42-libft/ft_strlen.c rename to libft/ft_strlen.c diff --git a/42-libft/ft_strmapi.c b/libft/ft_strmapi.c similarity index 100% rename from 42-libft/ft_strmapi.c rename to libft/ft_strmapi.c diff --git a/42-libft/ft_strncmp.c b/libft/ft_strncmp.c similarity index 100% rename from 42-libft/ft_strncmp.c rename to libft/ft_strncmp.c diff --git a/42-libft/ft_strnstr.c b/libft/ft_strnstr.c similarity index 100% rename from 42-libft/ft_strnstr.c rename to libft/ft_strnstr.c diff --git a/42-libft/ft_strrchr.c b/libft/ft_strrchr.c similarity index 100% rename from 42-libft/ft_strrchr.c rename to libft/ft_strrchr.c diff --git a/42-libft/ft_strtrim.c b/libft/ft_strtrim.c similarity index 100% rename from 42-libft/ft_strtrim.c rename to libft/ft_strtrim.c diff --git a/42-libft/ft_substr.c b/libft/ft_substr.c similarity index 100% rename from 42-libft/ft_substr.c rename to libft/ft_substr.c diff --git a/42-libft/ft_tolower.c b/libft/ft_tolower.c similarity index 100% rename from 42-libft/ft_tolower.c rename to libft/ft_tolower.c diff --git a/42-libft/ft_toupper.c b/libft/ft_toupper.c similarity index 100% rename from 42-libft/ft_toupper.c rename to libft/ft_toupper.c diff --git a/42-libft/libft.h b/libft/libft.h similarity index 100% rename from 42-libft/libft.h rename to libft/libft.h diff --git a/libftprintf.a b/libftprintf.a new file mode 100644 index 0000000..1ccf1e3 Binary files /dev/null and b/libftprintf.a differ diff --git a/src/ft_printf.c b/src/ft_printf.c index 23367a7..9d152e0 100644 --- a/src/ft_printf.c +++ b/src/ft_printf.c @@ -6,13 +6,54 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/17 10:54:03 by dgaillet #+# #+# */ -/* Updated: 2025/11/17 11:26:09 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/17 12:35:20 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include +#include +#include "../include/ft_printf.h" + +static int ft_print_arg(char c, va_list args) +{ + if (c == 'c') + return (print_char(va_arg(args, int))); + else if (c == 's') + return (print_str(va_arg(args, char *))); + else if (c == 'p') + return (print_pointer(va_arg(args, unsigned long long))); + else if (c == 'd' || c == 'i') + return (print_number(va_arg(args, int))); + else if (c == 'u') + return (print_unsigned(va_arg(args, unsigned int))); + else if (c == 'x') + return (print_hex(va_arg(args, unsigned int), 0)); + else if (c == 'X') + return (print_hex(va_arg(args, unsigned int), 1)); + else if (c == '%') + return (print_char('%')); + return (0); +} int ft_printf(const char *first_arg, ...) { - return (1); + va_list args; + int nb_print; + int i; + + nb_print = 0; + va_start(args, first_arg); + i = 0; + while (first_arg[i]) + { + if (first_arg[i] == '%') + { + i++; + nb_print += ft_print_arg(first_arg[i], args); + } + else + nb_print += write(1, &first_arg[i], 1); + i++; + } + return (nb_print); } diff --git a/src/ft_printf.d b/src/ft_printf.d new file mode 100644 index 0000000..304d2a0 --- /dev/null +++ b/src/ft_printf.d @@ -0,0 +1,2 @@ +src/ft_printf.o: src/ft_printf.c src/../include/ft_printf.h +src/../include/ft_printf.h: diff --git a/src/ft_printf.o b/src/ft_printf.o new file mode 100644 index 0000000..be65ec1 Binary files /dev/null and b/src/ft_printf.o differ diff --git a/src/ft_putnbr_base.c b/src/ft_putnbr_base.c new file mode 100644 index 0000000..f7069a9 --- /dev/null +++ b/src/ft_putnbr_base.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/17 12:16:44 by dgaillet #+# #+# */ +/* Updated: 2025/11/17 12:17:14 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft/libft.h" + +int ft_putnbr_base(unsigned long long nbr, char *base, int base_size) +{ + int i; + + if (nbr == 0) + return (0); + i = 1 + ft_putnbr_base(nbr / base_size, base, base_size); + ft_putchar_fd(base[nbr % base_size], 1); + return (i); +} diff --git a/src/ft_putnbr_base.d b/src/ft_putnbr_base.d new file mode 100644 index 0000000..2c26120 --- /dev/null +++ b/src/ft_putnbr_base.d @@ -0,0 +1,2 @@ +src/ft_putnbr_base.o: src/ft_putnbr_base.c src/../libft/libft.h +src/../libft/libft.h: diff --git a/src/ft_putnbr_base.o b/src/ft_putnbr_base.o new file mode 100644 index 0000000..a0df1b2 Binary files /dev/null and b/src/ft_putnbr_base.o differ diff --git a/src/print_char.c b/src/print_char.c new file mode 100644 index 0000000..fa3983d --- /dev/null +++ b/src/print_char.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* print_char.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/17 11:56:36 by dgaillet #+# #+# */ +/* Updated: 2025/11/17 12:01:47 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include + +int print_char(char c) +{ + return (write(1, &c, 1)); +} diff --git a/src/print_char.d b/src/print_char.d new file mode 100644 index 0000000..e7d56d7 --- /dev/null +++ b/src/print_char.d @@ -0,0 +1 @@ +src/print_char.o: src/print_char.c diff --git a/src/print_char.o b/src/print_char.o new file mode 100644 index 0000000..2a74588 Binary files /dev/null and b/src/print_char.o differ diff --git a/src/print_hex.c b/src/print_hex.c new file mode 100644 index 0000000..73674c4 --- /dev/null +++ b/src/print_hex.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* print_hex.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/17 12:06:35 by dgaillet #+# #+# */ +/* Updated: 2025/11/17 12:38:35 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "../include/ft_printf.h" +#include + +int print_hex(unsigned long long nbr, int upper) +{ + if (nbr == 0) + return (write(1, "0", 1)); + if (upper) + return (ft_putnbr_base(nbr, "0123456789ABCDEF", 16)); + else + return (ft_putnbr_base(nbr, "0123456789abcdef", 16)); + +} diff --git a/src/print_hex.d b/src/print_hex.d new file mode 100644 index 0000000..a026a93 --- /dev/null +++ b/src/print_hex.d @@ -0,0 +1,2 @@ +src/print_hex.o: src/print_hex.c src/../include/ft_printf.h +src/../include/ft_printf.h: diff --git a/src/print_hex.o b/src/print_hex.o new file mode 100644 index 0000000..ab1b04b Binary files /dev/null and b/src/print_hex.o differ diff --git a/src/print_number.c b/src/print_number.c new file mode 100644 index 0000000..3a95bed --- /dev/null +++ b/src/print_number.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* print_number.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/17 12:26:23 by dgaillet #+# #+# */ +/* Updated: 2025/11/17 12:31:22 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "../include/ft_printf.h" +#include + +int print_number(int nbr) +{ + if (nbr == 0) + return (write(1, "0", 1)); + if (nbr < 0) + { + write(1, "-", 1); + return (1 + ft_putnbr_base(nbr * -1, "0123456789", 10)); + } + return (ft_putnbr_base(nbr, "0123456789", 10)); +} diff --git a/src/print_number.d b/src/print_number.d new file mode 100644 index 0000000..9dc87a3 --- /dev/null +++ b/src/print_number.d @@ -0,0 +1,2 @@ +src/print_number.o: src/print_number.c src/../include/ft_printf.h +src/../include/ft_printf.h: diff --git a/src/print_number.o b/src/print_number.o new file mode 100644 index 0000000..bac4530 Binary files /dev/null and b/src/print_number.o differ diff --git a/src/print_pointer.c b/src/print_pointer.c new file mode 100644 index 0000000..e554641 --- /dev/null +++ b/src/print_pointer.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* print_pointer.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/17 12:19:16 by dgaillet #+# #+# */ +/* Updated: 2025/11/17 12:25:20 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft/libft.h" +#include "../include/ft_printf.h" + +int print_pointer(unsigned long long p) +{ + ft_putstr_fd("0x", 1); + return (2 + ft_putnbr_base(p, "0123456789abcdef", 16)); +} diff --git a/src/print_pointer.d b/src/print_pointer.d new file mode 100644 index 0000000..fe93b16 --- /dev/null +++ b/src/print_pointer.d @@ -0,0 +1,4 @@ +src/print_pointer.o: src/print_pointer.c src/../libft/libft.h \ + src/../include/ft_printf.h +src/../libft/libft.h: +src/../include/ft_printf.h: diff --git a/src/print_pointer.o b/src/print_pointer.o new file mode 100644 index 0000000..bbabbff Binary files /dev/null and b/src/print_pointer.o differ diff --git a/src/print_str.c b/src/print_str.c new file mode 100644 index 0000000..4f4f8ea --- /dev/null +++ b/src/print_str.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* print_str.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/17 12:02:03 by dgaillet #+# #+# */ +/* Updated: 2025/11/17 12:03:27 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "../libft/libft.h" + +int print_str(char *str) +{ + ft_putstr_fd(str, 1); + return (ft_strlen(str)); +} diff --git a/src/print_str.d b/src/print_str.d new file mode 100644 index 0000000..f7d063a --- /dev/null +++ b/src/print_str.d @@ -0,0 +1,2 @@ +src/print_str.o: src/print_str.c src/../libft/libft.h +src/../libft/libft.h: diff --git a/src/print_str.o b/src/print_str.o new file mode 100644 index 0000000..c9fe064 Binary files /dev/null and b/src/print_str.o differ diff --git a/src/print_unsigned.c b/src/print_unsigned.c new file mode 100644 index 0000000..6840572 --- /dev/null +++ b/src/print_unsigned.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* print_unsigned.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/17 12:26:23 by dgaillet #+# #+# */ +/* Updated: 2025/11/17 12:34:00 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "../include/ft_printf.h" +#include + +int print_unsigned(unsigned int nbr) +{ + if (nbr == 0) + return (write(1, "0", 1)); + return (ft_putnbr_base(nbr, "0123456789", 10)); +} diff --git a/src/print_unsigned.d b/src/print_unsigned.d new file mode 100644 index 0000000..3e4f9b3 --- /dev/null +++ b/src/print_unsigned.d @@ -0,0 +1,2 @@ +src/print_unsigned.o: src/print_unsigned.c src/../include/ft_printf.h +src/../include/ft_printf.h: diff --git a/src/print_unsigned.o b/src/print_unsigned.o new file mode 100644 index 0000000..1ade64e Binary files /dev/null and b/src/print_unsigned.o differ