Push_swap/srcs/main.c

61 lines
1.9 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/12 19:13:52 by lfirmin #+# #+# */
/* Updated: 2024/11/03 19:40:43 by lfirmin ### ########.fr */
/* */
/* ************************************************************************** */
#include "../include/pushswap.h"
int fill_stack(t_stack *stack_a, char **av)
{
int i;
int num;
i = 0;
while (av[i])
{
if (ft_atoll(av[i]) > 2147483647)
return (ft_printf_fd(2, "Error\n"), 0);
num = ft_atoll(av[i]);
if (valid_input(av[i]) == 0 && num <= INT_MAX && num >= INT_MIN \
&& in_stack(stack_a, (int)num) == 0)
{
add_stack(stack_a, (int)num);
i++;
}
else
return (0);
}
return (1);
}
int main(int ac, char **av)
{
t_stack *stack_a;
t_stack *stack_b;
char **av_pars;
if (ac < 2)
return (0);
stack_a = init_stack();
stack_b = init_stack();
if (!stack_a || !stack_b)
return (1);
av_pars = pars(av);
if (!av_pars)
return (ft_printf_fd(1, "error\n"), 1);
if (!fill_stack(stack_a, av_pars))
return (free_stack(stack_a), free_stack(stack_b), \
free_array(av_pars), 1);
if (is_sorted(stack_a) == 1)
return (free_stack(stack_a), free_stack(stack_b), \
free_array(av_pars), 1);
sort(stack_a, stack_b);
return (free_stack(stack_a), free_stack(stack_b), free_array(av_pars), 0);
}