/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* pf_getflags.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/02/07 14:14:38 by tmaze #+# #+# */ /* Updated: 2019/02/11 11:34:27 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "libftprintf.h" void pf_initflags(t_flags *flags) { flags->convtype = none; flags->minus = '\0'; flags->sign = '\0'; flags->hash = '\0'; flags->width = 0; flags->precision = 0; flags->size = '\0'; } void pf_putflags(t_flags *flags) { printf("--- putflags ---\nconvtype-> %d\nminus-> %c\nsign-> %c\nhash-> %c\nwidth-> %d\nprecision-> %d\nsize-> %c\nbuffer-> '%s'\n", flags->convtype, flags->minus, flags->sign, flags->hash, flags->width, flags->precision, flags->size, flags->buffer); } size_t pf_getflags(const char *format, t_flags *flags) { size_t i; size_t j; static char convs[12] = "%cspdiouxXf\0"; pf_initflags(flags); i = 0; while (format[++i] && pf_strchr(convs, format[i]) == NULL) { if (format[i] == '-') flags->minus = '-'; if (format[i] == '#') flags->hash = '#'; if (format[i] == ' ' || format[i] == '+') flags->sign = format[i]; if (pf_isdigit(format[i]) || (format[i] == '.' && pf_isdigit(format[i + 1]))) { if (pf_isdigit(format[i])) flags->width = pf_atoi(&format[i]); else flags->precision = pf_atoi(&format[i + 1]); while (format[i + 1] && pf_isdigit(format[i + 1])) i++; continue ; } if (format[i] == 'h' || format[i] == 'l') { flags->size = format[i]; if (format[i + 1] && format[i + 1] == format[i]) flags->size = pf_toupper(format[++i]); } } j = 0; while (convs[j]) { if (format[i] == convs[j]) flags->convtype = j; j++; } return (i + 1); }