static int octal_min_h(t_struct data, unsigned short nbr, int i) { int j; int k; int l; l = data.flag & 1 ? 2 : 0; k = 0; j = i; if (data.flag & 1 && data.min != 0 && data.flag & 2) { if (data.flag & 1 && nbr != 0) k += pf_putchar('0'); while (k < data.min - (data.prec < j ? 0 : data.prec)) k += pf_putchar(data.flag & 2 ? '0' : ' '); } else { while (k < data.min - (data.prec < j ? j : data.prec)) k += pf_putchar(data.flag & 2 ? '0' : ' '); if (data.flag & 1 && nbr != 0) k += pf_putchar('0'); } k += put_prec_nbr(data.prec - j); if (data.prec != -1 || nbr != 0) pf_putoctal_noflag_h(nbr); return (k); }
static int deci_min_l(t_struct data, long nbr, int i) { int j; int k; k = 0; j = i; i = (data.flag & 8 || data.flag & 16) && !(data.flag & 2) ? 1 : 0; i += nbr < 0 && data.prec == j ? 1 : 0; i += nbr < 0 && data.prec > 0 && !(data.flag & 2) && j < data.prec ? 1 : 0; if (data.prec > 0 && data.flag & 2) data.flag -= 2; if (nbr < 0 && data.flag & 2) ft_putchar('-'); if ((data.flag & 16 || data.flag & 8) && nbr >= 0 && data.flag & 2) k += pf_putchar(data.flag & 8 ? '+' : ' '); while (k < data.min - (data.prec > j ? data.prec : j) - i) k += pf_putchar(data.flag & 2 ? '0' : ' '); if (nbr >= 0 && !(data.flag & 2) && (data.flag & 16 || data.flag & 8)) k += pf_putchar(data.flag & 8 ? '+' : ' '); if (nbr < 0 && data.min > 0 && !(data.flag & 2) && !(data.flag & 8)) ft_putchar('-'); k += put_prec_nbr(data.prec - j + (data.prec >= j && nbr < 0 ? 1 : 0)); if (data.prec != -1) ft_putnbr_l(nbr, 2); return (k); }
void conv_str(char *str, t_flags *flags, int *ret) { int counter; char *tmp; counter = 0; tmp = str; while (*tmp && (counter < flags->precision || flags->precision < 0)) { counter++; tmp += 1; } flags->padding -= counter; while (!flags->left && flags->padding > 0) { flags->padding -= 1; flags->zero ? pf_putchar('0', ret) : pf_putchar(' ', ret); } pf_putstr(str, flags, ret); while (flags->left && flags->padding > 0) { flags->padding -= 1; pf_putchar(' ', ret); } }
void conv_lstr(wchar_t *str, t_flags *flags, int *ret) { int counter; wchar_t *tmp; tmp = str; counter = 0; while (*tmp && (counter < flags->precision || flags->precision < 0)) { counter += nb_bytes(*tmp); tmp += 1; } if (flags->precision > 0 && counter > flags->precision) counter -= nb_bytes(*(tmp - 1)); flags->padding -= counter; while (!flags->left && flags->padding > 0) { flags->padding -= 1; flags->zero ? pf_putchar('0', ret) : pf_putchar(' ', ret); } pf_putwstr(str, flags, ret); while (flags->left && flags->padding > 0) { flags->padding -= 1; pf_putchar(' ', ret); } }
static int octal_min_j(t_struct data, uintmax_t nb, int i) { int j; int ret; int l; l = data.flag & 1 ? 2 : 0; ret = 0; j = i; if (data.flag & 1 && data.min != 0 && data.flag & 2) { if (data.flag & 1 && nb != 0) ret += pf_putchar('0'); while (ret < data.min - (data.prec < j ? 0 : data.prec)) ret += pf_putchar(data.flag & 2 ? '0' : ' '); } else { while (ret < data.min - (data.prec < j ? j : data.prec)) ret += pf_putchar(data.flag & 2 ? '0' : ' '); if (data.flag & 1 && nb != 0) ret += pf_putchar('0'); } ret += put_prec_nb(data.prec - j); if (data.prec != -1 || nb != 0) pf_putoctal_noflag_j(nb); return (ret); }
static int deci_min_h(t_struct data, short nb, int i) { int j; int ret; ret = 0; j = i; i = (data.flag & 8 || data.flag & 16) && !(data.flag & 2) ? 1 : 0; i += nb < 0 && data.prec == j ? 1 : 0; i += nb < 0 && data.prec > 0 && !(data.flag & 2) && j < data.prec ? 1 : 0; if (data.prec > 0 && data.flag & 2) data.flag -= 2; if (nb < 0 && data.flag & 2) ft_putchar('-'); if ((data.flag & 16 || data.flag & 8) && nb >= 0 && data.flag & 2) ret += pf_putchar(data.flag & 8 ? '+' : ' '); while (ret < data.min - (data.prec > j ? data.prec : j) - i) ret += pf_putchar(data.flag & 2 ? '0' : ' '); if (nb >= 0 && !(data.flag & 2) && (data.flag & 16 || data.flag & 8)) ret += pf_putchar(data.flag & 8 ? '+' : ' '); if (nb < 0 && data.min > 0 && !(data.flag & 2) && !(data.flag & 8)) ft_putchar('-'); ret += put_prec_nb(data.prec - j + (data.prec >= j && nb < 0 ? 1 : 0)); if (data.prec != -1) ft_putnb_h(nb, 2); return (ret); }
int hexa_min_ll(t_struct data, unsigned long long nb, int i, int lower) { int j; int ret; int l; l = data.flag & 1 ? 2 : 0; ret = 0; j = i; if (data.flag & 1 && data.min != 0 && data.flag & 2) { if (data.flag & 0b00000001 && nb != 0) ret += pf_putstr(lower == 1 ? "0x" : "0X"); while (ret < data.min - (data.prec < j ? 0 : data.prec)) ret += pf_putchar(data.flag & 0b00000010 ? '0' : ' '); } else { while (ret < data.min - (data.prec < j ? j : data.prec)) ret += pf_putchar(data.flag & 0b00000010 ? '0' : ' '); if (data.flag & 0b00000001 && nb != 0) ret += pf_putstr(lower == 1 ? "0x" : "0X"); } ret += put_prec_nb(data.prec - j); pf_puthexa_noflag_ll(nb, lower); return (ret); }
static int octal_hash_j(t_struct data, uintmax_t nb, int i) { int j; int ret; ret = 0; j = i; if (data.flag & 1 && nb != 0) ret += pf_putchar('0'); ret += put_prec_nb(data.prec - j); if (data.prec != -1) pf_putoctal_noflag_j(nb); while (ret < data.min + (data.flag & 1 ? 2 : 0) - j) ret += pf_putchar(' '); return (ret); }
int pf_until_conv(size_t *i, va_list ap, char const *str) { t_struct data; *i += 1; data = init_data(); if (str[*i] == '%') return (pf_putchar(str[*i++])); while (str[*i] && str[*i] != '%' && pf_isconver(str[*i]) == 0) { if (pf_isflag(str[*i]) == 0 && pf_isclong(str[*i], str[*i + 1]) == 0 && pf_isnum(str[*i]) == 0 && str[*i] != '.') { *i -= 1; return (0); } pf_fill_struct((char *)str, i, &data, ap); *i += 1; } if (data.min < 0) { data.flag = data.flag | 4; data.min = -data.min; } if (str[*i] == '\0') return (0); return (pf_print_var(data, str[*i], ap)); }
static int octal_hash_h(t_struct data, unsigned short nbr, int i) { int j; int k; k = 0; j = i; if (data.flag & 1 && nbr != 0) k += pf_putchar('0'); k += put_prec_nbr(data.prec - j); if (data.prec != -1) pf_putoctal_noflag_h(nbr); while (k < data.min + (data.flag & 1 ? 2 : 0) - j) k += pf_putchar(' '); return (k); }
static int deci_hash_l(t_struct data, long nbr, int i) { int j; int k; k = 0; j = i; if ((data.flag & 16 || data.flag & 8) && nbr >= 0) k += pf_putchar(data.flag & 8 ? '+' : ' '); k += put_prec_nbr(data.prec - j); if (nbr < 0 && data.prec != -1) ft_putchar('-'); if (data.prec != -1) ft_putnbr_l(nbr, 2); while (k < data.min + (data.flag & 1 ? 2 : 0) - j) k += pf_putchar(' '); return (k); }
static int deci_hash_h(t_struct data, short nb, int i) { int j; int ret; ret = 0; j = i; if ((data.flag & 16 || data.flag & 8) && nb >= 0) ret += pf_putchar(data.flag & 8 ? '+' : ' '); ret += put_prec_nb(data.prec - j); if (nb < 0 && data.prec != -1) ft_putchar('-'); if (data.prec != -1) ft_putnb_h(nb, 2); while (ret < data.min + (data.flag & 1 ? 2 : 0) - j) ret += pf_putchar(' '); return (ret); }
int char_conv_l(t_struct data, wchar_t ch) { int ret; ret = 0; if (data.flag & 4) { ret += pf_putcharuni(ch); while (ret < data.min) ret += pf_putchar(' '); } else { while (ret < data.min - 1) ret += pf_putchar(' '); ret += pf_putcharuni(ch); } return (ret); }
static int deci_prec_l(t_struct data, long nbr, int i) { int k; k = 0; k += put_prec_nbr(data.prec - i + (nbr < 0 ? 1 : 0)); if ((data.flag & 16 || data.flag & 8) && nbr >= 0) k += pf_putchar(data.flag & 8 ? '+' : ' '); ft_putnbr_l(nbr, 2); return (k); }
static int deci_prec_h(t_struct data, short nb, int i) { int ret; ret = 0; ret += put_prec_nb(data.prec - i + (nb < 0 ? 1 : 0)); if ((data.flag & 16 || data.flag & 8) && nb >= 0) ret += pf_putchar(data.flag & 8 ? '+' : ' '); ft_putnb_h(nb, 2); return (ret); }
static int octal_prec_h(t_struct data, unsigned short nbr, int i) { int k; k = 0; k += put_prec_nbr(data.prec - i); if (data.flag & 1) k += pf_putchar('0'); if (data.prec != -1) pf_putoctal_noflag_h(nbr); return (k); }
static int mem_min(t_struct data, int j, size_t nbr) { int k; k = 0; ft_putstr("0x"); k += put_prec_nbr(data.prec > j - 2 ? data.prec - (j - 2) : 0); k += pf_retmem_noclong(nbr, 0); while (k < data.min) k += pf_putchar(data.flag & 2 ? '0' : ' '); return (k); }
static int octal_prec_j(t_struct data, uintmax_t nb, int i) { int ret; ret = 0; ret += put_prec_nb(data.prec - i); if (data.flag & 1) ret += pf_putchar('0'); if (data.prec != -1) pf_putoctal_noflag_j(nb); return (ret); }
static int string_size_l(t_struct data, wchar_t *str, size_t k) { size_t i; size_t j; size_t l; size_t m; j = str == NULL ? 0 : (int)ft_strwlen(str); i = 0; m = (size_t)data.min; l = (size_t)data.prec; if (data.prec == 0) while (k < data.min - j) k += pf_putchar(data.flag & 2 ? '0' : ' '); else while (k < (size_t)data.min - (l > j ? j : data.prec) && k < m) k += pf_putchar(data.flag & 2 ? '0' : ' '); if (j > 0 && data.prec != -1) while (i < j && (data.prec == 0 ? i < j : i < l) && str[i]) k += pf_putcharuni(str[i++]); return (k); }
static int unsigned_hash_hh(t_struct data, unsigned char nbr, int i) { int j; int k; k = 0; j = i; k += put_prec_nbr(data.prec - j); if (data.prec != -1) ft_putunsigned_hh(nbr, 2); while (k < data.min + (data.flag & 1 ? 2 : 0) - j) k += pf_putchar(' '); return (k); }
static int string_prec_l(t_struct data, wchar_t *str, size_t k) { size_t i; size_t j; i = 0; j = str == NULL ? 0 : (int)ft_strwlen(str); while (k < (data.min - j > 0 ? 0 : data.min - j)) k += pf_putchar(data.flag & 2 ? '0' : ' '); if (data.prec != -1) while (i < ((size_t)data.prec > j ? j : data.prec) && str[i]) k += pf_putcharuni(str[i++]); return (k); }
static int unsigned_hash_ll(t_struct data, unsigned long long nb, int i) { int j; int ret; ret = 0; j = i; ret += put_prec_nb(data.prec - j); if (data.prec != -1) ft_putunsigned_ll(nb, 2); while (ret < data.min + (data.flag & 1 ? 2 : 0) - j) ret += pf_putchar(' '); return (ret); }
int hexa_hash_ll(t_struct data, unsigned long long nb, int i, int lower) { int j; int ret; ret = 0; j = i; if (data.flag & 0b00000001 && nb != 0) ret += pf_putstr(lower == 1 ? "0x" : "0X"); ret += put_prec_nb(data.prec - j); pf_puthexa_noflag_ll(nb, lower); while (ret < data.min + (data.flag & 1 ? 2 : 0) - j) ret += pf_putchar(' '); return (ret); }
static int mem_conv_prec(t_struct data, size_t nbr, int j, int k) { if (data.flag & 2) ft_putstr("0x"); while (k < data.min - j) k += pf_putchar(data.flag & 2 ? '0' : ' '); if (!(data.flag & 2)) ft_putstr("0x"); k += put_prec_nbr(0); if (data.prec == -1) k += pf_retmem_noclong(nbr, 2) - 1; else k += pf_retmem_noclong(nbr, 0); return (k); }
static int string_min_l(t_struct data, wchar_t *str, size_t k) { int i; size_t j; size_t l; j = str == NULL ? 0 : (int)ft_strwlen(str); i = 0; l = (size_t)data.prec; if (data.prec != -1) while (k < j && (data.prec == 0 ? k < j : k < l) && str[i]) k += pf_putcharuni(str[i++]); while (k < (size_t)data.min) k += pf_putchar(data.flag & 2 ? '0' : ' '); return (k); }
void pf_putstr(char *str, t_flags *flags, int *ret) { if (!str) { write(1, "(null)", 6); *ret += 6; return ; } while (*str && flags->precision) { if (flags->precision > 0) flags->precision -= 1; if (flags->precision >= 0 || flags->precision == -4) pf_putchar(*str, ret); str += 1; } }
static int unsigned_min_ll(t_struct data, unsigned long long nb, int i) { int j; int ret; ret = 0; j = i; i = (data.flag & 8 || data.flag & 16) && !(data.flag & 2) ? 1 : 0; i += data.prec == j ? 1 : 0; if (data.prec > 0 && data.flag & 2) data.flag -= 2; while (ret < data.min - (data.prec > j ? data.prec : j) - i) ret += pf_putchar(data.flag & 2 ? '0' : ' '); ret += put_prec_nb(data.prec - j); if (data.prec != -1) ft_putunsigned_ll(nb, 2); return (ret); }
static int unsigned_min_hh(t_struct data, unsigned char nbr, int i) { int j; int k; k = 0; j = i; i = (data.flag & 8 || data.flag & 16) && !(data.flag & 2) ? 1 : 0; i += data.prec == j ? 1 : 0; if (data.prec > 0 && data.flag & 2) data.flag -= 2; while (k < data.min - (data.prec > j ? data.prec : j) - i) k += pf_putchar(data.flag & 2 ? '0' : ' '); k += put_prec_nbr(data.prec - j); if (data.prec != -1) ft_putunsigned_hh(nbr, 2); return (k); }
/* ** Writes width - done chars ** The char written depends on the attribut */ int filled_width(int width, int done , int attribut, int nb) { char c; int occur; occur = width - done; if (occur < 0) { occur = 0; done = width; } if ((attribut & att_zero) && nb) c = '0'; else c = ' '; while (done++ < width) pf_putchar(c); return (occur); }
int mem_conv_noclong(t_struct data, size_t nbr) { int k; int j; k = 0; j = pf_retmem_noclong(nbr, 2); if (data.flag & 4) k += mem_min(data, j, nbr); else if (data.prec < 1) k += mem_conv_prec(data, nbr, j, k); else { while (k < data.min - (data.prec > j ? data.prec + 2 : j)) k += pf_putchar(data.flag & 2 ? '0' : ' '); ft_putstr("0x"); k += put_prec_nbr(data.prec > j - 2 ? data.prec - (j - 2) : 0); k += pf_retmem_noclong(nbr, 0); } return (k); }