예제 #1
0
int			ft_print_signed_number(long long int arg, t_env *env)
{
	int		i;
	int		excep;

	i = 0;
	excep = (env->isprecision && env->precision == 0) ? 1 : 0;
	if (env->minus && ((env->precision < env->size && env->isprecision)
		|| !env->precision))
		i += ft_minus(arg, env, excep);
	else if (env->isprecision && env->precision >= env->size)
		i += ft_precision(arg, env, excep);
	else if (env->size)
		i += ft_size_sn(arg, env, excep);
	else if (env->plus || env->space)
		i += ft_cortex(arg, env, excep);
	else
	{
		if (!excep)
			ft_putnbr_ll(arg);
		i = excep ? 0 : intlen(arg);
		i += (arg < 0 ? 1 : 0);
		i += (arg == LLONG_MIN ? 18 : 0);
	}
	return (i);
}
예제 #2
0
static int	ft_minus(long long int arg, t_env *env, int excep)
{
	int		i;

	i = 0;
	if (env->plus || env->space || arg < 0)
		i++;
	if (env->plus && arg >= 0)
		ft_putchar('+');
	else if (env->space && arg >= 0)
		ft_putchar(' ');
	ft_minus_two(arg, env);
	if (!excep)
		ft_putnbr_ll(arg);
	i += env->precision > intlen(arg) ? env->precision : intlen(arg);
	if (env->size)
	{
		while (i < env->size)
		{
			ft_putchar(' ');
			i++;
		}
	}
	i -= excep ? intlen(arg) : 0;
	return (i);
}
예제 #3
0
static int	ft_precision(long long int arg, t_env *env, int excep)
{
	int		i;
	int		j;

	i = 0;
	j = 0;
	if (env->plus || env->space || arg < 0)
		j = 1;
	if (env->plus && arg >= 0)
		ft_putchar('+');
	else if (env->space && arg >= 0)
		ft_putchar(' ');
	if (arg < 0)
	{
		ft_putchar('-');
		arg = -arg;
	}
	i = excep && arg == 0 ? 0 : intlen(arg);
	while (i < env->precision && !excep)
	{
		ft_putchar('0');
		i++;
	}
	if (!excep || (intlen(arg) > env->precision && excep && arg != 0))
		ft_putnbr_ll(arg);
	return (i + j);
}
예제 #4
0
void			help_putnbr(t_data *data, long long n)
{
	if (n == -9223372036854775807 - 1)
	{
		ft_putnbr_ll(922337203685477580);
		write(1, "8", 1);
	}
	else
	{
		if (!(data->spec.dot == true && data->spec.dot_value == 0 && n == 0))
			ft_putnbr_ll(ft_absll(n));
		else if (data->spec.field_width > 0)
			write(1, " ", 1);
		else
			data->ret--;
	}
}
예제 #5
0
파일: add2.c 프로젝트: bndao/FT_LS-Linux
static int			neg_and_prec(intmax_t d, t_data *t)
{
	int			ret;

	ret = 0;
	ft_putchar('-');
	ret = handle_o_point(ft_strlen(ft_itoa_ll(d)) - 2, t, d);
	ret += ft_strlen(ft_itoa_ll(d));
	ft_putnbr_ll(-d);
	return (ret);
}
예제 #6
0
void				ft_putnbr_ll(intmax_t n)
{
	if (n > LLONG_MAX)
		ft_putstr("-1");
	if (n <= LLONG_MIN)
	{
		ft_putstr("-9");
		n = 223372036854775808;
	}
	if (n < 0)
	{
		ft_putchar('-');
		n = -n;
	}
	if (n > 9)
	{
		ft_putnbr_ll(n / 10);
		ft_putnbr_ll(n % 10);
	}
	else
		ft_putchar(48 + n);
}
예제 #7
0
void	ftpf_write_di_param(t_ftpf_env *e)
{
	if (e->isneg)
		ft_putchar(CONV_MINUS);
	if (e->param->ll == LLONG_MIN)
		ft_putstr("9223372036854775808");
	else
	{
		if (e->conversion == 'd' || e->conversion == 'i')
		{
			if (!e->mod[0] && e->param->i != INT_MIN)
				ft_putnbr_ll(ft_abs(e->param->i));
			else if (!ft_strcmp(e->mod, "h"))
				ft_putnbr(ft_abs(e->param->sh));
			else if (!ft_strcmp(e->mod, "hh"))
				ft_putnbr(ft_abs(e->param->sc));
			else
				ft_putnbr_ll(ft_abs_ll(e->param->ll));
		}
		else if (e->conversion == 'D')
			ft_putnbr_ll(ft_abs_ll(e->param->ll));
	}
}
예제 #8
0
static int	ft_cortex(long long int arg, t_env *env, int excep)
{
	int		i;

	i = 0;
	if (env->plus && arg >= 0)
		ft_putchar('+');
	else if (env->space && arg >= 0)
		ft_putchar(' ');
	if (!excep)
		ft_putnbr_ll(arg);
	i += excep ? 0 : intlen(arg);
	return (i + 1);
}
예제 #9
0
static void		ft_affichage_int(long long a, t_env *env)
{
	if (env->flag_pt != -1 || a != 0)
	{
		if (((env->flag_ll == 1 || env->flag_l == 1 || env->flag_j == 1 ||
			env->flag_z == 1) && env->conv == 'u') || env->conv == 'U')
			ft_putnbr_ull(a);
		else if ((env->conv == 'D' && env->flag_d == 0) &&
			a < 0 && a > -2147483648)
			ft_putnbr_ui(a);
		else
			ft_putnbr_ll(a);
	}
	else
		env->nb_char--;
}
예제 #10
0
파일: add2.c 프로젝트: bndao/FT_LS-Linux
int					handle_o_zero_d(intmax_t d, t_data *t, t_conv *c)
{
	if (t->o_zero && d < 0 && !t->prec && !t->width &&
			return_char(c->b_t_conv, '.'))
		return (ft_strlen(ft_itoa_ll(d)));
	else if (d < 0 && t->prec)
		return (neg_and_prec(d, t));
	else if (d == 0 && !t->prec && return_char(c->b_t_conv, '.'))
	{
		if (t->width)
			ft_putchar(' ');
		return (t->width ? 1 : 0);
	}
	else if (t->o_zero && t->width && d < 0 && !t->o_minus)
		return (c->d ? ft_strlen((ft_itoa_ll(d))) :
				t->width - ft_strlen(ft_itoa_ll(d)) + 1);
	else
		ft_putnbr_ll(d);
	return (ft_strlen(ft_itoa_ll(d)));
}