-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathft_printf.c
82 lines (77 loc) · 2.16 KB
/
ft_printf.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_printf.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: lrocca <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2021/01/27 18:24:21 by lrocca #+# #+# */
/* Updated: 2021/02/11 12:37:06 by lrocca ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_printf.h"
t_opt g_var;
int types(void)
{
g_var.type = *g_var.format;
if ((g_var.type == 'd' || g_var.type == 'i') && type_d() != -1)
return (0);
else if (g_var.type == 'u' && type_u() != -1)
return (0);
else if (g_var.type == 'x' && type_x() != -1)
return (0);
else if (g_var.type == 'X' && type_xx() != -1)
return (0);
else if (g_var.type == 'c' && type_c() != -1)
return (0);
else if (g_var.type == 's' && type_s() != -1)
return (0);
else if (g_var.type == 'p' && type_p() != -1)
return (0);
else if (g_var.type == 'n' && type_n() != -1)
return (0);
else if (g_var.type == '%' && type_percent() != -1)
return (0);
return (-1);
}
int format(void)
{
g_var.format++;
g_var.justify = 0;
g_var.padding = ' ';
g_var.width = 0;
g_var.precision = -1;
g_var.null = 0;
g_var.negative = 0;
g_var.sign = 0;
g_var.space = 0;
g_var.prefix = 0;
flags();
if (types() == -1)
return (-1);
return (1);
}
int ft_printf(const char *f, ...)
{
if (!f)
return (0);
g_var.format = f;
g_var.printed = 0;
va_start(g_var.args, f);
while (*g_var.format)
{
if (*g_var.format == '%')
{
if (format() == -1)
return (-1);
}
else
{
ft_putchar_fd(*g_var.format, 1);
g_var.printed++;
}
g_var.format++;
}
va_end(g_var.args);
return (g_var.printed);
}