int print_int(t_tag *tag, intmax_t nbr) { char *prefix; unsigned int nbr_strlen; unsigned int nbr_len; int cut; prefix = NULL; cut = 0; nbr_len = nbr_length(nbr, "0123456789"); nbr_strlen = nbr_strlength(tag, nbr, "0123456789"); if ((nbr < 0 || tag->flag_plus || tag->flag_space) && (cut += 1)) nbr_strlen = handle_prefix(nbr, prefix, tag); else if (tag->has_width && !tag->flag_minus && !tag->flag_zero) print_width_pad(nbr_strlen, tag->width, ' '); nbr = (nbr < 0 ? -nbr : nbr); if (tag->has_width && tag->flag_zero) print_width_pad(nbr_strlen - cut, tag->width, '0'); else if (tag->has_precision) print_width_pad(ft_getsize(nbr), tag->precision, '0'); ft_putnbr(nbr); if (tag->has_width && tag->flag_minus) print_width_pad(nbr_strlen - cut, tag->width, ' '); if (tag->has_width) return (ft_max(tag->width + cut, nbr_strlen)); return (nbr_strlen); }
int print_wstring(t_tag *tag, wchar_t *str) { int str_len; str_len = tag->has_precision ? ft_strnwlen(str, tag->precision) : ft_strwlen(str); if (tag->has_width && !tag->flag_minus) print_width_pad(str_len, tag->width, tag->flag_zero ? '0' : ' '); ft_putnwstr(str, str_len); if (tag->has_width && tag->flag_minus) print_width_pad(str_len, tag->width, ' '); return (tag->has_width ? ft_max(tag->width, str_len) : str_len); }
int convert_wstring(t_tag *tag, va_list *args) { wchar_t *output_arg; output_arg = va_arg(*args, wchar_t *); if (output_arg != NULL) return (print_wstring(tag, output_arg)); else if (tag->has_precision == 2) { print_width_pad(0, tag->width, '0'); return (tag->width); } else { ft_putstr(NULL); return (6); } }
int convert_int(t_tag *tag, va_list *args) { intmax_t output_arg; output_arg = va_arg(*args, intmax_t); output_arg = get_signed_length(output_arg, tag); if (output_arg == 0 && tag->has_precision && (tag->precision == 1 || tag->precision == 0)) { if (!tag->has_width) return (tag->precision = 0); else { print_width_pad(0, tag->width, ' '); return (tag->width); } } return (print_int(tag, output_arg)); }
int convert_octal(t_tag *tag, va_list *args) { uintmax_t output_arg; output_arg = va_arg(*args, uintmax_t); output_arg = get_unsigned_length(output_arg, tag); if (output_arg == 0 && tag->has_precision && !tag->flag_sharp && (tag->precision == 1 || tag->precision == 0)) { if (!tag->has_width) return (tag->precision = 0); else { print_width_pad(0, tag->width, ' '); return (tag->width); } } if (tag->has_precision == 1) return (print_uint(tag, output_arg, "01234567", NULL)); else return (print_uint(tag, output_arg, "01234567", "0")); }
int convert_hexa(t_tag *tag, va_list *args) { uintmax_t output_arg; output_arg = va_arg(*args, uintmax_t); output_arg = get_unsigned_length(output_arg, tag); if (output_arg == 0 && tag->has_precision && (tag->precision == 1 || tag->precision == 0)) { if (!tag->has_width) return (tag->precision = 0); else { print_width_pad(0, tag->width, ' '); return (tag->width); } } if (tag->specifier == 'x') return (print_uint(tag, output_arg, "0123456789abcdef", "0x")); else return (print_uint(tag, output_arg, "0123456789ABCDEF", "0X")); }