1
0
Fork 0
mirror of https://github.com/suchmememanyskill/TegraExplorer.git synced 2024-11-22 20:06:43 +00:00

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

@ -20,7 +20,8 @@ enum utils_err_codes_te_call {
ERR_EMMC_READ_FAILED, ERR_EMMC_READ_FAILED,
ERR_EMMC_WRITE_FAILED, ERR_EMMC_WRITE_FAILED,
ERR_FILE_TOO_BIG_FOR_DEST, ERR_FILE_TOO_BIG_FOR_DEST,
ERR_SD_EJECTED ERR_SD_EJECTED,
ERR_PARSE_FAIL
}; };
extern const char *utils_err_codes_te[]; extern const char *utils_err_codes_te[];

View file

@ -49,7 +49,8 @@ const char *utils_err_codes_te[] = { // these start at 50
"EMMC READ FAILED", "EMMC READ FAILED",
"EMMC WRITE FAILED", "EMMC WRITE FAILED",
"FILE TOO BIG FOR DEST", "FILE TOO BIG FOR DEST",
"SD EJECTED" "SD EJECTED",
"PARSING FAILED"
}; };
const char *pkg2names[] = { const char *pkg2names[] = {

View file

@ -54,7 +54,7 @@ int gfx_errDisplay(char *src_func, int err, int loc){
if (err < 15) if (err < 15)
gfx_printf("Desc: %s\n", utils_err_codes[err]); gfx_printf("Desc: %s\n", utils_err_codes[err]);
else if (err >= ERR_SAME_LOC && err <= ERR_SD_EJECTED) else if (err >= ERR_SAME_LOC && err <= ERR_PARSE_FAIL)
gfx_printf("Desc: %s\n", utils_err_codes_te[err - 50]); gfx_printf("Desc: %s\n", utils_err_codes_te[err - 50]);
if (loc) if (loc)

View file

@ -21,20 +21,35 @@ extern FIL scriptin;
extern char **argv; extern char **argv;
extern u32 argc; 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(){ int part_printf(){
gfx_printf(argv[0]); gfx_printf(argv[0]);
gfx_printf("\n"); gfx_printf("\n");
return 0; 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 part_if(){
int condition; int condition;
if (argv[0][0] == '@'){ if (parseIntInput(argv[0], &condition))
if (str_int_find(argv[0], &condition)) return -1;
return -10;
}
else
condition = atoi(argv[0]);
getfollowingchar('{'); 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[] = { str_fnc_struct functions[] = {
{"printf", part_printf, 1}, {"printf", part_printf, 1},
{"print_int", part_print_int, 1},
{"if", part_if, 1}, {"if", part_if, 1},
{"math", part_Math, 3},
{"check", part_Check, 3},
{NULL, NULL, 0} {NULL, NULL, 0}
}; };
@ -59,6 +120,8 @@ int run_function(char *func_name, int *out){
return -2; return -2;
*out = functions[i].value(); *out = functions[i].value();
if (*out < 0)
return -1;
return 0; return 0;
} }
} }

View file

@ -111,36 +111,8 @@ char *makestr(u32 size, char ignore){
return str; return str;
} }
/*
char *makestrstrip(u32 size){
char *str;
int count = 0;
str = calloc(size + 1, sizeof(char)); char *readtilchar(char end, char ignore){
for (u32 i = 0; i < size;){
if (currentchar == '"'){
getnextchar();
i++;
while (getnextchar() != '"')
i++;
}
else if (currentchar == ' '){
while (getnextchar() == ' ')
i++;
}
else{
getnextchar();
i++;
}
str[count++] = currentchar;
}
return str;
}
*/
char *readtilchar(char end, char ignore){ // this will strip spaces unless it's enclosed in a ""
FSIZE_t offset, size; FSIZE_t offset, size;
offset = f_tell(&scriptin); offset = f_tell(&scriptin);
@ -161,52 +133,17 @@ void functionparser(){
if (funcbuff != NULL) if (funcbuff != NULL)
free(funcbuff); free(funcbuff);
//gfx_printf("getting func %c\n", currentchar);
funcbuff = readtilchar('(', ' '); funcbuff = readtilchar('(', ' ');
/*calloc(20, sizeof(char));
for (int i = 0; i < 19 && currentchar != '(' && currentchar != ' '; i++){
funcbuff[i] = currentchar;
getnextchar();
}
*/
getfollowingchar('('); getfollowingchar('(');
getnextchar(); getnextchar();
//gfx_printf("getting arg len %c\n", currentchar);
/*
fileoffset = f_tell(&scriptin);
getfollowingchar(')');
argsize = f_tell(&scriptin) - fileoffset;
f_lseek(&scriptin, fileoffset - 1);
getnextchar();
gfx_printf("getting args %c\n", currentchar);
unsplitargs = calloc(argsize + 1, sizeof(char));
for (int i = 0; i < argsize; i++){
unsplitargs[i] = currentchar;
getnextchar();
}
*/
unsplitargs = readtilchar(')', 0); unsplitargs = readtilchar(')', 0);
//gfx_printf("parsing args %c\n", currentchar);
argc = splitargs(unsplitargs); argc = splitargs(unsplitargs);
getnextchar(); getnextchar();
getnextchar(); getnextchar();
/*
gfx_printf("\n\nFunc: %s\n", funcbuff, currentchar);
gfx_printf("Split: %s\n", unsplitargs);
for (int i = 0; i < argc; i++)
gfx_printf("%d | %s\n", i, argv[i]);
*/
//gfx_printf("\ncurrent char: %c", currentchar);
free(unsplitargs); free(unsplitargs);
} }
@ -215,24 +152,6 @@ char *gettargetvar(){
FSIZE_t fileoffset; FSIZE_t fileoffset;
u32 varsize = 0; u32 varsize = 0;
/*
fileoffset = f_tell(&scriptin);
getfollowingchar('=');
varsize = f_tell(&scriptin) - fileoffset;
f_lseek(&scriptin, fileoffset - 1);
variable = calloc(varsize + 1, sizeof(char));
getnextchar();
for (int i = 0; i < varsize; i++){
if (currentchar == ' ')
break;
variable[i] = currentchar;
getnextchar();
}
*/
variable = readtilchar('=', ' '); variable = readtilchar('=', ' ');
getfollowingchar('='); getfollowingchar('=');
@ -263,17 +182,19 @@ void mainparser(){
} }
functionparser(); functionparser();
/*
if (variable != NULL)
gfx_printf("target: %s\n", variable);
*/
//gfx_printf("Func: %s\n", funcbuff);
res = run_function(funcbuff, &out); res = run_function(funcbuff, &out);
str_int_add("@RESULT", res); if (res < 0){
printerrors = true;
gfx_errDisplay("mainparser", ERR_PARSE_FAIL, 0);
forceExit = true;
}
else {
str_int_add("@RESULT", out);
if (variable != NULL) if (variable != NULL)
str_int_add(variable, res); str_int_add(variable, out);
}
//gfx_printf("\nGoing to next func %c\n", currentchar); //gfx_printf("\nGoing to next func %c\n", currentchar);
free(variable); free(variable);
@ -297,7 +218,7 @@ void skipbrackets(){
void tester(char *path){ void tester(char *path){
int res; int res;
forceExit = false;
gfx_clearscreen(); gfx_clearscreen();
res = f_open(&scriptin, path, FA_READ | FA_OPEN_EXISTING); res = f_open(&scriptin, path, FA_READ | FA_OPEN_EXISTING);
@ -315,10 +236,19 @@ void tester(char *path){
printerrors = false; printerrors = false;
while (!f_eof(&scriptin)){ while (!f_eof(&scriptin) && !forceExit){
mainparser(); mainparser();
} }
if (funcbuff != NULL)
free(funcbuff);
if (argv != NULL) {
for (int i = 0; argv[i] != NULL; i++)
free(argv[i]);
free(argv);
}
printerrors = true; printerrors = true;
//str_int_printall(); //str_int_printall();