示例#1
0
int	ft_putnstr(int fd, char *str, long int n)
{
	if (str == NULL)
		return (ft_putnstr(fd, "(null)", n));
	if (n == 0 || *str == '\0')
		return (0);
	else
		return (ft_putchar(fd, *str) + ft_putnstr(fd, str + 1, n - 1));
}
示例#2
0
文件: prints.c 项目: cham-s/ft_printf
int				print_str_precision1(t_formater *fmt, t_printf *pf, size_t len)
{
	char	c;
	int		ret;
	int		c_size;

	ret = 0;
	c_size = 0;
	c = '\0';
	if (fmt->flag & F_ZERO)
		c = '0';
	else if (fmt->width > 0)
		c = ' ';
	len = fmt->modifier == F_SL || fmt->type == T_GS ? \
		  printable_size(pf->w_str, len) : len;
	c_size = fmt->width - len;
	c_size = c_size < 0 ? 0 : c_size;
	if (!(fmt->flag & F_MINUS) && c != '\0')
		ret += print_n_char(c, c_size);
	ret += fmt->modifier == F_SL || fmt->type == T_GS ? \
		   ft_putstrnuni(pf->w_str, len) : ft_putnstr((char *)pf->w_str, len);
	if (fmt->flag & F_MINUS && c != '\0')
		ret += print_n_char(c, c_size);
	return (ret);
}
示例#3
0
文件: ft_putnstr.c 项目: cmgnn/42
void	ft_putnstr(char *str, unsigned int offset)
{
	if (str && *str)
	{
		if (offset)
		{
			if (ft_isprint(*str))
				write(1, str, 1);
			else
				write(1, ".", 1);
			ft_putnstr(str + 1, offset - 1);
		}
	}
}
示例#4
0
void		print_about(t_stat *stat)
{
	time_t		now;
	time_t		mtime;
	time_t		diff;
	char		*mtime_str;

	now = time(NULL);
	mtime = stat->st_mtime;
	mtime_str = ctime(&mtime);
	diff = now - mtime;
	ft_putchar(' ');
	ft_putnstr(&(mtime_str[4]), 6);
	ft_putchar(' ');
	if (diff < (-3600 * 24 * 30.5 * 6) || diff > (3600 * 24 * 30.5 * 6))
	{
		ft_putchar(' ');
		ft_putnstr(&(mtime_str[20]), 4);
	}
	else
		ft_putnstr(&(mtime_str[11]), 5);
	ft_putchar(' ');
}
示例#5
0
int	printf_p(int fd, t_print_param *pp, unsigned long int p)
{
	int total;
	int arg_size;

	total = 0;
	arg_size = ft_strlen("0x") + ft_baselen(p, 16);
	if ((pp->flags & PRINT_FLAG_LESS) == 0)
		while (total < pp->field_width - arg_size)
			total += ft_putchar(fd, ' ');
	total += ft_putnstr(fd, "0x", -1) + ft_putbaseb(fd, p, 16, 0);
	while (total < pp->field_width)
		total += ft_putchar(fd, ' ');
	return (total);
}
示例#6
0
int	ft_putfloat(int fd, long double nbr, int p)
{
	if (nbr < 0)
		return (ft_putchar(fd, '-') + ft_putfloat(fd, -nbr, p));
	else if (nbr >= 1.0)
		return (ft_putint(fd, nbr) + ft_putchar(fd, '.')
				+ ft_putfloat(fd, nbr - (long long int)nbr, -p));
	else if (p > 0)
		return (ft_putnstr(fd, "0.", -1) + ft_putfloat(fd, nbr, -p));
	else if (p == 0)
		return (0);
	else
		return (ft_putint(fd, nbr * 10)
				+ ft_putfloat(fd, nbr * 10 - (long long int)(nbr * 10), p + 1));
}
示例#7
0
void	call_putstr(t_data *data)
{
	char		*str;
	t_specify	*spec;

	spec = &data->spec;
	str = va_arg(*data->ap, char *);
	if (!str)
		str = "(null)";
	spec->nb_len = ft_strlen(str);
	if (spec->dot == true && spec->dot_value < spec->nb_len)
		spec->nb_len = spec->dot_value;
	before_printing_s(data, spec);
	data->ret += ft_putnstr(str, spec->nb_len);
	after_printing_s(data, spec);
}
示例#8
0
int	printf_s(int fd, t_print_param *pp, char *s)
{
	int total;
	int arg_size;

	total = 0;
	arg_size = ft_strlen(s);
	if (pp->precision != -1)
		arg_size = pp->precision < arg_size ? pp->precision : arg_size;
	if ((pp->flags & PRINT_FLAG_LESS) == 0)
		while (total < pp->field_width - arg_size)
			total += ft_putchar(fd, pp->flags & PRINT_FLAG_ZERO ? '0' : ' ');
	total += ft_putnstr(fd, s, pp->precision);
	while (total < pp->field_width)
		total += ft_putchar(fd, ' ');
	return (total);
}
示例#9
0
int			ft_printf(const char *format, ...)
{
	int			offset;
	int			len;
	va_list		ap;

	len = 0;
	va_start(ap, format);
	while ((offset = ft_findc(format, '%')) != -1)
	{
		format = ft_putnstr(format, offset);
		len += offset;
		if (format[0] == '%' && format[1] == '%')
			len += ft_putchar('%');
		else if (format[0] == '%' && format[1] == 's')
			len += ft_putstr(va_arg(ap, char *));
		else if (format[0] == '%' && (format[1] == 'i' || format[1] == 'd'))
			len += ft_putstr(ft_itoa(va_arg(ap, int)));
		else if (format[0] == '%' && format[1] == 'c')
示例#10
0
ssize_t	handle_str(char **format, va_list *args, t_arg *arg)
{
	char	*str;
	size_t	strlen;

	if (arg->length == l)
		return (handle_wstr(format, args, arg));
	else
	{
		str = va_arg(*args, char*);
		if (str == NULL)
			str = "(null)";
		strlen = arg->got_precision ? ft_nstrlen(str, arg->precision) :
				ft_strlen(str);
		if (arg->got_width && !arg->right_pad)
			width_pad(strlen, arg->width, arg->pad_zeroes ? '0' : ' ', arg);
		ft_putnstr(str, strlen);
		if (arg->got_width && arg->right_pad)
			width_pad(strlen, arg->width, ' ', arg);
		return (arg->got_width ? ft_max(strlen, arg->width) : strlen);
	}
}
示例#11
0
int		ft_flags_str(const char *fl, va_list ap, t_print *gl)
{
	gl->i = 0;
	if (fl[gl->l - gl->f] == ' ' || fl[gl->l - gl->f] == '+' ||
		fl[gl->l - gl->f] == '#')
		gl->f++;
	if (fl[gl->l - gl->f] != '%')
		if (fl[gl->l - gl->f - 1] != '%')
			return (-1);
	if (fl[gl->l - gl->f] == '-')
	{
		ft_putstr(gl->s);
		gl->str = va_arg(ap, char *);
		if (gl->str == NULL)
			gl->str = "(null)";
		gl->p = ft_putnstr(gl->str, gl->p);
		if (gl->p != -2 && gl->p != -1 && gl->p <= (int)ft_strlen(gl->str))
			gl->larg -= gl->p;
		else
			gl->larg -= ft_strlen(gl->str);
		while (gl->larg-- > 0 && gl->i++ < 2147483647)
			ft_putchar(' ');
		return (gl->p + ft_strlen(gl->s) + gl->i);
	}
示例#12
0
int		ft_noflag(va_list ap, t_print *gl)
{
	int		temp;
	char	*str;
	int		i;

	i = 0;
	str = va_arg(ap, char *);
	if (str == NULL)
		str = "(null)";
	ft_putstr(gl->s);
	temp = gl->p;
	if (gl->p != -2 && gl->p != -1 && gl->p <= (int)ft_strlen(str))
		gl->larg -= gl->p;
	else
		gl->larg -= ft_strlen(str);
	while (gl->larg-- > 0)
	{
		i++;
		ft_putchar(gl->c);
	}
	gl->p = ft_putnstr(str, temp);
	return (gl->p + ft_strlen(gl->s) + i);
}