-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathft_aff_file.c
114 lines (107 loc) · 3.11 KB
/
ft_aff_file.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_aff_file.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: kbensado <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/03/26 20:14:59 by kbensado #+# #+# */
/* Updated: 2016/03/26 20:15:01 by kbensado ### ########.fr */
/* */
/* ************************************************************************** */
#include "includes/ft_printf.h"
static int ft_is_str_next(t_env *env, int i)
{
if (env->ispreci)
ft_applywstrpreci(env);
if (env->flag1 == 0)
ft_afflargwstr(env);
while (env->wstr[++i])
{
if (env->ispw && env->pw == i)
break ;
ft_putwchar(env->wstr[i], env, 0, 0);
}
if (env->flag1 == 1)
ft_afflargwstr(env);
return (i);
}
static int ft_is_str(t_env *env, const char *s, int i)
{
if (env->ispreci && env->preci == 0)
while (env->largeur--)
{
write(1, &env->charflag, 1);
env->nbrd++;
}
else if (!env->wstr)
{
env->str = ft_strdup("(null)");
ft_affstr(env, s);
ft_memdel((void **)&env->str);
}
else
return (ft_is_str_next(env, i));
return (-1);
}
static void ft_is_nb_one_next(t_env *env)
{
if (env->modifl == 1 || env->convert == 'U' || env->modifz
|| env->modifj)
ft_affunb((unsigned long)env->nb, env);
else if (env->modifl == 2)
ft_affunb((unsigned long long)env->nb, env);
else if (env->modifh == 2)
ft_affunb((unsigned char)env->nb, env);
else
ft_affunb((unsigned int)env->nb, env);
}
static void ft_is_nb_one(t_env *env)
{
if (ft_strchr("XxOobp\0", env->convert))
ft_convert(env);
else if (ft_strchr("Ddi\0", env->convert))
{
if (env->modifh == 1 && env->convert != 'D')
ft_affnb((short)env->nb, env);
else if (env->modifh == 2 && env->convert != 'D')
ft_affnb((signed char)env->nb, env);
else if (env->modifl == 2)
ft_affnb((long long)env->nb, env);
else if (env->modifj == 1)
ft_affnb((intmax_t)env->nb, env);
else if (env->modifz == 1)
ft_affnb((ssize_t)env->nb, env);
else if (env->modifl == 1 || env->convert == 'D')
ft_affnb((long)env->nb, env);
else
ft_affnb((int)env->nb, env);
}
else if (ft_strchr("uU\0", env->convert))
ft_is_nb_one_next(env);
}
int ft_aff(va_list *ap, t_env *env, const char *s)
{
int i;
i = -1;
if (env->isnb == 1)
ft_is_nb_one(env);
else if (env->c >= 0)
ft_affchar(env);
else if (env->convert == 's')
ft_affstr(env, s);
else if (env->convert == 'C')
{
env->charflag = ' ';
if (env->flag1 == 0)
ft_afflarg(env->largeur, 1, env);
ft_putwchar(env->wchar, env, 0, 0);
if (env->flag1 == 1)
ft_afflarg(env->largeur, 1, env);
}
else if (env->convert == 'S')
i = ft_is_str(env, s, i);
(void)env;
(void)ap;
return (i);
}