nicolas-arnaud
2 years ago
13 changed files with 387 additions and 96 deletions
@ -1,3 +1,3 @@ |
|||
[submodule "libft"] |
|||
path = libft |
|||
url = git@45.76.46.66:narnaud/libft.git |
|||
url = git@narnaud.net:nicolas-arnaud/libft.git |
|||
|
@ -1 +1 @@ |
|||
Subproject commit 0ba7ffd7c6a28b0f02cc937d32773fb9d4095eca |
|||
Subproject commit 840a26935181c35cd8416853f1aad9a0bf99621f |
@ -0,0 +1,8 @@ |
|||
#include "ft_printf.h" |
|||
|
|||
|
|||
int main(void) |
|||
{ |
|||
ft_printf("%.4s\n", "Hello world!\n"); |
|||
return 0; |
|||
} |
@ -0,0 +1,87 @@ |
|||
#include "ft_printf.h" |
|||
|
|||
char *int_opts_transform(int n, char *nbr, t_opts *opts) |
|||
{ |
|||
if (opts->plus && n>=0) |
|||
nbr = ft_strjoin("+", nbr); |
|||
else if (opts->space && n>=0) |
|||
nbr = ft_strjoin(" ", nbr); |
|||
else if (opts->precision == 0 && opts->dot && n == 0 && |
|||
opts->len) |
|||
nbr = ft_strdup(""); |
|||
else |
|||
nbr = ft_strdup(nbr); |
|||
|
|||
if (opts->precision > 0) |
|||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|||
else if (opts->zero && !opts->dot) |
|||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|||
|
|||
return (nbr); |
|||
} |
|||
|
|||
char *uint_opts_transform(unsigned int n, char *nbr, t_opts *opts) |
|||
{ |
|||
if (opts->plus) |
|||
nbr = ft_strjoin("+", nbr); |
|||
else if (opts->space) |
|||
nbr = ft_strjoin(" ", nbr); |
|||
else if (opts->precision == 0 && opts->dot && n == 0 && |
|||
opts->len) |
|||
nbr = ft_strdup(""); |
|||
else |
|||
nbr = ft_strdup(nbr); |
|||
|
|||
if (opts->precision > 0) |
|||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|||
else if (opts->zero && !opts->dot) |
|||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|||
|
|||
return (nbr); |
|||
} |
|||
|
|||
char *ptr_opts_transform(char *nbr, t_opts *opts) |
|||
{ |
|||
if (opts->plus) |
|||
nbr = ft_strjoin("+", nbr); |
|||
else if (opts->space) |
|||
nbr = ft_strjoin(" ", nbr); |
|||
else if (opts->precision == 0 && opts->dot && |
|||
opts->len) |
|||
nbr = ft_strdup(""); |
|||
else |
|||
nbr = ft_strdup(nbr); |
|||
|
|||
if (opts->precision > 0) |
|||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|||
else if (opts->zero && !opts->dot) |
|||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|||
|
|||
return (nbr); |
|||
} |
|||
|
|||
char *str_opts_transform(char *str, t_opts *opts) |
|||
{ |
|||
int len; |
|||
char *tmp = NULL; |
|||
char *sub = NULL; |
|||
|
|||
if (opts->dot) |
|||
sub = ft_substr(str, 0, opts->precision); |
|||
if (sub) |
|||
str = sub; |
|||
len = opts->width - (int)ft_strlen(str); |
|||
tmp = ft_strnew(len, ' '); |
|||
if (!opts->minus && len > 0) |
|||
str = ft_strjoin(tmp, str); |
|||
else if (opts->minus && len > 0) |
|||
str = ft_strjoin(str, tmp); |
|||
else |
|||
str = ft_strdup(str); |
|||
if (tmp) |
|||
free(tmp); |
|||
if (sub) |
|||
free(sub); |
|||
|
|||
return (str); |
|||
} |
@ -0,0 +1,57 @@ |
|||
#include "ft_printf.h" |
|||
|
|||
char *ft_strnew(int n, char c) |
|||
{ |
|||
char *str = NULL; |
|||
|
|||
if (n < 0) |
|||
return (NULL); |
|||
str = malloc(n + 1); |
|||
if (!str) |
|||
return (NULL); |
|||
str[n] = '\0'; |
|||
while (--n >= 0) |
|||
str[n] = c; |
|||
return (str); |
|||
} |
|||
|
|||
char *ft_zero_fill(char *nbr, char c, t_opts *opts) |
|||
{ |
|||
int len; |
|||
char *fill = NULL; |
|||
|
|||
if (opts->zero) |
|||
len = opts->width - ft_strlen(nbr); |
|||
else if (opts->dot) |
|||
len = opts->precision - ft_strlen(nbr); |
|||
else |
|||
return (NULL); |
|||
|
|||
if (len < 0 || (opts->zero && len == 0)) |
|||
return (NULL); |
|||
|
|||
if ((nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') && opts->dot) |
|||
fill = ft_strnew(len + 1, c); |
|||
else |
|||
fill = ft_strnew(len , c); |
|||
|
|||
if (nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') |
|||
{ |
|||
fill[0] = nbr[0]; |
|||
nbr[0] = '0'; |
|||
} |
|||
|
|||
return (fill); |
|||
} |
|||
|
|||
char *ft_append(char *s1, char *s2) { |
|||
char *ret = NULL; |
|||
if (!s1) |
|||
return (s2); |
|||
if (!s2) |
|||
return (s1); |
|||
ret = ft_strjoin(s1, s2); |
|||
free(s1); |
|||
free(s2); |
|||
return (ret); |
|||
} |
Loading…
Reference in new issue