1
0
Fork 0
mirror of https://github.com/suchmememanyskill/TegraExplorer.git synced 2024-11-23 04:12:04 +00:00

Add functions, Add goto's

This commit is contained in:
Such Meme, Many Skill 2020-03-31 17:58:09 +02:00
parent 30afcddd3a
commit 9efbbc9317
4 changed files with 114 additions and 5 deletions

View file

@ -32,6 +32,17 @@ int parseIntInput(char *in, int *out){
return 0; return 0;
} }
int parseJmpInput(char *in, u64 *out){
if (in[0] == '?'){
if (str_jmp_find(argv[0], out))
return -1;
else
return 0;
}
else
return -1;
}
int part_printf(){ int part_printf(){
gfx_printf(argv[0]); gfx_printf(argv[0]);
gfx_printf("\n"); gfx_printf("\n");
@ -104,12 +115,28 @@ int part_Check(){
return -1; return -1;
} }
int part_SetInt(){
int out;
parseIntInput(argv[0], &out);
return out;
}
int part_goto(){
u64 target = 0;
if (parseJmpInput(argv[0], &target))
return -1;
f_lseek(&scriptin, target);
return 0;
}
str_fnc_struct functions[] = { str_fnc_struct functions[] = {
{"printf", part_printf, 1}, {"printf", part_printf, 1},
{"print_int", part_print_int, 1}, {"printInt", part_print_int, 1},
{"if", part_if, 1}, {"if", part_if, 1},
{"math", part_Math, 3}, {"math", part_Math, 3},
{"check", part_Check, 3}, {"check", part_Check, 3},
{"setInt", part_SetInt, 1},
{"goto", part_goto, 1},
{NULL, NULL, 0} {NULL, NULL, 0}
}; };

View file

@ -49,7 +49,7 @@ u32 splitargs(char* in) {
curcount++; curcount++;
current = 0; current = 0;
} }
else if (in[i] == '@' || in[i] == '$') { else if (in[i] == '@' || in[i] == '$' || in[i] == '?') {
while (in[i] != ',' && in[i] != ' ' && in[i] != ')' && i < len) { while (in[i] != ',' && in[i] != ' ' && in[i] != ')' && i < len) {
argv[curcount][current++] = in[i++]; argv[curcount][current++] = in[i++];
} }
@ -92,7 +92,7 @@ void getfollowingchar(char end){
} }
void getnextvalidchar(){ void getnextvalidchar(){
while ((!((currentchar >= 'A' && currentchar <= 'Z') || (currentchar >= 'a' && currentchar <= 'z') || currentchar == '#' || currentchar == '@') && !f_eof(&scriptin)) /*|| currentchar == ';' */) while ((!((currentchar >= '?' && currentchar <= 'Z') || (currentchar >= 'a' && currentchar <= 'z') || currentchar == '#') && !f_eof(&scriptin)) /*|| currentchar == ';' */)
getnextchar(); getnextchar();
} }
@ -181,6 +181,15 @@ void mainparser(){
getnextvalidchar(); getnextvalidchar();
} }
if (currentchar == '?'){
char *jumpname;
jumpname = readtilchar(';', ' ');
getnextchar();
str_jmp_add(jumpname, f_tell(&scriptin));
getfollowingchar('\n');
return;
}
functionparser(); functionparser();
res = run_function(funcbuff, &out); res = run_function(funcbuff, &out);
@ -188,6 +197,9 @@ void mainparser(){
printerrors = true; printerrors = true;
gfx_errDisplay("mainparser", ERR_PARSE_FAIL, 0); gfx_errDisplay("mainparser", ERR_PARSE_FAIL, 0);
forceExit = true; forceExit = true;
//gfx_printf("Func: %s\nArg1: %s\n", funcbuff, argv[0]);
btn_wait();
} }
else { else {
str_int_add("@RESULT", out); str_int_add("@RESULT", out);
@ -254,5 +266,6 @@ void tester(char *path){
f_close(&scriptin); f_close(&scriptin);
str_int_clear(); str_int_clear();
str_jmp_clear();
btn_wait(); btn_wait();
} }

View file

@ -25,7 +25,7 @@ int str_int_add(char *key, int value){
utils_copystring(key, &key_local); utils_copystring(key, &key_local);
keyvaluepair = calloc(1, sizeof(keyvaluepair)); keyvaluepair = calloc(1, sizeof(dict_str_int));
keyvaluepair->key = key_local; keyvaluepair->key = key_local;
keyvaluepair->value = value; keyvaluepair->value = value;
keyvaluepair->next = NULL; keyvaluepair->next = NULL;
@ -77,6 +77,7 @@ void str_int_clear(){
free(cur); free(cur);
cur = next; cur = next;
} }
str_int_table = NULL;
} }
void str_int_printall(){ void str_int_printall(){
@ -87,3 +88,68 @@ void str_int_printall(){
temp = temp->next; temp = temp->next;
} }
} }
int str_jmp_add(char *key, u64 value){
char *key_local;
dict_str_loc *keyvaluepair;
utils_copystring(key, &key_local);
//gfx_printf("Adding |%s|\n", key_local);
keyvaluepair = calloc(1, sizeof(dict_str_loc));
keyvaluepair->key = key_local;
keyvaluepair->value = value;
keyvaluepair->next = NULL;
if (str_jmp_table == NULL){
str_jmp_table = keyvaluepair;
}
else {
dict_str_loc *temp;
temp = str_jmp_table;
while (temp != NULL){
if (!strcmp(temp->key, key_local)){
temp->value = value;
return 0;
}
if (temp->next == NULL){
temp->next = keyvaluepair;
return 0;
}
temp = temp->next;
}
}
return 0;
}
int str_jmp_find(char *key, u64 *out){
dict_str_loc *temp;
temp = str_jmp_table;
//gfx_printf("Searching |%s|\n", key);
while (temp != NULL){
if (!strcmp(temp->key, key)){
//gfx_printf("Key found!\n", temp->value);
*out = temp->value;
return 0;
}
temp = temp->next;
}
//gfx_printf("no key!\n");
return -1;
}
void str_jmp_clear(){
dict_str_loc *cur, *next;
cur = str_jmp_table;
while (cur != NULL){
next = cur->next;
free(cur->key);
free(cur);
cur = next;
}
str_jmp_table = NULL;
}

View file

@ -23,3 +23,6 @@ int str_int_add(char *key, int value);
int str_int_find(char *key, int *out); int str_int_find(char *key, int *out);
void str_int_clear(); void str_int_clear();
void str_int_printall(); void str_int_printall();
int str_jmp_add(char *key, u64 value);
int str_jmp_find(char *key, u64 *out);
void str_jmp_clear();