Exemplo n.º 1
0
int		check_p(char c, t_args **arg, va_list ap)
{
	int				len;
	unsigned long	val;
	int				prec;

	len = 0;
	if (c == 'p')
	{
		val = (unsigned long)va_arg(ap, void*);
		prec = ((*arg)->precision >= 0) ? (*arg)->precision : (*arg)->field - \
			ft_nbrlen_base(val, 16, -1) - 2 + (val == 0);
		len += ft_putnchar(' ', (!(*arg)->justify && !(*arg)->zero) ? \
				(*arg)->field - ft_nbrlen_base(val, 16, -1) - 2 : 0);
		len += ft_putstr("0x");
		len += ft_putnbr_base(val, 16, ((*arg)->zero || \
					(*arg)->precision >= 0) ? prec : -1, 0);
		len += ft_putnchar(' ', ((*arg)->justify) ? (*arg)->field -\
				ft_nbrlen_base(val, 16, -1) - 2 : 0);
	}
Exemplo n.º 2
0
int	ft_putunbr_base(unsigned long long n, int base, int prec, int maj)
{
	const char	basestr[17] = "0123456789abcdef";
	const char	basestrmaj[17] = "0123456789ABCDEF";
	int			wr;

	wr = 0;
	if (n == 0 && prec == 0)
		return (0);
	if (prec > 0)
	{
		wr += ft_putnchar('0', prec - ft_nbrlen_base(n, base, 0));
	}
	if ((n / base) > 0)
		wr += ft_putunbr_base(n / base, base, 0, maj);
	ft_putchar((maj) ? basestrmaj[(n % base)] : basestr[(n % base)]);
	return (++wr);
}
Exemplo n.º 3
0
/*                                                                            */
/* ************************************************************************** */

#include "libft.h"
#include "utils.h"

int				ft_print_unsigned(va_list *list_args, t_args *arg)
{
	unsigned long	nb;
	int				ret;

	if (arg->type == 'U')
		nb = va_arg(*list_args, unsigned long);
	else
		nb = ft_cast_unsigned(list_args, arg);
	ret = ft_nbrlen_base(nb, 10);
	if (nb == 0 && arg->precis == 0 && arg->val_prec == 1)
		ret = 0;
	(arg->precis < ret) ? arg->precis = ret : 0;
	(arg->field < arg->precis) ? arg->field = arg->precis : 0;
	if (!arg->val_minus && arg->val_field && (arg->val_prec || !arg->val_z))
		ft_printnchar(arg->field - arg->precis, ' ');
	if (!arg->val_minus && arg->val_z && arg->val_prec == 0)
		ft_printnchar(arg->field - arg->precis, '0');
	ft_printnchar(arg->precis - ret, '0');
	if (ret != 0)
		ft_putbase(nb, 10, arg->type);
	(arg->val_minus == 1) ? ft_printnchar(arg->field - arg->precis, ' ') : 0;
	return (ft_retfield(arg, ret));
}