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:
parent
30afcddd3a
commit
9efbbc9317
4 changed files with 114 additions and 5 deletions
|
@ -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}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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();
|
Loading…
Reference in a new issue