-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathft_decimal.c
More file actions
90 lines (82 loc) · 2.53 KB
/
ft_decimal.c
File metadata and controls
90 lines (82 loc) · 2.53 KB
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
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_decimal.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hyojeong <hyojeong@student.42seoul.kr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/01 13:12:35 by hyojeong #+# #+# */
/* Updated: 2022/04/14 12:45:26 by hyojeong ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_printf.h"
#include <unistd.h>
static void print_plusflag(t_flag flag, int *printf_len)
{
if (flag.plus)
{
write(1, &flag.plus, 1);
*printf_len += 1;
}
}
static void decide_func(t_flag flag, long num)
{
if (flag.hexa == 2)
ft_put_x(num, flag);
else
ft_putnbr(num, flag);
}
static void is_precision(t_flag flag, long num, long len, int *printf_len)
{
if (!flag.left)
{
padding(flag.padding_left, flag.padding_right, printf_len, ' ');
print_plusflag(flag, printf_len);
ft_hexa(num, flag, printf_len);
padding(flag.padding_right, len, printf_len, '0');
decide_func(flag, num);
}
else
{
print_plusflag(flag, printf_len);
ft_hexa(num, flag, printf_len);
padding(flag.padding_right, len, printf_len, '0');
decide_func(flag, num);
padding(flag.padding_left, flag.padding_right, printf_len, ' ');
}
}
static void is_general(t_flag flag, long num, long len, int *printf_len)
{
if (!flag.left)
{
if (flag.zero)
print_plusflag(flag, printf_len);
ft_hexa(num, flag, printf_len);
if (flag.zero)
padding(flag.padding_left, len, printf_len, '0');
else
padding(flag.padding_left, len, printf_len, ' ');
if (!(flag.zero))
print_plusflag(flag, printf_len);
decide_func(flag, num);
}
else
{
print_plusflag(flag, printf_len);
ft_hexa(num, flag, printf_len);
decide_func(flag, num);
padding(flag.padding_left, len, printf_len, ' ');
}
}
void print_decimal(va_list ap, t_flag *flag, int *printf_len)
{
long num;
long len;
num = adjust_num(ap, *flag);
len = adjust_len_flag(num, flag);
if (flag->precision)
is_precision(*flag, num, len, printf_len);
else
is_general(*flag, num, len, printf_len);
*printf_len += len;
}