more functions, cleanup and simple error checking

This commit is contained in:
Such Meme, Many Skill
2020-03-31 15:34:19 +02:00
parent 38f349618f
commit 30afcddd3a
5 changed files with 96 additions and 101 deletions

View File

@@ -21,20 +21,35 @@ extern FIL scriptin;
extern char **argv;
extern u32 argc;
int parseIntInput(char *in, int *out){
if (in[0] == '@'){
if (str_int_find(argv[0], out))
return -1;
}
else
*out = atoi(in);
return 0;
}
int part_printf(){
gfx_printf(argv[0]);
gfx_printf("\n");
return 0;
}
int part_print_int(){
int toprint;
if (parseIntInput(argv[0], &toprint))
return -1;
gfx_printf("%s: %d\n", argv[0], toprint);
return 0;
}
int part_if(){
int condition;
if (argv[0][0] == '@'){
if (str_int_find(argv[0], &condition))
return -10;
}
else
condition = atoi(argv[0]);
if (parseIntInput(argv[0], &condition))
return -1;
getfollowingchar('{');
@@ -46,9 +61,55 @@ int part_if(){
}
}
int part_Math(){
int left, right;
if (parseIntInput(argv[0], &left))
return -1;
if (parseIntInput(argv[2], &right))
return -1;
switch (argv[1][0]){
case '+':
return left + right;
case '-':
return left - right;
case '*':
return left * right;
case '/':
return left * right;
}
return 0;
}
int part_Check(){
int left, right;
if (parseIntInput(argv[0], &left))
return -1;
if (parseIntInput(argv[2], &right))
return -1;
if (!strcmp(argv[1], "=="))
return (left == right);
else if (!strcmp(argv[1], "!="))
return (left != right);
else if (!strcmp(argv[1], ">="))
return (left >= right);
else if (!strcmp(argv[1], "<="))
return (left <= right);
else if (!strcmp(argv[1], ">"))
return (left > right);
else if (!strcmp(argv[1], "<"))
return (left < right);
else
return -1;
}
str_fnc_struct functions[] = {
{"printf", part_printf, 1},
{"print_int", part_print_int, 1},
{"if", part_if, 1},
{"math", part_Math, 3},
{"check", part_Check, 3},
{NULL, NULL, 0}
};
@@ -59,6 +120,8 @@ int run_function(char *func_name, int *out){
return -2;
*out = functions[i].value();
if (*out < 0)
return -1;
return 0;
}
}