71 lines
1.2 KiB
C
71 lines
1.2 KiB
C
#include "push_swap.h"
|
|
|
|
// check more error
|
|
void is_valid(int ac, char **av)
|
|
{
|
|
if (ac < 2)
|
|
ps_stop(NULL, NULL, 1);
|
|
(void)av;
|
|
}
|
|
|
|
int check_flag(int *ac, char ***av)
|
|
{
|
|
if (ft_strcmp((*av)[1], "-p") != 0)
|
|
return (0);
|
|
(*av)++;
|
|
(*ac)--;
|
|
return (1);
|
|
}
|
|
|
|
t_stack *init_stack(int ac, char **av)
|
|
{
|
|
t_stack *start;
|
|
t_stack *tmp;
|
|
|
|
tmp = NULL;
|
|
while (--ac)
|
|
{
|
|
start = ft_calloc(1, sizeof(t_stack));
|
|
if (!start)
|
|
ps_stop(NULL, NULL, 2);
|
|
start->n = ft_atoi(av[ac]);
|
|
start->next = tmp;
|
|
tmp = start;
|
|
}
|
|
return (start);
|
|
}
|
|
|
|
/*
|
|
** the chained list "solution" is created with specials first two elements :
|
|
** they are pointers to stack a and b, so it can be accessed by fill_solution()
|
|
*/
|
|
t_list *launch_algo(t_stack **a, t_stack **b, int flag)
|
|
{
|
|
t_list *solution;
|
|
|
|
solution = ft_lstnew(a);
|
|
ft_lstadd_back(&solution, ft_lstnew(b));
|
|
if (flag)
|
|
fill_solution(solution, "start");
|
|
// hugo_sort(a, b, solution);
|
|
bubble_sort(a, b, solution);
|
|
return (solution);
|
|
}
|
|
|
|
int main(int ac, char **av)
|
|
{
|
|
t_stack *a;
|
|
t_stack *b;
|
|
t_list *solution;
|
|
int flag;
|
|
|
|
is_valid(ac, av);
|
|
flag = check_flag(&ac, &av);
|
|
a = init_stack(ac, av);
|
|
b = NULL;
|
|
solution = launch_algo(&a, &b, flag);
|
|
print_result(solution, flag);
|
|
ps_stop(NULL, solution, 0);
|
|
return (0);
|
|
}
|