Skip to content

Commit

Permalink
barely finished padding on all types
Browse files Browse the repository at this point in the history
  • Loading branch information
Pixailz committed Dec 3, 2023
1 parent c8dba5f commit 0ba0ffc
Show file tree
Hide file tree
Showing 16 changed files with 354 additions and 278 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
## TODO

1. improve ft_printf
1. flags, implement `-`
1. move padding outside of integer to integrate with other format type
1. finish flags and padding for all types
1. implement size ...
1. error
1. implement singleton, utils like perror etc ..
1. doc
Expand Down
45 changes: 30 additions & 15 deletions inc/libft_print.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/22 13:16:35 by brda-sil #+# #+# */
/* Updated: 2023/12/01 10:38:06 by brda-sil ### ########.fr */
/* Updated: 2023/12/03 13:16:05 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -55,7 +55,7 @@

typedef enum e_fmt_type
{
FMT_UNKN = 0,
FMT_UNKN = -1,
FMT_PERC,
FMT_CHAR,
FMT_STRI,
Expand Down Expand Up @@ -157,8 +157,7 @@ typedef struct s_fmt_conf
/* ##### */

// print/ft_dprintf.c
int ft_dprintf_parse(int fd, va_list args, const char *format);
size_t ft_dprintf(int fd, const char *format, ...);
t_size ft_dprintf(int fd, const char *format, ...);

// print/ft_pdeb.c
t_size ft_pdeb(const char *format, ...);
Expand All @@ -167,8 +166,7 @@ t_size ft_pdeb(const char *format, ...);
int ft_perr(const char *format, ...);

// print/ft_printf.c
int ft_printf_parse(va_list args, const char *format);
size_t ft_printf(const char *format, ...);
t_size ft_printf(const char *format, ...);

// print/ft_printf/flag/hash.c
void ft_printf_flag_hash(char type, t_bin *flags);
Expand Down Expand Up @@ -207,21 +205,20 @@ void ft_printf_type_string(t_fmt_conf *conf, va_list args);
// print/ft_printf/fmt/unsigned.c
void ft_printf_type_unsigned(t_fmt_conf *conf, va_list args);

// print/ft_printf/ft_printf.c
void ft_printf_fmt_parse(int *i_fmt, int *i_buff, \
const char *format, va_list args);
void ft_printf_2_parse(va_list args, const char *format);
t_size ft_printf_2(const char *format, ...);

// print/ft_printf/ft_printf_buffer.c
void ft_printf_buff_reset(void);
char *ft_printf_buff_get(void);

// print/ft_printf/ft_printf_flags.c
t_bin ft_printf_fmt_get_flags(int *i, const char *format);

// print/ft_printf/ft_printf_main.c
void ft_printf_fmt_parse(int *i_fmt, int *i_buff, \
const char *format, va_list args);
void ft_printf_parse(va_list args, const char *format);

// print/ft_printf/ft_printf_padding.c
void ft_printf_type_padding_hex(t_fmt_conf *conf);
char ft_printf_type_padding_remove_sign(char *str);
void ft_printf_type_padding(t_fmt_conf *conf);

// print/ft_printf/ft_printf_precision.c
Expand All @@ -234,6 +231,24 @@ void ft_printf_fmt_get_type(t_fmt_conf *conf, va_list args);
// print/ft_printf/ft_printf_width.c
t_size ft_printf_fmt_get_width(int *i_fmt, const char *format);

// print/ft_printf/padding/hex.c
void ft_printf_type_padding_hex_hashtag(t_fmt_conf *conf, \
t_size to_pad, t_size str_len);
void ft_printf_type_padding_hex_post(t_fmt_conf *conf, char sign, \
t_size str_len);
void ft_printf_type_padding_hex_pad(t_fmt_conf *conf, t_size begin, \
t_size to_pad);
void ft_printf_type_padding_hex(t_fmt_conf *conf);

// print/ft_printf/padding/integer.c
void ft_printf_type_padding_integer_post(t_fmt_conf *conf, char sign);
void ft_printf_type_padding_integer_pad(t_fmt_conf *conf, t_size begin, \
t_size to_pad);
void ft_printf_type_padding_integer(t_fmt_conf *conf);

