Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yabtaour
GitHub Repository: yabtaour/Minishell-42
Path: blob/main/expanding/ft_len.c
1407 views
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* ft_len.c :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: ssabbaji <[email protected]> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2022/07/26 18:16:28 by yabtaour #+# #+# */
9
/* Updated: 2022/09/23 18:43:26 by ssabbaji ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
13
#include "../minishell.h"
14
15
int ft_len_before(char *var)
16
{
17
int len;
18
int flag_d;
19
int flag_s;
20
21
flag_d = 0;
22
flag_s = 0;
23
len = 0;
24
while (flag_s == 1 || (var[len] && var[len] != '$'))
25
{
26
if (var[len] == '"' && flag_s == 0)
27
flag_d = ft_change_flag(flag_d);
28
if (var[len] == '\'' && flag_d == 0)
29
flag_s = ft_change_flag(flag_s);
30
len++;
31
}
32
return (len);
33
}
34
35
int ft_skip(char *value, int i)
36
{
37
i++;
38
while (value[i] && !ft_isspace(value[i]) && value[i] != '$'
39
&& value[i] != '\\' && value[i] != '\''
40
&& value[i] != '"' && value[i] != '=')
41
{
42
i++;
43
if (value[i] >= '0' && value[i] <= '9')
44
break ;
45
}
46
return (i);
47
}
48
49
int ft_len_after(char *var)
50
{
51
int len;
52
int i;
53
int flag_d;
54
int flag_s;
55
56
flag_s = 0;
57
flag_d = 0;
58
i = 0;
59
len = 0;
60
while (flag_s == 1 || (var[i] && var[i] != '$'))
61
{
62
if (var[i] == '"' && flag_s == 0)
63
flag_d = ft_change_flag(flag_d);
64
if (var[i] == '\'' && flag_d == 0)
65
flag_s = ft_change_flag(flag_s);
66
i++;
67
}
68
if (var[i] && var[i] == '$')
69
{
70
i = ft_skip(var, i);
71
while (var[i++])
72
len++;
73
}
74
return (len);
75
}
76
77
int ft_calculate_len(char *value, int i)
78
{
79
int len;
80
81
len = 0;
82
i++;
83
while (value[i] && !ft_isspace(value[i]) && value[i] != '$'
84
&& value[i] != '\\' && value[i] != '\''
85
&& value[i] != '"' && value[i] != '='
86
&& value[i] != '+'
87
&& value[i] != '-'
88
&& value[i] != '/'
89
&& value[i] != '%')
90
{
91
i++;
92
len++;
93
if (value[i] >= '0' && value[i] <= '9')
94
break ;
95
}
96
return (len);
97
}
98
99
int ft_len_var(char *var)
100
{
101
int i;
102
int len;
103
int flag_s;
104
int flag_d;
105
106
flag_s = 0;
107
flag_d = 0;
108
i = 0;
109
len = 0;
110
while (flag_s == 1 || (var[i] && var[i] != '$'))
111
{
112
if (var[i] == '"' && flag_s == 0)
113
flag_d = ft_change_flag(flag_d);
114
if (var[i] == '\'' && flag_d == 0)
115
flag_s = ft_change_flag(flag_s);
116
i++;
117
}
118
if (flag_s == 0)
119
{
120
if (var[i] && var[i] == '$')
121
len = ft_calculate_len(var, i);
122
}
123
return (len);
124
}
125
126