예제 #1
0
static void		ft_flag_diese(char **regex_printed,
		char specifier, char *format)
{
	char		*tmp;
	char		*add;
	int			i;
	int			zero;

	tmp = *regex_printed;
	i = 0;
	zero = 0;
	if (!**regex_printed && (specifier == 'x' || specifier == 'X'))
		return ;
	((*regex_printed)[0] == '0' && !(*regex_printed)[1]) ? (zero = 1) : (0);
	while ((*regex_printed)[i] == ' ' || ((*regex_printed)[i] == '0' && i < 2))
		i++;
	if (ft_precision(format, regex_printed, specifier, 0) > 0)
		i = 0;
	if (specifier == 'x' && !zero)
		add = ft_strjoin("0x", &(*regex_printed)[i]);
	if (specifier == 'X' && !zero)
		add = ft_strjoin("0X", &(*regex_printed)[i]);
	if ((specifier == 'o' || specifier == 'O') && !zero)
		add = ft_strjoin("0", &(*regex_printed)[i]);
	free(*regex_printed);
	*regex_printed = add;
	ft_fieldwidth(format, regex_printed, specifier);
}
예제 #2
0
void	foret_if_hexa(t_env2 *env2, unsigned long res_arg, char *c)
{
	if ((size_t)env2->val_precision > ft_strlen(env2->str))
		ft_precision(env2, ft_strlen(env2->str));
	if (env2->precision == 1 && env2->val_precision == 0 && res_arg == 0)
		env2->str[0] = 0;
	if (env2->taille_min != 0 &&
			(size_t)env2->taille_min > ft_strlen(env2->str))
		ft_taille_min(env2);
	if (env2->dieze && res_arg != 0)
	{
		if (env2->test == 0)
			env2->str = ft_strjoin_free(env2->str, c, env2->str);
		else
		{
			if (!env2->moins)
				dieze_x_no_moins(env2, c);
			else
			{
				env2->str = ft_strjoin(c, env2->str);
				if (env2->test == 1)
					(env2->str[ft_strlen(env2->str) - 2] == ' ') ?
						(env2->str[ft_strlen(env2->str) - 2] = 0) :
						(env2->str[ft_strlen(env2->str) - 1] = 0);
			}
		}
	}
}
예제 #3
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);
}
예제 #4
0
char		*ft_print_extra(char *format, char **regex_printed,
		char specifier, int size_s)
{
	int		i;
	int		precision;
	int		fieldwidth;
	char	flags[5];

	i = -1;
	ft_memset(&flags[0], 0, 5);
	precision = ft_precision(format, regex_printed, specifier, size_s);
	fieldwidth = ft_fieldwidth(format, regex_printed, specifier);
	ft_flags(format, specifier, precision, flags);
	ft_modif_flags(format, regex_printed, specifier, flags);
	return (*regex_printed);
}
예제 #5
0
static size_t		ft_paramtwo(t_frmt *arg_frmt, double *param, size_t len)
{
	char			type;

	type = arg_frmt->type;
	if (type == 'c')
		len += ft_putchar((char)param);
	else if (type == 'u' || type == 'D')
	{
		ft_precision(arg_frmt->precision, (int)param);
		len += ft_put_uint((long unsigned int)param);
	}
	else if (type == '%')
		len += ft_putchar('%');
	else if (type == 'p')
	{
		len += ft_putstr_l("0x7fff");
		len += ft_put_hex((unsigned int)param, 0);
	}
	else if (type == 'b')
		ft_put_bin((long long int)param);
	return (len);
}