t_format *get_format(char **s) { t_format *opt; char *p; char *tmp; printf("checking format %s!\n", *s); if ((p = strdup(*s)) == NULL) return (NULL); tmp = p; if ((opt = malloc(sizeof(t_format))) == NULL) return (NULL); opt->arg = ft_get_nbrs(&tmp, 0); if (*tmp != '$') opt->arg = 0; opt->flags = ft_flags(&tmp); opt->width = ft_get_nbrs(&tmp, 0); opt->precision = ft_get_nbrs(&tmp, '.'); opt->type = ft_mod(&tmp); opt->bad_type = ft_get_type(*tmp); opt->type |= opt->bad_type; printf("got that type ! is it good ? %hu\n", opt->type); opt->bad_type = (opt->bad_type) ? opt->bad_type : 0; *s += tmp + 1 - p; ft_memdel((void **)&p); return (opt); }
void ft_init_flags(char **str, struct s_flags *flags, int *x) { if (str[*x][2] != '\0') ft_usage(); if (ft_flags2(str, flags, x) && ft_flags(str, flags, x)) { ft_usage(); exit(EXIT_FAILURE); } (*x)++; if (str[*x] && str[*x][0] == '-') ft_init_flags(str, flags, x); }
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); }
void ft_flags(const char *format, t_env1 *env1, t_env2 *env2) { if (format[env1->taille_f] == '#') env2->dieze = 1; if (format[env1->taille_f] == ' ') env2->count_space = 1; if (format[env1->taille_f] == '+') env2->plus = 1; if (format[env1->taille_f] == '-') env2->moins = 1; if (format[env1->taille_f] == '0') env2->zero = 1; env1->taille_f++; if (ft_strchr("#+-0 ", format[env1->taille_f])) ft_flags(format, env1, env2); }
t_format *get_format(char **s, va_list va, int deep) { t_format *opt; if ((opt = malloc(sizeof(t_format))) == NULL) return (NULL); opt->precision = -1; opt->width = -1; opt->arg = -1; opt->type = 0; opt->flags = ft_flags(s); ft_nbrs(s, va, opt); if (ft_get_type(s, opt)) if (ft_strchr("0123456789#.+- *'", opt->spec) != NULL) opt = ft_merge(opt, get_format(s, va, deep + 1)); if (deep == 0 && **s) ++(*s); return (ft_strip(opt)); }