-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtype_dec.c
70 lines (63 loc) · 2.42 KB
/
type_dec.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
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* type_dec.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: meyami <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2018/03/22 15:40:47 by meyami #+# #+# */
/* Updated: 2018/03/22 15:40:47 by meyami ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_printf.h"
void type_d_i(t_env *e)
{
long int n;
char *s;
int len;
int padding;
n = va_arg(e->args, long int);
n = (n << e->shift) >> e->shift;
s = itoa_long(e, n);
len = ft_strlen(s);
padding = e->precision > len ? e->width - e->precision : e->width - len;
padding -= (e->neg || (e->plus_sign && n >= 0));
buffer_fill_char(e, ' ', e->pre_space && !e->neg && !e->plus_sign);
padding -= e->pre_space && !e->neg && !e->plus_sign;
buffer_fill_char(e, ' ', e->left_align ? 0 : padding * !e->padding_0);
buffer_fill_char(e, '+', e->plus_sign && n >= 0);
buffer_fill_char(e, '-', e->neg);
buffer_fill_char(e, '0', e->left_align ? 0 : padding * e->padding_0);
buffer_fill_char(e, '0', e->precision > len ? e->precision - len : 0);
buffer_fill_string(e, s, len);
buffer_fill_char(e, ' ', e->left_align ? padding : 0);
free(s);
}
void type_ld(t_env *e)
{
e->shift = 0;
e->types['d'](e);
}
void type_u(t_env *e)
{
long unsigned int n;
char *s;
int len;
int padding;
n = va_arg(e->args, long unsigned int);
n = (n << e->shift) >> e->shift;
s = itoa_long_base(e, n, 10, "0123456789");
len = ft_strlen(s);
e->precision = e->precision < len ? len : e->precision;
padding = e->width > e->precision ? e->width - e->precision : 0;
buffer_fill_char(e, e->padding_0 ? '0' : ' ', e->left_align ? 0 : padding);
buffer_fill_char(e, '0', e->precision > len ? e->precision - len : 0);
buffer_fill_string(e, s, len);
buffer_fill_char(e, ' ', e->left_align ? padding : 0);
free(s);
}
void type_lu(t_env *e)
{
e->shift = 0;
e->types['u'](e);
}