better flag handling
This commit is contained in:
@@ -6,7 +6,8 @@
|
||||
* GLOBALS
|
||||
*/
|
||||
|
||||
bool debug_mode;
|
||||
bool flag_debug_mode;
|
||||
bool flag_loop_mode;
|
||||
char *input_g_err;
|
||||
s_token *tokens_g_err;
|
||||
s_term *terms_g_err;
|
||||
@@ -231,50 +232,51 @@ static void launch_stdin()
|
||||
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
int i;
|
||||
char *input;
|
||||
e_program_mode program_mode;
|
||||
|
||||
debug_mode = false;
|
||||
// init flags
|
||||
flag_debug_mode = false;
|
||||
flag_loop_mode = false;
|
||||
|
||||
// check arguments
|
||||
program_mode = MODE_ARGV;
|
||||
if (ac > 3)
|
||||
{
|
||||
stop_errors("too many arguments");
|
||||
}
|
||||
else if (ac == 3)
|
||||
{
|
||||
if ((ft_strcmp(av[1], "-d") == 0))
|
||||
{
|
||||
debug_mode = true;
|
||||
input = av[2];
|
||||
}
|
||||
else if ((ft_strcmp(av[2], "-d") == 0))
|
||||
{
|
||||
debug_mode = true;
|
||||
input = av[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
stop_errors("3rd argument is not a valid flag: '%s'", av[2]);
|
||||
}
|
||||
}
|
||||
else if (ac == 2)
|
||||
{
|
||||
if ((ft_strcmp(av[1], "-d") == 0))
|
||||
{
|
||||
debug_mode = true;
|
||||
program_mode = MODE_STDIN;
|
||||
}
|
||||
else
|
||||
{
|
||||
input = av[1];
|
||||
}
|
||||
}
|
||||
else if (ac < 2)
|
||||
if (ac == 1)
|
||||
{
|
||||
program_mode = MODE_STDIN;
|
||||
}
|
||||
else if (ac > 1)
|
||||
{
|
||||
// get flags
|
||||
input = NULL;
|
||||
i = 1;
|
||||
while (i < ac)
|
||||
{
|
||||
if ((ft_strcmp(av[i], "-d") == 0))
|
||||
{
|
||||
flag_debug_mode = true;
|
||||
}
|
||||
else if ((ft_strcmp(av[i], "-l") == 0))
|
||||
{
|
||||
flag_loop_mode = true;
|
||||
}
|
||||
else if (ft_strlen(av[i]) == 2 && av[i][0] == '-')
|
||||
{
|
||||
stop_errors("unknwon flag '%s'", av[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
input = av[i];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
// if input was not set, it means interactiv mode
|
||||
if (input == NULL)
|
||||
{
|
||||
program_mode = MODE_STDIN;
|
||||
}
|
||||
}
|
||||
|
||||
// launch calculator
|
||||
if (program_mode == MODE_ARGV)
|
||||
|
||||
@@ -131,7 +131,7 @@ static int get_exponent(s_token *tokens, int i, int *token_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
stop_errors("at exponent place, after a '*' we should have a 'var', but instead got : '%c' (token number %i)", tokens[i].value_char, i);
|
||||
stop_errors("at exponent place, after a '*' we should have a 'var', but instead got : '%s' (token number %i)", token_type_to_str(tokens[i].type), i);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -160,7 +160,7 @@ static int get_exponent(s_token *tokens, int i, int *token_count)
|
||||
}
|
||||
else
|
||||
{
|
||||
stop_errors("at exponent place, we should have an int, but instead got : '%c' (token number %i)", tokens[i].value_char, i);
|
||||
stop_errors("at exponent place, we should have an int, but instead got : '%s' (token number %i)", token_type_to_str(tokens[i].type), i);
|
||||
}
|
||||
|
||||
return tokens[i].value_int;
|
||||
|
||||
@@ -108,7 +108,7 @@ static void print_context_polynom()
|
||||
|
||||
void print_state()
|
||||
{
|
||||
if (!debug_mode)
|
||||
if (!flag_debug_mode)
|
||||
return;
|
||||
ft_dprintf(STDERR_FILENO, "\nSTATE :\n");
|
||||
if (input_g_err)
|
||||
|
||||
Reference in New Issue
Block a user