-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathft_printf_conversions_03.c
94 lines (88 loc) · 3.02 KB
/
ft_printf_conversions_03.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
83
84
85
86
87
88
89
90
91
92
93
94
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_printf_conversions_03.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: tmendes- <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/07/18 08:20:06 by tmendes- #+# #+# */
/* Updated: 2020/08/06 14:14:24 by tmendes- ### ########.fr */
/* */
/* ************************************************************************** */
#include "libftprintf.h"
char *unpad(char *nbr, char chr)
{
int k;
char *exp;
exp = ft_strchr(nbr, 'e');
k = ft_strlen(nbr) - 1;
if (chr == 'e')
{
k -= ft_strlen(exp);
while ((*(nbr + k) == '0' || *(nbr + k) == '.') &&
k > 0 && *(nbr + (k - 1)) != '-')
k--;
ft_memmove((nbr + k + 1), exp, ft_strlen(exp) + 1);
}
else
{
while (*(nbr + k) == '0' && k > 0 && *(nbr + (k - 1)) != '-')
k--;
if (*(nbr + k) == '.')
*(nbr + k) = 0;
*(nbr + k + 1) = 0;
}
return (nbr);
}
t_printf f____type(t_printf ptf, t_fields fld, va_list ap)
{
if (fld.width < 0)
fld.flag[4] += 1;
fld.width = ft_abs(fld.width);
if (fld.prec < 0)
fld.prec = 6;
fld.flt = (long double)va_arg(ap, double);
ptf.txt = ft_ftoa(fld.flt, fld.prec, 'r');
if (fld.prec == 0 && fld.flag[0] == 0)
ptf.txt = unpad(ptf.txt, 'f');
ptf.txt = signal_space(ptf.txt, fld);
ptf.txt = pad_str(ptf.txt, fld, fld.width, 'w');
return (ptf);
}
t_printf n____type(t_printf ptf, t_fields fld, va_list ap)
{
if (fld.len_h == 2)
*va_arg(ap, signed char *) = (signed char)ft_strlen(ptf.final);
else if (fld.len_h == 1)
*va_arg(ap, short int *) = (short int)ft_strlen(ptf.final);
else if (fld.len_l == 2)
*va_arg(ap, long int *) = (long int)ft_strlen(ptf.final);
else if (fld.len_l == 1)
*va_arg(ap, long long int *) = (long long int)ft_strlen(ptf.final);
else
*va_arg(ap, int *) = (int)ft_strlen(ptf.final);
ptf.txt = ft_strdup("");
return (ptf);
}
t_printf o____type(t_printf ptf, t_fields fld, va_list ap)
{
fld.ullint = va_arg(ap, t_ullint);
if (fld.len_h == 2)
ptf.txt = ft_ullitoa((unsigned char)fld.ullint, 8, *ptf.end);
else if (fld.len_h == 1)
ptf.txt = ft_ullitoa((unsigned short)fld.ullint, 8, *ptf.end);
else if (fld.len_l == 1)
ptf.txt = ft_ullitoa((unsigned long)fld.ullint, 8, *ptf.end);
else if (fld.len_l == 2)
ptf.txt = ft_ullitoa((unsigned long long)fld.ullint, 8, *ptf.end);
else
ptf.txt = ft_ullitoa((unsigned int)fld.ullint, 8, *ptf.end);
if (fld.flag[0] && (int)fld.ullint)
fld.str = ft_strdup("0");
else
fld.str = ft_strdup("");
fld = fld_process(ptf, fld);
ptf.txt = signal_space(ptf.txt, fld);
ptf = format_nbr(ptf, fld);
return (ptf);
}