// print/ft_printf/padding/string.c
void ft_printf_type_padding_string(t_fmt_conf *conf);

// print/ft_putchar_fd.c
size_t ft_putchar_fd(char c, int fd);

Expand All @@ -253,10 +268,10 @@ size_t ft_putstr_fd(char const *s, int fd);
size_t ft_putunbr_fd(unsigned long n, int fd);

// print/ft_vdprintf.c
size_t ft_vdprintf(int fd, const char *format, va_list args);
t_size ft_vdprintf(int fd, const char *format, va_list args);

// print/ft_vprintf.c
size_t ft_vprintf(const char *format, va_list args);
t_size ft_vprintf(const char *format, va_list args);

/* ########################################################################## */

Expand Down
5 changes: 4 additions & 1 deletion mk/srcs.mk
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,16 @@ SRC_PRT := print/ft_dprintf.c \
print/ft_printf/fmt/integer.c \
print/ft_printf/fmt/string.c \
print/ft_printf/fmt/unsigned.c \
print/ft_printf/ft_printf.c \
print/ft_printf/ft_printf_buffer.c \
print/ft_printf/ft_printf_flags.c \
print/ft_printf/ft_printf_main.c \
print/ft_printf/ft_printf_padding.c \
print/ft_printf/ft_printf_precision.c \
print/ft_printf/ft_printf_type.c \
print/ft_printf/ft_printf_width.c \
print/ft_printf/padding/hex.c \
print/ft_printf/padding/integer.c \
print/ft_printf/padding/string.c \
print/ft_putchar_fd.c \
print/ft_putendl_fd.c \
print/ft_putnbr_base_fd.c \
Expand Down
78 changes: 8 additions & 70 deletions src/print/ft_dprintf.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,84 +5,22 @@
/* +:+ +:+ +:+ */
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/07/05 02:32:03 by brda-sil #+# #+# */
/* Updated: 2023/10/26 20:42:38 by brda-sil ### ########.fr */
/* Created: 2023/11/28 16:46:32 by brda-sil #+# #+# */
/* Updated: 2023/12/03 16:06:01 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft_print.h"

static int ft_put_addr(int fd, va_list args)
t_size ft_dprintf(int fd, const char *format, ...)
{
long long addr;

addr = va_arg(args, unsigned long long);
if (!addr)
return (ft_putstr_fd("(nil)", fd));
return (ft_putstr_fd("0x", fd) + \
ft_putstr_fd(ft_itoa_base(addr, "0123456789abcdef"), fd));
}

static int ft_sel_params(int fd, va_list args, char param_type)
{
if (param_type == 'c')
return (ft_putchar_fd(va_arg(args, int), fd));
else if (param_type == 's')
return (ft_putstr_fd(va_arg(args, char *), fd));
else if (param_type == 'd')
return (ft_putnbr_fd(va_arg(args, int), fd));
else if (param_type == 'i')
return (ft_putnbr_fd(va_arg(args, int), fd));
else if (param_type == 'u')
return (ft_putunbr_fd(va_arg(args, unsigned int), fd));
else if (param_type == 'p')
return (ft_put_addr(fd, args));
else if (param_type == 'x')
return (ft_putstr_fd(ft_itoa_base(va_arg(args, int), \
"0123456789abcdef"), fd));
else if (param_type == 'X')
return (ft_putstr_fd(ft_itoa_base(va_arg(args, int), \
"0123456789ABCDEF"), fd));
else if (param_type == '%')
return (ft_putchar_fd('%', fd));
return (0);
}

static int ft_checkparams(char c)
{
char *t;

t = FT_PRINTF_PARAMS_LIST;
while (*t)
if (c == *t++)
return (1);
return (0);
}

int ft_dprintf_parse(int fd, va_list args, const char *format)
{
int size;

size = 0;
while (*format)
{
if (*format == '%' && ft_checkparams(*(format + 1)))
size += ft_sel_params(fd, args, *(format++ + 1));
else
size += ft_putchar_fd(*format, fd);
format++;
}
return (size);
}

size_t ft_dprintf(int fd, const char *format, ...)
{
size_t size;
va_list args;
char *ptr_buffer;

size = 0;
ft_printf_buff_reset();
va_start(args, format);
size = ft_dprintf_parse(fd, args, format);
ft_printf_parse(args, format);
va_end(args);
return (size);
ptr_buffer = ft_printf_buff_get();
return (ft_putstr_fd(ptr_buffer, fd));
}
2 changes: 1 addition & 1 deletion src/print/ft_perr.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/10/12 19:34:27 by brda-sil #+# #+# */
/* Updated: 2023/10/27 01:05:27 by brda-sil ### ########.fr */
/* Updated: 2023/12/03 16:04:31 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down
80 changes: 9 additions & 71 deletions src/print/ft_printf.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,84 +5,22 @@
/* +:+ +:+ +:+ */
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/07/05 02:32:03 by brda-sil #+# #+# */
/* Updated: 2023/11/28 16:46:41 by brda-sil ### ########.fr */
/* Created: 2023/12/03 16:05:41 by brda-sil #+# #+# */
/* Updated: 2023/12/03 16:05:50 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft_print.h"
#include <libft_print.h>

static int ft_put_addr(va_list args)
t_size ft_printf(const char *format, ...)
{
long long addr;

addr = va_arg(args, unsigned long long);
if (!addr)
return (ft_putstr_fd("(nil)", 1));
return (ft_putstr_fd("0x", 1) + \
ft_putstr_fd(ft_itoa_base(addr, "0123456789abcdef"), 1));
}

static int ft_sel_params(va_list args, char param_type)
{
if (param_type == 'c')
return (ft_putchar_fd(va_arg(args, int), 1));
else if (param_type == 's')
return (ft_putstr_fd(va_arg(args, char *), 1));
else if (param_type == 'd')
return (ft_putnbr_fd(va_arg(args, int), 1));
else if (param_type == 'i')
return (ft_putnbr_fd(va_arg(args, int), 1));
else if (param_type == 'u')
return (ft_putunbr_fd(va_arg(args, unsigned int), 1));
else if (param_type == 'p')
return (ft_put_addr(args));
else if (param_type == 'x')
return (ft_putstr_fd(ft_itoa_base(va_arg(args, int), \
"0123456789abcdef"), 1));
else if (param_type == 'X')
return (ft_putstr_fd(ft_itoa_base(va_arg(args, int), \
"0123456789ABCDEF"), 1));
else if (param_type == '%')
return (ft_putchar_fd('%', 1));
return (0);
}

static int ft_checkparams(char c)
{
char *t;

t = FT_PRINTF_PARAMS_LIST;
while (*t)
if (c == *t++)
return (1);
return (0);
}

int ft_printf_parse(va_list args, const char *format)
{
int size;

size = 0;
while (*format)
{
if (*format == '%' && ft_checkparams(*(format + 1)))
size += ft_sel_params(args, *(format++ + 1));
else
size += ft_putchar_fd(*format, 1);
format++;
}
return (size);
}

size_t ft_printf(const char *format, ...)
{
size_t size;
va_list args;
char *ptr_buffer;

size = 0;
ft_printf_buff_reset();
va_start(args, format);
size = ft_printf_parse(args, format);
ft_printf_parse(args, format);
va_end(args);
return (size);
ptr_buffer = ft_printf_buff_get();
return (ft_putstr_fd(ptr_buffer, 1));
}
4 changes: 2 additions & 2 deletions src/print/ft_printf/fmt/hexa.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/28 19:20:11 by brda-sil #+# #+# */
/* Updated: 2023/12/01 11:19:54 by brda-sil ### ########.fr */
/* Updated: 2023/12/03 15:26:15 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -32,7 +32,7 @@ void ft_printf_type_hexa(t_fmt_conf *conf, va_list args)
t_size str_len;

i = va_arg(args, int);
i_str = ft_itoa_base(i, "0123456789abcdef");
i_str = ft_itoa_base(i, "0123456789ABCDEF");
str_len = ft_strlen(i_str);
ft_strncpy(conf->cur_type + ft_strlen(conf->cur_type), i_str, str_len);
free(i_str);
Expand Down
Loading

0 comments on commit 0ba0ffc

Please sign in to comment.