From d50e6b88ae478cb3df1d8312a364b278b2453130 Mon Sep 17 00:00:00 2001 From: d0k3 Date: Thu, 14 Mar 2019 01:50:27 +0100 Subject: [PATCH] Scripting: add `dumptxt` command --- arm9/source/utils/scripting.c | 11 +++++++++++ resources/sample/HelloScript.gm9 | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/arm9/source/utils/scripting.c b/arm9/source/utils/scripting.c index 60ff049..385c6a5 100644 --- a/arm9/source/utils/scripting.c +++ b/arm9/source/utils/scripting.c @@ -102,6 +102,7 @@ typedef enum { CMD_ID_FSET, CMD_ID_SHA, CMD_ID_SHAGET, + CMD_ID_DUMPTXT, CMD_ID_FIXCMAC, CMD_ID_VERIFY, CMD_ID_DECRYPT, @@ -174,6 +175,7 @@ Gm9ScriptCmd cmd_list[] = { { CMD_ID_FSET , "fset" , 2, _FLG('e') }, { CMD_ID_SHA , "sha" , 2, 0 }, { CMD_ID_SHAGET , "shaget" , 2, 0 }, + { CMD_ID_DUMPTXT , "dumptxt" , 2, _FLG('p') }, { CMD_ID_FIXCMAC , "fixcmac" , 1, 0 }, { CMD_ID_VERIFY , "verify" , 1, 0 }, { CMD_ID_DECRYPT , "decrypt" , 1, 0 }, @@ -1275,6 +1277,15 @@ bool run_cmd(cmd_id id, u32 flags, char** argv, char* err_str) { if (err_str) snprintf(err_str, _ERR_STR_LEN, "sha write fail"); } } + else if (id == CMD_ID_DUMPTXT) { + size_t offset = 0; + u32 len = strnlen(argv[1], _ARG_MAX_LEN); + if (flags & _FLG('p')) offset = FileGetSize(argv[0]); + if (!(ret = FileSetData(argv[0], argv[1], len, offset, offset == 0)) || + !(ret = FileSetData(argv[0], "\n", 1, offset + len, false))) { + if (err_str) snprintf(err_str, _ERR_STR_LEN, "file write fail"); + } + } else if (id == CMD_ID_FIXCMAC) { ShowString("Fixing CMACs..."); ret = (RecursiveFixFileCmac(argv[0]) == 0); diff --git a/resources/sample/HelloScript.gm9 b/resources/sample/HelloScript.gm9 index 46f1504..d57441c 100644 --- a/resources/sample/HelloScript.gm9 +++ b/resources/sample/HelloScript.gm9 @@ -242,6 +242,12 @@ fset $[DUMMY]@100 48454c4c4f # 'HELLO' fget -e $[DUMMY]@100:5 OLLEH echo "This is 'HELLO', in hex and reverse:\n$[OLLEH]" +# 'dumptxt' COMMAND +# This command dumps the given text to a file +# -p / --append appends text instead of writing a new file +# dumptxt 0:/hello.txt HELLO +# dumptxt -p 0:/hello.txt WORLD + # 'fixcmac' COMMAND # Use this to fix the CMACs for a file or a whole folder (recursively) # This will count as success if a file does not contain a CMAC