Corewar-Final/libft/printf/print_cs_pad.c
Jeremy FLEURY 748d10f4f3 push
2019-07-17 11:22:24 +02:00

57 lines
1.8 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* print_cs_pad.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: igarbuz <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/01/29 21:09:48 by igarbuz #+# #+# */
/* Updated: 2019/01/29 21:09:50 by igarbuz ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_printf.h"
static void ft_print_c(char c, char *b, intmax_t arg, t_param *prm)
{
char *s;
if (c == 's')
{
if (!arg)
{
s = (char *)ft_null();
ft_printbuf_prc(b, &s, prm->prc);
}
else if (prm->p >> 7 & 1)
ft_printbuf_unicode_prc(b, (wchar_t **)&arg, prm->prc);
else
ft_printbuf_prc(b, (char **)&arg, prm->prc);
}
else if (c == 'c')
{
if (prm->p >> 7 & 1)
ft_printbuf_wchar_t(b, ft_utf8_encode(arg), ft_wcsize(arg));
else
ft_printbuf_char(b, (char)arg);
}
else if (c == '%')
ft_printbuf_char(b, '%');
}
void ft_print_c_pad(char c, char *b, t_param *prm, intmax_t arg)
{
int len;
len = ft_arg_len(arg, c, prm);
if (prm->prc != -1 && c == 's' && prm->prc < len)
len = prm->prc;
if (!(prm->p >> 1 & 1) && (prm->p >> 4 & 1))
ft_printbuf_pad(b, '0', prm->wdt - len);
else if (!(prm->p >> 1 & 1))
ft_printbuf_pad(b, ' ', prm->wdt - len);
ft_print_c(c, b, arg, prm);
if (prm->p >> 1 & 1)
ft_printbuf_pad(b, ' ', prm->wdt - len);
}