From ccf6226d8e0dc412206c5b9271654519357b0e2f Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Fri, 12 Apr 2024 16:44:17 +0200 Subject: [PATCH] Add ft_printf --- Makefile | 4 +++ ft_printaddr.c | 42 +++++++++++++++++++++++ ft_printf.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ ft_printf.h | 24 ++++++++++++++ ft_printhex.c | 44 ++++++++++++++++++++++++ ft_printnbr.c | 80 ++++++++++++++++++++++++++++++++++++++++++++ libft.h | 3 +- 7 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 ft_printaddr.c create mode 100644 ft_printf.c create mode 100644 ft_printf.h create mode 100644 ft_printhex.c create mode 100644 ft_printnbr.c diff --git a/Makefile b/Makefile index 1fdbab6..9e94fb2 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,10 @@ SRC_FILES = ft_atoi.c \ ft_substr.c \ ft_tolower.c \ ft_toupper.c \ + ft_printf.c \ + ft_printnbr.c \ + ft_printhex.c \ + ft_printaddr.c OBJ_FILES = $(SRC_FILES:.c=.o) diff --git a/ft_printaddr.c b/ft_printaddr.c new file mode 100644 index 0000000..f60ce0d --- /dev/null +++ b/ft_printaddr.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printaddr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser 15) + printaddr_rec(addr / 16, len); + success = write(1, &c, 1); + if (success < 0 || *len < 2) + *len = -1; + else + (*len)++; +} + +int ft_printaddr(void *addr) +{ + int len; + + len = write(1, "0x", 2); + printaddr_rec((unsigned long)addr, &len); + return (len); +} diff --git a/ft_printf.c b/ft_printf.c new file mode 100644 index 0000000..fc77f81 --- /dev/null +++ b/ft_printf.c @@ -0,0 +1,90 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser +# include + +int ft_printf(const char *fmt, ...); +int ft_printnbr(int nbr); +int ft_printunbr(unsigned int nbr); +int ft_printhex(unsigned int nbr, char fmt); +int ft_printaddr(void *addr); +#endif // FT_PRINTF_H diff --git a/ft_printhex.c b/ft_printhex.c new file mode 100644 index 0000000..4605eac --- /dev/null +++ b/ft_printhex.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printhex.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser 15) + printhex_rec(nbr / 16, fmt, len); + if (*len < 0) + return ; + success = write(1, &c, 1); + if (success < 0) + *len = -1; + else + (*len)++; +} + +int ft_printhex(unsigned int nbr, char fmt) +{ + int len; + + len = 0; + printhex_rec(nbr, fmt, &len); + return (len); +} diff --git a/ft_printnbr.c b/ft_printnbr.c new file mode 100644 index 0000000..2a42ed8 --- /dev/null +++ b/ft_printnbr.c @@ -0,0 +1,80 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printnbr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser 9) + printnbr_rec(n / 10, len); + if (*len < 0) + return ; + success = write(1, &c, 1); + if (success < 0) + *len = -1; + else + (*len)++; +} + +int ft_printnbr(int nbr) +{ + int len; + + len = 0; + if (nbr == -2147483648) + return (write(1, "-2147483648", 11)); + if (nbr < 0) + { + len = write(1, "-", 1); + nbr *= -1; + } + printnbr_rec(nbr, &len); + if (len < 0) + return (-1); + return (len); +} + +static void printunbr_rec(unsigned int n, int *len) +{ + char c; + int success; + + if (*len < 0) + return ; + c = '0' + n % 10; + if (n > 9) + printunbr_rec(n / 10, len); + if (*len < 0) + return ; + success = write(1, &c, 1); + if (success < 0) + *len = -1; + else + (*len)++; +} + +int ft_printunbr(unsigned int nbr) +{ + int len; + + len = 0; + printunbr_rec(nbr, &len); + if (len < 0) + return (-1); + return (len); +} diff --git a/libft.h b/libft.h index 148094f..0e35f35 100644 --- a/libft.h +++ b/libft.h @@ -6,13 +6,14 @@ /* By: dkaiser # include # include -- 2.47.2