Change arg parser, add some commands, may break shit
This commit is contained in:
@@ -16,15 +16,15 @@
|
||||
#include "variables.h"
|
||||
#include "../fs/fsreader.h"
|
||||
#include "../utils/utils.h"
|
||||
#include "../../hid/hid.h"
|
||||
|
||||
u32 countchars(char* in, char target) {
|
||||
u32 countchars(const char* in, char target) {
|
||||
u32 len = strlen(in);
|
||||
u32 count = 0;
|
||||
|
||||
for (u32 i = 0; i < len; i++) {
|
||||
if (in[i] == '"'){
|
||||
i++;
|
||||
while (in[i] != '"'){
|
||||
i++;
|
||||
while (in[++i] != '"'){
|
||||
if (i >= len)
|
||||
return -1;
|
||||
}
|
||||
@@ -32,53 +32,46 @@ u32 countchars(char* in, char target) {
|
||||
if (in[i] == target)
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
char **argv = NULL;
|
||||
u32 argc;
|
||||
u32 splitargs(char* in) {
|
||||
u32 splitargs(const char* in) {
|
||||
// arg like '5, "6", @arg7'
|
||||
u32 i, current = 0, count = 1, len = strlen(in), curcount = 0;
|
||||
u32 i = 0, count = 1, len = strlen(in), curcount = 0, begin, end;
|
||||
|
||||
if ((count += countchars(in, ',')) < 0){
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
if (argv != NULL) {
|
||||
for (i = 0; argv[i] != NULL; i++)
|
||||
free(argv[i]);
|
||||
free(argv);
|
||||
}
|
||||
*/
|
||||
|
||||
argv = calloc(count + 1, sizeof(char*));
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
argv[i] = calloc(96, sizeof(char));
|
||||
|
||||
|
||||
for (i = 0; i < len && curcount < count; i++) {
|
||||
if (in[i] == ',') {
|
||||
curcount++;
|
||||
current = 0;
|
||||
}
|
||||
else if (in[i] == '@' || in[i] == '$') {
|
||||
while (strrchr(", )", in[i]) == NULL && i < len) {
|
||||
argv[curcount][current++] = in[i++];
|
||||
}
|
||||
i--;
|
||||
}
|
||||
//else if ((in[i] >= '0' && in[i] <= '9') || (in[i] >= '<' && in[i] <= '>') || in[i] == '+' || in[i] == '-' || in[i] == '*' || in[i] == '/')
|
||||
else if (strrchr("0123456789<=>+-*/", in[i]) != NULL)
|
||||
argv[curcount][current++] = in[i];
|
||||
else if (in[i] == '"') {
|
||||
while (i < len && curcount < count) {
|
||||
while (in[i] == ' ' || in[i] == ',')
|
||||
i++;
|
||||
while (in[i] != '"') {
|
||||
argv[curcount][current++] = in[i++];
|
||||
|
||||
begin = i;
|
||||
|
||||
while (strrchr(" ,)", in[i]) == NULL){
|
||||
if (in[i] == '"'){
|
||||
begin = i + 1;
|
||||
while (in[++i] != '"'){
|
||||
if (in[i] == '\0')
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
end = i;
|
||||
|
||||
if (in[i - 1] == '"'){
|
||||
end--;
|
||||
}
|
||||
|
||||
argv[curcount++] = utils_copyStringSize(in + begin, (u32)(end - begin));
|
||||
}
|
||||
return count;
|
||||
}
|
||||
@@ -202,17 +195,6 @@ void mainparser(){
|
||||
getnextvalidchar();
|
||||
}
|
||||
|
||||
/*
|
||||
if (currentchar == '?'){
|
||||
char *jumpname;
|
||||
jumpname = readtilchar(';', ' ');
|
||||
getnextchar();
|
||||
str_jmp_add(jumpname, f_tell(&scriptin));
|
||||
getfollowingchar('\n');
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
functionparser();
|
||||
|
||||
res = run_function(funcbuff, &out);
|
||||
@@ -297,6 +279,7 @@ void runScript(char *path){
|
||||
//add builtin vars
|
||||
str_int_add("@EMUMMC", emu_cfg.enabled);
|
||||
str_int_add("@RESULT", 0);
|
||||
str_int_add("@JOYCONN", hidConnected());
|
||||
str_str_add("$CURRENTPATH", currentpath);
|
||||
|
||||
//str_int_printall();
|
||||
|
||||
Reference in New Issue
Block a user