From 797a5f95b5553363cdd29be77215278548bd7201 Mon Sep 17 00:00:00 2001 From: suchmememanyskill Date: Tue, 27 Jul 2021 21:05:32 +0200 Subject: [PATCH] remove memory(), add cwd(), #REQUIRE SD --- scripts/FirmwareDump.te | 1 + source/fs/menus/filemenu.c | 18 ++++-------------- source/script/parser.c | 12 ++++++++++++ source/script/standardLibrary.c | 6 +++++- source/tegraexplorer/mainmenu.c | 5 ----- source/tegraexplorer/tconf.h | 1 + 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/scripts/FirmwareDump.te b/scripts/FirmwareDump.te index 7c20079..d01d5c8 100644 --- a/scripts/FirmwareDump.te +++ b/scripts/FirmwareDump.te @@ -1,4 +1,5 @@ #REQUIRE KEYS +#REQUIRE SD p=println pe={pause() exit()} fwstr={fw=maj.str()+"."+min.str()+"."+pat.str()} diff --git a/source/fs/menus/filemenu.c b/source/fs/menus/filemenu.c index c46e376..046f059 100644 --- a/source/fs/menus/filemenu.c +++ b/source/fs/menus/filemenu.c @@ -73,6 +73,7 @@ void DeleteFile(char *path, FSEntry_t entry){ } void RunScriptString(char *str, u32 size){ + TConf.scriptCWD = "sd:/"; gfx_clearscreen(); ParserRet_t ret = parseScript(str, size); setStaticVars(&ret.staticVarHolder); @@ -89,7 +90,8 @@ void RunScript(char *path, FSEntry_t entry){ char *thing = CombinePaths(path, entry.name); u32 size; char *script = sd_file_read(thing, &size); - free(thing); + TConf.scriptCWD = thing; + if (!script) return; @@ -97,19 +99,6 @@ void RunScript(char *path, FSEntry_t entry){ return; gfx_clearscreen(); - /* - scriptCtx_t ctx = createScriptCtx(); - ctx.script = runLexer(script, size); - free(script); - - dictVectorAdd(&ctx.varDict, newDict(CpyStr("_CWD"), (newVar(StringType, 0, .stringType = path)))); - dictVectorAdd(&ctx.varDict, newDict(CpyStr("_EMU"), (newVar(IntType, 0, emu_cfg.enabled)))); - - printError(mainLoop(&ctx)); - - freeDictVector(&ctx.varDict); - lexarVectorClear(&ctx.script); - */ ParserRet_t ret = parseScript(script, size); free(script); @@ -121,6 +110,7 @@ void RunScript(char *path, FSEntry_t entry){ exitFunction(ret.main.operations.data, ret.main.operations.count); vecFree(ret.staticVarHolder); vecFree(ret.main.operations); + free(thing); } void RenameFile(char *path, FSEntry_t entry){ diff --git a/source/script/parser.c b/source/script/parser.c index f1207ab..3b2ed8b 100644 --- a/source/script/parser.c +++ b/source/script/parser.c @@ -15,6 +15,7 @@ #ifndef WIN32 #include "../tegraexplorer/tconf.h" +#include #endif static inline int isValidWord(char c) { @@ -123,6 +124,17 @@ u8 nextToken(char** inPtr, void** val) { return Token_Fatal_Err; } } + else if (!memcmp(in + 9, "SD", 2)) { + #ifdef WIN32 + u8 gotSd = 0; + #else + u8 gotSd = sd_mount(); + #endif + if (!gotSd){ + printScriptError(SCRIPT_LEXER_FATAL, "Sd required."); + return Token_Fatal_Err; + } + } } while (*in && *in != '\n') diff --git a/source/script/standardLibrary.c b/source/script/standardLibrary.c index 4858424..f3d82d9 100644 --- a/source/script/standardLibrary.c +++ b/source/script/standardLibrary.c @@ -453,6 +453,10 @@ ClassFunction(stdEscPaths){ return newStringVariablePtr(EscapeFolder(args[0]->string.value), 0, 1); } +ClassFunction(stdGetCwd){ + return newStringVariablePtr(CpyStr(TConf.scriptCWD), 0, 1); +} + #else #define STUBBED(name) ClassFunction(name) { return newIntVariablePtr(0); } @@ -529,9 +533,9 @@ ClassFunctionTableEntry_t standardFunctionDefenitions[] = { {"setpixel", stdSetPixel, 3, threeIntsStd}, {"setpixels", stdSetPixels, 5, threeIntsStd}, {"emu", stdHasEmu, 0, 0}, + {"cwd", stdGetCwd, 0, 0}, {"clear", stdClear, 0, 0}, {"timer", stdGetMs, 0, 0}, - {"memory", stdGetMemUsage, 0, 0}, {"pause", stdPauseMask, 1, threeIntsStd}, {"pause", stdPause, 0, 0}, {"color", stdColor, 1, threeIntsStd}, diff --git a/source/tegraexplorer/mainmenu.c b/source/tegraexplorer/mainmenu.c index 3a8641b..f94aadf 100644 --- a/source/tegraexplorer/mainmenu.c +++ b/source/tegraexplorer/mainmenu.c @@ -126,11 +126,6 @@ void ViewCredits(){ if (hidRead()->r) gfx_printf("%k\"I'm not even sure if it works\" - meme", COLOR_ORANGE); - heap_monitor_t a = {0}; - heap_monitor(&a, false); - gfx_printf("\nUsed: %d\nTotal: %d\n", a.used, a.total); - - hidWait(); } diff --git a/source/tegraexplorer/tconf.h b/source/tegraexplorer/tconf.h index 33f1237..0e0ea3b 100644 --- a/source/tegraexplorer/tconf.h +++ b/source/tegraexplorer/tconf.h @@ -34,6 +34,7 @@ typedef struct { }; const char *pkg1ID; u8 pkg1ver; + char *scriptCWD; } TConf_t; extern TConf_t TConf;