/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_printf.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2018/05/05 19:36:58 by tmaze #+# #+# */ /* Updated: 2018/05/05 19:38:02 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "libftprintf.h" int is_flag(char c) { return (c == '#' || c == '0' || c == '-' || c == '+' || c == ' '); } int ft_printf(const char *format, ...) { va_list ap; int i; char *ret; char flags[4]; int dim[2]; i = 0; ret = ft_strnew(0); va_start(ap, format); while (format[i]) { if (format[i] == '%') { dim[0] = 0; while (dim[0] < 4) flags[dim[0]++] = 0; dim[0] = 0; dim[1] = 0; i++; while (is_flag(format[i])) { if (format[i] == '-') { flags[0] = '-'; flags[2] = 0; } else if (format[i] == '+') flags[1] = '+'; else if (format[i] == ' ' && flags[1] == 0) flags[1] = ' '; else if (format[i] == '0' && flags[0] == 0) flags[2] = '0'; else flags[3] = '#'; i++; } dim[0] = ft_atoi(&format[i]); while (ft_isdigit(format[i])) i++; if (format[i] == '.') { i++; dim[1] = ft_atoi(&format[i]); } while (ft_isdigit(format[i])) i++; if (format[i] == '%') write(1, "%", 1); else if (format[i] == 'd' || format[i] == 'i') ret = convert_d_i(flags, dim, va_arg(ap, int)); write(1, ret, ft_strlen(ret)); } else write(1, &format[i], 1); i++; } ft_strdel(&ret); va_end(ap); return (0); }