aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--ft_printf.c16
-rw-r--r--ft_printf.h17
-rw-r--r--utils.c42
4 files changed, 73 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index ad9d94d..30bbc8c 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ CCFLAGS = -Wall -Wextra #-Werror
RM = rm -f
NAME = ft_printf
-SRC = ft_printf.c
+SRC = ft_printf.c utils.c
OBJ = $(SRC:.c=.o)
INCLUDE = ft_printf.h
diff --git a/ft_printf.c b/ft_printf.c
index 9817e6c..c7bc473 100644
--- a/ft_printf.c
+++ b/ft_printf.c
@@ -7,6 +7,9 @@ int ft_printf(const char *format, ...)
{
int i;
va_list ap;
+ /* char *convertions_flags; */
+
+ /* convertions_flags = "cspdiuxX%"; */
va_start(ap, format);
i = -1;
@@ -23,7 +26,8 @@ int ft_printf(const char *format, ...)
ft_putstr(va_arg(ap, char*));
break;
case 'p':
- print_addr(va_arg(ap, void*));
+ ft_putstr("0x");
+ PUTXNBR(va_arg(ap, int));
break;
case 'd':
ft_putnbr(va_arg(ap, int));
@@ -35,9 +39,15 @@ int ft_printf(const char *format, ...)
ft_putunbr(va_arg(ap, unsigned int));
break;
case 'x':
- ft_putxnbr(va_arg(ap, int));
+ ft_putstr("0x");
+ PUTXNBR(va_arg(ap, int));
break;
case 'X':
+ ft_putstr("0x");
+ PUTXMAJNBR(va_arg(ap, int));
+ break;
+ case '%':
+ ft_putchar('%');
break;
}
}
@@ -50,6 +60,6 @@ int ft_printf(const char *format, ...)
int main()
{
- ft_printf("bonjour\n");
+ ft_printf("b%conjo %X ur%p\n", 'r', 0xec54, NULL);
return 0;
}
diff --git a/ft_printf.h b/ft_printf.h
index f3c09ab..b755f91 100644
--- a/ft_printf.h
+++ b/ft_printf.h
@@ -1,6 +1,23 @@
#ifndef FT_PRINTF_H
# define FT_PRINTF_H
+#define PUTXNBR(nb) (ft_putxnbr(nb, "0123456789abcdef"))
+#define PUTXMAJNBR(nb) (ft_putxnbr(nb, "0123456789ABCDEF"))
+
+/*
+** ft_printf.c
+*/
+
int ft_printf(const char *format, ...);
+/*
+** utils.c
+*/
+
+void ft_putchar(char c);
+void ft_putstr(char *str);
+void ft_putnbr(int nb);
+void ft_putxnbr(unsigned int n, char *hex_symbols);
+void ft_putunbr(unsigned int n);
+
#endif
diff --git a/utils.c b/utils.c
new file mode 100644
index 0000000..1484165
--- /dev/null
+++ b/utils.c
@@ -0,0 +1,42 @@
+#include <unistd.h>
+#include "ft_printf.h"
+
+void ft_putchar(char c)
+{
+ write(STDOUT_FILENO, &c, 1);
+}
+
+void ft_putstr(char *str)
+{
+ while (*str)
+ write(STDOUT_FILENO, str++, 1);
+}
+
+void ft_putnbr(int n)
+{
+ unsigned int p_n;
+
+ p_n = n;
+ if (n < 0)
+ {
+ ft_putchar('-');
+ p_n = -n;
+ }
+ if (p_n > 9)
+ ft_putnbr(p_n / 10);
+ ft_putchar(p_n % 10 + '0');
+}
+
+void ft_putxnbr(unsigned int n, char *hex_symbols)
+{
+ if (n > 15)
+ ft_putxnbr(n / 16, hex_symbols);
+ ft_putchar(hex_symbols[n % 16]);
+}
+
+void ft_putunbr(unsigned int n)
+{
+ if (n > 9)
+ ft_putunbr(n / 10);
+ ft_putchar(n % 10 + '0');
+}