int ft_putnstr(int fd, char *str, long int n) { if (str == NULL) return (ft_putnstr(fd, "(null)", n)); if (n == 0 || *str == '\0') return (0); else return (ft_putchar(fd, *str) + ft_putnstr(fd, str + 1, n - 1)); }
int print_str_precision1(t_formater *fmt, t_printf *pf, size_t len) { char c; int ret; int c_size; ret = 0; c_size = 0; c = '\0'; if (fmt->flag & F_ZERO) c = '0'; else if (fmt->width > 0) c = ' '; len = fmt->modifier == F_SL || fmt->type == T_GS ? \ printable_size(pf->w_str, len) : len; c_size = fmt->width - len; c_size = c_size < 0 ? 0 : c_size; if (!(fmt->flag & F_MINUS) && c != '\0') ret += print_n_char(c, c_size); ret += fmt->modifier == F_SL || fmt->type == T_GS ? \ ft_putstrnuni(pf->w_str, len) : ft_putnstr((char *)pf->w_str, len); if (fmt->flag & F_MINUS && c != '\0') ret += print_n_char(c, c_size); return (ret); }
void ft_putnstr(char *str, unsigned int offset) { if (str && *str) { if (offset) { if (ft_isprint(*str)) write(1, str, 1); else write(1, ".", 1); ft_putnstr(str + 1, offset - 1); } } }
void print_about(t_stat *stat) { time_t now; time_t mtime; time_t diff; char *mtime_str; now = time(NULL); mtime = stat->st_mtime; mtime_str = ctime(&mtime); diff = now - mtime; ft_putchar(' '); ft_putnstr(&(mtime_str[4]), 6); ft_putchar(' '); if (diff < (-3600 * 24 * 30.5 * 6) || diff > (3600 * 24 * 30.5 * 6)) { ft_putchar(' '); ft_putnstr(&(mtime_str[20]), 4); } else ft_putnstr(&(mtime_str[11]), 5); ft_putchar(' '); }
int printf_p(int fd, t_print_param *pp, unsigned long int p) { int total; int arg_size; total = 0; arg_size = ft_strlen("0x") + ft_baselen(p, 16); if ((pp->flags & PRINT_FLAG_LESS) == 0) while (total < pp->field_width - arg_size) total += ft_putchar(fd, ' '); total += ft_putnstr(fd, "0x", -1) + ft_putbaseb(fd, p, 16, 0); while (total < pp->field_width) total += ft_putchar(fd, ' '); return (total); }
int ft_putfloat(int fd, long double nbr, int p) { if (nbr < 0) return (ft_putchar(fd, '-') + ft_putfloat(fd, -nbr, p)); else if (nbr >= 1.0) return (ft_putint(fd, nbr) + ft_putchar(fd, '.') + ft_putfloat(fd, nbr - (long long int)nbr, -p)); else if (p > 0) return (ft_putnstr(fd, "0.", -1) + ft_putfloat(fd, nbr, -p)); else if (p == 0) return (0); else return (ft_putint(fd, nbr * 10) + ft_putfloat(fd, nbr * 10 - (long long int)(nbr * 10), p + 1)); }
void call_putstr(t_data *data) { char *str; t_specify *spec; spec = &data->spec; str = va_arg(*data->ap, char *); if (!str) str = "(null)"; spec->nb_len = ft_strlen(str); if (spec->dot == true && spec->dot_value < spec->nb_len) spec->nb_len = spec->dot_value; before_printing_s(data, spec); data->ret += ft_putnstr(str, spec->nb_len); after_printing_s(data, spec); }
int printf_s(int fd, t_print_param *pp, char *s) { int total; int arg_size; total = 0; arg_size = ft_strlen(s); if (pp->precision != -1) arg_size = pp->precision < arg_size ? pp->precision : arg_size; if ((pp->flags & PRINT_FLAG_LESS) == 0) while (total < pp->field_width - arg_size) total += ft_putchar(fd, pp->flags & PRINT_FLAG_ZERO ? '0' : ' '); total += ft_putnstr(fd, s, pp->precision); while (total < pp->field_width) total += ft_putchar(fd, ' '); return (total); }
int ft_printf(const char *format, ...) { int offset; int len; va_list ap; len = 0; va_start(ap, format); while ((offset = ft_findc(format, '%')) != -1) { format = ft_putnstr(format, offset); len += offset; if (format[0] == '%' && format[1] == '%') len += ft_putchar('%'); else if (format[0] == '%' && format[1] == 's') len += ft_putstr(va_arg(ap, char *)); else if (format[0] == '%' && (format[1] == 'i' || format[1] == 'd')) len += ft_putstr(ft_itoa(va_arg(ap, int))); else if (format[0] == '%' && format[1] == 'c')
ssize_t handle_str(char **format, va_list *args, t_arg *arg) { char *str; size_t strlen; if (arg->length == l) return (handle_wstr(format, args, arg)); else { str = va_arg(*args, char*); if (str == NULL) str = "(null)"; strlen = arg->got_precision ? ft_nstrlen(str, arg->precision) : ft_strlen(str); if (arg->got_width && !arg->right_pad) width_pad(strlen, arg->width, arg->pad_zeroes ? '0' : ' ', arg); ft_putnstr(str, strlen); if (arg->got_width && arg->right_pad) width_pad(strlen, arg->width, ' ', arg); return (arg->got_width ? ft_max(strlen, arg->width) : strlen); } }
int ft_flags_str(const char *fl, va_list ap, t_print *gl) { gl->i = 0; if (fl[gl->l - gl->f] == ' ' || fl[gl->l - gl->f] == '+' || fl[gl->l - gl->f] == '#') gl->f++; if (fl[gl->l - gl->f] != '%') if (fl[gl->l - gl->f - 1] != '%') return (-1); if (fl[gl->l - gl->f] == '-') { ft_putstr(gl->s); gl->str = va_arg(ap, char *); if (gl->str == NULL) gl->str = "(null)"; gl->p = ft_putnstr(gl->str, gl->p); if (gl->p != -2 && gl->p != -1 && gl->p <= (int)ft_strlen(gl->str)) gl->larg -= gl->p; else gl->larg -= ft_strlen(gl->str); while (gl->larg-- > 0 && gl->i++ < 2147483647) ft_putchar(' '); return (gl->p + ft_strlen(gl->s) + gl->i); }
int ft_noflag(va_list ap, t_print *gl) { int temp; char *str; int i; i = 0; str = va_arg(ap, char *); if (str == NULL) str = "(null)"; ft_putstr(gl->s); temp = gl->p; if (gl->p != -2 && gl->p != -1 && gl->p <= (int)ft_strlen(str)) gl->larg -= gl->p; else gl->larg -= ft_strlen(str); while (gl->larg-- > 0) { i++; ft_putchar(gl->c); } gl->p = ft_putnstr(str, temp); return (gl->p + ft_strlen(gl->s) + i); }