From d963161275bcb3af4097872ba033da3ff9255606 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 30 Oct 2019 03:57:47 +0100 Subject: Individual convert functions, more flags - Each conversion type is handle by individual functions in convert_* files - handle the ' ', '#', '+' and length modifier flags. --- convert_int.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 convert_int.c (limited to 'convert_int.c') diff --git a/convert_int.c b/convert_int.c new file mode 100644 index 0000000..d0ef77e --- /dev/null +++ b/convert_int.c @@ -0,0 +1,47 @@ +#include +#include +#include "header.h" + +char *convert_int(va_list ap, t_pformat *pformat) +{ + char *tmp; + int is_neg; + long long int n; + + if (pformat->flags & FLAG_SHORT) + n = va_arg(ap, short); + else if (pformat->flags & FLAG_SHORT_SHORT) + n = va_arg(ap, signed char); + else if (pformat->flags & FLAG_LONG) + n = va_arg(ap, long int); + else if (pformat->flags & FLAG_LONG_LONG) + n = va_arg(ap, long long int); + else + n = va_arg(ap, int); + + is_neg = n < 0; + + char *str = ITOA_DEC(n); + + if (is_neg) + ft_strcpy(str, str + 1); + str = handle_precision(pformat, str); + if (pformat->flags & FLAG_ZERO_PADDING) + { + if (is_neg || pformat->flags & FLAG_SIGNED) + pformat->min_width--; + str = handle_padding(pformat, str); + } + if (is_neg) + tmp = ft_strjoin("-", str); + else if (pformat->flags & FLAG_SIGNED || pformat->flags & FLAG_SPACE) + tmp = ft_strjoin(pformat->flags & FLAG_SPACE ? " " : "+", str); + else + tmp = ft_strdup(str); + free(str); + str = tmp; + if (!(pformat->flags & FLAG_ZERO_PADDING)) + str = handle_padding(pformat, str); + return (str); +} + -- cgit