refactoring functions parsing main flags

This commit is contained in:
Maoake Teriierooiterai
2026-01-13 08:17:50 +01:00
parent f8f1b43539
commit cfdf913c4b
5 changed files with 12 additions and 84 deletions

View File

@@ -19,11 +19,10 @@ int scan_str_is_digit(char *tab)
i = 0; i = 0;
while (tab[i]) while (tab[i])
{ {
if (!ft_isdigit(tab[i]) && (tab[i] == '-' && !ft_isdigit(tab[i + 1]))) if ((tab[i] == '+' || tab[i] == '-') && ft_isdigit(tab[i + 1])
return (0); && tab[i + 1])
else if (tab[i] == '+' && !ft_isdigit(tab[i + 1])) i++;
return (0); if (!ft_isdigit(tab[i]))
else if (!ft_isdigit(tab[i]))
return (0); return (0);
i++; i++;
} }

View File

@@ -28,7 +28,7 @@ static int verif_atoi(const char *nptr)
i = 0; i = 0;
tmp = 0; tmp = 0;
before = 0; before = 0;
if (ft_strncmp("-2147483648", nptr, 12)) if (ft_strncmp("-2147483648", nptr, 15))
return (1); return (1);
while ((nptr[i] >= 9 && nptr[i] <= 13) || nptr[i] == ' ') while ((nptr[i] >= 9 && nptr[i] <= 13) || nptr[i] == ' ')
i++; i++;

View File

@@ -14,48 +14,14 @@
#include "parsing.h" #include "parsing.h"
#include "flags.h" #include "flags.h"
static int verif_arg(char *argv) int calcul_mod(int argc, char **argv)
{
int len;
int verif;
char **split;
split = ft_split(argv, ' ');
if (!split)
return (-1);
len = len_split(split);
if (len > 1)
verif = 1;
else
verif = 0;
free_tab(split);
return (verif);
}
int calcul_mod(int argc, char **argv)
{ {
int mod; int mod;
if (verif_arg(argv[argc -1]) == 0) mod = 0;
{ while (argv[mod] && !ft_isdigit(argv[mod][0]) && mod < argc)
if (ft_strncmp("--", argv[1], 2) && ft_strncmp("--", argv[2], 2)) mod++;
mod = 2; mod--;
else if (ft_strncmp("--", argv[1], 2) && !ft_strncmp("--", argv[2], 2))
mod = 1;
else
mod = 0;
}
else if (verif_arg(argv[argc -1]) == 1)
{
if (ft_strncmp("--", argv[1], 2) && ft_strncmp("--", argv[2], 2))
mod = 5;
else if (ft_strncmp("--", argv[1], 2) && !ft_strncmp("--", argv[2], 2))
mod = 4;
else
mod = 3;
}
else
mod = -1;
return (mod); return (mod);
} }

6
main.c
View File

@@ -28,12 +28,6 @@ int main(int argc, char **argv)
if (!tab) if (!tab)
return (0); return (0);
len = len_split(tab); len = len_split(tab);
if (!scan_str_is_digit(tab[len - 1]))
{
free_tab(tab);
write(2, "Error\n", 7);
return (0);
}
mod = calcul_mod(len, tab); mod = calcul_mod(len, tab);
if (check_error(tab, mod)) if (check_error(tab, mod))
test1(tab, len, mod); test1(tab, len, mod);

View File

@@ -16,13 +16,7 @@
int wich_mod(int mod) int wich_mod(int mod)
{ {
if (mod == 0) return (mod % 3 + 1);
return (1);
else if (mod == 1)
return (2);
else if (mod == 2)
return (3);
return (0);
} }
static t_stack *parsing(int argc, char **argv, int mod) static t_stack *parsing(int argc, char **argv, int mod)
@@ -51,28 +45,6 @@ static t_stack *parsing(int argc, char **argv, int mod)
return (first); return (first);
} }
static t_stack *special_parsing(char **argv, int mod)
{
t_stack *a;
char **split_tab;
int len;
int i;
i = mod % 3 + 1;
split_tab = ft_split(argv[i], ' ');
if (!split_tab)
return (NULL);
len = len_split(split_tab);
a = parsing(len, split_tab, mod);
if (!a)
{
free_tab(split_tab);
return (NULL);
}
free_tab(split_tab);
return (a);
}
static void set_t_stacks(t_stacks *stacks) static void set_t_stacks(t_stacks *stacks)
{ {
stacks->a = NULL; stacks->a = NULL;
@@ -102,10 +74,7 @@ t_stacks *init_stacks(int argc, char **argv, int mod)
if (!stacks) if (!stacks)
return (NULL); return (NULL);
set_t_stacks(stacks); set_t_stacks(stacks);
if (mod == 0 || mod == 1 || mod == 2) a = parsing(argc, argv, mod);
a = parsing(argc, argv, mod);
else
a = special_parsing(argv, mod);
if (!a) if (!a)
{ {
free(stacks); free(stacks);