int print_p(t_data *data, va_list arg) { ft_printchar('0', data); ft_printchar('x', data); data->len_mod = 8; return (print_x(data, arg)); }
void ft_printwchar(wchar_t c, t_data *data) { if (c <= 127) ft_printchar(c, data); else if (c <= 2047) { ft_printchar(((c >> 6) & 31) | 192, data); ft_printchar((c & 63) | 128, data); }
int print_s(t_data *data, va_list arg) { int i; char *str; if (data->len_mod == 8) return (print_ls(data, arg)); str = va_arg(arg, char *); if (!str) { ft_printstr("(null)", data); return (1); } if (data->prec != -1) i = data->field - ft_min(ft_strlen(str), data->prec); else i = data->field - ft_strlen(str); if ((data->flag & 4) != 0) ft_printstr(str, data); while (i-- > 0) ft_printchar(' ', data); if ((data->flag & 4) == 0) ft_printstr(str, data); return (1); }
int print_lx(t_data *data, va_list arg) { char *nb; int i; char *mod; nb = what_uconv(arg, data, 16); if (ft_strcmp(nb, "0") == 0 && data->prec == 0) ft_str_empty(nb); mod = ((data->flag & 1) && ft_strcmp(nb, "0") != 0) ? "0X" : NULL; ft_strupper(nb); if (nb[0] == '-') i = data->field - ft_max(ft_strlen(nb) + ft_strnlen(mod), data->prec + 1); else i = data->field - ft_max(ft_strlen(nb), data->prec); if (data->prec != -1 && ((data->flag & 2) != 0)) data->flag = data->flag - 2; if ((data->flag & 4) != 0) print_nb_str(nb, data, mod); while ((i-- > 0) && (data->flag & 2) == 0) ft_printchar(' ', data); if ((data->flag & 4) == 0) print_nb_str(nb, data, mod); free(nb); return (1); }
static int specifier(va_list ap, char scf) { if (scf == 'c' || scf == 'C') return (ft_printchar(ap)); if (scf == 's' || scf == 'S') return (ft_printstr(ap)); if (scf == 'd' || scf == 'i') return (ft_printdec(ap)); if (scf == 'u' || scf == 'U') return (ft_printnbr(ap, scf)); if (scf == 'x' || scf == 'X' || scf == 'p') return (ft_printnbr(ap, scf)); if (scf == 'o' || scf == 'O') return (ft_printnbr(ap, scf)); else return (0); }
int print_ls(t_data *data, va_list arg) { int i; wchar_t *str; str = va_arg(arg, wchar_t *); if (!str) { ft_printstr("(null)", data); return (1); } i = data->field - sizewstr(str); if ((data->flag & 4) != 0) ft_printwstr(str, data); while (i-- > 0) ft_printchar(' ', data); if ((data->flag & 4) == 0) ft_printwstr(str, data); return (1); }