From 96260847a2ba661635abd423c2abce7dac19e91c Mon Sep 17 00:00:00 2001 From: = <=> Date: Thu, 30 Oct 2025 17:33:29 +0100 Subject: [PATCH] String printing --- a.out | Bin 0 -> 21480 bytes ft_printf.c | 105 +++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 83 insertions(+), 22 deletions(-) create mode 100755 a.out diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..5fa0ae84acb03c21d3f734698e4e1effaa4f014d GIT binary patch literal 21480 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 literal 0 HcmV?d00001 diff --git a/ft_printf.c b/ft_printf.c index a1dcda5..ac6b395 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -6,12 +6,11 @@ /* By: agilliar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/10/29 14:24:47 by agilliar #+# #+# */ -/* Updated: 2025/10/30 12:37:41 by agilliar ### ########.fr */ +/* Updated: 2025/10/30 17:33:02 by agilliar ### ########.fr */ /* */ /* ************************************************************************** */ #include -#include #include #include @@ -81,13 +80,69 @@ typedef struct s_format t_sign_flag sign_flag; t_justify justify; t_num_prefix num_prefix; - size_t width; + int width; t_padding_type padding_type; - size_t precision; + int precision; bool enable_precision; } t_format; -int ft_putformat(const t_format *format, t_step_arg arg); +int ft_putchar_sim(char c, bool simulated) +{ + if (!simulated && write(STDOUT_FILENO, &c, 1) != 1) + return (-1); + return (1); +} + +int ft_putnchar(char c, int n) +{ + int i; + + i = 0; + while (i++ < n) + if (ft_putchar_sim(c, false) == -1) + return (-1); + return (n); +} + + +int ft_putformat_char(const t_format *format, t_step_arg arg, bool simulated) +{ + return (ft_putchar_sim(arg.v_int, simulated)); +} + +int ft_putformat_str(const t_format *format, t_step_arg arg, bool simulated) +{ + int i; + const char *s; + + i = 0; + s = arg.v_ptr; + if (!s) + s = "(null)"; + while ((!format->enable_precision || format->precision > i) && s[i]) + if (ft_putchar_sim(s[i++], simulated) == -1) + return (-1); + return (i); +} + +int ft_putformat(const t_format *format, t_step_arg arg) +{ + int (*f)(const t_format *, t_step_arg, bool); + int len; + + if (format->specifier == SPECIFIER_CHAR) + f = ft_putformat_char; + else if (format->specifier == SPECIFIER_STRING) + f = ft_putformat_str; + else + return (-1); + len = f(format, arg, true); + if ((format->justify == JUSTIFY_LEFT && f(format, arg, false) == -1) + || (format->width > len && ft_putnchar(' ', format->width - len) == -1) + || (format->justify == JUSTIFY_RIGHT && f(format, arg, false) == -1)) + return (-1); + return (len); +} t_format ft_format_default(void) { @@ -104,9 +159,9 @@ t_format ft_format_default(void) return (res); } -size_t ft_parse_num(const char **s) +int ft_parse_num(const char **s) { - size_t res; + int res; res = 0; while (**s >= '0' && **s <= '9') @@ -182,7 +237,9 @@ t_format ft_parse_format(const char **s) res = ft_format_default(); while (ft_parse_flag(**s, &res)) - s++; + (*s)++; + ft_parse_width(s, &res); + ft_parse_precision(s, &res); res.specifier = ft_parse_specifier(*((*s)++)); return (res); } @@ -191,18 +248,16 @@ int ft_print_step(const char **s, t_format *format, t_step_arg arg) { int written; + if (format->specifier == SPECIFIER_NONE && **s != '%') - { - if (write(STDOUT_FILENO, (*s)++, 1) != 1) - return (-1); - return (1); - } + return (ft_putchar_sim(*((*s)++), false)); if (format->specifier != SPECIFIER_NONE) { written = ft_putformat(format, arg); *format = ft_format_default(); return (written); } + (*s)++; *format = ft_parse_format(s); return (0); } @@ -223,24 +278,30 @@ int ft_printf(const char *s, ...) va_list args; int count; int written; - t_format step; + t_format format; t_step_arg arg; va_start(args, s); count = 0; - step.specifier = SPECIFIER_NONE; - while (*s) + format = ft_format_default(); + while (*s || format.specifier != SPECIFIER_NONE) { - written = ft_print_step(&s, &step, arg); - if (written < 0) - return (written); + written = ft_print_step(&s, &format, arg); + if (written == -1) + return (-1); count += written; - if (specifier_to_step(step.specifier) == STEP_INT) + if (specifier_to_step(format.specifier) == STEP_INT) arg.v_int = va_arg(args, int); - if (specifier_to_step(step.specifier) == STEP_UINT) + if (specifier_to_step(format.specifier) == STEP_UINT) arg.v_uint = va_arg(args, unsigned); - if (specifier_to_step(step.specifier) == STEP_PTR) + if (specifier_to_step(format.specifier) == STEP_PTR) arg.v_ptr = va_arg(args, void *); } + va_end(args); return (count); } + +int main(void) +{ + ft_printf("c%-10s", NULL); +} -- 2.51.0