-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathft_output_d.c
94 lines (86 loc) · 2.64 KB
/
ft_output_d.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_output_d.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: alukyane <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2018/02/11 13:14:09 by alukyane #+# #+# */
/* Updated: 2018/02/11 13:14:28 by alukyane ### ########.fr */
/* */
/* ************************************************************************** */
#include "libft.h"
static t_printf *ft_check_pos(t_printf *var, long long digit)
{
if (var->flag[1] == '+' && digit >= 0)
write(1, "+", 1);
else if (var->flag[1] != '+' && var->flag[2] == ' ' && digit >= 0)
write(1, " ", 1);
else if (digit < 0)
write(1, "-", 1);
return (var);
}
static int ft_out_d(t_printf *var, long long digit, int len, int tmp)
{
int i;
i = -1;
if (var->flag[0] == '-')
{
ft_check_pos(var, digit);
while (++i < var->prec - len)
write(1, "0", 1);
ft_putnbr(ABS(digit));
}
else
{
if (var->flag[4] == '0')
ft_check_pos(var, digit);
while (++i < len - tmp)
if (var->flag[4] == '0' && (!(var->prec) || var->star))
write(1, "0", 1);
else
write(1, " ", 1);
if (var->flag[4] != '0')
ft_check_pos(var, digit);
}
return (i);
}
static t_printf *ft_align(t_printf *var, long long digit, int len, int l_o)
{
int i;
int tmp;
tmp = l_o < var->prec ? var->prec : l_o;
if ((var->flag[1] == '+' && digit >= 0) || (var->flag[1] != '+'
&& var->flag[2] == ' ' && digit >= 0) || digit < 0)
tmp++;
if (var->flag[0] == '-')
{
i = ft_out_d(var, digit, l_o, tmp);
ft_print_end(i, len, tmp, ' ');
}
else
{
i = ft_out_d(var, digit, len, tmp);
ft_print_end(i, var->prec, l_o, '0');
ft_putnbr(ABS(digit));
}
var->res = len > tmp ? (var->res + len) : (var->res + tmp);
return (var);
}
t_printf *ft_output_d(t_printf *var, int len_orig, long long digit)
{
int len;
len = var->width <= var->prec ? var->prec : var->width;
if (len < len_orig)
{
if ((var->flag[1] == '+' && digit >= 0) || (var->flag[1] != '+'
&& var->flag[2] == ' ' && digit >= 0) || digit < 0)
var->res += 1;
ft_check_pos(var, digit);
ft_putnbr_u(ABS(digit));
var->res += len_orig;
}
else
ft_align(var, digit, len, len_orig);
return (var);
}