コード例 #1
0
ファイル: convert_int.c プロジェクト: adevbungert/42-Projects
int					print_int(t_tag *tag, intmax_t nbr)
{
	char			*prefix;
	unsigned int	nbr_strlen;
	unsigned int	nbr_len;
	int				cut;

	prefix = NULL;
	cut = 0;
	nbr_len = nbr_length(nbr, "0123456789");
	nbr_strlen = nbr_strlength(tag, nbr, "0123456789");
	if ((nbr < 0 || tag->flag_plus || tag->flag_space) && (cut += 1))
		nbr_strlen = handle_prefix(nbr, prefix, tag);
	else if (tag->has_width && !tag->flag_minus && !tag->flag_zero)
		print_width_pad(nbr_strlen, tag->width, ' ');
	nbr = (nbr < 0 ? -nbr : nbr);
	if (tag->has_width && tag->flag_zero)
		print_width_pad(nbr_strlen - cut, tag->width, '0');
	else if (tag->has_precision)
		print_width_pad(ft_getsize(nbr), tag->precision, '0');
	ft_putnbr(nbr);
	if (tag->has_width && tag->flag_minus)
		print_width_pad(nbr_strlen - cut, tag->width, ' ');
	if (tag->has_width)
		return (ft_max(tag->width + cut, nbr_strlen));
	return (nbr_strlen);
}
コード例 #2
0
ファイル: convert_wstring.c プロジェクト: Qpaq/42Projects
int				print_wstring(t_tag *tag, wchar_t *str)
{
	int			str_len;

	str_len = tag->has_precision ? ft_strnwlen(str, tag->precision) :
										ft_strwlen(str);
	if (tag->has_width && !tag->flag_minus)
		print_width_pad(str_len, tag->width, tag->flag_zero ?
			'0' : ' ');
	ft_putnwstr(str, str_len);
	if (tag->has_width && tag->flag_minus)
		print_width_pad(str_len, tag->width, ' ');
	return (tag->has_width ? ft_max(tag->width, str_len) : str_len);
}
コード例 #3
0
ファイル: convert_wstring.c プロジェクト: Qpaq/42Projects
int				convert_wstring(t_tag *tag, va_list *args)
{
	wchar_t		*output_arg;

	output_arg = va_arg(*args, wchar_t *);
	if (output_arg != NULL)
		return (print_wstring(tag, output_arg));
	else if (tag->has_precision == 2)
	{
		print_width_pad(0, tag->width, '0');
		return (tag->width);
	}
	else
	{
		ft_putstr(NULL);
		return (6);
	}
}
コード例 #4
0
ファイル: convert_int.c プロジェクト: adevbungert/42-Projects
int					convert_int(t_tag *tag, va_list *args)
{
	intmax_t		output_arg;

	output_arg = va_arg(*args, intmax_t);
	output_arg = get_signed_length(output_arg, tag);
	if (output_arg == 0 && tag->has_precision &&
		(tag->precision == 1 || tag->precision == 0))
	{
		if (!tag->has_width)
			return (tag->precision = 0);
		else
		{
			print_width_pad(0, tag->width, ' ');
			return (tag->width);
		}
	}
	return (print_int(tag, output_arg));
}
コード例 #5
0
ファイル: convert_octal.c プロジェクト: Qpaq/42Projects
int		convert_octal(t_tag *tag, va_list *args)
{
	uintmax_t		output_arg;

	output_arg = va_arg(*args, uintmax_t);
	output_arg = get_unsigned_length(output_arg, tag);
	if (output_arg == 0 && tag->has_precision && !tag->flag_sharp
		&& (tag->precision == 1 || tag->precision == 0))
	{
		if (!tag->has_width)
			return (tag->precision = 0);
		else
		{
			print_width_pad(0, tag->width, ' ');
			return (tag->width);
		}
	}
	if (tag->has_precision == 1)
		return (print_uint(tag, output_arg, "01234567", NULL));
	else
		return (print_uint(tag, output_arg, "01234567", "0"));
}
コード例 #6
0
ファイル: convert_hexa.c プロジェクト: Qpaq/42Projects
int		convert_hexa(t_tag *tag, va_list *args)
{
	uintmax_t		output_arg;

	output_arg = va_arg(*args, uintmax_t);
	output_arg = get_unsigned_length(output_arg, tag);
	if (output_arg == 0 && tag->has_precision &&
		(tag->precision == 1 || tag->precision == 0))
	{
		if (!tag->has_width)
			return (tag->precision = 0);
		else
		{
			print_width_pad(0, tag->width, ' ');
			return (tag->width);
		}
	}
	if (tag->specifier == 'x')
		return (print_uint(tag, output_arg, "0123456789abcdef", "0x"));
	else
		return (print_uint(tag, output_arg, "0123456789ABCDEF", "0X"));
}